@rubytech/create-maxy-code 0.1.503 → 0.1.505
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/package.json +1 -1
- package/payload/platform/lib/models/dist/index.d.ts +5 -5
- package/payload/platform/lib/models/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/models/dist/index.js +7 -7
- package/payload/platform/lib/models/dist/index.js.map +1 -1
- package/payload/platform/lib/models/src/index.ts +7 -7
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +47 -2
- package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +2 -2
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
- package/payload/platform/plugins/docs/references/admin-session.md +1 -1
- package/payload/platform/plugins/docs/references/admin-ui.md +46 -1
- package/payload/platform/plugins/work/PLUGIN.md +3 -3
- package/payload/platform/plugins/work/mcp/dist/__tests__/assignable-admins.test.d.ts +2 -0
- package/payload/platform/plugins/work/mcp/dist/__tests__/assignable-admins.test.d.ts.map +1 -0
- package/payload/platform/plugins/work/mcp/dist/__tests__/assignable-admins.test.js +55 -0
- package/payload/platform/plugins/work/mcp/dist/__tests__/assignable-admins.test.js.map +1 -0
- package/payload/platform/plugins/work/mcp/dist/__tests__/session-metering.test.js +2 -2
- package/payload/platform/plugins/work/mcp/dist/__tests__/session-metering.test.js.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/__tests__/work-create-assigned-admin-env.test.js +33 -1
- package/payload/platform/plugins/work/mcp/dist/__tests__/work-create-assigned-admin-env.test.js.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/__tests__/work-update-assign.test.d.ts +2 -0
- package/payload/platform/plugins/work/mcp/dist/__tests__/work-update-assign.test.d.ts.map +1 -0
- package/payload/platform/plugins/work/mcp/dist/__tests__/work-update-assign.test.js +73 -0
- package/payload/platform/plugins/work/mcp/dist/__tests__/work-update-assign.test.js.map +1 -0
- package/payload/platform/plugins/work/mcp/dist/index.js +5 -2
- package/payload/platform/plugins/work/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/lib/assignable-admins.d.ts +13 -0
- package/payload/platform/plugins/work/mcp/dist/lib/assignable-admins.d.ts.map +1 -0
- package/payload/platform/plugins/work/mcp/dist/lib/assignable-admins.js +66 -0
- package/payload/platform/plugins/work/mcp/dist/lib/assignable-admins.js.map +1 -0
- package/payload/platform/plugins/work/mcp/dist/tools/session-metering.js +2 -2
- package/payload/platform/plugins/work/mcp/dist/tools/session-metering.js.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/tools/work-create.d.ts +8 -0
- package/payload/platform/plugins/work/mcp/dist/tools/work-create.d.ts.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/tools/work-create.js +31 -13
- package/payload/platform/plugins/work/mcp/dist/tools/work-create.js.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/tools/work-list.d.ts +4 -0
- package/payload/platform/plugins/work/mcp/dist/tools/work-list.d.ts.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/tools/work-list.js +3 -2
- package/payload/platform/plugins/work/mcp/dist/tools/work-list.js.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/tools/work-update.d.ts +7 -0
- package/payload/platform/plugins/work/mcp/dist/tools/work-update.d.ts.map +1 -1
- package/payload/platform/plugins/work/mcp/dist/tools/work-update.js +31 -0
- package/payload/platform/plugins/work/mcp/dist/tools/work-update.js.map +1 -1
- package/payload/platform/scripts/logs-read-jsonl.test.sh +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +2 -2
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pricing.d.ts +19 -11
- package/payload/platform/services/claude-session-manager/dist/pricing.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pricing.js +18 -15
- package/payload/platform/services/claude-session-manager/dist/pricing.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-metering.js +3 -3
- package/payload/platform/services/claude-session-manager/dist/session-metering.js.map +1 -1
- package/payload/platform/templates/account.json +1 -1
- package/payload/platform/templates/specialists/agents/coding-assistant.md +1 -1
- package/payload/platform/templates/specialists/agents/content-producer.md +1 -1
- package/payload/platform/templates/specialists/agents/librarian.md +1 -1
- package/payload/platform/templates/specialists/agents/research-assistant.md +1 -1
- package/payload/server/public/activity.html +6 -6
- package/payload/server/public/agents.html +18 -0
- package/payload/server/public/assets/{AdminLoginScreens-Bv_bKKeL.js → AdminLoginScreens-DeWt3H7l.js} +1 -1
- package/payload/server/public/assets/AdminShell-u32d8puE.js +2 -0
- package/payload/server/public/assets/{activity-DZFYDHNA.js → activity-DjP45-DD.js} +1 -1
- package/payload/server/public/assets/admin-Bo-Y6Vjx.js +1 -0
- package/payload/server/public/assets/agents-C80aCXd8.js +1 -0
- package/payload/server/public/assets/{arc-CvlzUHOf.js → arc-DaI5MLTq.js} +1 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-DWZIX5aV.js +1 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-I1Hs0RJA.js → architectureDiagram-Q4EWVU46-CBGVUEN9.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-Df5jTGtl.js → blockDiagram-DXYQGD6D-DS6dS4GZ.js} +1 -1
- package/payload/server/public/assets/{browser-Bt4-LKLU.js → browser-ULvl_K5x.js} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-B6WY5IDv.js → c4Diagram-AHTNJAMY-hBSBUZPt.js} +1 -1
- package/payload/server/public/assets/calendar-CGMrT6WZ.js +1 -0
- package/payload/server/public/assets/channel-BEokjAeE.js +1 -0
- package/payload/server/public/assets/chat-DnWXaWD4.js +1 -0
- package/payload/server/public/assets/chevron-left-BB5Iljw-.js +1 -0
- package/payload/server/public/assets/chevron-right-DijU96_j.js +1 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-BsIIFDkc.js → chunk-2KRD3SAO-B6koUoB7.js} +1 -1
- package/payload/server/public/assets/{chunk-336JU56O-j9z1VtyC.js → chunk-336JU56O-BF6BRh8u.js} +2 -2
- package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js +1 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-C9i7prxq.js → chunk-4BX2VUAB-7sO95xR2.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-DH0QVGcv.js → chunk-4TB4RGXK-GCTndJYx.js} +1 -1
- package/payload/server/public/assets/{chunk-55IACEB6-Dnd_YCPA.js → chunk-55IACEB6-ggIJf_TC.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-D5sSz3yN.js → chunk-5FUZZQ4R-DeGmkimt.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-CJrwWjAT.js → chunk-5PVQY5BW-aFIQKk_U.js} +1 -1
- package/payload/server/public/assets/{chunk-67CJDMHE-SjP6_hUw.js → chunk-67CJDMHE-LS8rUbii.js} +1 -1
- package/payload/server/public/assets/{chunk-7N4EOEYR-fAuhVJD0.js → chunk-7N4EOEYR-JKOVngS0.js} +1 -1
- package/payload/server/public/assets/{chunk-AA7GKIK3-DZxa7KVg.js → chunk-AA7GKIK3-CoXnTVK6.js} +1 -1
- package/payload/server/public/assets/{chunk-BSJP7CBP-DjeG3eQ-.js → chunk-BSJP7CBP-CcsqObFg.js} +1 -1
- package/payload/server/public/assets/{chunk-CIAEETIT-RYQULNJm.js → chunk-CIAEETIT-CpsybR7q.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-Cahapnon.js → chunk-EDXVE4YY-BZ2I9PSq.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-1146X1L4.js → chunk-ENJZ2VHE-DbTwt6OZ.js} +1 -1
- package/payload/server/public/assets/{chunk-FMBD7UC4-BCFumtcP.js → chunk-FMBD7UC4-D27VnSCa.js} +1 -1
- package/payload/server/public/assets/{chunk-FOC6F5B3-CkrtX8Zt.js → chunk-FOC6F5B3-C0tU2UFl.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-Ba1y3DaW.js → chunk-ICPOFSXX-UPPu2OIq.js} +1 -1
- package/payload/server/public/assets/{chunk-K5T4RW27-CF-PI3uQ.js → chunk-K5T4RW27-DIKxqyYw.js} +1 -1
- package/payload/server/public/assets/{chunk-KGLVRYIC-SFFC6ZC-.js → chunk-KGLVRYIC-CiL4YVLo.js} +1 -1
- package/payload/server/public/assets/{chunk-LIHQZDEY-DbOLEP4R.js → chunk-LIHQZDEY-ejKezVlD.js} +1 -1
- package/payload/server/public/assets/{chunk-ORNJ4GCN-VB963bkN.js → chunk-ORNJ4GCN-Cc0vqc-D.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-DWYY1pQa.js → chunk-OYMX7WX6-Drxn1qG0.js} +1 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js +1 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-DAH1diYP.js → chunk-U2HBQHQK-DnbQIkRP.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-Dmw9coXz.js → chunk-X2U36JSP-CauTSVWg.js} +1 -1
- package/payload/server/public/assets/{chunk-XPW4576I-DaAUON1-.js → chunk-XPW4576I-DZqqB9Zi.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-BUcfkEef.js → chunk-YZCP3GAM-BGHo4Li-.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-BLD-vFRO.js → chunk-ZZ45TVLE-DWGJKPd7.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js +1 -0
- package/payload/server/public/assets/clock-DsmnhhJh.js +1 -0
- package/payload/server/public/assets/clone-Bn7XXVhr.js +1 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-CoZX0uki.js → cose-bilkent-S5V4N54A-D-95BzXL.js} +1 -1
- package/payload/server/public/assets/{dagre-Bmjs8zJA.js → dagre-BZYNBHvT.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-BZCP2wnq.js → dagre-KV5264BT-DyU4HQLQ.js} +1 -1
- package/payload/server/public/assets/data-JPlhOLGC.js +1 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-8Nt9a4xX.js → diagram-5BDNPKRD-CCttJ9XA.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-vh5tcYqJ.js → diagram-G4DWMVQ6-DvkpgSLO.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-DGf--jc8.js → diagram-MMDJMWI5-DHmW5Y9k.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-CsO7TIdw.js → diagram-TYMM5635-C6T4hwzO.js} +1 -1
- package/payload/server/public/assets/{dist-cdnE4DqK.js → dist-QvbmK1IP.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-4a78yV8_.js → erDiagram-SMLLAGMA-5v_o7s3T.js} +1 -1
- package/payload/server/public/assets/{file-text-BpLcZKld.js → file-text-C5K6DMcK.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-BoQBXs6t.js → flowDiagram-DWJPFMVM-3UhCDsjt.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-CvzqwCC8.js → ganttDiagram-T4ZO3ILL-F2zgHIIQ.js} +1 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-C-FvNTHZ.js +1 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-D_nBxay_.js → gitGraphDiagram-UUTBAWPF-oQc1N3dT.js} +1 -1
- package/payload/server/public/assets/graph-CO6e1bgD.js +51 -0
- package/payload/server/public/assets/{graph-labels-Bx19ZYvJ.js → graph-labels-iliQjlfE.js} +1 -1
- package/payload/server/public/assets/{graphlib-D0NdsKJI.js → graphlib-DY4-AT2Q.js} +1 -1
- package/payload/server/public/assets/info-OMHHGYJF-BjLPgHAC.js +1 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js +2 -0
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-auW-s0i0.js → ishikawaDiagram-UXIWVN3A-wJhSOkuw.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-3Q6AWK4A.js → journeyDiagram-VCZTEJTY-DgadC6Pz.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-B4MPFp98.js → kanban-definition-6JOO6SKY-Bs4nQqXI.js} +1 -1
- package/payload/server/public/assets/{line-26MdeG5Z.js → line-Bnmxy1hO.js} +1 -1
- package/payload/server/public/assets/{linear-Dq9s_bDO.js → linear-RvwZxFzh.js} +1 -1
- package/payload/server/public/assets/{maximize-2-BhR-Ec21.js → maximize-2-D-64XK6V.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-vLEpOXgf.js → mermaid-parser.core-DeNV8RtA.js} +2 -2
- package/payload/server/public/assets/{mermaid.core-Durk4m6D.js → mermaid.core-BU9IiSCP.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-DOIg-TyG.js → mindmap-definition-QFDTVHPH-D1PMUxxm.js} +1 -1
- package/payload/server/public/assets/operator-DyXgogJ1.js +1 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-BBAZASfb.js +1 -0
- package/payload/server/public/assets/page-DrbiAFS-.js +32 -0
- package/payload/server/public/assets/page-WeM2ry61.js +1 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-CCJUnMeG.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-DtgBHZfi.js → pieDiagram-DEJITSTG-BzdNzoKA.js} +1 -1
- package/payload/server/public/assets/{public-DZHPsyKX.js → public-B9NVDBxW.js} +1 -1
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-BTc5Qn2y.js → quadrantDiagram-34T5L4WZ-oFr1MJRO.js} +1 -1
- package/payload/server/public/assets/radar-PYXPWWZC-BsRU8Aep.js +1 -0
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-BNgOO5YW.js → requirementDiagram-MS252O5E-C9QBQxDh.js} +1 -1
- package/payload/server/public/assets/{rotate-ccw-D9qOBLig.js → rotate-ccw-P35h7ogS.js} +1 -1
- package/payload/server/public/assets/routines-BeiynLF7.js +1 -0
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-MyUATmVt.js → sankeyDiagram-XADWPNL6-c_y3bvVv.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-CBJrF5Vi.js → sequenceDiagram-FGHM5R23-YwlCBPHE.js} +1 -1
- package/payload/server/public/assets/skills-C5H7ohLp.js +1 -0
- package/payload/server/public/assets/{src-DekKlUCp.js → src-C2WwTWSY.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-6wbUjn1Q.js → stateDiagram-FHFEXIEX-BFE3e-FM.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js +1 -0
- package/payload/server/public/assets/tasks-CI74_b6H.js +1 -0
- package/payload/server/public/assets/{time-entry-format-RkCW7hKu.js → time-entry-format-CDhHCMrW.js} +1 -1
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BHjTMCGY.js → timeline-definition-GMOUNBTQ-azqhmRwZ.js} +1 -1
- package/payload/server/public/assets/treeView-SZITEDCU-BDzhKA6v.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-epHpdeWa.js +1 -0
- package/payload/server/public/assets/{triangle-alert-k8ulav-N.js → triangle-alert-OgY71rDV.js} +1 -1
- package/payload/server/public/assets/{useCopyFeedback-DN1WA5vU.js → useCopyFeedback-jOGmWwa3.js} +1 -1
- package/payload/server/public/assets/useSubAccountSwitcher-6AFuRawP.js +9 -0
- package/payload/server/public/assets/{useSubAccountSwitcher-fvBunpOC.css → useSubAccountSwitcher-AFSwtthL.css} +1 -1
- package/payload/server/public/assets/{useVoiceRecorder-v--TIxaM.js → useVoiceRecorder-CnE3fhfV.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-yo3-cf0U.js → vennDiagram-DHZGUBPP-Da2RfFs8.js} +1 -1
- package/payload/server/public/assets/wardley-RL74JXVD-DNSZCrxV.js +1 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-DZlyFzrg.js → wardleyDiagram-NUSXRM2D-HdrdBYES.js} +1 -1
- package/payload/server/public/assets/{wrench-CKhz8KnQ.js → wrench-B1hsCj0R.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-B5HV5h80.js → xychartDiagram-5P7HB3ND-DMk6rTcQ.js} +1 -1
- package/payload/server/public/browser.html +5 -5
- package/payload/server/public/calendar.html +8 -8
- package/payload/server/public/chat.html +14 -15
- package/payload/server/public/data.html +12 -12
- package/payload/server/public/graph.html +10 -10
- package/payload/server/public/index.html +15 -16
- package/payload/server/public/operator.html +15 -16
- package/payload/server/public/public.html +14 -15
- package/payload/server/public/routines.html +7 -7
- package/payload/server/public/skills.html +6 -6
- package/payload/server/public/tasks.html +7 -7
- package/payload/server/server.js +800 -454
- package/payload/server/public/assets/AdminShell-Gq8DU_ig.js +0 -2
- package/payload/server/public/assets/admin-DLUOixl6.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-BQc779DH.js +0 -1
- package/payload/server/public/assets/bot-CrEhKW1l.js +0 -1
- package/payload/server/public/assets/calendar-B8ujkn_K.js +0 -1
- package/payload/server/public/assets/channel-AqnC3SHu.js +0 -1
- package/payload/server/public/assets/chat-lQXd6gsM.js +0 -1
- package/payload/server/public/assets/chevron-left-CQ8rcBoO.js +0 -1
- package/payload/server/public/assets/chevron-right-CSRSqblN.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-CO02gU5d.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-BiFMbK8t.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BdRqzScB.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-ChPLgHbS.js +0 -1
- package/payload/server/public/assets/clock-B7Ba8AZL.js +0 -1
- package/payload/server/public/assets/clone-TKtrjWBC.js +0 -1
- package/payload/server/public/assets/data-BdlGqjKM.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-DfcaTE9L.js +0 -1
- package/payload/server/public/assets/graph-HB0199x-.js +0 -51
- package/payload/server/public/assets/info-OMHHGYJF-CD-u6gw9.js +0 -1
- package/payload/server/public/assets/infoDiagram-42DDH7IO-C6gPQCvO.js +0 -2
- package/payload/server/public/assets/operator-Bf3hP3qo.js +0 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-BaLYeIrU.js +0 -1
- package/payload/server/public/assets/page-Bs24tO-C.js +0 -32
- package/payload/server/public/assets/page-FnCmAeHc.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-CL-XJtk-.js +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-Cn-g6F_h.js +0 -1
- package/payload/server/public/assets/routines-lGiYaMiX.js +0 -1
- package/payload/server/public/assets/skills-y-h0P9rC.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BdMdfBeC.js +0 -1
- package/payload/server/public/assets/tasks-Cyc1EfLA.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-CmZoOGlC.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-H27WFS-y.js +0 -1
- package/payload/server/public/assets/useSubAccountSwitcher-iQGqNJhI.js +0 -9
- package/payload/server/public/assets/wardley-RL74JXVD-DNpWIvU4.js +0 -1
- /package/payload/server/public/assets/{chunk-CCr-iYLO.js → chunk-CltuBf4Z.js} +0 -0
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const OPUS_MODEL = "claude-opus-
|
|
1
|
+
export declare const OPUS_MODEL = "claude-opus-5[1m]";
|
|
2
2
|
export declare const SONNET_MODEL = "claude-sonnet-5";
|
|
3
3
|
export declare const HAIKU_MODEL = "claude-haiku-4-5";
|
|
4
4
|
export declare const MODEL_CONTEXT_WINDOW: Record<string, number>;
|
|
@@ -18,8 +18,8 @@ export declare function modelDisplayName(id: string): string;
|
|
|
18
18
|
export declare const SELECTABLE_MODELS: readonly string[];
|
|
19
19
|
export declare function isSelectableModel(id: string): boolean;
|
|
20
20
|
/** Strip Claude Code's `[1m]` context-extension suffix so a selectable id
|
|
21
|
-
* (`claude-opus-
|
|
22
|
-
* (suffix stripped upstream → `claude-opus-
|
|
21
|
+
* (`claude-opus-5[1m]`) compares equal to the live API/JSONL `message.model`
|
|
22
|
+
* (suffix stripped upstream → `claude-opus-5`). Ids without the suffix pass
|
|
23
23
|
* through. The /chat picker uses this to decide whether a chosen model is a
|
|
24
24
|
* real change from the running one — a raw `selected !== live` compare is
|
|
25
25
|
* always true for `[1m]` models. */
|
|
@@ -27,8 +27,8 @@ export declare function baseModelId(id: string): string;
|
|
|
27
27
|
/** Map a model id (often the bare live id without `[1m]`) to its canonical
|
|
28
28
|
* *selectable* id by base-id match; returns the input unchanged when no
|
|
29
29
|
* selectable id shares its base. Lets the composer read-only row and the
|
|
30
|
-
* context-window lookup resolve a live `claude-opus-
|
|
31
|
-
* `claude-opus-
|
|
30
|
+
* context-window lookup resolve a live `claude-opus-5` back to
|
|
31
|
+
* `claude-opus-5[1m]` (display name + 1M window). */
|
|
32
32
|
export declare function canonicalModelId(id: string): string;
|
|
33
33
|
/** The 5 permission modes the /chat composer and re-seat fork may write. */
|
|
34
34
|
export declare const PERMISSION_MODES: readonly ["default", "acceptEdits", "plan", "auto", "bypassPermissions"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,sBAAsB,CAAC;AAC9C,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAC9C,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAO9C,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIvD,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;qEAEqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAItD,CAAC;AAEF;+DAC+D;AAC/D,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;mCAGmC;AACnC,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAA4C,CAAC;AAC5F,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;qCAKqC;AACrC,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;sDAIsD;AACtD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAaD,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,0EAA2E,CAAC;AACzG,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,cAAc,CAEvE;AAED,sDAAsD;AACtD,eAAO,MAAM,aAAa,6CAA8C,CAAC;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AACzD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAEjE;AASD;kFACkF;AAClF,eAAO,MAAM,sBAAsB,qFAA4C,CAAC;AAChF,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E;oEACoE;AACpE,eAAO,MAAM,qBAAqB,4DAA6C,CAAC;AAChF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE;;;;;yCAKyC;AACzC,eAAO,MAAM,yBAAyB,oDAAqC,CAAC;AAC5E,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,qBAAqB,CAErF"}
|
|
@@ -15,11 +15,11 @@ exports.isNewSessionEffortLevel = isNewSessionEffortLevel;
|
|
|
15
15
|
// Opus defaults to the 1M-context variant ([1m] is Claude Code's
|
|
16
16
|
// context-extension suffix, valid in settings.json "model" and agent
|
|
17
17
|
// frontmatter).
|
|
18
|
-
exports.OPUS_MODEL = "claude-opus-
|
|
18
|
+
exports.OPUS_MODEL = "claude-opus-5[1m]";
|
|
19
19
|
exports.SONNET_MODEL = "claude-sonnet-5";
|
|
20
20
|
exports.HAIKU_MODEL = "claude-haiku-4-5";
|
|
21
21
|
// Each value is the model's published max input tokens (its context window),
|
|
22
|
-
// taken from Anthropic's model documentation on 2026-07-
|
|
22
|
+
// taken from Anthropic's model documentation on 2026-07-25: Opus 5 and
|
|
23
23
|
// Sonnet 5 are 1M, Haiku 4.5 is 200k. Not inferred from observed usage. When
|
|
24
24
|
// adding a model, read its window from the Models API
|
|
25
25
|
// (GET /v1/models/{id} -> max_input_tokens) rather than assuming a family default.
|
|
@@ -36,7 +36,7 @@ function contextWindow(model) {
|
|
|
36
36
|
* native-CC model dropdown (Task 820). A lever id outside this map renders
|
|
37
37
|
* with its raw id as the label (the composer's append-fallback). */
|
|
38
38
|
exports.MODEL_DISPLAY_NAMES = {
|
|
39
|
-
[exports.OPUS_MODEL]: "Opus
|
|
39
|
+
[exports.OPUS_MODEL]: "Opus 5 (1M context)",
|
|
40
40
|
[exports.SONNET_MODEL]: "Sonnet 5",
|
|
41
41
|
[exports.HAIKU_MODEL]: "Haiku 4.5",
|
|
42
42
|
};
|
|
@@ -54,8 +54,8 @@ function isSelectableModel(id) {
|
|
|
54
54
|
return exports.SELECTABLE_MODELS.includes(id);
|
|
55
55
|
}
|
|
56
56
|
/** Strip Claude Code's `[1m]` context-extension suffix so a selectable id
|
|
57
|
-
* (`claude-opus-
|
|
58
|
-
* (suffix stripped upstream → `claude-opus-
|
|
57
|
+
* (`claude-opus-5[1m]`) compares equal to the live API/JSONL `message.model`
|
|
58
|
+
* (suffix stripped upstream → `claude-opus-5`). Ids without the suffix pass
|
|
59
59
|
* through. The /chat picker uses this to decide whether a chosen model is a
|
|
60
60
|
* real change from the running one — a raw `selected !== live` compare is
|
|
61
61
|
* always true for `[1m]` models. */
|
|
@@ -65,8 +65,8 @@ function baseModelId(id) {
|
|
|
65
65
|
/** Map a model id (often the bare live id without `[1m]`) to its canonical
|
|
66
66
|
* *selectable* id by base-id match; returns the input unchanged when no
|
|
67
67
|
* selectable id shares its base. Lets the composer read-only row and the
|
|
68
|
-
* context-window lookup resolve a live `claude-opus-
|
|
69
|
-
* `claude-opus-
|
|
68
|
+
* context-window lookup resolve a live `claude-opus-5` back to
|
|
69
|
+
* `claude-opus-5[1m]` (display name + 1M window). */
|
|
70
70
|
function canonicalModelId(id) {
|
|
71
71
|
return exports.SELECTABLE_MODELS.find((m) => baseModelId(m) === baseModelId(id)) ?? id;
|
|
72
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,0DAA0D;AAC1D,iEAAiE;AACjE,6CAA6C;;;AAqB7C,sCAEC;AAaD,4CAEC;AAOD,8CAEC;AAQD,kCAEC;AAOD,4CAEC;AAgBD,4CAEC;AAKD,sCAEC;AA2BD,0DAEC;AAtHD,iEAAiE;AACjE,qEAAqE;AACrE,gBAAgB;AACH,QAAA,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
// Opus defaults to the 1M-context variant ([1m] is Claude Code's
|
|
6
6
|
// context-extension suffix, valid in settings.json "model" and agent
|
|
7
7
|
// frontmatter).
|
|
8
|
-
export const OPUS_MODEL = "claude-opus-
|
|
8
|
+
export const OPUS_MODEL = "claude-opus-5[1m]";
|
|
9
9
|
export const SONNET_MODEL = "claude-sonnet-5";
|
|
10
10
|
export const HAIKU_MODEL = "claude-haiku-4-5";
|
|
11
11
|
|
|
12
12
|
// Each value is the model's published max input tokens (its context window),
|
|
13
|
-
// taken from Anthropic's model documentation on 2026-07-
|
|
13
|
+
// taken from Anthropic's model documentation on 2026-07-25: Opus 5 and
|
|
14
14
|
// Sonnet 5 are 1M, Haiku 4.5 is 200k. Not inferred from observed usage. When
|
|
15
15
|
// adding a model, read its window from the Models API
|
|
16
16
|
// (GET /v1/models/{id} -> max_input_tokens) rather than assuming a family default.
|
|
@@ -29,7 +29,7 @@ export function contextWindow(model: string): number {
|
|
|
29
29
|
* native-CC model dropdown (Task 820). A lever id outside this map renders
|
|
30
30
|
* with its raw id as the label (the composer's append-fallback). */
|
|
31
31
|
export const MODEL_DISPLAY_NAMES: Record<string, string> = {
|
|
32
|
-
[OPUS_MODEL]: "Opus
|
|
32
|
+
[OPUS_MODEL]: "Opus 5 (1M context)",
|
|
33
33
|
[SONNET_MODEL]: "Sonnet 5",
|
|
34
34
|
[HAIKU_MODEL]: "Haiku 4.5",
|
|
35
35
|
};
|
|
@@ -50,8 +50,8 @@ export function isSelectableModel(id: string): boolean {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
/** Strip Claude Code's `[1m]` context-extension suffix so a selectable id
|
|
53
|
-
* (`claude-opus-
|
|
54
|
-
* (suffix stripped upstream → `claude-opus-
|
|
53
|
+
* (`claude-opus-5[1m]`) compares equal to the live API/JSONL `message.model`
|
|
54
|
+
* (suffix stripped upstream → `claude-opus-5`). Ids without the suffix pass
|
|
55
55
|
* through. The /chat picker uses this to decide whether a chosen model is a
|
|
56
56
|
* real change from the running one — a raw `selected !== live` compare is
|
|
57
57
|
* always true for `[1m]` models. */
|
|
@@ -62,8 +62,8 @@ export function baseModelId(id: string): string {
|
|
|
62
62
|
/** Map a model id (often the bare live id without `[1m]`) to its canonical
|
|
63
63
|
* *selectable* id by base-id match; returns the input unchanged when no
|
|
64
64
|
* selectable id shares its base. Lets the composer read-only row and the
|
|
65
|
-
* context-window lookup resolve a live `claude-opus-
|
|
66
|
-
* `claude-opus-
|
|
65
|
+
* context-window lookup resolve a live `claude-opus-5` back to
|
|
66
|
+
* `claude-opus-5[1m]` (display name + 1M window). */
|
|
67
67
|
export function canonicalModelId(id: string): string {
|
|
68
68
|
return SELECTABLE_MODELS.find((m) => baseModelId(m) === baseModelId(id)) ?? id;
|
|
69
69
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: platform-architecture
|
|
3
3
|
description: Use when grounding any documented-surface claim about what Maxy ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
|
|
4
|
-
content-hash: sha256:
|
|
4
|
+
content-hash: sha256:1c3857d846036719bbed45a9411a5027e90fc1d28d0a6230e2ef6a7f20b645ec
|
|
5
5
|
brand: maxy-code
|
|
6
6
|
product-name: Maxy
|
|
7
7
|
---
|
|
@@ -2988,7 +2988,7 @@ either is a regression.
|
|
|
2988
2988
|
| `/session-rc-spawn` | POST `{ sessionId?, name? }`. Fire-and-forget `claude --remote-control [name] [--session-id <sid>]`. Present `sessionId` resumes; absent starts a fresh session (also used by the sidebar's "New session" button — it no longer opens claude.ai/code directly). Proxies to the manager's `/rc-spawn`, which waits up to **60 s** (raised from 12 s) for the spawned PTY to bind and returns `{ spawnedPid, sessionId, bridgeSessionId, slug, outcome, reason }`. For a webchat-bound spawn (every admin-gated host's "New session", returning a same-origin `/chat?session=<id>` target — `resolveRcSpawnOutcome` → `sameOrigin:true`) the Sidebar navigates the **current** tab via `window.location.assign`, replacing the dashboard in place (back returns to it); only a claude.ai/code slug (`sameOrigin:false`, the bare-admin resume bridge, never a new-session outcome) navigates a separately-opened tab. On `timeout` or `spawn-failed` it shows an error modal (reason + sessionId) and **never** opens a bare claude.ai/code tab. The new process registers itself as its own Remote Control entry in claude.ai/code. | `POST /` |
|
|
2989
2989
|
| `/claude-sessions` | **Spawn surface only**. `POST /` is the Sidebar new-session-with-prompt path, cookie-auth only (the recorder loopback caller was removed; LinkedIn ingest moved to `/rc-spawn`). The former UI-facing handlers (SSE row feed, list, resume, stop, rename, archive, delete, `/:id/meta`, `/:id/input`, `/:id/log`) were removed — the maxy dashboard no longer manages or displays sessions. | `POST /` |
|
|
2990
2990
|
|
|
2991
|
-
**Admin session management moved entirely to claude's own interfaces** (claude.ai/code, claude desktop). A manager-owned per-account `claude rc --spawn same-dir` daemon registers the device as a Remote Control target there; the composer creates / resumes / stops / renames / archives / deletes sessions, with model + permission-mode applied at inception. The model lever is `account.json.adminModel` → `CLAUDE_CONFIG_DIR/settings.json "model"`, written by the daemon supervisor at boot; the reasoning-effort lever is `account.json.effort` → `settings.json "effortLevel"` (accepted values `low|medium|high|xhigh`; any other value, e.g. legacy `"auto"`, leaves the key unset so claude's own default governs), written by the same read-merge-write at boot. A third inception lever, permission mode, is added: `account.json.adminPermissionMode` → `settings.json "permissions.defaultMode"` (the 5 composer-writable modes `default|acceptEdits|plan|auto|bypassPermissions`; `dontAsk` is out of scope). Unlike model/effort (top-level keys), this lever **deep-merges** the nested `permissions.defaultMode`, owning only that key and preserving sibling `permissions` keys (allow/deny/…) — what the binary and the spawn lifeline actually read. **For admin sessions, permission mode is fixed (Bypass) and not operator-chosen, while model and effort ARE operator-chosen at launch** via the composer's `+` new-session popover — a radio model list (Opus / Sonnet / Haiku) plus a 5-stop Faster→Smarter effort slider (Low / Medium / High / Extra / Max, where `max` applies via the `--effort` argv rather than `settings.json`); the popover description lives in `.docs/admin-webchat-native-channel.md`. Absent a pick (and on every resume), the daemon-pinned defaults govern: the `/chat` composer *footer* carries no live re-seat pickers — `rc-daemon.ts` pins settings.json `model`/`effortLevel`/`permissions.defaultMode` to `claude-opus-
|
|
2991
|
+
**Admin session management moved entirely to claude's own interfaces** (claude.ai/code, claude desktop). A manager-owned per-account `claude rc --spawn same-dir` daemon registers the device as a Remote Control target there; the composer creates / resumes / stops / renames / archives / deletes sessions, with model + permission-mode applied at inception. The model lever is `account.json.adminModel` → `CLAUDE_CONFIG_DIR/settings.json "model"`, written by the daemon supervisor at boot; the reasoning-effort lever is `account.json.effort` → `settings.json "effortLevel"` (accepted values `low|medium|high|xhigh`; any other value, e.g. legacy `"auto"`, leaves the key unset so claude's own default governs), written by the same read-merge-write at boot. A third inception lever, permission mode, is added: `account.json.adminPermissionMode` → `settings.json "permissions.defaultMode"` (the 5 composer-writable modes `default|acceptEdits|plan|auto|bypassPermissions`; `dontAsk` is out of scope). Unlike model/effort (top-level keys), this lever **deep-merges** the nested `permissions.defaultMode`, owning only that key and preserving sibling `permissions` keys (allow/deny/…) — what the binary and the spawn lifeline actually read. **For admin sessions, permission mode is fixed (Bypass) and not operator-chosen, while model and effort ARE operator-chosen at launch** via the composer's `+` new-session popover — a radio model list (Opus / Sonnet / Haiku) plus a 5-stop Faster→Smarter effort slider (Low / Medium / High / Extra / Max, where `max` applies via the `--effort` argv rather than `settings.json`); the popover description lives in `.docs/admin-webchat-native-channel.md`. Absent a pick (and on every resume), the daemon-pinned defaults govern: the `/chat` composer *footer* carries no live re-seat pickers — `rc-daemon.ts` pins settings.json `model`/`effortLevel`/`permissions.defaultMode` to `claude-opus-5[1m]` / `medium` / `bypassPermissions` regardless of `account.json` (read by the rc-spawn webchat path), and `pty-spawner.ts` forces the claude.ai/code PTY `--permission-mode` to `bypassPermissions` for `role=admin`. Public sessions are fixed to `claude-sonnet-5` (the `/public-spawn` chokepoint + `buildPublicWebchatSpawnRequest`), keeping `dontAsk`. **WhatsApp admin sessions override the daemon default:** the `/rc-spawn` handler pins `claude-sonnet-5` / `--effort max` / `bypassPermissions` for a `role=admin` WhatsApp spawn (constants `WHATSAPP_ADMIN_MODEL`/`WHATSAPP_ADMIN_EFFORT` in `http-server.ts`), pushing `--model`/`--effort` on both the fresh spawn and every resume so the params hold for the session's whole life. The override is scoped to sessions *born* under it: a fresh WhatsApp admin spawn stamps its classification sidecar `model=claude-sonnet-5`, and a resume re-asserts Sonnet/max only when that stamp is present — so a WhatsApp session created before this change (sidecar `model=null`) finishes its life on the Opus/medium default. Webchat and Telegram admin sessions are unaffected; public WhatsApp inbound never spawns. The composer footer instead renders a **read-only** params row (mode · model · effort labels) plus a context-window usage figure (`pct% · ~used/~window`), all sourced from the session pointer; the full path is in `.docs/admin-webchat-native-channel.md`. The composer cannot re-seat a session, so the "no transcript" 400 on a brand-new chat is unreachable; the `/api/admin/session-reseat` + `/api/webchat/settings` routes and the dashboard re-seat form stay as off-composer surfaces. When the live session runs in `default` ("Ask permissions") mode, a tool the agent attempts that needs approval surfaces an Allow/Deny card in the composer (tool, description, argument preview); a click sends the verdict over Claude Code's channel permission relay and the tool runs or is refused — webchat is the only interactive ask surface (WhatsApp stays text-only; Telegram has no agent channel). Beyond the composer, the maxy admin UI keeps a single "New session" link (`https://claude.ai/code`, opens in a new tab) and no separate session list, viewer, controls, or model/mode picker. The daemon supervisor lives at [`platform/services/claude-session-manager/src/rc-daemon.ts`](../../../services/claude-session-manager/src/rc-daemon.ts). The `/session-defaults` route and `SpawnPreference` node were deleted with the picker. `/new-session-failure`, `/new-session-submit`, and `/claude-capabilities` are now orphaned (consumed only by the deleted NewSessionModal) — see [`.tasks/501`](../../../.tasks/) for their removal.
|
|
2992
2992
|
|
|
2993
2993
|
**Row title resolution.** Both the sidebar (`/sidebar-sessions`) and the manager's own row payload resolve a row's title in the same order: operator rename → Claude Code `ai-title` → first non-CLI user message → 8-char sessionId prefix. The operator-rename tier is the on-disk `<accountDir>/session-titles.json` (the manager's `UserTitleStore`), keyed by the CC sessionId — the sidebar reads that same file, so a write to the store lights up both surfaces with one write.
|
|
2994
2994
|
|
|
@@ -3076,6 +3076,51 @@ skillDirGone=<bool> pluginDirRemoved=<bool>` (`skillDirGone=false` with
|
|
|
3076
3076
|
`outcome=ok` is a named failure) / `outcome=rejected reason=<invalid-name|
|
|
3077
3077
|
not-found|rm-error>`.
|
|
3078
3078
|
|
|
3079
|
+
### Agents
|
|
3080
|
+
|
|
3081
|
+
The Agents surface (`/agents`) is the admin view of the account's agents, of two
|
|
3082
|
+
kinds, each card tagged `Public` or `Specialist`:
|
|
3083
|
+
|
|
3084
|
+
- **Public agents** — the per-agent directories under `<accountDir>/agents/<slug>/`,
|
|
3085
|
+
each carrying a `config.json` (`displayName`, `status`, `model`,
|
|
3086
|
+
`knowledgeKeywords`) plus the four owned docs `IDENTITY.md`, `SOUL.md`,
|
|
3087
|
+
`KNOWLEDGE.md`, `KNOWLEDGE-SUMMARY.md` (written by `public-agent-manager`). The
|
|
3088
|
+
public card shows a status dot; its **read-only** modal shows status, model,
|
|
3089
|
+
whichever owned docs are present, the knowledge keywords, and an open-agent link
|
|
3090
|
+
to the public URL (computed client-side: an `admin.` host maps to the `public.`
|
|
3091
|
+
host), plus a **delete** behind a confirm that runs the loud-fail `DELETE`
|
|
3092
|
+
(graph projection cleanup precedes file removal).
|
|
3093
|
+
- **User-created specialists** — the agent files under
|
|
3094
|
+
`<accountDir>/plugins/<plugin>/agents/<plugin>--<name>.md` (written by
|
|
3095
|
+
`agent-builder`). `<accountDir>/plugins` is the user-created tree, so only
|
|
3096
|
+
user-created specialists list here; shipped premium and core specialists (whose
|
|
3097
|
+
plugins live under `PLATFORM_ROOT`) do not. The specialist modal shows the
|
|
3098
|
+
model, tools, the owning plugin's skills, and the system-prompt body. Specialists
|
|
3099
|
+
are authored, edited, and deleted through chat (`agent-builder` /
|
|
3100
|
+
`specialist-management`), so the specialist modal offers no delete or open-agent
|
|
3101
|
+
link.
|
|
3102
|
+
|
|
3103
|
+
The former "Public" flyout toggle in the account menu was removed; this page is
|
|
3104
|
+
the sole agent surface. The route (`server/routes/admin/agents.ts`) resolves the
|
|
3105
|
+
current account via `resolveAccount`; `:slug` params reject `/`, `..`, `\` (the
|
|
3106
|
+
traversal guard). A slug containing `--` routes to the specialist branch.
|
|
3107
|
+
|
|
3108
|
+
| Route | Behaviour |
|
|
3109
|
+
|-------|-----------|
|
|
3110
|
+
| `GET /api/admin/agents` | Lists public `agents/*/` dirs (never the `admin` agent) plus user-created specialists from `plugins/*/agents/*.md`, each row tagged `kind`. Returns `{agents, skipped, specialistsSkipped}` — `skipped` counts public dirs whose `config.json` failed to parse; `specialistsSkipped` counts specialist `.md` files with no parseable `name`. |
|
|
3111
|
+
| `GET /api/admin/agents/:slug` | A `--`-free slug returns a public agent's config fields + four owned docs + a `present` map (a missing doc is `''`/`present.<role>=false`, never a 500). A `--` slug returns a specialist's `{kind, model, tools, systemPrompt, skills}`. Unknown 404s. |
|
|
3112
|
+
| `DELETE /api/admin/agents/:slug` | Public agents only: removes the dir after `deleteAgentProjection`; refuses the `admin` slug. Loud-fail: a graph-cleanup throw aborts the file removal. |
|
|
3113
|
+
|
|
3114
|
+
Observability rides `[admin/agents]`: `op=list agents=<n> specialists=<m>
|
|
3115
|
+
skipped=<x> specialistsSkipped=<y>` (the heartbeat — `skipped>0`/`specialistsSkipped>0`
|
|
3116
|
+
is a malformed-source signal the page renders as a banner; `specialists=0` with
|
|
3117
|
+
user plugins present is the broken-walk signature), `op=detail slug=<…>
|
|
3118
|
+
kind=<public|specialist>` (with `present=<comma-list|none>` on the public branch —
|
|
3119
|
+
a role absent for an agent expected complete is the missing-doc signature;
|
|
3120
|
+
`op=list-specialist-skip plugin=<p> file=<f>` per unreadable specialist), and the
|
|
3121
|
+
existing delete lines (`deleted agent "<slug>"` / `graph cleanup failed …
|
|
3122
|
+
aborting file removal`).
|
|
3123
|
+
|
|
3079
3124
|
### Graph
|
|
3080
3125
|
|
|
3081
3126
|
| Mount | Purpose |
|
|
@@ -83,7 +83,7 @@ Present as a `select` field within the agent configuration `form` during creatio
|
|
|
83
83
|
|-------|-----|------------|------|
|
|
84
84
|
| Haiku | `claude-haiku-4-5` | Fast, cost-effective. FAQ, routing, high-volume. | Low |
|
|
85
85
|
| Sonnet | `claude-sonnet-5` | Balanced. Nuanced conversation, qualification, support. | Standard |
|
|
86
|
-
| Opus | `claude-opus-
|
|
86
|
+
| Opus | `claude-opus-5[1m]` | Maximum intelligence. Complex sales, consultative selling. | Premium |
|
|
87
87
|
|
|
88
88
|
## SOUL.md Scope Enforcement
|
|
89
89
|
|
|
@@ -162,7 +162,7 @@ After creation, no template metadata persists in the agent's files. The resultin
|
|
|
162
162
|
- `model` (`select`): label "Model", options with descriptions:
|
|
163
163
|
- `claude-haiku-4-5` — "Haiku — Fast, cost-effective. FAQ, routing, high-volume."
|
|
164
164
|
- `claude-sonnet-5` — "Sonnet — Balanced. Nuanced conversation, qualification, support."
|
|
165
|
-
- `claude-opus-
|
|
165
|
+
- `claude-opus-5[1m]` — "Opus — Maximum intelligence. Complex sales, consultative selling."
|
|
166
166
|
- `showAgentName` (`select`): label "Chat header title", options: `false` — "Business name (default)", `true` — "Agent display name", `"none"` — "None (logo only)"
|
|
167
167
|
The `model` field should have a `defaultValue` of `"claude-haiku-4-5"`.
|
|
168
168
|
Wait for the user's response before proceeding.
|
|
@@ -9,6 +9,18 @@ Invoked by the admin agent directly.
|
|
|
9
9
|
|
|
10
10
|
This is the platform's release timeline, newest first. Each entry shows the date it shipped and the version it shipped in, so you can tell the operator how current their install is. To compare, read the installed version from `capabilities-here` and match it against the versions below. Keep answers high level and in plain English; this is a summary, not a full commit log.
|
|
11
11
|
|
|
12
|
+
## 2026-07-25 (0.1.505)
|
|
13
|
+
|
|
14
|
+
- Upgraded to Claude Opus 5, the assistant's most capable model.
|
|
15
|
+
- The Agents page now also lists any specialist you have created yourself, alongside the built-in ones, with its own detail view.
|
|
16
|
+
- Fixed a task-assignment bug where assigning a task to someone could fail.
|
|
17
|
+
|
|
18
|
+
## 2026-07-25 (0.1.504)
|
|
19
|
+
|
|
20
|
+
- Tasks can now be assigned to a person directly from the picker in the Tasks view.
|
|
21
|
+
- The Agents page is back as its own admin surface, with a card grid and a detail view for each agent.
|
|
22
|
+
- The loading screen now covers every screen's first load, not just when switching accounts.
|
|
23
|
+
|
|
12
24
|
## 2026-07-25 (0.1.503)
|
|
13
25
|
|
|
14
26
|
- The "stalled" indicator in chat now only shows when a turn is genuinely stuck, not during a normal pause.
|
|
@@ -108,7 +108,7 @@ The same all-slug scan runs on the **row-absent branch** too. The manager's fs-w
|
|
|
108
108
|
|
|
109
109
|
## Per-session usage & cost metering
|
|
110
110
|
|
|
111
|
-
Each session row carries a usage icon (Lucide `Gauge`) that opens a modal with a per-day table: active time (thinking / messaging / tool use), token classes, and estimated GBP cost for Opus
|
|
111
|
+
Each session row carries a usage icon (Lucide `Gauge`) that opens a modal with a per-day table: active time (thinking / messaging / tool use), token classes, and estimated GBP cost for Opus 5 and Sonnet 5, plus a TOTAL row. The modal fetches `GET /api/admin/session-usage?sessionId=<uuid>`, which proxies the manager's `GET /:sessionId/metering`. The admin agent reaches the identical table through the work-plugin MCP tool `session-metering` (loopback to the same endpoint) — one deterministic core, two adapters, byte-identical data. The full model, pricing provenance, and caveats (span ≠ active; cache-read dominates cost; tokens are turn-level with thinking redacted; Sonnet 5 shares the Opus tokenizer so its counts are used unscaled; `cache_creation` priced at the 5-minute rate) are in [`session-metering.md`](../../../.docs/session-metering.md).
|
|
112
112
|
|
|
113
113
|
## Memory MCP write-path outcome lines
|
|
114
114
|
|
|
@@ -61,7 +61,7 @@ either is a regression.
|
|
|
61
61
|
| `/session-rc-spawn` | POST `{ sessionId?, name? }`. Fire-and-forget `claude --remote-control [name] [--session-id <sid>]`. Present `sessionId` resumes; absent starts a fresh session (also used by the sidebar's "New session" button — it no longer opens claude.ai/code directly). Proxies to the manager's `/rc-spawn`, which waits up to **60 s** (raised from 12 s) for the spawned PTY to bind and returns `{ spawnedPid, sessionId, bridgeSessionId, slug, outcome, reason }`. For a webchat-bound spawn (every admin-gated host's "New session", returning a same-origin `/chat?session=<id>` target — `resolveRcSpawnOutcome` → `sameOrigin:true`) the Sidebar navigates the **current** tab via `window.location.assign`, replacing the dashboard in place (back returns to it); only a claude.ai/code slug (`sameOrigin:false`, the bare-admin resume bridge, never a new-session outcome) navigates a separately-opened tab. On `timeout` or `spawn-failed` it shows an error modal (reason + sessionId) and **never** opens a bare claude.ai/code tab. The new process registers itself as its own Remote Control entry in claude.ai/code. | `POST /` |
|
|
62
62
|
| `/claude-sessions` | **Spawn surface only**. `POST /` is the Sidebar new-session-with-prompt path, cookie-auth only (the recorder loopback caller was removed; LinkedIn ingest moved to `/rc-spawn`). The former UI-facing handlers (SSE row feed, list, resume, stop, rename, archive, delete, `/:id/meta`, `/:id/input`, `/:id/log`) were removed — the maxy dashboard no longer manages or displays sessions. | `POST /` |
|
|
63
63
|
|
|
64
|
-
**Admin session management moved entirely to claude's own interfaces** (claude.ai/code, claude desktop). A manager-owned per-account `claude rc --spawn same-dir` daemon registers the device as a Remote Control target there; the composer creates / resumes / stops / renames / archives / deletes sessions, with model + permission-mode applied at inception. The model lever is `account.json.adminModel` → `CLAUDE_CONFIG_DIR/settings.json "model"`, written by the daemon supervisor at boot; the reasoning-effort lever is `account.json.effort` → `settings.json "effortLevel"` (accepted values `low|medium|high|xhigh`; any other value, e.g. legacy `"auto"`, leaves the key unset so claude's own default governs), written by the same read-merge-write at boot. A third inception lever, permission mode, is added: `account.json.adminPermissionMode` → `settings.json "permissions.defaultMode"` (the 5 composer-writable modes `default|acceptEdits|plan|auto|bypassPermissions`; `dontAsk` is out of scope). Unlike model/effort (top-level keys), this lever **deep-merges** the nested `permissions.defaultMode`, owning only that key and preserving sibling `permissions` keys (allow/deny/…) — what the binary and the spawn lifeline actually read. **For admin sessions, permission mode is fixed (Bypass) and not operator-chosen, while model and effort ARE operator-chosen at launch** via the composer's `+` new-session popover — a radio model list (Opus / Sonnet / Haiku) plus a 5-stop Faster→Smarter effort slider (Low / Medium / High / Extra / Max, where `max` applies via the `--effort` argv rather than `settings.json`); the popover description lives in `.docs/admin-webchat-native-channel.md`. Absent a pick (and on every resume), the daemon-pinned defaults govern: the `/chat` composer *footer* carries no live re-seat pickers — `rc-daemon.ts` pins settings.json `model`/`effortLevel`/`permissions.defaultMode` to `claude-opus-
|
|
64
|
+
**Admin session management moved entirely to claude's own interfaces** (claude.ai/code, claude desktop). A manager-owned per-account `claude rc --spawn same-dir` daemon registers the device as a Remote Control target there; the composer creates / resumes / stops / renames / archives / deletes sessions, with model + permission-mode applied at inception. The model lever is `account.json.adminModel` → `CLAUDE_CONFIG_DIR/settings.json "model"`, written by the daemon supervisor at boot; the reasoning-effort lever is `account.json.effort` → `settings.json "effortLevel"` (accepted values `low|medium|high|xhigh`; any other value, e.g. legacy `"auto"`, leaves the key unset so claude's own default governs), written by the same read-merge-write at boot. A third inception lever, permission mode, is added: `account.json.adminPermissionMode` → `settings.json "permissions.defaultMode"` (the 5 composer-writable modes `default|acceptEdits|plan|auto|bypassPermissions`; `dontAsk` is out of scope). Unlike model/effort (top-level keys), this lever **deep-merges** the nested `permissions.defaultMode`, owning only that key and preserving sibling `permissions` keys (allow/deny/…) — what the binary and the spawn lifeline actually read. **For admin sessions, permission mode is fixed (Bypass) and not operator-chosen, while model and effort ARE operator-chosen at launch** via the composer's `+` new-session popover — a radio model list (Opus / Sonnet / Haiku) plus a 5-stop Faster→Smarter effort slider (Low / Medium / High / Extra / Max, where `max` applies via the `--effort` argv rather than `settings.json`); the popover description lives in `.docs/admin-webchat-native-channel.md`. Absent a pick (and on every resume), the daemon-pinned defaults govern: the `/chat` composer *footer* carries no live re-seat pickers — `rc-daemon.ts` pins settings.json `model`/`effortLevel`/`permissions.defaultMode` to `claude-opus-5[1m]` / `medium` / `bypassPermissions` regardless of `account.json` (read by the rc-spawn webchat path), and `pty-spawner.ts` forces the claude.ai/code PTY `--permission-mode` to `bypassPermissions` for `role=admin`. Public sessions are fixed to `claude-sonnet-5` (the `/public-spawn` chokepoint + `buildPublicWebchatSpawnRequest`), keeping `dontAsk`. **WhatsApp admin sessions override the daemon default:** the `/rc-spawn` handler pins `claude-sonnet-5` / `--effort max` / `bypassPermissions` for a `role=admin` WhatsApp spawn (constants `WHATSAPP_ADMIN_MODEL`/`WHATSAPP_ADMIN_EFFORT` in `http-server.ts`), pushing `--model`/`--effort` on both the fresh spawn and every resume so the params hold for the session's whole life. The override is scoped to sessions *born* under it: a fresh WhatsApp admin spawn stamps its classification sidecar `model=claude-sonnet-5`, and a resume re-asserts Sonnet/max only when that stamp is present — so a WhatsApp session created before this change (sidecar `model=null`) finishes its life on the Opus/medium default. Webchat and Telegram admin sessions are unaffected; public WhatsApp inbound never spawns. The composer footer instead renders a **read-only** params row (mode · model · effort labels) plus a context-window usage figure (`pct% · ~used/~window`), all sourced from the session pointer; the full path is in `.docs/admin-webchat-native-channel.md`. The composer cannot re-seat a session, so the "no transcript" 400 on a brand-new chat is unreachable; the `/api/admin/session-reseat` + `/api/webchat/settings` routes and the dashboard re-seat form stay as off-composer surfaces. When the live session runs in `default` ("Ask permissions") mode, a tool the agent attempts that needs approval surfaces an Allow/Deny card in the composer (tool, description, argument preview); a click sends the verdict over Claude Code's channel permission relay and the tool runs or is refused — webchat is the only interactive ask surface (WhatsApp stays text-only; Telegram has no agent channel). Beyond the composer, the maxy admin UI keeps a single "New session" link (`https://claude.ai/code`, opens in a new tab) and no separate session list, viewer, controls, or model/mode picker. The daemon supervisor lives at [`platform/services/claude-session-manager/src/rc-daemon.ts`](../../../services/claude-session-manager/src/rc-daemon.ts). The `/session-defaults` route and `SpawnPreference` node were deleted with the picker. `/new-session-failure`, `/new-session-submit`, and `/claude-capabilities` are now orphaned (consumed only by the deleted NewSessionModal) — see [`.tasks/501`](../../../.tasks/) for their removal.
|
|
65
65
|
|
|
66
66
|
**Row title resolution.** Both the sidebar (`/sidebar-sessions`) and the manager's own row payload resolve a row's title in the same order: operator rename → Claude Code `ai-title` → first non-CLI user message → 8-char sessionId prefix. The operator-rename tier is the on-disk `<accountDir>/session-titles.json` (the manager's `UserTitleStore`), keyed by the CC sessionId — the sidebar reads that same file, so a write to the store lights up both surfaces with one write.
|
|
67
67
|
|
|
@@ -149,6 +149,51 @@ skillDirGone=<bool> pluginDirRemoved=<bool>` (`skillDirGone=false` with
|
|
|
149
149
|
`outcome=ok` is a named failure) / `outcome=rejected reason=<invalid-name|
|
|
150
150
|
not-found|rm-error>`.
|
|
151
151
|
|
|
152
|
+
### Agents
|
|
153
|
+
|
|
154
|
+
The Agents surface (`/agents`) is the admin view of the account's agents, of two
|
|
155
|
+
kinds, each card tagged `Public` or `Specialist`:
|
|
156
|
+
|
|
157
|
+
- **Public agents** — the per-agent directories under `<accountDir>/agents/<slug>/`,
|
|
158
|
+
each carrying a `config.json` (`displayName`, `status`, `model`,
|
|
159
|
+
`knowledgeKeywords`) plus the four owned docs `IDENTITY.md`, `SOUL.md`,
|
|
160
|
+
`KNOWLEDGE.md`, `KNOWLEDGE-SUMMARY.md` (written by `public-agent-manager`). The
|
|
161
|
+
public card shows a status dot; its **read-only** modal shows status, model,
|
|
162
|
+
whichever owned docs are present, the knowledge keywords, and an open-agent link
|
|
163
|
+
to the public URL (computed client-side: an `admin.` host maps to the `public.`
|
|
164
|
+
host), plus a **delete** behind a confirm that runs the loud-fail `DELETE`
|
|
165
|
+
(graph projection cleanup precedes file removal).
|
|
166
|
+
- **User-created specialists** — the agent files under
|
|
167
|
+
`<accountDir>/plugins/<plugin>/agents/<plugin>--<name>.md` (written by
|
|
168
|
+
`agent-builder`). `<accountDir>/plugins` is the user-created tree, so only
|
|
169
|
+
user-created specialists list here; shipped premium and core specialists (whose
|
|
170
|
+
plugins live under `PLATFORM_ROOT`) do not. The specialist modal shows the
|
|
171
|
+
model, tools, the owning plugin's skills, and the system-prompt body. Specialists
|
|
172
|
+
are authored, edited, and deleted through chat (`agent-builder` /
|
|
173
|
+
`specialist-management`), so the specialist modal offers no delete or open-agent
|
|
174
|
+
link.
|
|
175
|
+
|
|
176
|
+
The former "Public" flyout toggle in the account menu was removed; this page is
|
|
177
|
+
the sole agent surface. The route (`server/routes/admin/agents.ts`) resolves the
|
|
178
|
+
current account via `resolveAccount`; `:slug` params reject `/`, `..`, `\` (the
|
|
179
|
+
traversal guard). A slug containing `--` routes to the specialist branch.
|
|
180
|
+
|
|
181
|
+
| Route | Behaviour |
|
|
182
|
+
|-------|-----------|
|
|
183
|
+
| `GET /api/admin/agents` | Lists public `agents/*/` dirs (never the `admin` agent) plus user-created specialists from `plugins/*/agents/*.md`, each row tagged `kind`. Returns `{agents, skipped, specialistsSkipped}` — `skipped` counts public dirs whose `config.json` failed to parse; `specialistsSkipped` counts specialist `.md` files with no parseable `name`. |
|
|
184
|
+
| `GET /api/admin/agents/:slug` | A `--`-free slug returns a public agent's config fields + four owned docs + a `present` map (a missing doc is `''`/`present.<role>=false`, never a 500). A `--` slug returns a specialist's `{kind, model, tools, systemPrompt, skills}`. Unknown 404s. |
|
|
185
|
+
| `DELETE /api/admin/agents/:slug` | Public agents only: removes the dir after `deleteAgentProjection`; refuses the `admin` slug. Loud-fail: a graph-cleanup throw aborts the file removal. |
|
|
186
|
+
|
|
187
|
+
Observability rides `[admin/agents]`: `op=list agents=<n> specialists=<m>
|
|
188
|
+
skipped=<x> specialistsSkipped=<y>` (the heartbeat — `skipped>0`/`specialistsSkipped>0`
|
|
189
|
+
is a malformed-source signal the page renders as a banner; `specialists=0` with
|
|
190
|
+
user plugins present is the broken-walk signature), `op=detail slug=<…>
|
|
191
|
+
kind=<public|specialist>` (with `present=<comma-list|none>` on the public branch —
|
|
192
|
+
a role absent for an agent expected complete is the missing-doc signature;
|
|
193
|
+
`op=list-specialist-skip plugin=<p> file=<f>` per unreadable specialist), and the
|
|
194
|
+
existing delete lines (`deleted agent "<slug>"` / `graph cleanup failed …
|
|
195
|
+
aborting file removal`).
|
|
196
|
+
|
|
152
197
|
### Graph
|
|
153
198
|
|
|
154
199
|
| Mount | Purpose |
|
|
@@ -106,9 +106,9 @@ Run `work-ready` and surface the ready set if the user has open work. This answe
|
|
|
106
106
|
|
|
107
107
|
## Tools
|
|
108
108
|
|
|
109
|
-
- `work-create` — Create a work item, optionally linked to a person (RAISED_BY) and entities (AFFECTS). For durable-action records, pass `kind` (e.g. `"onboarding-establish-owner"`, `"cloudflare-tunnel-login"`) to set status `running`; pass `inputs` with the form payload and `inputSchema` declaring any secret fields — values land on the Task as `inputs.<field>` props after `redactSecrets` strips schema-tagged keys; `inputsProvided` records the call-shape (names submitted) alongside the value-bearing `inputs.*`. Pass `raisedDuringConversationKey` to write a `:RAISED_DURING` edge to the originating Conversation when it differs from the current session. For estate-agent client work surfaced on the `/tasks` operator page, pass `clientName`, `propertyAddress`, and `fee` (GBP major units, e.g. `10` = £10) — all optional, recorded on the Task; the platform performs no charge computation.
|
|
110
|
-
- `work-update` — Update name, description, status, priority, due date, or append a note (append-only). Pass `appendStep` to atomically append one entry to `steps[]` (call once per action phase); `errorMessage` is required when status transitions to `failed`; `completed` and `failed` transitions auto-set `completedAt`.
|
|
111
|
-
- `work-list` — List work items filtered by status, priority, or related entity
|
|
109
|
+
- `work-create` — Create a work item, optionally linked to a person (RAISED_BY) and entities (AFFECTS). For durable-action records, pass `kind` (e.g. `"onboarding-establish-owner"`, `"cloudflare-tunnel-login"`) to set status `running`; pass `inputs` with the form payload and `inputSchema` declaring any secret fields — values land on the Task as `inputs.<field>` props after `redactSecrets` strips schema-tagged keys; `inputsProvided` records the call-shape (names submitted) alongside the value-bearing `inputs.*`. Pass `raisedDuringConversationKey` to write a `:RAISED_DURING` edge to the originating Conversation when it differs from the current session. For estate-agent client work surfaced on the `/tasks` operator page, pass `clientName`, `propertyAddress`, and `fee` (GBP major units, e.g. `10` = £10) — all optional, recorded on the Task; the platform performs no charge computation. Pass `assigneeUserId` to assign the task to a house/platform admin or this account's business owner (validated against the assignable set — house admins ∪ owner; an out-of-set userId assigns no one).
|
|
110
|
+
- `work-update` — Update name, description, status, priority, due date, or append a note (append-only). Pass `appendStep` to atomically append one entry to `steps[]` (call once per action phase); `errorMessage` is required when status transitions to `failed`; `completed` and `failed` transitions auto-set `completedAt`. Pass `assigneeUserId` to reassign (a house-admin/owner userId), `null` to unassign, or omit to leave assignment unchanged.
|
|
111
|
+
- `work-list` — List work items filtered by status, priority, or related entity. Each row includes the assignee userId (or `unassigned`).
|
|
112
112
|
- `work-get` — Fetch a work item with full details and all relationships
|
|
113
113
|
- `work-relate` — Add AFFECTS, BLOCKS, PART_OF, or RAISED_BY relationships. For Task targets, pass the taskId (UUID) from work-create. For other labels, pass the elementId from memory-search.
|
|
114
114
|
- `work-complete` — Mark done, re-embed, surface newly-unblocked work
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assignable-admins.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/assignable-admins.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// @vitest-environment node
|
|
2
|
+
//
|
|
3
|
+
// Task 1982 — readHouseAdminUserIds reads the house account.json admins[] from
|
|
4
|
+
// the accounts root; accountsRootFromEnv derives it from ACCOUNT_DIR.
|
|
5
|
+
import { describe, it, expect, afterEach } from "vitest";
|
|
6
|
+
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
7
|
+
import { tmpdir } from "node:os";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { readHouseAdminUserIds, accountsRootFromEnv } from "../lib/assignable-admins.js";
|
|
10
|
+
let roots = [];
|
|
11
|
+
function makeAccounts(accounts) {
|
|
12
|
+
const root = mkdtempSync(join(tmpdir(), "acct-root-"));
|
|
13
|
+
roots.push(root);
|
|
14
|
+
for (const a of accounts) {
|
|
15
|
+
mkdirSync(join(root, a.id));
|
|
16
|
+
writeFileSync(join(root, a.id, "account.json"), JSON.stringify(a.cfg));
|
|
17
|
+
}
|
|
18
|
+
return root;
|
|
19
|
+
}
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
for (const r of roots)
|
|
22
|
+
rmSync(r, { recursive: true, force: true });
|
|
23
|
+
roots = [];
|
|
24
|
+
delete process.env.ACCOUNT_DIR;
|
|
25
|
+
});
|
|
26
|
+
describe("readHouseAdminUserIds (Task 1982)", () => {
|
|
27
|
+
it("returns the house admins[] userIds in file order", () => {
|
|
28
|
+
const root = makeAccounts([
|
|
29
|
+
{ id: "client-1", cfg: { role: "client", accountId: "client-1" } },
|
|
30
|
+
{ id: "house-1", cfg: { role: "house", accountId: "house-1", admins: [{ userId: "primary" }, { userId: "second" }] } },
|
|
31
|
+
]);
|
|
32
|
+
expect(readHouseAdminUserIds(root)).toEqual(["primary", "second"]);
|
|
33
|
+
});
|
|
34
|
+
it("returns [] when there is no house account", () => {
|
|
35
|
+
const root = makeAccounts([{ id: "client-1", cfg: { role: "client", accountId: "client-1" } }]);
|
|
36
|
+
expect(readHouseAdminUserIds(root)).toEqual([]);
|
|
37
|
+
});
|
|
38
|
+
it("returns [] when the house admins[] is absent", () => {
|
|
39
|
+
const root = makeAccounts([{ id: "house-1", cfg: { role: "house", accountId: "house-1" } }]);
|
|
40
|
+
expect(readHouseAdminUserIds(root)).toEqual([]);
|
|
41
|
+
});
|
|
42
|
+
it("returns [] for an unreadable accounts root", () => {
|
|
43
|
+
expect(readHouseAdminUserIds("/no/such/dir/anywhere")).toEqual([]);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe("accountsRootFromEnv (Task 1982)", () => {
|
|
47
|
+
it("is the parent of ACCOUNT_DIR", () => {
|
|
48
|
+
process.env.ACCOUNT_DIR = "/srv/data/accounts/acct-9";
|
|
49
|
+
expect(accountsRootFromEnv()).toBe("/srv/data/accounts");
|
|
50
|
+
});
|
|
51
|
+
it("is null when ACCOUNT_DIR is absent", () => {
|
|
52
|
+
expect(accountsRootFromEnv()).toBeNull();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=assignable-admins.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assignable-admins.test.js","sourceRoot":"","sources":["../../src/__tests__/assignable-admins.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -85,8 +85,8 @@ describe('sessionMetering — loopback adapter', () => {
|
|
|
85
85
|
describe('renderMeteringTable', () => {
|
|
86
86
|
it('renders the modal columns, per-day rows, and a bold TOTAL row', () => {
|
|
87
87
|
const md = renderMeteringTable(SUMMARY);
|
|
88
|
-
expect(md).toContain('Opus
|
|
89
|
-
expect(md).toContain('Sonnet
|
|
88
|
+
expect(md).toContain('Opus 5 (GBP)');
|
|
89
|
+
expect(md).toContain('Sonnet 5 (GBP)');
|
|
90
90
|
expect(md).toContain('2026-06-17');
|
|
91
91
|
expect(md).toContain('£113.55');
|
|
92
92
|
expect(md).toContain('£47.69');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-metering.test.js","sourceRoot":"","sources":["../../src/__tests__/session-metering.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-metering.test.js","sourceRoot":"","sources":["../../src/__tests__/session-metering.test.ts"],"names":[],"mappings":"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"}
|
package/payload/platform/plugins/work/mcp/dist/__tests__/work-create-assigned-admin-env.test.js
CHANGED
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
// userId that resolves to no AdminUser, writes no ASSIGNED_TO edge.
|
|
9
9
|
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
10
10
|
const { runMock, closeMock, writeMock } = vi.hoisted(() => ({
|
|
11
|
-
runMock: vi.fn(async () => ({
|
|
11
|
+
runMock: vi.fn(async (_cypher, _params) => ({
|
|
12
|
+
records: [],
|
|
13
|
+
})),
|
|
12
14
|
closeMock: vi.fn(async () => { }),
|
|
13
15
|
writeMock: vi.fn(async (_arg) => ({})),
|
|
14
16
|
}));
|
|
@@ -69,4 +71,34 @@ describe("work-create ASSIGNED_TO env (Task 1500)", () => {
|
|
|
69
71
|
expect(rels.some((r) => r.type === "ASSIGNED_TO")).toBe(false);
|
|
70
72
|
});
|
|
71
73
|
});
|
|
74
|
+
// Task 1982 — an agent may pass `assigneeUserId` explicitly. The param path is
|
|
75
|
+
// validated against the assignable set (house admins ∪ owner). With no
|
|
76
|
+
// ACCOUNT_DIR the house set is empty, so the owner (resolved from the graph) is
|
|
77
|
+
// the sole in-roster identity in these tests. The two run calls per assign are
|
|
78
|
+
// [owner-query, AdminUser-MATCH].
|
|
79
|
+
describe("work-create assigneeUserId param (Task 1982)", () => {
|
|
80
|
+
it("writes an ASSIGNED_TO edge for the account owner passed as assigneeUserId", async () => {
|
|
81
|
+
runMock
|
|
82
|
+
.mockResolvedValueOnce({ records: [{ get: (k) => (k === "userId" ? "owner-1" : null) }] }) // owner query
|
|
83
|
+
.mockResolvedValueOnce({ records: [{ get: () => "4:owner:9" }] }); // AdminUser MATCH
|
|
84
|
+
await workCreate({ ...baseParams, assigneeUserId: "owner-1" });
|
|
85
|
+
const assigned = relationshipsFromWrite().filter((r) => r.type === "ASSIGNED_TO");
|
|
86
|
+
expect(assigned).toEqual([{ type: "ASSIGNED_TO", direction: "outgoing", targetNodeId: "4:owner:9" }]);
|
|
87
|
+
});
|
|
88
|
+
it("param wins over the passive-intake env var", async () => {
|
|
89
|
+
process.env.INTAKE_ASSIGNED_ADMIN_USER_ID = "env-admin";
|
|
90
|
+
runMock
|
|
91
|
+
.mockResolvedValueOnce({ records: [{ get: (k) => (k === "userId" ? "owner-1" : null) }] }) // owner query
|
|
92
|
+
.mockResolvedValueOnce({ records: [{ get: () => "4:owner:9" }] }); // AdminUser MATCH
|
|
93
|
+
await workCreate({ ...baseParams, assigneeUserId: "owner-1" });
|
|
94
|
+
// The AdminUser MATCH must resolve the PARAM userId, not the env one.
|
|
95
|
+
const matchCall = runMock.mock.calls.find((c) => String(c[0]).includes("MATCH (au:AdminUser {userId: $userId})"));
|
|
96
|
+
expect(matchCall?.[1]).toMatchObject({ userId: "owner-1" });
|
|
97
|
+
});
|
|
98
|
+
it("writes no ASSIGNED_TO edge when the param userId is not in the roster", async () => {
|
|
99
|
+
runMock.mockResolvedValueOnce({ records: [{ get: (k) => (k === "userId" ? "owner-1" : null) }] }); // owner query only
|
|
100
|
+
await workCreate({ ...baseParams, assigneeUserId: "stranger" });
|
|
101
|
+
expect(relationshipsFromWrite().some((r) => r.type === "ASSIGNED_TO")).toBe(false);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
72
104
|
//# sourceMappingURL=work-create-assigned-admin-env.test.js.map
|
package/payload/platform/plugins/work/mcp/dist/__tests__/work-create-assigned-admin-env.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-create-assigned-admin-env.test.js","sourceRoot":"","sources":["../../src/__tests__/work-create-assigned-admin-env.test.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,uEAAuE;AACvE,gFAAgF;AAChF,+EAA+E;AAC/E,oEAAoE;AACpE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE7D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"work-create-assigned-admin-env.test.js","sourceRoot":"","sources":["../../src/__tests__/work-create-assigned-admin-env.test.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,uEAAuE;AACvE,gFAAgF;AAChF,+EAA+E;AAC/E,oEAAoE;AACpE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE7D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,OAAe,EAAE,OAAiC,EAAE,EAAE,CAAC,CAAC;QAC5E,OAAO,EAAE,EAA4C;KACtD,CAAC,CAAC;IACH,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;IAChC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,IAAyF,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CAC5H,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;CACvD,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAAC,EAAc;CAC7C,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7D,kBAAkB,EAAE,SAAS;CAC9B,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9D,aAAa,EAAE,CAAC,MAA2C,EAAE,EAAE,CAAC,CAAC;QAC/D,QAAQ,EAAE,MAAM,IAAI,EAAE;QACtB,aAAa,EAAE,CAAC;QAChB,iBAAiB,EAAE,EAAc;KAClC,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,UAAU,GAAG;IACjB,SAAS,EAAE,OAAO;IAClB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,sCAAsC;IACnD,QAAQ,EAAE,SAAS,EAAE,mEAAmE;IACxF,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;CACA,CAAC;AAEjD,SAAS,sBAAsB;IAC7B,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;AAClD,CAAC;AAED,SAAS,CAAC,GAAG,EAAE;IACb,OAAO,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;IACjD,OAAO,CAAC,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3C,SAAS,CAAC,SAAS,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,WAAW,CAAC;QACxD,OAAO,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QACrE,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,sBAAsB,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;QAC9D,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,sBAAsB,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,gEAAgE;QAChE,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,YAAY,CAAC;QACzD,OAAO,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,gCAAgC;QAC5E,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,sBAAsB,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,uEAAuE;AACvE,gFAAgF;AAChF,+EAA+E;AAC/E,kCAAkC;AAClC,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC5D,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,OAAO;aACJ,qBAAqB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,cAAc;aAChH,qBAAqB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB;QACvF,MAAM,UAAU,CAAC,EAAE,GAAG,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;QAClF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,WAAW,CAAC;QACxD,OAAO;aACJ,qBAAqB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,cAAc;aAChH,qBAAqB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB;QACvF,MAAM,UAAU,CAAC,EAAE,GAAG,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,sEAAsE;QACtE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAClH,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,OAAO,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB;QAC9H,MAAM,UAAU,CAAC,EAAE,GAAG,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-update-assign.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/work-update-assign.test.ts"],"names":[],"mappings":""}
|