@rubytech/create-maxy-code 0.1.483 → 0.1.485
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/package-lock.json +271 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +28 -21
- package/payload/platform/plugins/cloudflare/mcp/__tests__/template-config.test.ts +26 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/index.html +16 -8
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/portal.css +25 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/portal.js +23 -7
- package/payload/platform/plugins/docs/references/google-guide.md +27 -20
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft-send.test.js +76 -2
- package/payload/platform/plugins/email/mcp/dist/__tests__/email-draft-send.test.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/imap.js +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/imap.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-draft-send.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-draft-send.js +87 -6
- package/payload/platform/plugins/email/mcp/dist/tools/email-draft-send.js.map +1 -1
- package/payload/platform/plugins/google/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/google/PLUGIN.md +20 -1
- package/payload/platform/plugins/google/mcp/dist/__tests__/account-register.test.js +29 -1
- package/payload/platform/plugins/google/mcp/dist/__tests__/account-register.test.js.map +1 -1
- package/payload/platform/plugins/google/mcp/dist/__tests__/consent-open.test.d.ts +2 -0
- package/payload/platform/plugins/google/mcp/dist/__tests__/consent-open.test.d.ts.map +1 -0
- package/payload/platform/plugins/google/mcp/dist/__tests__/consent-open.test.js +92 -0
- package/payload/platform/plugins/google/mcp/dist/__tests__/consent-open.test.js.map +1 -0
- package/payload/platform/plugins/google/mcp/dist/auth/consent-open.d.ts +61 -0
- package/payload/platform/plugins/google/mcp/dist/auth/consent-open.d.ts.map +1 -0
- package/payload/platform/plugins/google/mcp/dist/auth/consent-open.js +184 -0
- package/payload/platform/plugins/google/mcp/dist/auth/consent-open.js.map +1 -0
- package/payload/platform/plugins/google/mcp/dist/index.js +65 -2
- package/payload/platform/plugins/google/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/google/mcp/dist/tools/account-register.d.ts +14 -0
- package/payload/platform/plugins/google/mcp/dist/tools/account-register.d.ts.map +1 -1
- package/payload/platform/plugins/google/mcp/dist/tools/account-register.js +16 -0
- package/payload/platform/plugins/google/mcp/dist/tools/account-register.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +5 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +18 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +8 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/subagent-injection-tail.d.ts +13 -0
- package/payload/platform/services/claude-session-manager/dist/subagent-injection-tail.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/subagent-injection-tail.js +149 -0
- package/payload/platform/services/claude-session-manager/dist/subagent-injection-tail.js.map +1 -0
- package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
- package/payload/platform/services/telegram-channel/dist/instructions.js +17 -2
- package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
- package/payload/platform/services/webchat-channel/dist/instructions.d.ts.map +1 -1
- package/payload/platform/services/webchat-channel/dist/instructions.js +17 -2
- package/payload/platform/services/webchat-channel/dist/instructions.js.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
- package/payload/platform/services/whatsapp-channel/dist/server.js +16 -2
- package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
- package/payload/server/public/activity.html +6 -6
- package/payload/server/public/assets/{AdminLoginScreens-Jw45pvb2.js → AdminLoginScreens-DF9S5Rca.js} +1 -1
- package/payload/server/public/assets/AdminShell-B0PNDCAb.js +2 -0
- package/payload/server/public/assets/{Checkbox-D7_S2EUI.js → Checkbox-s5X6dso4.js} +1 -1
- package/payload/server/public/assets/activity-BRBsaalV.js +1 -0
- package/payload/server/public/assets/admin-rScqRq-R.js +1 -0
- package/payload/server/public/assets/{bot-GC7iZjtW.js → bot-BVO9Uqr_.js} +1 -1
- package/payload/server/public/assets/{browser-BI-wi3CM.js → browser-BVW4FFii.js} +1 -1
- package/payload/server/public/assets/calendar-CWsD3uLk.js +1 -0
- package/payload/server/public/assets/chat-DKGREuIO.js +1 -0
- package/payload/server/public/assets/chevron-down-m581tl1J.js +1 -0
- package/payload/server/public/assets/chevron-left-BAY0xfmR.js +1 -0
- package/payload/server/public/assets/chevron-right-Dy_REdYZ.js +1 -0
- package/payload/server/public/assets/data-TOWuhMFb.js +1 -0
- package/payload/server/public/assets/{graph-Cl72j3UC.js → graph-BEGs_P2m.js} +3 -3
- package/payload/server/public/assets/{graph-labels-7p-mVi9M.js → graph-labels-Axa04w8A.js} +1 -1
- package/payload/server/public/assets/{maximize-2-HcfeeOdJ.js → maximize-2-yucCepu_.js} +1 -1
- package/payload/server/public/assets/operator-911z_Fy_.js +1 -0
- package/payload/server/public/assets/page-6CZ8R57f.js +1 -0
- package/payload/server/public/assets/{page-DPQS0X5M.js → page-CgSgj8Cy.js} +3 -3
- package/payload/server/public/assets/{public-DAn13pnw.js → public-BzwveFwz.js} +1 -1
- package/payload/server/public/assets/{rotate-ccw-CCbbX5ef.js → rotate-ccw-BH51cf2Q.js} +1 -1
- package/payload/server/public/assets/tasks-21egY7A6.js +1 -0
- package/payload/server/public/assets/{time-entry-format-C-By1MbO.js → time-entry-format-DPdGkp1C.js} +1 -1
- package/payload/server/public/assets/{triangle-alert-BDtoi5R0.js → triangle-alert-DO2rjjfV.js} +1 -1
- package/payload/server/public/assets/useCopyFeedback-HMSM7-Ir.js +1 -0
- package/payload/server/public/assets/useSubAccountSwitcher-2ojOOYNo.css +1 -0
- package/payload/server/public/assets/{useSubAccountSwitcher-sPN6lobE.js → useSubAccountSwitcher-DLvqvfoc.js} +1 -1
- package/payload/server/public/assets/{useVoiceRecorder-DOFBQ2gP.js → useVoiceRecorder-BcukQIza.js} +1 -1
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +6 -6
- package/payload/server/public/chat.html +13 -13
- package/payload/server/public/data.html +10 -10
- package/payload/server/public/graph.html +11 -11
- package/payload/server/public/index.html +16 -16
- package/payload/server/public/operator.html +15 -15
- package/payload/server/public/public.html +13 -13
- package/payload/server/public/tasks.html +6 -6
- package/payload/server/server.js +128 -33
- package/payload/server/public/assets/AdminShell-DR6AzflZ.js +0 -2
- package/payload/server/public/assets/activity-CKbv3zFM.js +0 -1
- package/payload/server/public/assets/admin-DXUspIjz.js +0 -1
- package/payload/server/public/assets/calendar-DXnv4F7l.js +0 -1
- package/payload/server/public/assets/chat-CAdgaPW1.js +0 -1
- package/payload/server/public/assets/chevron-down-BCLf1wKu.js +0 -1
- package/payload/server/public/assets/chevron-left-BNtL-CjS.js +0 -1
- package/payload/server/public/assets/chevron-right-Bu5hsjy5.js +0 -1
- package/payload/server/public/assets/data-D7cYlorm.js +0 -1
- package/payload/server/public/assets/operator-C0iaGPNT.js +0 -1
- package/payload/server/public/assets/page-DsV3rID5.js +0 -1
- package/payload/server/public/assets/tasks-_Ij9BdOE.js +0 -1
- package/payload/server/public/assets/useCopyFeedback-CfbJc9iN.js +0 -1
- package/payload/server/public/assets/useSubAccountSwitcher-5jQsc23X.css +0 -1
package/package.json
CHANGED
|
@@ -577,6 +577,10 @@
|
|
|
577
577
|
"resolved": "plugins/filesystem/mcp",
|
|
578
578
|
"link": true
|
|
579
579
|
},
|
|
580
|
+
"node_modules/@maxy/google": {
|
|
581
|
+
"resolved": "plugins/google/mcp",
|
|
582
|
+
"link": true
|
|
583
|
+
},
|
|
580
584
|
"node_modules/@maxy/graph-viewer": {
|
|
581
585
|
"resolved": "plugins/graph-viewer/mcp",
|
|
582
586
|
"link": true
|
|
@@ -585,6 +589,10 @@
|
|
|
585
589
|
"resolved": "plugins/joblogic/mcp",
|
|
586
590
|
"link": true
|
|
587
591
|
},
|
|
592
|
+
"node_modules/@maxy/ledger": {
|
|
593
|
+
"resolved": "plugins/ledger/mcp",
|
|
594
|
+
"link": true
|
|
595
|
+
},
|
|
588
596
|
"node_modules/@maxy/memory": {
|
|
589
597
|
"resolved": "plugins/memory/mcp",
|
|
590
598
|
"link": true
|
|
@@ -609,6 +617,10 @@
|
|
|
609
617
|
"resolved": "plugins/scheduling/mcp",
|
|
610
618
|
"link": true
|
|
611
619
|
},
|
|
620
|
+
"node_modules/@maxy/storage-broker": {
|
|
621
|
+
"resolved": "plugins/storage-broker/mcp",
|
|
622
|
+
"link": true
|
|
623
|
+
},
|
|
612
624
|
"node_modules/@maxy/telegram-channel": {
|
|
613
625
|
"resolved": "services/telegram-channel",
|
|
614
626
|
"link": true
|
|
@@ -617,6 +629,10 @@
|
|
|
617
629
|
"resolved": "plugins/url-get/mcp",
|
|
618
630
|
"link": true
|
|
619
631
|
},
|
|
632
|
+
"node_modules/@maxy/voice-mirror-mcp": {
|
|
633
|
+
"resolved": "plugins/voice-mirror/mcp",
|
|
634
|
+
"link": true
|
|
635
|
+
},
|
|
620
636
|
"node_modules/@maxy/webchat-channel": {
|
|
621
637
|
"resolved": "services/webchat-channel",
|
|
622
638
|
"link": true
|
|
@@ -5618,7 +5634,211 @@
|
|
|
5618
5634
|
},
|
|
5619
5635
|
"devDependencies": {
|
|
5620
5636
|
"@types/node": "^22.0.0",
|
|
5621
|
-
"typescript": "^5.7.0"
|
|
5637
|
+
"typescript": "^5.7.0",
|
|
5638
|
+
"vitest": "^4.1.10"
|
|
5639
|
+
}
|
|
5640
|
+
},
|
|
5641
|
+
"plugins/cloudflare/mcp/node_modules/@vitest/expect": {
|
|
5642
|
+
"version": "4.1.10",
|
|
5643
|
+
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz",
|
|
5644
|
+
"integrity": "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==",
|
|
5645
|
+
"dev": true,
|
|
5646
|
+
"license": "MIT",
|
|
5647
|
+
"dependencies": {
|
|
5648
|
+
"@standard-schema/spec": "^1.1.0",
|
|
5649
|
+
"@types/chai": "^5.2.2",
|
|
5650
|
+
"@vitest/spy": "4.1.10",
|
|
5651
|
+
"@vitest/utils": "4.1.10",
|
|
5652
|
+
"chai": "^6.2.2",
|
|
5653
|
+
"tinyrainbow": "^3.1.0"
|
|
5654
|
+
},
|
|
5655
|
+
"funding": {
|
|
5656
|
+
"url": "https://opencollective.com/vitest"
|
|
5657
|
+
}
|
|
5658
|
+
},
|
|
5659
|
+
"plugins/cloudflare/mcp/node_modules/@vitest/pretty-format": {
|
|
5660
|
+
"version": "4.1.10",
|
|
5661
|
+
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz",
|
|
5662
|
+
"integrity": "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==",
|
|
5663
|
+
"dev": true,
|
|
5664
|
+
"license": "MIT",
|
|
5665
|
+
"dependencies": {
|
|
5666
|
+
"tinyrainbow": "^3.1.0"
|
|
5667
|
+
},
|
|
5668
|
+
"funding": {
|
|
5669
|
+
"url": "https://opencollective.com/vitest"
|
|
5670
|
+
}
|
|
5671
|
+
},
|
|
5672
|
+
"plugins/cloudflare/mcp/node_modules/@vitest/runner": {
|
|
5673
|
+
"version": "4.1.10",
|
|
5674
|
+
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz",
|
|
5675
|
+
"integrity": "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==",
|
|
5676
|
+
"dev": true,
|
|
5677
|
+
"license": "MIT",
|
|
5678
|
+
"dependencies": {
|
|
5679
|
+
"@vitest/utils": "4.1.10",
|
|
5680
|
+
"pathe": "^2.0.3"
|
|
5681
|
+
},
|
|
5682
|
+
"funding": {
|
|
5683
|
+
"url": "https://opencollective.com/vitest"
|
|
5684
|
+
}
|
|
5685
|
+
},
|
|
5686
|
+
"plugins/cloudflare/mcp/node_modules/@vitest/snapshot": {
|
|
5687
|
+
"version": "4.1.10",
|
|
5688
|
+
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz",
|
|
5689
|
+
"integrity": "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==",
|
|
5690
|
+
"dev": true,
|
|
5691
|
+
"license": "MIT",
|
|
5692
|
+
"dependencies": {
|
|
5693
|
+
"@vitest/pretty-format": "4.1.10",
|
|
5694
|
+
"@vitest/utils": "4.1.10",
|
|
5695
|
+
"magic-string": "^0.30.21",
|
|
5696
|
+
"pathe": "^2.0.3"
|
|
5697
|
+
},
|
|
5698
|
+
"funding": {
|
|
5699
|
+
"url": "https://opencollective.com/vitest"
|
|
5700
|
+
}
|
|
5701
|
+
},
|
|
5702
|
+
"plugins/cloudflare/mcp/node_modules/@vitest/spy": {
|
|
5703
|
+
"version": "4.1.10",
|
|
5704
|
+
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz",
|
|
5705
|
+
"integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==",
|
|
5706
|
+
"dev": true,
|
|
5707
|
+
"license": "MIT",
|
|
5708
|
+
"funding": {
|
|
5709
|
+
"url": "https://opencollective.com/vitest"
|
|
5710
|
+
}
|
|
5711
|
+
},
|
|
5712
|
+
"plugins/cloudflare/mcp/node_modules/@vitest/utils": {
|
|
5713
|
+
"version": "4.1.10",
|
|
5714
|
+
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz",
|
|
5715
|
+
"integrity": "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==",
|
|
5716
|
+
"dev": true,
|
|
5717
|
+
"license": "MIT",
|
|
5718
|
+
"dependencies": {
|
|
5719
|
+
"@vitest/pretty-format": "4.1.10",
|
|
5720
|
+
"convert-source-map": "^2.0.0",
|
|
5721
|
+
"tinyrainbow": "^3.1.0"
|
|
5722
|
+
},
|
|
5723
|
+
"funding": {
|
|
5724
|
+
"url": "https://opencollective.com/vitest"
|
|
5725
|
+
}
|
|
5726
|
+
},
|
|
5727
|
+
"plugins/cloudflare/mcp/node_modules/vitest": {
|
|
5728
|
+
"version": "4.1.10",
|
|
5729
|
+
"resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz",
|
|
5730
|
+
"integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==",
|
|
5731
|
+
"dev": true,
|
|
5732
|
+
"license": "MIT",
|
|
5733
|
+
"dependencies": {
|
|
5734
|
+
"@vitest/expect": "4.1.10",
|
|
5735
|
+
"@vitest/mocker": "4.1.10",
|
|
5736
|
+
"@vitest/pretty-format": "4.1.10",
|
|
5737
|
+
"@vitest/runner": "4.1.10",
|
|
5738
|
+
"@vitest/snapshot": "4.1.10",
|
|
5739
|
+
"@vitest/spy": "4.1.10",
|
|
5740
|
+
"@vitest/utils": "4.1.10",
|
|
5741
|
+
"es-module-lexer": "^2.0.0",
|
|
5742
|
+
"expect-type": "^1.3.0",
|
|
5743
|
+
"magic-string": "^0.30.21",
|
|
5744
|
+
"obug": "^2.1.1",
|
|
5745
|
+
"pathe": "^2.0.3",
|
|
5746
|
+
"picomatch": "^4.0.3",
|
|
5747
|
+
"std-env": "^4.0.0-rc.1",
|
|
5748
|
+
"tinybench": "^2.9.0",
|
|
5749
|
+
"tinyexec": "^1.0.2",
|
|
5750
|
+
"tinyglobby": "^0.2.15",
|
|
5751
|
+
"tinyrainbow": "^3.1.0",
|
|
5752
|
+
"vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
|
|
5753
|
+
"why-is-node-running": "^2.3.0"
|
|
5754
|
+
},
|
|
5755
|
+
"bin": {
|
|
5756
|
+
"vitest": "vitest.mjs"
|
|
5757
|
+
},
|
|
5758
|
+
"engines": {
|
|
5759
|
+
"node": "^20.0.0 || ^22.0.0 || >=24.0.0"
|
|
5760
|
+
},
|
|
5761
|
+
"funding": {
|
|
5762
|
+
"url": "https://opencollective.com/vitest"
|
|
5763
|
+
},
|
|
5764
|
+
"peerDependencies": {
|
|
5765
|
+
"@edge-runtime/vm": "*",
|
|
5766
|
+
"@opentelemetry/api": "^1.9.0",
|
|
5767
|
+
"@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
|
|
5768
|
+
"@vitest/browser-playwright": "4.1.10",
|
|
5769
|
+
"@vitest/browser-preview": "4.1.10",
|
|
5770
|
+
"@vitest/browser-webdriverio": "4.1.10",
|
|
5771
|
+
"@vitest/coverage-istanbul": "4.1.10",
|
|
5772
|
+
"@vitest/coverage-v8": "4.1.10",
|
|
5773
|
+
"@vitest/ui": "4.1.10",
|
|
5774
|
+
"happy-dom": "*",
|
|
5775
|
+
"jsdom": "*",
|
|
5776
|
+
"vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
|
|
5777
|
+
},
|
|
5778
|
+
"peerDependenciesMeta": {
|
|
5779
|
+
"@edge-runtime/vm": {
|
|
5780
|
+
"optional": true
|
|
5781
|
+
},
|
|
5782
|
+
"@opentelemetry/api": {
|
|
5783
|
+
"optional": true
|
|
5784
|
+
},
|
|
5785
|
+
"@types/node": {
|
|
5786
|
+
"optional": true
|
|
5787
|
+
},
|
|
5788
|
+
"@vitest/browser-playwright": {
|
|
5789
|
+
"optional": true
|
|
5790
|
+
},
|
|
5791
|
+
"@vitest/browser-preview": {
|
|
5792
|
+
"optional": true
|
|
5793
|
+
},
|
|
5794
|
+
"@vitest/browser-webdriverio": {
|
|
5795
|
+
"optional": true
|
|
5796
|
+
},
|
|
5797
|
+
"@vitest/coverage-istanbul": {
|
|
5798
|
+
"optional": true
|
|
5799
|
+
},
|
|
5800
|
+
"@vitest/coverage-v8": {
|
|
5801
|
+
"optional": true
|
|
5802
|
+
},
|
|
5803
|
+
"@vitest/ui": {
|
|
5804
|
+
"optional": true
|
|
5805
|
+
},
|
|
5806
|
+
"happy-dom": {
|
|
5807
|
+
"optional": true
|
|
5808
|
+
},
|
|
5809
|
+
"jsdom": {
|
|
5810
|
+
"optional": true
|
|
5811
|
+
},
|
|
5812
|
+
"vite": {
|
|
5813
|
+
"optional": false
|
|
5814
|
+
}
|
|
5815
|
+
}
|
|
5816
|
+
},
|
|
5817
|
+
"plugins/cloudflare/mcp/node_modules/vitest/node_modules/@vitest/mocker": {
|
|
5818
|
+
"version": "4.1.10",
|
|
5819
|
+
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz",
|
|
5820
|
+
"integrity": "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==",
|
|
5821
|
+
"dev": true,
|
|
5822
|
+
"license": "MIT",
|
|
5823
|
+
"dependencies": {
|
|
5824
|
+
"@vitest/spy": "4.1.10",
|
|
5825
|
+
"estree-walker": "^3.0.3",
|
|
5826
|
+
"magic-string": "^0.30.21"
|
|
5827
|
+
},
|
|
5828
|
+
"funding": {
|
|
5829
|
+
"url": "https://opencollective.com/vitest"
|
|
5830
|
+
},
|
|
5831
|
+
"peerDependencies": {
|
|
5832
|
+
"msw": "^2.4.9",
|
|
5833
|
+
"vite": "^6.0.0 || ^7.0.0 || ^8.0.0"
|
|
5834
|
+
},
|
|
5835
|
+
"peerDependenciesMeta": {
|
|
5836
|
+
"msw": {
|
|
5837
|
+
"optional": true
|
|
5838
|
+
},
|
|
5839
|
+
"vite": {
|
|
5840
|
+
"optional": true
|
|
5841
|
+
}
|
|
5622
5842
|
}
|
|
5623
5843
|
},
|
|
5624
5844
|
"plugins/connector/mcp": {
|
|
@@ -6395,6 +6615,18 @@
|
|
|
6395
6615
|
}
|
|
6396
6616
|
}
|
|
6397
6617
|
},
|
|
6618
|
+
"plugins/google/mcp": {
|
|
6619
|
+
"name": "@maxy/google",
|
|
6620
|
+
"version": "0.1.0",
|
|
6621
|
+
"dependencies": {
|
|
6622
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
6623
|
+
"zod": "^3.24.0"
|
|
6624
|
+
},
|
|
6625
|
+
"devDependencies": {
|
|
6626
|
+
"@types/node": "^22.0.0",
|
|
6627
|
+
"typescript": "^5.7.0"
|
|
6628
|
+
}
|
|
6629
|
+
},
|
|
6398
6630
|
"plugins/graph-viewer/mcp": {
|
|
6399
6631
|
"name": "@maxy/graph-viewer",
|
|
6400
6632
|
"version": "0.1.0",
|
|
@@ -6424,6 +6656,19 @@
|
|
|
6424
6656
|
"typescript": "^5.7.0"
|
|
6425
6657
|
}
|
|
6426
6658
|
},
|
|
6659
|
+
"plugins/ledger/mcp": {
|
|
6660
|
+
"name": "@maxy/ledger",
|
|
6661
|
+
"version": "0.1.0",
|
|
6662
|
+
"dependencies": {
|
|
6663
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
6664
|
+
"neo4j-driver": "^5.28.1"
|
|
6665
|
+
},
|
|
6666
|
+
"devDependencies": {
|
|
6667
|
+
"@types/node": "^22.0.0",
|
|
6668
|
+
"typescript": "^5.7.0",
|
|
6669
|
+
"vitest": "^4.1.2"
|
|
6670
|
+
}
|
|
6671
|
+
},
|
|
6427
6672
|
"plugins/memory/mcp": {
|
|
6428
6673
|
"name": "@maxy/memory",
|
|
6429
6674
|
"version": "0.1.0",
|
|
@@ -6491,6 +6736,19 @@
|
|
|
6491
6736
|
"vitest": "^4.1.2"
|
|
6492
6737
|
}
|
|
6493
6738
|
},
|
|
6739
|
+
"plugins/storage-broker/mcp": {
|
|
6740
|
+
"name": "@maxy/storage-broker",
|
|
6741
|
+
"version": "0.1.0",
|
|
6742
|
+
"dependencies": {
|
|
6743
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
6744
|
+
"zod": "^3.24.0"
|
|
6745
|
+
},
|
|
6746
|
+
"devDependencies": {
|
|
6747
|
+
"@types/node": "^22.0.0",
|
|
6748
|
+
"typescript": "^5.7.0",
|
|
6749
|
+
"vitest": "^4.1.7"
|
|
6750
|
+
}
|
|
6751
|
+
},
|
|
6494
6752
|
"plugins/tasks/mcp": {
|
|
6495
6753
|
"name": "@maxy/tasks",
|
|
6496
6754
|
"version": "0.1.0",
|
|
@@ -6531,6 +6789,18 @@
|
|
|
6531
6789
|
"vitest": "^4.1.2"
|
|
6532
6790
|
}
|
|
6533
6791
|
},
|
|
6792
|
+
"plugins/voice-mirror/mcp": {
|
|
6793
|
+
"name": "@maxy/voice-mirror-mcp",
|
|
6794
|
+
"version": "0.1.0",
|
|
6795
|
+
"dependencies": {
|
|
6796
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
6797
|
+
"neo4j-driver": "^5.28.1"
|
|
6798
|
+
},
|
|
6799
|
+
"devDependencies": {
|
|
6800
|
+
"@types/node": "^22.0.0",
|
|
6801
|
+
"typescript": "^5.7.0"
|
|
6802
|
+
}
|
|
6803
|
+
},
|
|
6534
6804
|
"plugins/waitlist/mcp": {
|
|
6535
6805
|
"name": "@maxy/waitlist",
|
|
6536
6806
|
"version": "0.1.0",
|
|
@@ -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:103d5688cd9255611a9bf233effbaf7ffd8b45afa48b26d4f92b86febcfac1f5
|
|
5
5
|
brand: maxy-code
|
|
6
6
|
product-name: Maxy
|
|
7
7
|
---
|
|
@@ -2237,26 +2237,33 @@ force Google's annual third-party security assessment. Calendar is only a
|
|
|
2237
2237
|
|
|
2238
2238
|
## Connecting an account
|
|
2239
2239
|
|
|
2240
|
-
`google-account-register`
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
`google-account-register-
|
|
2240
|
+
`google-account-register` resolves which of two routes applies to this install
|
|
2241
|
+
and returns one `instruction` field plus a `readback` directive. Relay the
|
|
2242
|
+
`instruction` to the user verbatim. Do not narrate both routes or decide between
|
|
2243
|
+
them yourself; the tool already chose.
|
|
2244
|
+
|
|
2245
|
+
The two routes behind that resolution:
|
|
2246
|
+
|
|
2247
|
+
**Auto-opened** (`path: "auto-open"`), when the install's own browser is
|
|
2248
|
+
reachable. Register opens the Google sign-in in it, so no link is handed over.
|
|
2249
|
+
The user signs in and approves there and the connection completes by itself. A
|
|
2250
|
+
backup link comes back in `consentUrl` for the rare case the page did not open
|
|
2251
|
+
in front of them.
|
|
2252
|
+
|
|
2253
|
+
**Paste** (`path: "paste"`), when no on-host browser is reachable, such as a
|
|
2254
|
+
browserless brand or a phone. Register returns a consent URL to relay. The user
|
|
2255
|
+
opens it, signs in, and approves; the loopback page then fails to load, which is
|
|
2256
|
+
expected, because the vendor app is a Desktop client that redirects to a
|
|
2257
|
+
loopback address the device cannot reach. The address bar still carries the
|
|
2258
|
+
code, so they copy the whole URL from it and pass it to
|
|
2259
|
+
`google-account-register-submit`. The tool pulls the code out of a whole URL, a
|
|
2260
|
+
bare code, a `code=...` fragment, or a value containing `%2F`.
|
|
2261
|
+
|
|
2262
|
+
Either way, read the outcome back with `google-account-register-poll`, per the
|
|
2263
|
+
result's `readback` field: `registered` names the connected email, `pending`
|
|
2264
|
+
means it has not completed, `expired` means the code timed out and register
|
|
2265
|
+
should be re-run. Do not tell the user they are connected before poll returns
|
|
2266
|
+
`registered`.
|
|
2260
2267
|
|
|
2261
2268
|
The register tool does not block and does not wait. A second register while one
|
|
2262
2269
|
is already live is refused rather than overwriting it; that refusal names how
|
|
@@ -144,3 +144,29 @@ describe('device binding', () => {
|
|
|
144
144
|
expect(text).toMatch(/accountId\s+TEXT NOT NULL DEFAULT ''/)
|
|
145
145
|
})
|
|
146
146
|
})
|
|
147
|
+
|
|
148
|
+
const portalJs = () => readFileSync(join(TEMPLATE, 'portal.js'), 'utf8')
|
|
149
|
+
const indexHtml = () => readFileSync(join(TEMPLATE, 'index.html'), 'utf8')
|
|
150
|
+
|
|
151
|
+
describe('login error surfacing and passcode reveal (Task 1872)', () => {
|
|
152
|
+
it('maps each auth failure to a distinct message, not one opaque string', () => {
|
|
153
|
+
const js = portalJs()
|
|
154
|
+
expect(js).not.toMatch(/That did not work\./)
|
|
155
|
+
expect(js).toContain('Too many attempts. Try again later.')
|
|
156
|
+
expect(js).toContain('Enter both your name and your passcode.')
|
|
157
|
+
expect(js).toContain('That name and passcode did not match.')
|
|
158
|
+
expect(js).toContain('Something went wrong. Please try again in a moment.')
|
|
159
|
+
expect(js).toContain('Could not reach the server. Check your connection and try again.')
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
it('logs the status and error on the auth failure path', () => {
|
|
163
|
+
expect(portalJs()).toMatch(/console\.error\(\s*'\[data-portal\] auth failed'/)
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
it('ships a reveal control bound to the passcode field', () => {
|
|
167
|
+
const html = indexHtml()
|
|
168
|
+
expect(html).toMatch(/id="dp-reveal"/)
|
|
169
|
+
expect(html).toMatch(/aria-controls="dp-passcode"/)
|
|
170
|
+
expect(portalJs()).toMatch(/dp-reveal/)
|
|
171
|
+
})
|
|
172
|
+
})
|
|
@@ -18,14 +18,22 @@
|
|
|
18
18
|
<label class="dp-label" for="dp-owner">Your name</label>
|
|
19
19
|
<input class="dp-input" id="dp-owner" name="owner" autocomplete="username" required />
|
|
20
20
|
<label class="dp-label" for="dp-passcode">Passcode</label>
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
<div class="dp-field">
|
|
22
|
+
<input
|
|
23
|
+
class="dp-input"
|
|
24
|
+
id="dp-passcode"
|
|
25
|
+
name="passcode"
|
|
26
|
+
type="password"
|
|
27
|
+
autocomplete="current-password"
|
|
28
|
+
required
|
|
29
|
+
/>
|
|
30
|
+
<button
|
|
31
|
+
type="button"
|
|
32
|
+
class="dp-reveal"
|
|
33
|
+
id="dp-reveal"
|
|
34
|
+
aria-controls="dp-passcode"
|
|
35
|
+
>Show passcode</button>
|
|
36
|
+
</div>
|
|
29
37
|
<button class="dp-btn" type="submit">Sign in</button>
|
|
30
38
|
</form>
|
|
31
39
|
|
|
@@ -178,3 +178,28 @@ body {
|
|
|
178
178
|
cursor: pointer;
|
|
179
179
|
text-align: left;
|
|
180
180
|
}
|
|
181
|
+
|
|
182
|
+
/* Passcode field with its reveal control. The passcode is transcribed out of
|
|
183
|
+
band, so being able to check what was typed is the point of the toggle.
|
|
184
|
+
Reuses existing variables and declares no new :root value, which
|
|
185
|
+
portal-brand-css.mjs would drop. */
|
|
186
|
+
.dp-field {
|
|
187
|
+
display: flex;
|
|
188
|
+
gap: 0.5rem;
|
|
189
|
+
align-items: stretch;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.dp-field .dp-input {
|
|
193
|
+
flex: 1;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.dp-reveal {
|
|
197
|
+
border: 1px solid var(--dp-rule);
|
|
198
|
+
border-radius: 0.375rem;
|
|
199
|
+
background: transparent;
|
|
200
|
+
color: var(--dp-muted);
|
|
201
|
+
padding: 0.375rem 0.625rem;
|
|
202
|
+
font: inherit;
|
|
203
|
+
cursor: pointer;
|
|
204
|
+
white-space: nowrap;
|
|
205
|
+
}
|
|
@@ -192,6 +192,13 @@
|
|
|
192
192
|
});
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
+
function authFailureMessage(status) {
|
|
196
|
+
if (status === 429) return 'Too many attempts. Try again later.';
|
|
197
|
+
if (status === 400) return 'Enter both your name and your passcode.';
|
|
198
|
+
if (status === 401) return 'That name and passcode did not match.';
|
|
199
|
+
return 'Something went wrong. Please try again in a moment.';
|
|
200
|
+
}
|
|
201
|
+
|
|
195
202
|
loginEl.addEventListener('submit', function (e) {
|
|
196
203
|
e.preventDefault();
|
|
197
204
|
say('Signing in…');
|
|
@@ -209,12 +216,12 @@
|
|
|
209
216
|
});
|
|
210
217
|
})
|
|
211
218
|
.then(function (res) {
|
|
212
|
-
if (res.s === 429) {
|
|
213
|
-
say('Too many attempts. Try again later.');
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
219
|
if (!res.d.ok) {
|
|
217
|
-
|
|
220
|
+
// The server returns the same denial for a wrong passcode and an
|
|
221
|
+
// unknown owner on purpose, so the message stays single and the
|
|
222
|
+
// console carries only the status class, never the reason.
|
|
223
|
+
console.error('[data-portal] auth failed', { status: res.s, error: res.d.error });
|
|
224
|
+
say(authFailureMessage(res.s));
|
|
218
225
|
return;
|
|
219
226
|
}
|
|
220
227
|
document.getElementById('dp-passcode').value = '';
|
|
@@ -223,11 +230,20 @@
|
|
|
223
230
|
say('');
|
|
224
231
|
return refresh();
|
|
225
232
|
})
|
|
226
|
-
.catch(function () {
|
|
227
|
-
|
|
233
|
+
.catch(function (err) {
|
|
234
|
+
console.error('[data-portal] auth failed', { status: 'network', error: err });
|
|
235
|
+
say('Could not reach the server. Check your connection and try again.');
|
|
228
236
|
});
|
|
229
237
|
});
|
|
230
238
|
|
|
239
|
+
var revealEl = document.getElementById('dp-reveal');
|
|
240
|
+
var passcodeInput = document.getElementById('dp-passcode');
|
|
241
|
+
revealEl.addEventListener('click', function () {
|
|
242
|
+
var revealed = passcodeInput.type === 'text';
|
|
243
|
+
passcodeInput.type = revealed ? 'password' : 'text';
|
|
244
|
+
revealEl.textContent = revealed ? 'Show passcode' : 'Hide passcode';
|
|
245
|
+
});
|
|
246
|
+
|
|
231
247
|
document.getElementById('dp-upload').addEventListener('submit', function (e) {
|
|
232
248
|
e.preventDefault();
|
|
233
249
|
var input = document.getElementById('dp-file');
|
|
@@ -11,26 +11,33 @@ force Google's annual third-party security assessment. Calendar is only a
|
|
|
11
11
|
|
|
12
12
|
## Connecting an account
|
|
13
13
|
|
|
14
|
-
`google-account-register`
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
`google-account-register-
|
|
14
|
+
`google-account-register` resolves which of two routes applies to this install
|
|
15
|
+
and returns one `instruction` field plus a `readback` directive. Relay the
|
|
16
|
+
`instruction` to the user verbatim. Do not narrate both routes or decide between
|
|
17
|
+
them yourself; the tool already chose.
|
|
18
|
+
|
|
19
|
+
The two routes behind that resolution:
|
|
20
|
+
|
|
21
|
+
**Auto-opened** (`path: "auto-open"`), when the install's own browser is
|
|
22
|
+
reachable. Register opens the Google sign-in in it, so no link is handed over.
|
|
23
|
+
The user signs in and approves there and the connection completes by itself. A
|
|
24
|
+
backup link comes back in `consentUrl` for the rare case the page did not open
|
|
25
|
+
in front of them.
|
|
26
|
+
|
|
27
|
+
**Paste** (`path: "paste"`), when no on-host browser is reachable, such as a
|
|
28
|
+
browserless brand or a phone. Register returns a consent URL to relay. The user
|
|
29
|
+
opens it, signs in, and approves; the loopback page then fails to load, which is
|
|
30
|
+
expected, because the vendor app is a Desktop client that redirects to a
|
|
31
|
+
loopback address the device cannot reach. The address bar still carries the
|
|
32
|
+
code, so they copy the whole URL from it and pass it to
|
|
33
|
+
`google-account-register-submit`. The tool pulls the code out of a whole URL, a
|
|
34
|
+
bare code, a `code=...` fragment, or a value containing `%2F`.
|
|
35
|
+
|
|
36
|
+
Either way, read the outcome back with `google-account-register-poll`, per the
|
|
37
|
+
result's `readback` field: `registered` names the connected email, `pending`
|
|
38
|
+
means it has not completed, `expired` means the code timed out and register
|
|
39
|
+
should be re-run. Do not tell the user they are connected before poll returns
|
|
40
|
+
`registered`.
|
|
34
41
|
|
|
35
42
|
The register tool does not block and does not wait. A second register while one
|
|
36
43
|
is already live is refused rather than overwriting it; that refusal names how
|