neo.mjs 11.4.0 → 11.6.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 (63) hide show
  1. package/.github/.sync-metadata.json +214 -17
  2. package/README.md +69 -54
  3. package/ServiceWorker.mjs +2 -2
  4. package/ai/mcp/server/github-workflow/config.mjs +89 -2
  5. package/ai/mcp/server/github-workflow/logger.mjs +1 -4
  6. package/ai/mcp/server/github-workflow/mcp-stdio.mjs +28 -0
  7. package/ai/mcp/server/github-workflow/services/IssueService.mjs +17 -13
  8. package/ai/mcp/server/github-workflow/services/PullRequestService.mjs +2 -9
  9. package/ai/mcp/server/github-workflow/services/queries/issueQueries.mjs +1 -15
  10. package/ai/mcp/server/github-workflow/services/queries/pullRequestQueries.mjs +1 -8
  11. package/ai/mcp/server/github-workflow/services/sync/IssueSyncer.mjs +13 -5
  12. package/ai/mcp/server/knowledge-base/config.mjs +89 -2
  13. package/ai/mcp/server/knowledge-base/logger.mjs +1 -4
  14. package/ai/mcp/server/knowledge-base/mcp-stdio.mjs +28 -0
  15. package/ai/mcp/server/memory-core/config.mjs +89 -2
  16. package/ai/mcp/server/memory-core/logger.mjs +1 -4
  17. package/ai/mcp/server/memory-core/mcp-stdio.mjs +28 -0
  18. package/ai/mcp/server/memory-core/openapi.yaml +9 -2
  19. package/ai/mcp/server/memory-core/services/HealthService.mjs +5 -1
  20. package/ai/mcp/server/memory-core/services/MemoryService.mjs +5 -0
  21. package/ai/mcp/server/memory-core/services/SessionService.mjs +9 -1
  22. package/apps/portal/service/Seo.mjs +1 -1
  23. package/apps/portal/sitemap.xml +8 -8
  24. package/apps/portal/view/ViewportController.mjs +1 -5
  25. package/apps/portal/view/home/FooterContainer.mjs +1 -1
  26. package/apps/portal/view/learn/ContentComponent.mjs +6 -9
  27. package/apps/portal/view/learn/ContentTreeList.mjs +1 -1
  28. package/buildScripts/buildAll.mjs +15 -10
  29. package/buildScripts/buildHighlightJs.mjs +79 -0
  30. package/buildScripts/createApp.mjs +10 -9
  31. package/buildScripts/createAppMinimal.mjs +17 -15
  32. package/buildScripts/webpack/development/webpack.config.main.mjs +3 -1
  33. package/buildScripts/webpack/production/webpack.config.main.mjs +3 -1
  34. package/learn/benefits/ConfigSystem.md +1 -1
  35. package/package.json +3 -3
  36. package/resources/scss/src/util/HighlightJs.scss +127 -0
  37. package/resources/scss/src/util/HighlightJsLineNumbers.scss +33 -0
  38. package/resources/scss/theme-dark/util/HighlightJs.scss +21 -0
  39. package/resources/scss/theme-dark/util/HighlightJsLineNumbers.scss +6 -0
  40. package/resources/scss/theme-light/util/HighlightJs.scss +21 -0
  41. package/resources/scss/theme-light/util/HighlightJsLineNumbers.scss +6 -0
  42. package/resources/scss/theme-neo-light/util/HighlightJs.scss +21 -0
  43. package/resources/scss/theme-neo-light/util/HighlightJsLineNumbers.scss +6 -0
  44. package/src/DefaultConfig.mjs +5 -5
  45. package/src/Main.mjs +8 -2
  46. package/src/controller/Application.mjs +34 -11
  47. package/src/core/Base.mjs +1 -1
  48. package/src/core/IdGenerator.mjs +3 -3
  49. package/src/data/Store.mjs +10 -1
  50. package/src/main/addon/ServerSideRendering.mjs +30 -0
  51. package/src/mixin/VdomLifecycle.mjs +11 -9
  52. package/src/util/HighlightJs.mjs +111 -0
  53. package/src/util/HighlightJsLineNumbers.mjs +102 -0
  54. package/src/worker/App.mjs +8 -0
  55. package/src/worker/Manager.mjs +18 -3
  56. package/apps/portal/resources/lib/highlight/CHANGES.md +0 -1739
  57. package/apps/portal/resources/lib/highlight/LICENSE +0 -24
  58. package/apps/portal/resources/lib/highlight/README.md +0 -186
  59. package/apps/portal/resources/lib/highlight/highlight.pack.js +0 -2
  60. package/apps/portal/resources/lib/highlightjs-custom-dark-theme.css +0 -120
  61. package/apps/portal/resources/lib/highlightjs-custom-github-theme.css +0 -136
  62. package/test/playwright/mcp/github-workflow/ghIntegrationGate.spec.mjs +0 -13
  63. package/test/playwright/mcp/github-workflow/test-support/ghGate.mjs +0 -34
@@ -1,6 +1,6 @@
1
1
  {
2
- "lastSync": "2025-11-15T13:00:05.810Z",
3
- "releasesLastFetched": "2025-11-15T13:00:05.820Z",
2
+ "lastSync": "2025-11-19T12:40:24.603Z",
3
+ "releasesLastFetched": "2025-11-19T12:40:24.607Z",
4
4
  "pushFailures": [],
5
5
  "issues": {
6
6
  "3789": {
@@ -2905,22 +2905,22 @@
2905
2905
  "state": "OPEN",
2906
2906
  "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7201.md",
2907
2907
  "closedAt": null,
2908
- "updatedAt": "2025-08-20T22:03:47Z",
2909
- "contentHash": "4ed31377c174df448e0d3c759c725c128a643ce365d0505d1d33e7c65df65d68"
2908
+ "updatedAt": "2025-11-19T02:51:55Z",
2909
+ "contentHash": "84055c05b54b8a110659db99e65891a4b297b65deea3a1e3116ed9040e8cbf68"
2910
2910
  },
2911
2911
  "7202": {
2912
2912
  "state": "OPEN",
2913
2913
  "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7202.md",
2914
2914
  "closedAt": null,
2915
- "updatedAt": "2025-08-20T22:04:45Z",
2916
- "contentHash": "d96fb624b486c0e8d464d18d24cd32dca160348879f6d39cc04455aaf65af6fe"
2915
+ "updatedAt": "2025-11-19T02:51:53Z",
2916
+ "contentHash": "9b5f31e856dce32044aa9a4677bb5d08278ef0bb9d3761d9de36706c5e134c73"
2917
2917
  },
2918
2918
  "7203": {
2919
2919
  "state": "OPEN",
2920
2920
  "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7203.md",
2921
2921
  "closedAt": null,
2922
- "updatedAt": "2025-08-20T22:05:23Z",
2923
- "contentHash": "4c86d6b3e5537a64761e3814561da243ddfc4fb67ef2aefd79d96c7e6056f01b"
2922
+ "updatedAt": "2025-11-19T02:51:52Z",
2923
+ "contentHash": "33ccf238fd6d2b8036942aff6fa53da3f5cec7972746fefe14c869f033863565"
2924
2924
  },
2925
2925
  "7204": {
2926
2926
  "state": "CLOSED",
@@ -2933,15 +2933,15 @@
2933
2933
  "state": "OPEN",
2934
2934
  "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7205.md",
2935
2935
  "closedAt": null,
2936
- "updatedAt": "2025-08-20T22:06:37Z",
2937
- "contentHash": "fa4824f43e6ddf946ca9f7158395bb57d43c2b98952b8d5c046b613945ecc201"
2936
+ "updatedAt": "2025-11-19T02:51:51Z",
2937
+ "contentHash": "db6e3283cd8bf5b81c06c3840b3de1e873695cb0601d8f8b290b3d708472a4c1"
2938
2938
  },
2939
2939
  "7206": {
2940
2940
  "state": "OPEN",
2941
2941
  "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7206.md",
2942
2942
  "closedAt": null,
2943
- "updatedAt": "2025-08-20T22:34:24Z",
2944
- "contentHash": "a0a6a099dcc8e36c735c3d33e4206a51ca2fe6b7ecb58ab1db8ebe9532c579aa"
2943
+ "updatedAt": "2025-11-19T02:51:49Z",
2944
+ "contentHash": "aec7dffe23f3362bb0e0d473cbf0e45053e19b94c7a90288b8d8a5e5a05627f4"
2945
2945
  },
2946
2946
  "7207": {
2947
2947
  "state": "OPEN",
@@ -3239,7 +3239,7 @@
3239
3239
  },
3240
3240
  "7249": {
3241
3241
  "state": "CLOSED",
3242
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7249.md",
3242
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.4.0/issue-7249.md",
3243
3243
  "closedAt": "2025-11-15T09:45:18Z",
3244
3244
  "updatedAt": "2025-11-15T09:45:18Z",
3245
3245
  "contentHash": "4036e122ae18e253a64675831ea5c0ec2c585f7ac826a4e6373781763bebcfd3"
@@ -4541,7 +4541,7 @@
4541
4541
  },
4542
4542
  "7489": {
4543
4543
  "state": "CLOSED",
4544
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7489.md",
4544
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.4.0/issue-7489.md",
4545
4545
  "closedAt": "2025-11-15T09:44:33Z",
4546
4546
  "updatedAt": "2025-11-15T09:44:33Z",
4547
4547
  "contentHash": "423007a56532f4d57142bb685125f9f5e7bf1a3749370d1c7267cc945e48d37c"
@@ -6361,24 +6361,213 @@
6361
6361
  },
6362
6362
  "7775": {
6363
6363
  "state": "CLOSED",
6364
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7775.md",
6364
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.4.0/issue-7775.md",
6365
6365
  "closedAt": "2025-11-15T09:41:42Z",
6366
6366
  "updatedAt": "2025-11-15T09:41:42Z",
6367
6367
  "contentHash": "4657193d7084aa82709796c45c1b3a0f5d06d14ef9fa6f1d7d4941a8d744325f"
6368
6368
  },
6369
6369
  "7776": {
6370
6370
  "state": "CLOSED",
6371
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7776.md",
6371
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.4.0/issue-7776.md",
6372
6372
  "closedAt": "2025-11-15T12:30:46Z",
6373
6373
  "updatedAt": "2025-11-15T12:30:46Z",
6374
6374
  "contentHash": "09aa6166ff62f457cdad47c69025b57d0843e0f6f17840ddc1138293cdeb1ad3"
6375
6375
  },
6376
6376
  "7777": {
6377
6377
  "state": "CLOSED",
6378
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7777.md",
6378
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.4.0/issue-7777.md",
6379
6379
  "closedAt": "2025-11-15T12:51:55Z",
6380
6380
  "updatedAt": "2025-11-15T12:51:55Z",
6381
6381
  "contentHash": "0946c291adc1caa5adf38c109ab8f0be915fc7d6a438fac4c39df4009122d73a"
6382
+ },
6383
+ "7778": {
6384
+ "state": "CLOSED",
6385
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7778.md",
6386
+ "closedAt": "2025-11-15T13:58:30Z",
6387
+ "updatedAt": "2025-11-15T13:58:30Z",
6388
+ "contentHash": "d1b22b9ce581d36f1e55d5829cadb6c1a02be1c7f4b1b94042f8169eeede2ffd"
6389
+ },
6390
+ "7780": {
6391
+ "state": "CLOSED",
6392
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7780.md",
6393
+ "closedAt": "2025-11-15T21:34:26Z",
6394
+ "updatedAt": "2025-11-18T08:55:06Z",
6395
+ "contentHash": "412e8c50b57f5f1fa5baf5375c7262bdd6bc2c814f6636258c5fb3d561959b0c"
6396
+ },
6397
+ "7781": {
6398
+ "state": "CLOSED",
6399
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7781.md",
6400
+ "closedAt": "2025-11-16T23:11:26Z",
6401
+ "updatedAt": "2025-11-16T23:11:26Z",
6402
+ "contentHash": "d386628f811df073e8633b11cf230bbbc6b05ec0ddee3f38f525f4549c3f5e8f"
6403
+ },
6404
+ "7782": {
6405
+ "state": "CLOSED",
6406
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7782.md",
6407
+ "closedAt": "2025-11-16T23:53:42Z",
6408
+ "updatedAt": "2025-11-16T23:53:42Z",
6409
+ "contentHash": "e89fc8842e0c7ff8b6c283cd241cd1da5910e3c182731806bcb19f9af8a7d089"
6410
+ },
6411
+ "7783": {
6412
+ "state": "CLOSED",
6413
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7783.md",
6414
+ "closedAt": "2025-11-17T18:57:49Z",
6415
+ "updatedAt": "2025-11-17T18:57:49Z",
6416
+ "contentHash": "f0d42030d5dc70178fc216a6c1d101a7f81a04e4451fe7c6beaa4182e3b9ba7a"
6417
+ },
6418
+ "7784": {
6419
+ "state": "CLOSED",
6420
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7784.md",
6421
+ "closedAt": "2025-11-17T20:21:21Z",
6422
+ "updatedAt": "2025-11-17T20:21:21Z",
6423
+ "contentHash": "ae86add823a749168646731a25f5c8fc984b731ddffa8096051c8252cd086801"
6424
+ },
6425
+ "7785": {
6426
+ "state": "CLOSED",
6427
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7785.md",
6428
+ "closedAt": "2025-11-17T20:26:06Z",
6429
+ "updatedAt": "2025-11-17T20:26:06Z",
6430
+ "contentHash": "5c828123f597d55567657e9cc2a5b5157b739d99d6119a05eccba1831b064f05"
6431
+ },
6432
+ "7786": {
6433
+ "state": "CLOSED",
6434
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7786.md",
6435
+ "closedAt": "2025-11-17T22:49:08Z",
6436
+ "updatedAt": "2025-11-17T22:49:08Z",
6437
+ "contentHash": "bcf1099b42f52268b76f5141c7fd8b6e934877666f5b597af5e6f00e51850ef2"
6438
+ },
6439
+ "7787": {
6440
+ "state": "CLOSED",
6441
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7787.md",
6442
+ "closedAt": "2025-11-17T23:34:42Z",
6443
+ "updatedAt": "2025-11-17T23:34:42Z",
6444
+ "contentHash": "37615a9e8021d0ad8129b7c1e559c8da590b9413315ebae2cb4538ee78875f50"
6445
+ },
6446
+ "7788": {
6447
+ "state": "CLOSED",
6448
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7788.md",
6449
+ "closedAt": "2025-11-18T20:07:27Z",
6450
+ "updatedAt": "2025-11-18T20:07:27Z",
6451
+ "contentHash": "a45ca7464c136a21c52cdf762822be8aaafd8e55e2815c8cfa3a77afccbfb813"
6452
+ },
6453
+ "7789": {
6454
+ "state": "CLOSED",
6455
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7789.md",
6456
+ "closedAt": "2025-11-18T14:15:59Z",
6457
+ "updatedAt": "2025-11-18T14:15:59Z",
6458
+ "contentHash": "ff283feabb89101e40a8e5f34038a9a4d8a58dd17151434d6a105b5bd4c9d4a2"
6459
+ },
6460
+ "7790": {
6461
+ "state": "CLOSED",
6462
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7790.md",
6463
+ "closedAt": "2025-11-18T12:12:48Z",
6464
+ "updatedAt": "2025-11-18T12:12:48Z",
6465
+ "contentHash": "67c62e4bc1eb83ef7743e14c18c6f203159ff73d3cde6f7d207412d9ee3d2735"
6466
+ },
6467
+ "7791": {
6468
+ "state": "CLOSED",
6469
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7791.md",
6470
+ "closedAt": "2025-11-18T19:27:35Z",
6471
+ "updatedAt": "2025-11-18T19:27:35Z",
6472
+ "contentHash": "e6904afb6e01c0a80f50e67e7716cd819f6f5dfb8d64eaa94c544148d9f5b50f"
6473
+ },
6474
+ "7793": {
6475
+ "state": "CLOSED",
6476
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7793.md",
6477
+ "closedAt": "2025-11-19T12:40:12Z",
6478
+ "updatedAt": "2025-11-19T12:40:12Z",
6479
+ "contentHash": "b79258b967d08e9ee3e10f30e79464c6d4ffcc5d308a601af2a321f28cf5389e"
6480
+ },
6481
+ "7794": {
6482
+ "state": "CLOSED",
6483
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7794.md",
6484
+ "closedAt": "2025-11-18T17:26:27Z",
6485
+ "updatedAt": "2025-11-18T17:26:27Z",
6486
+ "contentHash": "480c851b6513603987373430f75b3261f698fc399f6159f07f3b6e9d612cc11b"
6487
+ },
6488
+ "7795": {
6489
+ "state": "CLOSED",
6490
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7795.md",
6491
+ "closedAt": "2025-11-18T19:47:12Z",
6492
+ "updatedAt": "2025-11-18T19:47:13Z",
6493
+ "contentHash": "c2145fbd2c0b87f55dfbb035ff4f3cff0dbc1f719838c93098294e9996b4cb77"
6494
+ },
6495
+ "7796": {
6496
+ "state": "CLOSED",
6497
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.5.0/issue-7796.md",
6498
+ "closedAt": "2025-11-18T20:00:39Z",
6499
+ "updatedAt": "2025-11-18T20:00:39Z",
6500
+ "contentHash": "c0c068430f627292b356545c7f791f0b9256d8fec92a5e75a932d72984465813"
6501
+ },
6502
+ "7797": {
6503
+ "state": "CLOSED",
6504
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7797.md",
6505
+ "closedAt": "2025-11-19T09:54:38Z",
6506
+ "updatedAt": "2025-11-19T09:54:38Z",
6507
+ "contentHash": "7a6730c1ac4f027b62a63bedc58055ffeb0d00fbf0310fa16f1828db7b8ea085"
6508
+ },
6509
+ "7798": {
6510
+ "state": "CLOSED",
6511
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7798.md",
6512
+ "closedAt": "2025-11-19T01:56:15Z",
6513
+ "updatedAt": "2025-11-19T01:56:15Z",
6514
+ "contentHash": "b16c800b714244c0f5d33098e6bb13a2ef034ff7245675692d3deca454ab6973"
6515
+ },
6516
+ "7799": {
6517
+ "state": "CLOSED",
6518
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7799.md",
6519
+ "closedAt": "2025-11-19T01:58:16Z",
6520
+ "updatedAt": "2025-11-19T01:58:16Z",
6521
+ "contentHash": "1c206d2e26365960b9a9ca6e8cb188b23b1cd8027b2339ef3211faa82828b3df"
6522
+ },
6523
+ "7800": {
6524
+ "state": "CLOSED",
6525
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7800.md",
6526
+ "closedAt": "2025-11-19T02:04:02Z",
6527
+ "updatedAt": "2025-11-19T02:04:02Z",
6528
+ "contentHash": "e166fe317017b61f08d1ffb0e0f554c35dbf615ea28877a6ba4522ea2d374148"
6529
+ },
6530
+ "7801": {
6531
+ "state": "CLOSED",
6532
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7801.md",
6533
+ "closedAt": "2025-11-19T10:09:35Z",
6534
+ "updatedAt": "2025-11-19T10:09:35Z",
6535
+ "contentHash": "84eec3a5182f07ef575857227e50b0d799a28a354e9ff34798f64263a30532b8"
6536
+ },
6537
+ "7802": {
6538
+ "state": "CLOSED",
6539
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7802.md",
6540
+ "closedAt": "2025-11-19T10:59:33Z",
6541
+ "updatedAt": "2025-11-19T10:59:33Z",
6542
+ "contentHash": "356e92ddd1e6b1a8041263e7d001daed837eaa4d4b1883e4b8769e128f8bc176"
6543
+ },
6544
+ "7803": {
6545
+ "state": "CLOSED",
6546
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7803.md",
6547
+ "closedAt": "2025-11-19T11:08:40Z",
6548
+ "updatedAt": "2025-11-19T11:08:40Z",
6549
+ "contentHash": "5e272ed54318561523081c173d02c04775496f48d0587d1f760780efcc92ee46"
6550
+ },
6551
+ "7804": {
6552
+ "state": "CLOSED",
6553
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7804.md",
6554
+ "closedAt": "2025-11-19T11:18:52Z",
6555
+ "updatedAt": "2025-11-19T11:18:52Z",
6556
+ "contentHash": "9792b3df9bcaddd79ce2d286fccd4afc76f49c38af1716e92ba195c184d2f077"
6557
+ },
6558
+ "7805": {
6559
+ "state": "CLOSED",
6560
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7805.md",
6561
+ "closedAt": "2025-11-19T11:25:48Z",
6562
+ "updatedAt": "2025-11-19T11:25:48Z",
6563
+ "contentHash": "f57c7cba1ca5a122a8e0b885f2637fc596e393f9b0c8d2a2260ce25fa0b3cc26"
6564
+ },
6565
+ "7806": {
6566
+ "state": "CLOSED",
6567
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7806.md",
6568
+ "closedAt": "2025-11-19T12:33:43Z",
6569
+ "updatedAt": "2025-11-19T12:33:43Z",
6570
+ "contentHash": "816d05ae4087deba931e4a82d42619748cfc04cd9dd199e069ac9df3e901209b"
6382
6571
  }
6383
6572
  },
6384
6573
  "releases": {
@@ -6541,6 +6730,14 @@
6541
6730
  "11.3.0": {
6542
6731
  "publishedAt": "2025-11-14T15:35:01Z",
6543
6732
  "contentHash": "1ef00564052ebc80568c4677df4414fa38e922d02e251f43da9fd876562b11fb"
6733
+ },
6734
+ "11.4.0": {
6735
+ "publishedAt": "2025-11-15T13:10:59Z",
6736
+ "contentHash": "abcecbb0e46696a81dab5817adcabbf9a731dc7b0c839a6bdd5992908b88c2b1"
6737
+ },
6738
+ "11.5.0": {
6739
+ "publishedAt": "2025-11-18T20:28:02Z",
6740
+ "contentHash": "899bdb696e5a4f1e825e337e189e768fd6c4e5f68453e376b1e3d554644dea8b"
6544
6741
  }
6545
6742
  }
6546
6743
  }
package/README.md CHANGED
@@ -11,17 +11,16 @@
11
11
  <a href="./CONTRIBUTING.md"><img src="https://img.shields.io/badge/PRs-welcome-green.svg?logo=GitHub&logoColor=white" alt="PRs Welcome"></a>
12
12
  </p>
13
13
 
14
- # Build Ultra-Fast, Desktop-Like Web Apps
15
- 🚀 **Break Free from UI FreezesExperience True Multithreading & Uncompromised Responsiveness.**
14
+ # The AI-Native Platform for Ultra-Fast Web Apps
15
+ 🚀 **True Multithreading Meets Context EngineeringBuild Desktop-Class UIs with an AI Co-Developer.**
16
16
 
17
- 💻 ***Neo.mjs isn't just an upgrade it's a new operating system for the web. Where others optimize at the margins, we reinvented the engine.***
17
+ 💻 ***Neo.mjs is more than a framework; it's a new operating system for the web, architected for unparalleled performance and pioneering human-AI collaboration.***
18
18
 
19
- Imagine web applications that never jank, no matter how complex the logic, how many real-time updates they handle, or how
20
- many browser windows they span. Neo.mjs is engineered from the ground up to deliver **desktop-like fluidity and scalability**.
21
- **While it excels for Single Page Apps (SPAs), Neo.mjs is simply the best option for browser-based multi-window applications**,
22
- operating fundamentally different from traditional frameworks.
19
+ Imagine web applications that never jank, no matter how complex the logic, how many real-time updates they handle, or how many browser windows they span. Neo.mjs is engineered from the ground up to deliver **desktop-like fluidity and scalability**. **While it excels for Single Page Apps (SPAs), Neo.mjs is simply the best option for browser-based multi-window applications**, operating fundamentally different from traditional frameworks.
23
20
 
24
- By leveraging a **pioneering Off-Main-Thread (OMT) architecture**, Neo.mjs ensures your UI remains butter-smooth, even during computationally intensive tasks like complex data processing or advanced graphics rendering. The main thread is kept free for one purpose: **flawless user interactions and seamless DOM updates.**
21
+ By leveraging a **pioneering Off-Main-Thread (OMT) architecture**, Neo.mjs ensures your UI remains butter-smooth. The main thread is kept free for one purpose: **flawless user interactions and seamless DOM updates.**
22
+
23
+ But performance is only half the story. With v11, Neo.mjs becomes the world's first **AI-native** frontend platform, designed to be developed *with* AI agents as first-class partners in your workflow.
25
24
 
26
25
  <p align="center">
27
26
  <a href="https://youtu.be/pYfM28Pz6_0"><img height="316px" width="400px" src="https://raw.githubusercontent.com/neomjs/pages/master/resources_pub/images/neo33s.png" alt="Neo.mjs Performance Demo 1 (YouTube Video)"></a>
@@ -37,45 +36,51 @@ Have a question or want to connect with the community? We have two channels to h
37
36
  * **[⚡️ Slack (For Real-Time Chat)](https://join.slack.com/t/neomjs/shared_invite/zt-6c50ueeu-3E1~M4T9xkNnb~M_prEEOA):** Perfect for quick, real-time conversations. Please note that the free version's history is temporary (messages are deleted after 90 days).
38
37
 
39
38
  </br></br>
40
- ## 🚀 Why Choose Neo.mjs? Solving the Toughest UI Challenges
41
- Traditional single-threaded frontend frameworks often struggle with performance bottlenecks and UI freezes, especially for
42
- large-scale, data-intensive, or real-time applications. Neo.mjs offers a fundamentally different solution, designed for
43
- **uncompromising performance, enhanced security, and superior developer experience.**
44
-
45
- 1. **Eliminate UI Freezes with True Multithreading**:
46
- > *"The browser's main thread should be treated like a neurosurgeon: only perform precise, scheduled operations with zero distractions."*</br></br>
47
- Neo.mjs Core Philosophy
48
-
49
- Neo.mjs's OMT architecture inherently prevents UI freezes. With v10's optimized rendering pipeline, your UI will remain even *more*
50
- consistently responsive, even during intense data processing or complex graphics rendering. It achieves an astonishing
51
- rate of **over 40,000 delta updates per second** in optimized environments. This translates to an engine with vast untapped
52
- potential, limited only by user interaction, not the framework.
53
-
54
- 2. **Unmatched Developer Experience: Transpilation-Free ESM**:
55
- Say goodbye to complex build steps for development. Neo.mjs apps run **natively as ES Modules directly in the browser**.
56
- This means **zero builds or transpilations** in dev mode, offering instant reloads and an **unmatched debugging experience**.
57
- You modify code, and your app updates in real-time.
58
-
59
- 3. **Inherent Security by Design**:
60
- By prioritizing direct DOM API manipulation over string-based methods (like `innerHTML`), Neo.mjs fundamentally reduces
61
- the attack surface for vulnerabilities like Cross-Site Scripting (XSS), building a more robust and secure application from the ground up.
62
-
63
- 4. **Declarative, Consistent, & Reusable Architecture**:
64
- Neo.mjs's unique **unified class config system** allows you to define components, layouts, and logic in a clean, declarative,
65
- and highly consistent way. This significantly reduces boilerplate, improves maintainability, and makes complex UI composition surprisingly straightforward.
66
-
67
- 5. **Scalability for Enterprise & Beyond**:
68
- Whether building sophisticated enterprise dashboards, data-intensive Gen AI interfaces, or desktop-like multi-window applications,
69
- Neo.mjs's modular, worker-driven architecture effortlessly scales. Components are persistent, stateful instances that can be unmounted,
70
- moved, and even remounted across browser windows without losing their logic or state. This is key to preventing the "re-rendering madness"
71
- common in other frameworks.
39
+ ## 🚀 The AI-Native Development Platform
40
+
41
+ Neo.mjs v11 introduces a revolutionary approach to software development: **Context Engineering**. We've moved beyond simple "AI-assisted" coding to create a truly **AI-native** platform where AI agents are deeply integrated partners in the development process. This is made possible by three dedicated **Model Context Protocol (MCP) servers** that give agents the context they need to understand, build, and reason about your code.
42
+
43
+ This isn't just about generating code; it's about creating a self-aware development environment that accelerates velocity, improves quality, and enables a new level of human-AI collaboration.
44
+
45
+ <p align="center">
46
+ <img width="800px" src="https://raw.githubusercontent.com/neomjs/pages/master/resources_pub/website/blog/ContextEngineering.png" alt="Context Engineering Done Right" class="blog-image">
47
+ </p>
48
+
49
+ 1. **🧠 The Knowledge Base Server**: Gives agents a deep, semantic understanding of your project. Powered by ChromaDB and Gemini embeddings, it allows agents to perform semantic searches across your entire codebase, documentation, and historical tickets. An agent can ask, "How does VDOM diffing work?" and get the exact source files and architectural guides relevant to the *currently checked-out version*.
50
+
51
+ 2. **💾 The Memory Core Server**: Provides agents with persistent, long-term memory. Every interaction—prompt, thought process, and response—is stored, allowing the agent to learn from experience, recall past decisions, and maintain context across multiple sessions. This transforms the agent from a stateless tool into a true collaborator that grows with your project.
52
+
53
+ 3. **🤖 The GitHub Workflow Server**: Closes the loop by enabling agents to participate directly in your project's lifecycle. It provides tools for autonomous PR reviews, issue management, and bi-directional synchronization of GitHub issues into a local, queryable set of markdown files. This removes the human bottleneck in code review and project management.
54
+
55
+ This powerful tooling, co-created with AI agents, resulted in **resolving 388 tickets in just 6 weeks**. To learn more about this paradigm shift, read our blog post: **[388 Tickets in 6 Weeks: Context Engineering Done Right](./learn/blog/context-engineering-done-right.md)**.
72
56
 
73
57
  </br></br>
74
- ## 🚀 A New Era of Frontend Architecture
58
+ ## 💡 Why Choose Neo.mjs?
59
+
60
+ Traditional single-threaded frameworks struggle with performance bottlenecks, especially in large-scale, data-intensive applications. Neo.mjs offers a fundamentally different solution, designed for **uncompromising performance, AI-native productivity, and superior developer experience.**
61
+
62
+ 1. **Eliminate UI Freezes with True Multithreading**:
63
+ > *"The browser's main thread should be treated like a neurosurgeon: only perform precise, scheduled operations with zero distractions."*</br></br>
64
+ — Neo.mjs Core Philosophy
65
+
66
+ Neo.mjs's OMT architecture inherently prevents UI freezes. With our optimized rendering pipeline, your UI will remain consistently responsive, even during intense data processing. It achieves an astonishing rate of **over 40,000 delta updates per second** in optimized environments, potential, limited only by user interaction, not the platform.
75
67
 
76
- The v10 release marks a significant evolution of the Neo.mjs core, introducing a new functional component model and a revolutionary two-tier reactivity system. We've rebuilt the engine to provide an even more powerful and intuitive developer experience, making it simpler than ever to build complex, performant applications.
68
+ 2. **Unprecedented Velocity with an AI-Native Workflow**:
69
+ The integrated MCP servers provide a "context-rich" environment where AI agents can work alongside human developers. This enables autonomous code reviews, deep codebase analysis, and a shared understanding of project history, dramatically accelerating development and solving the "bus factor" problem for complex projects.
77
70
 
78
- To understand the depth of these changes and the philosophy behind them, we've published a five-part blog series that dives deep into the architecture of v10:
71
+ 3. **Build Desktop-Class, Multi-Window Applications**:
72
+ Neo.mjs is the premier solution for building complex, multi-window web applications like **trading platforms, browser-based IDEs, Outlook-style email clients, and multi-screen LLM interfaces**. Its shared worker architecture allows a single application instance to run across multiple browser windows, with real-time state synchronization and the ability to move components between windows seamlessly.
73
+
74
+ 4. **Unmatched Developer Experience: Transpilation-Free ESM**:
75
+ Say goodbye to complex build steps. Neo.mjs apps run **natively as ES Modules directly in the browser**. This means **zero builds or transpilation** in dev mode, offering instant reloads and an unparalleled debugging experience where what you write is what you debug.
76
+
77
+ 5. **Inherent Security by Design**:
78
+ By prioritizing direct DOM API manipulation over string-based methods (like `innerHTML`), Neo.mjs fundamentally reduces the attack surface for vulnerabilities like Cross-Site Scripting (XSS), building a more robust and secure application from the ground up.
79
+
80
+ </br></br>
81
+ ## 📚 Foundational Architecture: The Core Principles
82
+
83
+ The v10 release marked a significant evolution of the Neo.mjs core, introducing a new functional component model and a revolutionary two-tier reactivity system. These principles form the bedrock of the framework today. We've published a five-part blog series that dives deep into this architecture:
79
84
 
80
85
  1. **[A Frontend Love Story: Why the Strategies of Today Won't Build the Apps of Tomorrow](./learn/blog/v10-post1-love-story.md)**
81
86
  * *An introduction to the core problems in modern frontend development and the architectural vision of Neo.mjs.*
@@ -97,6 +102,22 @@ like a full calendar, carousels, and chart wrappers. All components are pre-buil
97
102
  multi-threaded architecture, significantly accelerating development and eliminating the complexity of integrating disparate
98
103
  external component libraries.
99
104
  </br></br>
105
+ ## A Platform at Scale: More Than Just a Library
106
+
107
+ To appreciate the scope of Neo.mjs, it's important to understand its scale. This is not a micro-library; it's a comprehensive, enterprise-ready platform representing over a decade of architectural investment. **Neo.mjs is an innovation factory.**
108
+
109
+ The stats below, from **October 2025**, provide a snapshot of the ecosystem. For a deeper dive, you can explore the full **[Codebase Overview](./learn/guides/fundamentals/CodebaseOverview.md)**.
110
+
111
+ - **~41,000 lines** of core platform source code
112
+ - **~33,000 lines** across hundreds of working examples and flagship applications
113
+ - **~11,000 lines** of production-grade theming
114
+ - **~6,000 lines** of dedicated AI-native infrastructure
115
+ - **~30,000 lines** of detailed JSDoc documentation
116
+
117
+ **Total: Over 130,000 lines of curated code and documentation.**
118
+
119
+ This is not a small library—it's a complete ecosystem with more source code than many established frameworks, designed for the most demanding use cases.
120
+ </br></br>
100
121
  ## 📊 Real-World Win: Crushing UI Lag in Action
101
122
 
102
123
  Imagine a developer building a stock trading app with live feeds updating every millisecond. Traditional frameworks often choke,
@@ -110,7 +131,7 @@ That’s Neo.mjs in action — solving problems others can’t touch.
110
131
  * **Persistent Component Instances**: Components maintain their state and logic even when their DOM is removed or moved.
111
132
  No more wasteful re-creations – just surgical, efficient updates.
112
133
 
113
- * **Functional Components & A Modern Hook System**: Embrace a modern, hook-based development style with `defineComponent`, `useConfig`, and `useEvent`. This new paradigm, built on top of our robust class system, offers a familiar and intuitive way to build components while benefiting from the unparalleled performance of our multi-threaded architecture. Best of all, it's free from the "memoization tax" (`useMemo`, `useCallback`) that plagues other frameworks.
134
+ * **Functional & Class-Based Components**: Neo.mjs offers two powerful component models. **Functional Components**, introduced more recently, provide an easier onboarding experience and a modern, hook-based development style (`defineComponent`, `useConfig`, `useEvent`), similar to other popular frameworks. They are ideal for simpler, more declarative UIs. For advanced use cases requiring granular control over VDOM changes and deeper integration with the framework's lifecycle, **Class-Based Components** offer superior power and flexibility, albeit with slightly more code overhead. Both models seamlessly interoperate, allowing you to choose the right tool for each part of your application while benefiting from the unparalleled performance of our multi-threaded architecture. Best of all, our functional components are free from the "memoization tax" (`useMemo`, `useCallback`) that plagues other frameworks.
114
135
 
115
136
  * **Reactive State Management**: Leveraging `Neo.state.Provider`, Neo.mjs offers natively integrated, hierarchical state management.
116
137
  Components declare their data needs via a concise `bind` config. These `bind` functions act as powerful inline formulas, allowing
@@ -130,17 +151,11 @@ That’s Neo.mjs in action — solving problems others can’t touch.
130
151
  from UI components for easier maintenance, testing, and team collaboration.
131
152
 
132
153
  * **Multi-Window & Single-Page Applications (SPAs)***: Beyond traditional SPAs, Neo.mjs excels at complex multi-window applications.
133
- Its unique architecture, powered by seamless cross-worker communication (enabled by `Neo.worker.mixin.RemoteMethodAccess`) and
134
- extensible Main Thread addons (`Neo.main.addon.*`), enables truly native-like, persistent experiences across browser windows,
135
- all without a native shell. This is made possible by the same efficient delta-based DOM update engine, which can surgically
136
- move and update components across window boundaries with unparalleled performance.
154
+ Its unique architecture, powered by seamless cross-worker communication and extensible Main Thread addons, enables truly native-like, persistent experiences across browser windows.
137
155
 
138
156
  * **No npm Dependency Hell**: Neo.mjs apps run with **zero runtime dependencies**, just a few dev dependencies for tooling.
139
157
  This means smaller bundles, fewer conflicts, and a simpler dependency graph.
140
158
 
141
- * **Cutting-Edge Use Cases**: Ideal for **data-intensive applications, real-time dashboards, web-based IDEs, banking
142
- applications, and complex multi-window Gen AI interfaces** where performance and responsiveness are non-negotiable.
143
-
144
159
  * **Unparalleled Debugging Experience**: Benefit from Neo.mjs's built-in debugging capabilities. Easily inspect the full component
145
160
  tree across workers, live-modify component configurations directly in the browser console, and observe real-time UI updates,
146
161
  all without complex tooling setup.
@@ -149,8 +164,6 @@ That’s Neo.mjs in action — solving problems others can’t touch.
149
164
 
150
165
  * **Async-Aware Component Lifecycle**: With the `initAsync()` lifecycle method, components can handle asynchronous setup (like fetching data or lazy-loading modules) *before* they are considered "ready." This eliminates entire classes of race conditions and UI flicker, allowing you to build complex, data-dependent components with confidence.
151
166
 
152
- * **AI-Native through Context Engineering**: We are pioneering **Context Engineering** to build the first framework architected to be developed *with* AI agents. Instead of just prompting, we are building a dynamic system to provide our AI partner with the right knowledge and tools at the right time. This includes a rich, queryable knowledge base and clear guidelines for both the [AI](./.github/AGENTS.md) and the [human developer](./.github/WORKING_WITH_AGENTS.md). This architectural discipline not only enables AI partnership but also results in a cleaner, more predictable, and more maintainable codebase. Get started with the **[AI Knowledge Base Quick Start Guide](./.github/AI_QUICK_START.md)**.
153
-
154
167
  <p align="center">
155
168
  <img src="./resources/images/workers-focus.svg" alt="Neo.mjs Worker Architecture Diagram - Shows Main Thread, App Worker, VDom Worker, Canvas Worker, Data Worker, Service Worker, Backend connections.">
156
169
  </p>
@@ -168,9 +181,10 @@ The true power of Neo.mjs lies in its foundational architectural choices, which
168
181
  | **Component Lifecycle** | **Stable & Persistent**: Instances are created once and persist through UI changes. Features a rich lifecycle with `construct`, `initAsync`, and `afterSetMounted`. | **React**: Ephemeral (functional components are re-executed on every render). **Vue/Angular**: More stable, but lack pre-ready async hooks for complex setup. | **Robust & Predictable**. `initAsync` solves async setup (data fetching, module loading) *before* the first render, preventing UI flicker. Persistence enables complex stateful apps and multi-window operations. |
169
182
  | **State Management** | **Surgical Subscriptions**: The integrated `StateProvider` allows components to subscribe *only* to the precise state slices they need, completely bypassing intermediate components. | **React**: Context API re-renders all consumers by default, requiring manual optimization. **Vue/Angular**: Optimized state managers (Pinia, NgRx) are still bound by the main thread. | **Scalable & Decoupled**. More performant for global state changes by default. Architecturally cleaner, avoiding props drilling and the performance traps of React's Context. |
170
183
  | **DOM Updates** | **Asymmetric & Off-Thread**: Simple, serializable JSON objects (blueprints) are sent to the VDOM worker for diffing. The Main Thread only receives and applies minimal, pre-calculated patches. | VDOM diffing and DOM manipulation are computationally expensive tasks that occur on the main thread, directly competing with user interactions. | **Faster, More Secure, and AI-Friendly**. Off-thread diffing is faster. Using direct DOM APIs instead of `innerHTML` is more secure. Simple JSON blueprints are trivial for AI to generate and manipulate. |
184
+ | **AI & Dev Tooling** | **Integrated AI-Native Platform**: Three dedicated MCP servers provide context engineering, semantic search, agent memory, and autonomous workflow automation. | **Disconnected Tooling**: Relies on external, disconnected tools (linters, IDE extensions, CI scripts). No built-in context awareness for AI agents. | **Unprecedented Developer Velocity**. Enables true human-AI collaboration, autonomous code review, and a self-aware development environment that solves the "bus factor" problem. |
171
185
  | **Dev Experience** | **Zero-Builds Development**: Native ES Modules run directly in the browser. No transpilation or bundling is needed for development. | **Build-Heavy**: Relies on tools like Vite, Webpack, or the Angular CLI, which add complexity, require source maps, and introduce delays. | **Unparalleled Simplicity & Debugging Clarity**. What you write is what you debug. Instant feedback and the absence of complex build toolchains lead to a faster, more intuitive workflow. |
172
186
 
173
- **The Bottom Line**: Where other frameworks optimize operations on the main thread, Neo.mjs moves them off the main thread entirely. This fundamental difference results in a framework that is not just faster, but architecturally more scalable, robust, and resilient to complexity.
187
+ **The Bottom Line**: Where other frameworks optimize operations on the main thread, Neo.mjs moves them off the main thread entirely. This fundamental difference results in a platform that is not just faster, but architecturally more scalable, robust, and resilient to complexity.
174
188
 
175
189
  </br></br>
176
190
  ## ⚙️ Declarative Class Configuration: Build Faster, Maintain Easier
@@ -246,6 +260,7 @@ Next steps:
246
260
  * Many more are included inside the repos [apps](https://github.com/neomjs/neo/tree/dev/apps)
247
261
  & [examples](https://github.com/neomjs/neo/tree/dev/examples) folders.
248
262
  * :blue_book: All Blog Posts are listed here: [Neo.mjs Blog](https://neomjs.com/dist/production/apps/portal/#/blog)
263
+ * :robot: Get started with the **[AI Knowledge Base Quick Start Guide](./.github/AI_QUICK_START.md)**.
249
264
 
250
265
  </br></br>
251
266
  ## 🧭 Vision & Roadmap
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.4.0'
23
+ * @member {String} version='11.6.0'
24
24
  */
25
- version: '11.4.0'
25
+ version: '11.6.0'
26
26
  }
27
27
 
28
28
  /**
@@ -1,6 +1,12 @@
1
+ import fs from 'fs/promises';
1
2
  import path from 'path';
3
+ import Base from '../../../../src/core/Base.mjs';
2
4
 
3
- const config = {
5
+ /**
6
+ * Default configuration object.
7
+ * Defines the structure and default values for the server configuration.
8
+ */
9
+ const defaultConfig = {
4
10
  /**
5
11
  * Global debug flag for all MCP servers.
6
12
  * @type {boolean}
@@ -171,4 +177,85 @@ const config = {
171
177
  }
172
178
  };
173
179
 
174
- export default config;
180
+ /**
181
+ * Configuration manager for the GitHub Workflow MCP server.
182
+ * Supports loading configuration from a custom file and merging with defaults.
183
+ * @class Neo.ai.mcp.server.github-workflow.Config
184
+ * @extends Neo.core.Base
185
+ * @singleton
186
+ */
187
+ class Config extends Base {
188
+ static config = {
189
+ /**
190
+ * @member {String} className='Neo.ai.mcp.server.github-workflow.Config'
191
+ * @protected
192
+ */
193
+ className: 'Neo.ai.mcp.server.github-workflow.Config',
194
+ /**
195
+ * @member {Boolean} singleton=true
196
+ * @protected
197
+ */
198
+ singleton: true
199
+ }
200
+
201
+ /**
202
+ * The current configuration object.
203
+ * Starts with defaults and can be updated via load().
204
+ * @member {Object} data
205
+ */
206
+ data = null;
207
+
208
+ /**
209
+ * Initializes the configuration object by deep cloning the defaults.
210
+ * @param {Object} config
211
+ */
212
+ construct(config) {
213
+ super.construct(config);
214
+ this.data = Neo.clone(defaultConfig, true);
215
+ }
216
+
217
+ /**
218
+ * Loads configuration from a JSON file and merges it with defaults.
219
+ * @param {string} filePath - The path to the configuration file.
220
+ * @returns {Promise<void>}
221
+ */
222
+ async load(filePath) {
223
+ if (!filePath) return;
224
+
225
+ try {
226
+ const absolutePath = path.resolve(filePath);
227
+ const ext = path.extname(absolutePath);
228
+ let customConfig;
229
+
230
+ if (ext === '.mjs' || ext === '.js') {
231
+ const module = await import(absolutePath);
232
+ customConfig = module.default;
233
+ } else {
234
+ const content = await fs.readFile(absolutePath, 'utf-8');
235
+ customConfig = JSON.parse(content);
236
+ }
237
+
238
+ // Deep merge custom config into the data object
239
+ Neo.merge(this.data, customConfig);
240
+
241
+ console.log(`[Config] Loaded custom configuration from ${absolutePath}`);
242
+
243
+ } catch (error) {
244
+ console.error(`[Config] Failed to load configuration from ${filePath}:`, error.message);
245
+ throw error;
246
+ }
247
+ }
248
+ }
249
+
250
+ const instance = Neo.setupClass(Config);
251
+
252
+ export default new Proxy(instance, {
253
+ get(target, prop, receiver) {
254
+ // 1. Prefer properties/methods on the instance itself (e.g. load, className)
255
+ if (Reflect.has(target, prop)) {
256
+ return Reflect.get(target, prop, receiver);
257
+ }
258
+ // 2. Fallback to the data object (e.g. owner, repo)
259
+ return target.data[prop];
260
+ }
261
+ });
@@ -6,12 +6,9 @@ import aiConfig from './config.mjs';
6
6
  */
7
7
  const logger = {};
8
8
 
9
- // Check for --debug flag in command line arguments
10
- const isDebugFlagSet = process.argv.includes('--debug');
11
-
12
9
  const createLogMethod = (level) => {
13
10
  return (...args) => {
14
- if (aiConfig.debug || isDebugFlagSet) {
11
+ if (aiConfig.debug) {
15
12
  console.error(`[${level.toUpperCase()}]`, ...args);
16
13
  }
17
14
  };