neo.mjs 11.6.1 → 11.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/.github/.sync-metadata.json +203 -13
  2. package/ROADMAP.md +36 -35
  3. package/ServiceWorker.mjs +2 -2
  4. package/ai/examples/db-backup.mjs +33 -0
  5. package/ai/examples/db-restore.mjs +81 -0
  6. package/ai/examples/self-healing.mjs +123 -0
  7. package/ai/examples/smart-search.mjs +110 -0
  8. package/ai/examples/test-safety.mjs +63 -0
  9. package/ai/mcp/server/github-workflow/openapi.yaml +27 -17
  10. package/ai/mcp/server/github-workflow/services/HealthService.mjs +144 -138
  11. package/ai/mcp/server/github-workflow/services/IssueService.mjs +250 -151
  12. package/ai/mcp/server/github-workflow/services/LocalFileService.mjs +30 -30
  13. package/ai/mcp/server/github-workflow/services/PullRequestService.mjs +47 -117
  14. package/ai/mcp/server/github-workflow/services/queries/issueQueries.mjs +83 -23
  15. package/ai/mcp/server/github-workflow/services/queries/mutations.mjs +138 -99
  16. package/ai/mcp/server/github-workflow/services/queries/pullRequestQueries.mjs +32 -73
  17. package/ai/mcp/server/github-workflow/services/sync/MetadataManager.mjs +1 -1
  18. package/ai/mcp/server/github-workflow/services/toolService.mjs +1 -1
  19. package/ai/mcp/server/knowledge-base/config.mjs +27 -7
  20. package/ai/mcp/server/knowledge-base/services/ChromaManager.mjs +6 -4
  21. package/ai/mcp/server/knowledge-base/services/DatabaseLifecycleService.mjs +29 -11
  22. package/ai/mcp/server/knowledge-base/services/DatabaseService.mjs +12 -13
  23. package/ai/mcp/server/memory-core/config.mjs +33 -8
  24. package/ai/mcp/server/memory-core/mcp-stdio.mjs +0 -1
  25. package/ai/mcp/server/memory-core/services/ChromaManager.mjs +6 -4
  26. package/ai/mcp/server/memory-core/services/DatabaseLifecycleService.mjs +29 -11
  27. package/ai/mcp/server/memory-core/services/DatabaseService.mjs +9 -3
  28. package/ai/mcp/server/memory-core/services/SessionService.mjs +23 -16
  29. package/ai/mcp/server/toolService.mjs +6 -171
  30. package/ai/mcp/validation/OpenApiValidator.mjs +170 -0
  31. package/ai/sdk-manifest.md +105 -0
  32. package/ai/services.mjs +196 -0
  33. package/apps/colors/view/ViewportController.mjs +1 -1
  34. package/apps/portal/resources/data/blog.json +12 -0
  35. package/apps/portal/sitemap.xml +14 -14
  36. package/apps/portal/view/ViewportController.mjs +2 -2
  37. package/apps/portal/view/home/FooterContainer.mjs +1 -1
  38. package/apps/portal/view/learn/ContentComponent.mjs +3 -2
  39. package/apps/portal/view/learn/MainContainerStateProvider.mjs +2 -2
  40. package/apps/realworld/api/Base.mjs +5 -4
  41. package/apps/sharedcovid/view/MainContainerController.mjs +13 -3
  42. package/apps/shareddialog/childapps/shareddialog2/view/MainContainerController.mjs +6 -1
  43. package/apps/shareddialog/view/MainContainerController.mjs +13 -3
  44. package/buildScripts/buildAll.mjs +8 -8
  45. package/buildScripts/buildHighlightJs.mjs +20 -0
  46. package/examples/component/multiWindowCoronaGallery/ViewportController.mjs +1 -1
  47. package/examples/component/multiWindowHelix/ViewportController.mjs +1 -1
  48. package/examples/stateProvider/multiWindow/ViewportController.mjs +1 -1
  49. package/learn/blog/Gemini3_MCP_Contributor.md +179 -0
  50. package/package.json +6 -6
  51. package/src/DefaultConfig.mjs +2 -2
  52. package/src/Main.mjs +3 -1
  53. package/src/calendar/view/month/Component.mjs +3 -3
  54. package/src/calendar/view/week/Component.mjs +2 -2
  55. package/src/calendar/view/week/EventDragZone.mjs +4 -4
  56. package/src/calendar/view/week/plugin/DragDrop.mjs +2 -2
  57. package/src/component/Abstract.mjs +2 -1
  58. package/src/component/Base.mjs +2 -2
  59. package/src/component/Helix.mjs +14 -13
  60. package/src/controller/Application.mjs +18 -6
  61. package/src/dialog/Base.mjs +9 -9
  62. package/src/draggable/DragZone.mjs +1 -5
  63. package/src/grid/Body.mjs +5 -3
  64. package/src/main/addon/Stylesheet.mjs +12 -10
  65. package/src/manager/Component.mjs +2 -2
  66. package/src/menu/List.mjs +1 -1
  67. package/src/mixin/VdomLifecycle.mjs +1 -1
  68. package/src/plugin/Resizable.mjs +2 -2
  69. package/src/plugin/Responsive.mjs +5 -5
  70. package/src/selection/GalleryModel.mjs +2 -2
  71. package/src/selection/HelixModel.mjs +2 -6
  72. package/src/table/Body.mjs +5 -3
  73. package/src/table/header/Button.mjs +4 -4
  74. package/src/util/Css.mjs +2 -2
  75. package/src/util/HashHistory.mjs +4 -4
  76. package/src/util/HighlightJs.mjs +4 -4
  77. package/src/util/HighlightJsLineNumbers.mjs +1 -1
  78. package/src/util/Json.mjs +57 -0
  79. package/src/util/_export.mjs +2 -1
  80. package/src/worker/App.mjs +21 -22
  81. package/src/worker/Manager.mjs +3 -3
  82. package/test/playwright/setup.mjs +7 -3
  83. package/test/playwright/unit/vdom/table/Container.spec.mjs +10 -5
@@ -1,6 +1,6 @@
1
1
  {
2
- "lastSync": "2025-11-19T17:12:23.427Z",
3
- "releasesLastFetched": "2025-11-19T17:12:23.443Z",
2
+ "lastSync": "2025-11-21T14:56:58.356Z",
3
+ "releasesLastFetched": "2025-11-21T14:56:58.358Z",
4
4
  "pushFailures": [],
5
5
  "issues": {
6
6
  "3789": {
@@ -2947,8 +2947,8 @@
2947
2947
  "state": "OPEN",
2948
2948
  "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7207.md",
2949
2949
  "closedAt": null,
2950
- "updatedAt": "2025-08-21T09:12:52Z",
2951
- "contentHash": "a8bcb47284f4bac7de24af5822c15293d786ee3d15aeb3cdbc7a860e258793cb"
2950
+ "updatedAt": "2025-11-20T02:50:06Z",
2951
+ "contentHash": "44197d9de81c04ca7273b1f7b8fd9d2c6307c01b84921332995b88f597d63497"
2952
2952
  },
2953
2953
  "7208": {
2954
2954
  "state": "CLOSED",
@@ -4443,7 +4443,7 @@
4443
4443
  },
4444
4444
  "7475": {
4445
4445
  "state": "CLOSED",
4446
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7475.md",
4446
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.6.1/issue-7475.md",
4447
4447
  "closedAt": "2025-11-19T14:00:20Z",
4448
4448
  "updatedAt": "2025-11-19T14:00:20Z",
4449
4449
  "contentHash": "63f2b1ecad67dc177957fcdf1d49ba1bb333782182f5112e3d362212ca90717b"
@@ -6578,59 +6578,241 @@
6578
6578
  },
6579
6579
  "7808": {
6580
6580
  "state": "CLOSED",
6581
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7808.md",
6581
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.6.1/issue-7808.md",
6582
6582
  "closedAt": "2025-11-19T13:42:11Z",
6583
6583
  "updatedAt": "2025-11-19T13:42:11Z",
6584
6584
  "contentHash": "80322765d7653cffa6f4618584533f6d57a2d26f7abea691ec49f48bf7098ffb"
6585
6585
  },
6586
6586
  "7809": {
6587
6587
  "state": "CLOSED",
6588
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7809.md",
6588
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.6.1/issue-7809.md",
6589
6589
  "closedAt": "2025-11-19T13:50:23Z",
6590
6590
  "updatedAt": "2025-11-19T13:50:23Z",
6591
6591
  "contentHash": "a3db5211c3b45f58631057867a40752869ccb0ca34f482f0f90ad4253abb5a68"
6592
6592
  },
6593
6593
  "7810": {
6594
6594
  "state": "CLOSED",
6595
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7810.md",
6595
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.6.1/issue-7810.md",
6596
6596
  "closedAt": "2025-11-19T13:59:16Z",
6597
6597
  "updatedAt": "2025-11-19T13:59:16Z",
6598
6598
  "contentHash": "38a2bccae1d13d569814d9310459d9e86c95cc24239edb25c95c4ec471a1aca9"
6599
6599
  },
6600
6600
  "7811": {
6601
6601
  "state": "CLOSED",
6602
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7811.md",
6602
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.6.1/issue-7811.md",
6603
6603
  "closedAt": "2025-11-19T14:41:08Z",
6604
6604
  "updatedAt": "2025-11-19T14:41:08Z",
6605
6605
  "contentHash": "bb15dfc6cd8d044c656e28c7219594827627e5cbd47b6e67b6c2dcec6bc9aee1"
6606
6606
  },
6607
6607
  "7812": {
6608
6608
  "state": "CLOSED",
6609
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7812.md",
6609
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.6.1/issue-7812.md",
6610
6610
  "closedAt": "2025-11-19T16:08:06Z",
6611
6611
  "updatedAt": "2025-11-19T16:08:06Z",
6612
6612
  "contentHash": "8f749255ff253ecbb0eef908fd2e5041796572fe1e62ccbdf153bd019efc691d"
6613
6613
  },
6614
6614
  "7813": {
6615
6615
  "state": "CLOSED",
6616
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7813.md",
6616
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.6.1/issue-7813.md",
6617
6617
  "closedAt": "2025-11-19T16:35:06Z",
6618
6618
  "updatedAt": "2025-11-19T16:35:06Z",
6619
6619
  "contentHash": "b84dae30b5f29ddc37260888b83f28c469a7a436ed0d1d5326ec962ec300872a"
6620
6620
  },
6621
6621
  "7814": {
6622
6622
  "state": "CLOSED",
6623
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7814.md",
6623
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.6.1/issue-7814.md",
6624
6624
  "closedAt": "2025-11-19T16:36:38Z",
6625
6625
  "updatedAt": "2025-11-19T16:36:38Z",
6626
6626
  "contentHash": "1acc0ebcfc01b35b16125a0d92168a745adebce428f298f889ec21db0dc48d9b"
6627
6627
  },
6628
6628
  "7815": {
6629
6629
  "state": "CLOSED",
6630
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7815.md",
6630
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.6.1/issue-7815.md",
6631
6631
  "closedAt": "2025-11-19T17:11:44Z",
6632
6632
  "updatedAt": "2025-11-19T17:11:44Z",
6633
6633
  "contentHash": "3e8c5b38bdd1fc594c52b8ff5b6fec479df097bf7e2672fb9519706df01c241a"
6634
+ },
6635
+ "7816": {
6636
+ "state": "CLOSED",
6637
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.6.1/issue-7816.md",
6638
+ "closedAt": "2025-11-19T17:27:04Z",
6639
+ "updatedAt": "2025-11-19T17:27:04Z",
6640
+ "contentHash": "7ac191448c99b6b6430583b7757c1c6fe4240ef0f11522330083a8aa8462b37f"
6641
+ },
6642
+ "7817": {
6643
+ "state": "CLOSED",
6644
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.7.0/issue-7817.md",
6645
+ "closedAt": "2025-11-19T18:17:37Z",
6646
+ "updatedAt": "2025-11-19T18:17:37Z",
6647
+ "contentHash": "71c9a696998f95cd1e356cb0c0ea76ff6d0d92f2f8a704b08d0484fe10ae8e48"
6648
+ },
6649
+ "7818": {
6650
+ "state": "CLOSED",
6651
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.7.0/issue-7818.md",
6652
+ "closedAt": "2025-11-20T01:03:35Z",
6653
+ "updatedAt": "2025-11-20T01:03:35Z",
6654
+ "contentHash": "c01fa0275da61ba7fc12e4cf6e0d46596f85fdbc98a4d790657489c806a76a38"
6655
+ },
6656
+ "7819": {
6657
+ "state": "CLOSED",
6658
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.7.0/issue-7819.md",
6659
+ "closedAt": "2025-11-20T09:38:58Z",
6660
+ "updatedAt": "2025-11-20T09:38:58Z",
6661
+ "contentHash": "67ad93d3a2aa24e7cd570075290aaf081a921648852ef1664a38edf5365a4b71"
6662
+ },
6663
+ "7820": {
6664
+ "state": "CLOSED",
6665
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.7.0/issue-7820.md",
6666
+ "closedAt": "2025-11-20T11:38:36Z",
6667
+ "updatedAt": "2025-11-20T11:38:36Z",
6668
+ "contentHash": "e4486d796a3dfe09e8dab2b3fb2181f688f3d9d36c35f6abbeb0ada7b5d57fad"
6669
+ },
6670
+ "7821": {
6671
+ "state": "CLOSED",
6672
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7821.md",
6673
+ "closedAt": "2025-11-20T15:19:02Z",
6674
+ "updatedAt": "2025-11-20T15:19:02Z",
6675
+ "contentHash": "3b72224d49c12aed46c913133ecea3d82e2edc65747d3876bad8723920fcdce7"
6676
+ },
6677
+ "7822": {
6678
+ "state": "CLOSED",
6679
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.7.0/issue-7822.md",
6680
+ "closedAt": "2025-11-20T13:09:13Z",
6681
+ "updatedAt": "2025-11-20T13:09:13Z",
6682
+ "contentHash": "068d57a5d1d1b0994fab8e3c56203bd3af841a1e6f4ddd4750a674779eafd52f"
6683
+ },
6684
+ "7823": {
6685
+ "state": "CLOSED",
6686
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7823.md",
6687
+ "closedAt": "2025-11-20T14:15:33Z",
6688
+ "updatedAt": "2025-11-20T14:15:33Z",
6689
+ "contentHash": "a699450f3a1dbf68836875bed7db7327b4ce080ebcc6d9da63f3c44f60e23d99"
6690
+ },
6691
+ "7824": {
6692
+ "state": "CLOSED",
6693
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7824.md",
6694
+ "closedAt": "2025-11-20T15:41:37Z",
6695
+ "updatedAt": "2025-11-20T15:41:37Z",
6696
+ "contentHash": "a9c350a3a9de6c12479a82f9e82d911cb7c6b41692a593efa9bff18a16da2d0a"
6697
+ },
6698
+ "7825": {
6699
+ "state": "CLOSED",
6700
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7825.md",
6701
+ "closedAt": "2025-11-20T19:49:56Z",
6702
+ "updatedAt": "2025-11-20T19:49:56Z",
6703
+ "contentHash": "63568805b3d7d58de4eab355c29fd23fcf9183378b7471182e362eb327064f09"
6704
+ },
6705
+ "7826": {
6706
+ "state": "CLOSED",
6707
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7826.md",
6708
+ "closedAt": "2025-11-20T19:59:40Z",
6709
+ "updatedAt": "2025-11-20T19:59:40Z",
6710
+ "contentHash": "efd0332c072ed87ced4d001228d0dbfd21e32b407b4800973a324f875a5ae451"
6711
+ },
6712
+ "7827": {
6713
+ "state": "CLOSED",
6714
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7827.md",
6715
+ "closedAt": "2025-11-20T20:36:45Z",
6716
+ "updatedAt": "2025-11-20T20:36:45Z",
6717
+ "contentHash": "924d0b9dcac96c47b018ca48da2bd646e89ab90430e8ea0a882a9c41b4327d4c"
6718
+ },
6719
+ "7828": {
6720
+ "state": "CLOSED",
6721
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7828.md",
6722
+ "closedAt": "2025-11-20T20:54:28Z",
6723
+ "updatedAt": "2025-11-20T20:54:28Z",
6724
+ "contentHash": "34e415adfa5f3377d33acdb2bda07dead40e21d36b2ee56b2a73511cfcc08eb3"
6725
+ },
6726
+ "7829": {
6727
+ "state": "CLOSED",
6728
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7829.md",
6729
+ "closedAt": "2025-11-20T21:06:42Z",
6730
+ "updatedAt": "2025-11-20T21:06:42Z",
6731
+ "contentHash": "1034e606c1ff95cddcc2d9bf52c9b634f67385937f03b1cbb4d8a931e63f9929"
6732
+ },
6733
+ "7831": {
6734
+ "state": "CLOSED",
6735
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7831.md",
6736
+ "closedAt": "2025-11-21T00:45:39Z",
6737
+ "updatedAt": "2025-11-21T00:45:39Z",
6738
+ "contentHash": "a3718a3a45aee9f50a10887fe778e372eedcfb73026aceed25de34fae47ced50"
6739
+ },
6740
+ "7832": {
6741
+ "state": "CLOSED",
6742
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7832.md",
6743
+ "closedAt": "2025-11-21T00:56:40Z",
6744
+ "updatedAt": "2025-11-21T00:56:40Z",
6745
+ "contentHash": "fbd4a3edb300d1f42f5a65293a3786e3d6b8b265041037bb52ccf4a2cc47df57"
6746
+ },
6747
+ "7833": {
6748
+ "state": "CLOSED",
6749
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7833.md",
6750
+ "closedAt": "2025-11-21T01:16:31Z",
6751
+ "updatedAt": "2025-11-21T01:16:31Z",
6752
+ "contentHash": "993c0db0bc1202a7a5aa28d693cecb2b295194e31d6fcf608f9ba925815920a0"
6753
+ },
6754
+ "7834": {
6755
+ "state": "OPEN",
6756
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7834.md",
6757
+ "closedAt": null,
6758
+ "updatedAt": "2025-11-21T10:03:49Z",
6759
+ "contentHash": "4202150b84e4d9d6dbfe1e524f246814ed085f4a1c710d81a5fbd1b7ec8dc1b9"
6760
+ },
6761
+ "7836": {
6762
+ "state": "CLOSED",
6763
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7836.md",
6764
+ "closedAt": "2025-11-21T02:14:24Z",
6765
+ "updatedAt": "2025-11-21T02:14:24Z",
6766
+ "contentHash": "aadc19fb6dd47f77f6c038ac8bb3a5cacd6b196b9cbc7066b3f1ace960790796"
6767
+ },
6768
+ "7837": {
6769
+ "state": "CLOSED",
6770
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7837.md",
6771
+ "closedAt": "2025-11-21T09:16:22Z",
6772
+ "updatedAt": "2025-11-21T09:16:22Z",
6773
+ "contentHash": "06fff55200a19805fc1fa90eb3bc0bee904f50473e47344abca8cbafa0ab2374"
6774
+ },
6775
+ "7838": {
6776
+ "state": "CLOSED",
6777
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7838.md",
6778
+ "closedAt": "2025-11-21T10:19:00Z",
6779
+ "updatedAt": "2025-11-21T10:19:00Z",
6780
+ "contentHash": "b2d5e8fe955395548cf29bbafb0f201abf882d911a7f908d311ddd2e332a8170"
6781
+ },
6782
+ "7839": {
6783
+ "state": "CLOSED",
6784
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7839.md",
6785
+ "closedAt": "2025-11-21T10:18:15Z",
6786
+ "updatedAt": "2025-11-21T10:18:15Z",
6787
+ "contentHash": "dfe129dcdea080a6a80636853f906a7a30ca83e1ee17a420b473b5ad8d938d8e"
6788
+ },
6789
+ "7840": {
6790
+ "state": "CLOSED",
6791
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7840.md",
6792
+ "closedAt": "2025-11-21T13:00:34Z",
6793
+ "updatedAt": "2025-11-21T13:00:34Z",
6794
+ "contentHash": "4213e43b1e848f61fdba176407fc6cac0f81846e3981413579953386e2fed0bb"
6795
+ },
6796
+ "7841": {
6797
+ "state": "CLOSED",
6798
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7841.md",
6799
+ "closedAt": "2025-11-21T13:35:47Z",
6800
+ "updatedAt": "2025-11-21T13:35:47Z",
6801
+ "contentHash": "afcbd5acd09c5617458c92fa48116ec00dbe4d6ad0b3bf15c972d7e19c429313"
6802
+ },
6803
+ "7842": {
6804
+ "state": "CLOSED",
6805
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7842.md",
6806
+ "closedAt": "2025-11-21T14:56:31Z",
6807
+ "updatedAt": "2025-11-21T14:56:31Z",
6808
+ "contentHash": "251fdd872486632ff3e0c85e8d27d51ba2e7dbe35a991db4047aa22f7d1f4d71"
6809
+ },
6810
+ "7843": {
6811
+ "state": "CLOSED",
6812
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7843.md",
6813
+ "closedAt": "2025-11-21T14:31:51Z",
6814
+ "updatedAt": "2025-11-21T14:31:52Z",
6815
+ "contentHash": "0100c9fbb6d34f79940ecf1482797eaece3a66c4477c3072cbbb94d6845ab655"
6634
6816
  }
6635
6817
  },
6636
6818
  "releases": {
@@ -6805,6 +6987,14 @@
6805
6987
  "11.6.0": {
6806
6988
  "publishedAt": "2025-11-19T13:05:08Z",
6807
6989
  "contentHash": "6b6aea3a75a479cee1638485cccccb22439737da4381d7926c2e9b7690f22c2f"
6990
+ },
6991
+ "11.6.1": {
6992
+ "publishedAt": "2025-11-19T17:38:22Z",
6993
+ "contentHash": "e55586ac67982eaae3cf90ff87d019e1df737cb7ee9494c4887637da854fac54"
6994
+ },
6995
+ "11.7.0": {
6996
+ "publishedAt": "2025-11-20T13:32:40Z",
6997
+ "contentHash": "4b57f29e22e6b77a204e2f00493d82117088c3beda7bf6614ae08b4fa59c0764"
6808
6998
  }
6809
6999
  }
6810
7000
  }
package/ROADMAP.md CHANGED
@@ -2,51 +2,52 @@
2
2
 
3
3
  This document outlines the high-level strategic direction and priorities for the Neo.mjs framework.
4
4
 
5
- ## Vision: The AI-Native Development Environment
5
+ ## Vision: The "Thick Client" for AI Agents
6
6
 
7
- Our core vision is to create a truly **AI-native development environment**. We are evolving the framework and its surrounding tooling to empower both human developers and AI agents to collaborate seamlessly on building complex, high-performance web applications.
7
+ Our core vision is to position Neo.mjs not just as a frontend framework, but as the **Operating System for AI Agents**. By leveraging our Node.js compatibility, robust class system, and "batteries included" architecture, we provide the structured "brain" (Context Engineering) that powers Anthropic's "Code Execution" pattern.
8
8
 
9
- ## Current Focus: Mastering Context Engineering
9
+ ## Current Focus: The Agent OS (v11.x)
10
10
 
11
- As framed in our blog post, "[AI-Native, Not AI-Assisted](learn/blog/ai-native-platform-answers-questions.md)", our current development focus is not on the UI framework itself, but on the **tooling and infrastructure** that powers our AI-native workflows.
11
+ We are currently evolving our AI infrastructure to move beyond simple "tool use" and into full **Code Execution**. This means transforming our internal tools into a robust SDK that agents can import and script against directly.
12
12
 
13
- We are focused on **Context Engineering**: the practice of building systems that provide AI agents with the most relevant, accurate, and comprehensive context to perform their tasks. This is the key to unlocking meaningful AI contributions and creating a smooth onboarding experience where agents can teach newcomers.
13
+ ### 1. Architectural Enhancements (Code Execution Readiness)
14
14
 
15
- Our work in this area is organized around several key initiatives:
15
+ **Goal:** Enable agents to import and use our intelligent services directly as libraries, without the MCP protocol overhead.
16
16
 
17
- ### 1. The AI Knowledge & Memory Foundation
18
- - **Goal:** To provide agents with comprehensive technical and historical context.
19
- - **Initiatives:**
20
- - **Knowledge Base:** Following the v10.9 release, our RAG system has been enhanced to include all tickets and release notes, providing even deeper project insight.
21
- - **Memory Core:** The initial implementation of the agent's long-term memory is complete, allowing it to learn from past interactions. ([Epic: AI Knowledge Evolution](https://github.com/neomjs/neo/issues/7316))
17
+ - **Decouple Services (Completed):** Refactored `ai/mcp/server/*/services/*.mjs` to be importable as a standalone "AI SDK" (`ai/services.mjs`).
18
+ - **Standardize Lifecycle (Completed):** Enforced the `initAsync()` and `ready()` pattern across AI services, ensuring robust handling of hybrid database states (managed vs. external) and eliminating race conditions.
19
+ - **The "Neo Sandbox":** Create a lightweight boilerplate/config that sets up the Neo.mjs core in a Node.js script (handling `globalThis`, `Worker` mocks if needed) so agents can instantly start scripting.
22
20
 
23
- ### 2. Professionalizing AI Tooling (The 3 MCP Servers)
24
- - **Goal:** To migrate our script-based tools into a robust, professional-grade server architecture.
25
- - **Initiatives:**
26
- - We are building **three distinct Model Context Protocol (MCP) servers**:
27
- 1. A **Knowledge Base Server** for querying project-specific source code and documentation.
28
- 2. A **Memory Core Server** for providing agents with long-term conversational memory.
29
- 3. A **GitHub Sync Server** to manage the 2-way synchronization of issues and PRs.
30
- - This involves moving the logic from the original scripts into a formal server architecture, making our tools more reliable and accessible to any AI agent. ([Epic: Architect AI Tooling as MCP](https://github.com/neomjs/neo/issues/7399))
21
+ ### 2. New "Code Execution" Capabilities
31
22
 
32
- ### 3. Expanding Agent Capabilities
33
- - **Goal:** To give agents powerful new ways to interact with the development environment.
34
- - **Initiatives:**
35
- - **Sighted Agent:** A major initiative to empower agents with the ability to "see" and interact with web pages via Chrome DevTools, enabling automated UI/UX testing and validation. ([Epic: Sighted Agent & DevTools Integration](https://github.com/neomjs/neo/issues/7385))
36
- - **GitHub CLI Integration:** Deeply integrating the GitHub CLI to allow agents to automate PR reviews, issue creation, and other crucial repository interactions. ([Epic: Integrate GitHub CLI Workflow](https://github.com/neomjs/neo/issues/7364))
23
+ **Goal:** Empower agents to write "smart" scripts that perform logic on the client side, reducing token usage and increasing accuracy.
37
24
 
38
- ### 4. Ensuring Code Quality & Stability
39
- - **Goal:** To maintain a stable and reliable codebase by enabling automated, scriptable testing for all contributors.
40
- - **Initiatives:**
41
- - **Mandatory Unit Testing:** We are migrating our entire test suite from a browser-based harness (Siesta) to a Node.js-based runner (Playwright). The primary benefit is that tests can be run with a simple `npm test` command. This empowers AI agents to verify their own changes, and it unlocks future CI/CD integration (e.g., pre-commit hooks) to automatically prevent regressions. ([Epic: Enhance Workflow with Mandatory Unit Testing](https://github.com/neomjs/neo/issues/7262))
25
+ - **"Smart" Search Scripts (Completed):** Verified with `ai/examples/smart-search.mjs`.
26
+ - **Automated Refactoring Agents:** Expose the `Neo.mjs` core (Component system, Config system) to the agent sandbox. Agents can instantiate components in Node.js to verify config validity using `Neo.create()` before committing code.
27
+ - **AI SDK Testing:** Implement a dedicated test suite for `ai/services.mjs` to ensure the stability of the Agent OS infrastructure, treating it as a first-class framework component.
42
28
 
43
- ### 5. Decoupling the AI Tooling Ecosystem
44
- - **Goal:** To evolve our general-purpose AI tools into standalone, reusable packages.
45
- - **Initiatives:**
46
- - **Publish MCP Servers to npm (v11.1):** Following the initial implementation for v11, the **Memory Core** and **GitHub Sync** MCP servers will be published as independent packages to npm. This will be achieved by adding dedicated `package.json` files to their sub-folders within the `neo` repository. The Knowledge Base server will remain internal as it is tightly coupled with this project's source code. This strategy allows the general-purpose servers to be consumed via `npx` by the broader AI development community.
29
+ ### 3. Visibility & Marketing ("Get Visibility")
47
30
 
48
- ---
31
+ **Goal:** Establish Neo.mjs as the premier framework for AI-Native development.
49
32
 
50
- ## The Path to v11.0.0
33
+ - **"Context Engineering" Case Study:** Publish technical content comparing raw file dumping (Context Tax) vs. our semantic inheritance chain injection.
34
+ - **"The Agent OS" Branding:** Update documentation to explicitly highlight "AI-Native" capabilities and "Architecture designed for Agent Code Execution."
35
+ - **"Self-Healing" Repository (Completed):** Developed `ai/examples/self-healing.mjs` where an agent uses `GitHubWorkflow` + `KnowledgeBase` to autonomously read a bug report, query context, plan, and propose a fix.
36
+
37
+ ## 4. Future: Decoupling the AI Tooling Ecosystem
38
+
39
+ **Goal:** Evolve our general-purpose AI tools into standalone, reusable packages.
40
+
41
+ - **Publish MCP Servers to npm:** The **Memory Core** and **GitHub Sync** MCP servers will be published as independent packages to npm. This will allow the general-purpose servers to be consumed via `npx` by the broader AI development community. The Knowledge Base server will remain internal as it is tightly coupled with this project's source code.
42
+ - **Sighted Agent Service:** Evolve the "Sighted Agent" concept into a `VisualService` within the AI SDK, allowing agents to programmatically capture screenshots, inspect the A11y tree, and run visual regression tests via Chrome DevTools.
43
+ - **Multi-Agent Coordination:** Explore patterns for multiple agents to collaborate on complex tasks using the Memory Core as a shared blackboard state.
44
+
45
+ ## 5. Architectural Evolution: Hybrid Distribution Model
46
+
47
+ **Goal:** Solve the tension between "Agent OS" (Direct SDK access) and "Standalone Tooling" (npx execution).
48
+
49
+ - **Strategy:** Split future AI capabilities into "Core" vs. "Server" packages.
50
+ - **Core (`@neomjs/ai-*-core`):** Pure logic libraries (Services) that can be imported directly by the Agent SDK for high-performance "Code Execution".
51
+ - **Server (`@neomjs/ai-*-server`):** MCP wrappers around the Core libraries for external consumption via `npx`.
52
+ - **Execution:** We will maintain the current monorepo structure to iterate quickly on the "Agent OS" SDK. Extraction into separate packages will occur only once the service APIs are stable. This ensures we don't lose the "Thick Client" performance advantage while eventually enabling broader ecosystem adoption.
51
53
 
52
- The completion of these foundational infrastructure projects will culminate in the `v11.0.0` release. The timing of this release is dependent on the progress made during Hacktoberfest and subsequent community contributions. After the event, we will assess the state of these epics to define a more concrete release schedule.
package/ServiceWorker.mjs CHANGED
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='11.6.1'
23
+ * @member {String} version='11.8.0'
24
24
  */
25
- version: '11.6.1'
25
+ version: '11.8.0'
26
26
  }
27
27
 
28
28
  /**
@@ -0,0 +1,33 @@
1
+ import {
2
+ Memory_DatabaseService,
3
+ Memory_LifecycleService,
4
+ Memory_ChromaManager
5
+ } from '../services.mjs';
6
+
7
+ async function main() {
8
+ console.log('💾 Starting Memory Core Backup...');
9
+
10
+ // 1. Initialize Services
11
+ console.log(' - Initializing Memory Core...');
12
+ await Memory_ChromaManager.ready();
13
+
14
+ // 2. Perform Export
15
+ console.log(' - Exporting memories and summaries...');
16
+ try {
17
+ const result = await Memory_DatabaseService.exportDatabase({
18
+ include: ['memories', 'summaries']
19
+ });
20
+ console.log(` ✅ ${result.message}`);
21
+ } catch (error) {
22
+ console.error(` ❌ Export failed: ${error.message}`);
23
+ process.exit(1);
24
+ }
25
+
26
+ console.log('✅ Backup complete.');
27
+ process.exit(0);
28
+ }
29
+
30
+ main().catch(err => {
31
+ console.error('Fatal Error:', err);
32
+ process.exit(1);
33
+ });
@@ -0,0 +1,81 @@
1
+ import {
2
+ Memory_DatabaseService,
3
+ Memory_LifecycleService,
4
+ Memory_ChromaManager
5
+ } from '../services.mjs';
6
+ import fs from 'fs/promises';
7
+ import path from 'path';
8
+ import { fileURLToPath } from 'url';
9
+
10
+ const __filename = fileURLToPath(import.meta.url);
11
+ const __dirname = path.dirname(__filename);
12
+
13
+ async function main() {
14
+ console.log('🔄 Starting Memory Core Restore...');
15
+
16
+ // 1. Initialize Services
17
+ console.log(' - Initializing Memory Core...');
18
+ await Memory_ChromaManager.ready();
19
+
20
+ // 2. Locate Backup Files
21
+ // We assume the backup script created them in dist/memory-backups and dist/session-backups
22
+ const memoryBackupDir = path.resolve(__dirname, '../../dist/memory-backups');
23
+ const sessionBackupDir = path.resolve(__dirname, '../../dist/session-backups');
24
+
25
+ async function findLatestBackup(dir, prefix) {
26
+ try {
27
+ const files = await fs.readdir(dir);
28
+ const backups = files
29
+ .filter(f => f.startsWith(prefix) && f.endsWith('.jsonl'))
30
+ .sort()
31
+ .reverse(); // Newest first
32
+ return backups.length > 0 ? path.join(dir, backups[0]) : null;
33
+ } catch (e) {
34
+ return null;
35
+ }
36
+ }
37
+
38
+ const memoryBackupFile = await findLatestBackup(memoryBackupDir, 'memory-backup');
39
+ const sessionBackupFile = await findLatestBackup(sessionBackupDir, 'summaries-backup');
40
+
41
+ if (!memoryBackupFile && !sessionBackupFile) {
42
+ console.error(' ❌ No backup files found.');
43
+ process.exit(1);
44
+ }
45
+
46
+ // 3. Restore Memories (Replace Mode)
47
+ if (memoryBackupFile) {
48
+ console.log(` - Restoring Memories from: ${path.basename(memoryBackupFile)}`);
49
+ try {
50
+ const result = await Memory_DatabaseService.importDatabase({
51
+ file: memoryBackupFile,
52
+ mode: 'replace'
53
+ });
54
+ console.log(` ✅ Imported ${result.imported} memories.`);
55
+ } catch (error) {
56
+ console.error(` ❌ Restore failed: ${error.message}`);
57
+ }
58
+ }
59
+
60
+ // 4. Restore Summaries (Replace Mode)
61
+ if (sessionBackupFile) {
62
+ console.log(` - Restoring Summaries from: ${path.basename(sessionBackupFile)}`);
63
+ try {
64
+ const result = await Memory_DatabaseService.importDatabase({
65
+ file: sessionBackupFile,
66
+ mode: 'replace'
67
+ });
68
+ console.log(` ✅ Imported ${result.imported} summaries.`);
69
+ } catch (error) {
70
+ console.error(` ❌ Restore failed: ${error.message}`);
71
+ }
72
+ }
73
+
74
+ console.log('✅ Restore complete.');
75
+ process.exit(0);
76
+ }
77
+
78
+ main().catch(err => {
79
+ console.error('Fatal Error:', err);
80
+ process.exit(1);
81
+ });
@@ -0,0 +1,123 @@
1
+ import {
2
+ KB_LifecycleService, KB_HealthService, KB_QueryService, KB_DatabaseService, KB_ChromaManager,
3
+ GH_IssueService,
4
+ Memory_Service, Memory_LifecycleService, Memory_ChromaManager
5
+ } from '../services.mjs';
6
+
7
+ /**
8
+ * Agent OS Demo: Self-Healing Repository
9
+ *
10
+ * This script demonstrates a fully autonomous agent workflow ("The Thick Client"):
11
+ * 1. Monitor: Scans GitHub for open bugs.
12
+ * 2. Understand: Uses the local Knowledge Base to analyze the codebase context.
13
+ * 3. Plan: Uses the Memory Core to persist its reasoning.
14
+ * 4. Act: Proposes a fix directly on the GitHub issue.
15
+ */
16
+
17
+ const TARGET_ISSUE_TITLE = '[Test] Button click event not firing on mobile';
18
+
19
+ async function main() {
20
+ console.log('🤖 Agent OS: Starting Self-Healing Routine...');
21
+
22
+ // --- Phase 1: Boot Sequence ---
23
+ console.log('\n[1] Boot Sequence: Initializing Services...');
24
+
25
+ // Start Knowledge Base
26
+ await KB_ChromaManager.ready(); // Ensure connection is active
27
+ console.log(' - Knowledge Base Service: Ready');
28
+
29
+ // Start Memory Core
30
+ await Memory_ChromaManager.ready(); // Ensure connection is active
31
+ console.log(' - Memory Core Service: Ready');
32
+
33
+ // Ensure KB content is loaded (embed if needed)
34
+ try { await KB_DatabaseService.embedKnowledgeBase(); } catch(e) {}
35
+
36
+ console.log('✅ System Fully Operational.');
37
+
38
+
39
+ // --- Phase 2: Monitor (GitHub) ---
40
+ console.log('\n[2] Monitor: Scanning for Issues...');
41
+
42
+ const issues = await GH_IssueService.listIssues({
43
+ state: 'open',
44
+ labels: 'bug',
45
+ limit: 100
46
+ });
47
+
48
+ const targetIssue = issues.issues.find(i => i.title === TARGET_ISSUE_TITLE);
49
+
50
+ if (!targetIssue) {
51
+ console.log(' - No matching test issue found. Exiting.');
52
+ process.exit(0);
53
+ }
54
+
55
+ console.log(` - Found Target: #${targetIssue.number} "${targetIssue.title}"`);
56
+ console.log(` - Body: "${targetIssue.body.replace(/\n/g, ' ').substring(0, 60)}"...`);
57
+
58
+
59
+ // --- Phase 3: Understand (Knowledge Base) ---
60
+ console.log('\n[3] Understand: Querying Knowledge Base...');
61
+
62
+ const query = `mobile button click event handler conflict ${targetIssue.body}`;
63
+ const docs = await KB_QueryService.queryDocuments({ query, type: 'all' });
64
+
65
+ const topResults = docs.results.slice(0, 3);
66
+ console.log(` - Analyzed ${docs.results.length} documents.`);
67
+ console.log(` - Top Context: ${topResults[0].source} (Score: ${topResults[0].score})`);
68
+
69
+
70
+ // --- Phase 4: Plan (Memory Core) ---
71
+ console.log('\n[4] Plan: Persisting Strategy to Memory...');
72
+
73
+ const plan = `
74
+ Issue #${targetIssue.number} reports mobile click failures.
75
+ KB suggests checking: ${topResults.map(r => r.source).join(', ')}.
76
+ Hypothesis: DomEvent manager might be double-firing or consuming touch events.
77
+ Action: Propose investigating DomEvent.mjs and Button/Base.mjs.
78
+ `;
79
+
80
+ await Memory_Service.addMemory({
81
+ prompt: `Fix bug #${targetIssue.number}: ${targetIssue.title}`,
82
+ thought: "Analyzed issue and retrieved context. Formulating fix proposal.",
83
+ response: plan,
84
+ sessionId: 'self-healing-demo-v1'
85
+ });
86
+ console.log(' - Strategy saved to long-term memory.');
87
+
88
+
89
+ // --- Phase 5: Report (GitHub) ---
90
+ console.log('\n[5] Report: Posting Solution...');
91
+
92
+ const commentBody = `
93
+ ### 🤖 Agent OS Analysis
94
+
95
+ I have analyzed this issue using the local Knowledge Base.
96
+
97
+ **Context Identified:**
98
+ ${topResults.map(r => `- \
99
+ ${r.source}\
100
+ `).join('\n')}
101
+
102
+ **Proposed Investigation:**
103
+ Based on the symptoms and the retrieved context, I recommend inspecting the event delegation logic in
104
+ DomEvent.mjs
105
+ . The search results indicate potential overlaps between touch and click handling in the mobile viewports.
106
+
107
+ *This comment was generated autonomously by the Neo.mjs Agent OS.*
108
+ `;
109
+
110
+ await GH_IssueService.createComment({
111
+ issue_number: targetIssue.number,
112
+ body: commentBody,
113
+ agent: 'Neo Agent OS'
114
+ });
115
+
116
+ console.log(`✅ Fix proposed on issue #${targetIssue.number}.`);
117
+ process.exit(0);
118
+ }
119
+
120
+ main().catch(err => {
121
+ console.error('Fatal Error:', err);
122
+ process.exit(1);
123
+ });