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.
- package/.github/.sync-metadata.json +203 -13
- package/ROADMAP.md +36 -35
- package/ServiceWorker.mjs +2 -2
- package/ai/examples/db-backup.mjs +33 -0
- package/ai/examples/db-restore.mjs +81 -0
- package/ai/examples/self-healing.mjs +123 -0
- package/ai/examples/smart-search.mjs +110 -0
- package/ai/examples/test-safety.mjs +63 -0
- package/ai/mcp/server/github-workflow/openapi.yaml +27 -17
- package/ai/mcp/server/github-workflow/services/HealthService.mjs +144 -138
- package/ai/mcp/server/github-workflow/services/IssueService.mjs +250 -151
- package/ai/mcp/server/github-workflow/services/LocalFileService.mjs +30 -30
- package/ai/mcp/server/github-workflow/services/PullRequestService.mjs +47 -117
- package/ai/mcp/server/github-workflow/services/queries/issueQueries.mjs +83 -23
- package/ai/mcp/server/github-workflow/services/queries/mutations.mjs +138 -99
- package/ai/mcp/server/github-workflow/services/queries/pullRequestQueries.mjs +32 -73
- package/ai/mcp/server/github-workflow/services/sync/MetadataManager.mjs +1 -1
- package/ai/mcp/server/github-workflow/services/toolService.mjs +1 -1
- package/ai/mcp/server/knowledge-base/config.mjs +27 -7
- package/ai/mcp/server/knowledge-base/services/ChromaManager.mjs +6 -4
- package/ai/mcp/server/knowledge-base/services/DatabaseLifecycleService.mjs +29 -11
- package/ai/mcp/server/knowledge-base/services/DatabaseService.mjs +12 -13
- package/ai/mcp/server/memory-core/config.mjs +33 -8
- package/ai/mcp/server/memory-core/mcp-stdio.mjs +0 -1
- package/ai/mcp/server/memory-core/services/ChromaManager.mjs +6 -4
- package/ai/mcp/server/memory-core/services/DatabaseLifecycleService.mjs +29 -11
- package/ai/mcp/server/memory-core/services/DatabaseService.mjs +9 -3
- package/ai/mcp/server/memory-core/services/SessionService.mjs +23 -16
- package/ai/mcp/server/toolService.mjs +6 -171
- package/ai/mcp/validation/OpenApiValidator.mjs +170 -0
- package/ai/sdk-manifest.md +105 -0
- package/ai/services.mjs +196 -0
- package/apps/colors/view/ViewportController.mjs +1 -1
- package/apps/portal/resources/data/blog.json +12 -0
- package/apps/portal/sitemap.xml +14 -14
- package/apps/portal/view/ViewportController.mjs +2 -2
- package/apps/portal/view/home/FooterContainer.mjs +1 -1
- package/apps/portal/view/learn/ContentComponent.mjs +3 -2
- package/apps/portal/view/learn/MainContainerStateProvider.mjs +2 -2
- package/apps/realworld/api/Base.mjs +5 -4
- package/apps/sharedcovid/view/MainContainerController.mjs +13 -3
- package/apps/shareddialog/childapps/shareddialog2/view/MainContainerController.mjs +6 -1
- package/apps/shareddialog/view/MainContainerController.mjs +13 -3
- package/buildScripts/buildAll.mjs +8 -8
- package/buildScripts/buildHighlightJs.mjs +20 -0
- package/examples/component/multiWindowCoronaGallery/ViewportController.mjs +1 -1
- package/examples/component/multiWindowHelix/ViewportController.mjs +1 -1
- package/examples/stateProvider/multiWindow/ViewportController.mjs +1 -1
- package/learn/blog/Gemini3_MCP_Contributor.md +179 -0
- package/package.json +6 -6
- package/src/DefaultConfig.mjs +2 -2
- package/src/Main.mjs +3 -1
- package/src/calendar/view/month/Component.mjs +3 -3
- package/src/calendar/view/week/Component.mjs +2 -2
- package/src/calendar/view/week/EventDragZone.mjs +4 -4
- package/src/calendar/view/week/plugin/DragDrop.mjs +2 -2
- package/src/component/Abstract.mjs +2 -1
- package/src/component/Base.mjs +2 -2
- package/src/component/Helix.mjs +14 -13
- package/src/controller/Application.mjs +18 -6
- package/src/dialog/Base.mjs +9 -9
- package/src/draggable/DragZone.mjs +1 -5
- package/src/grid/Body.mjs +5 -3
- package/src/main/addon/Stylesheet.mjs +12 -10
- package/src/manager/Component.mjs +2 -2
- package/src/menu/List.mjs +1 -1
- package/src/mixin/VdomLifecycle.mjs +1 -1
- package/src/plugin/Resizable.mjs +2 -2
- package/src/plugin/Responsive.mjs +5 -5
- package/src/selection/GalleryModel.mjs +2 -2
- package/src/selection/HelixModel.mjs +2 -6
- package/src/table/Body.mjs +5 -3
- package/src/table/header/Button.mjs +4 -4
- package/src/util/Css.mjs +2 -2
- package/src/util/HashHistory.mjs +4 -4
- package/src/util/HighlightJs.mjs +4 -4
- package/src/util/HighlightJsLineNumbers.mjs +1 -1
- package/src/util/Json.mjs +57 -0
- package/src/util/_export.mjs +2 -1
- package/src/worker/App.mjs +21 -22
- package/src/worker/Manager.mjs +3 -3
- package/test/playwright/setup.mjs +7 -3
- package/test/playwright/unit/vdom/table/Container.spec.mjs +10 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"lastSync": "2025-11-
|
|
3
|
-
"releasesLastFetched": "2025-11-
|
|
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-
|
|
2951
|
-
"contentHash": "
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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
|
|
5
|
+
## Vision: The "Thick Client" for AI Agents
|
|
6
6
|
|
|
7
|
-
Our core vision is to
|
|
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:
|
|
9
|
+
## Current Focus: The Agent OS (v11.x)
|
|
10
10
|
|
|
11
|
-
|
|
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
|
-
|
|
13
|
+
### 1. Architectural Enhancements (Code Execution Readiness)
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
**Goal:** Enable agents to import and use our intelligent services directly as libraries, without the MCP protocol overhead.
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
@@ -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
|
+
});
|