neo.mjs 11.11.0 → 11.12.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.
@@ -1,6 +1,6 @@
1
1
  {
2
- "lastSync": "2025-11-26T12:21:47.953Z",
3
- "releasesLastFetched": "2025-11-26T12:21:47.969Z",
2
+ "lastSync": "2025-11-29T11:15:42.912Z",
3
+ "releasesLastFetched": "2025-11-29T11:15:42.924Z",
4
4
  "pushFailures": [],
5
5
  "issues": {
6
6
  "3789": {
@@ -11506,59 +11506,66 @@
11506
11506
  },
11507
11507
  "7901": {
11508
11508
  "state": "CLOSED",
11509
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7901.md",
11509
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.11.0/issue-7901.md",
11510
11510
  "closedAt": "2025-11-25T14:42:12Z",
11511
11511
  "updatedAt": "2025-11-25T14:42:12Z",
11512
11512
  "contentHash": "df95d24ff0394a9df62f9e77df76da28e2e940c48c5e33dce4db074258f2ee63"
11513
11513
  },
11514
11514
  "7902": {
11515
11515
  "state": "CLOSED",
11516
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7902.md",
11516
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.11.0/issue-7902.md",
11517
11517
  "closedAt": "2025-11-25T15:33:44Z",
11518
11518
  "updatedAt": "2025-11-25T15:33:44Z",
11519
11519
  "contentHash": "e426d92a1d399f16a99e31e738480d93f3b8a0aeb087b700d54e679d54360819"
11520
11520
  },
11521
11521
  "7903": {
11522
11522
  "state": "CLOSED",
11523
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7903.md",
11523
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.11.0/issue-7903.md",
11524
11524
  "closedAt": "2025-11-25T16:16:35Z",
11525
11525
  "updatedAt": "2025-11-25T16:16:35Z",
11526
11526
  "contentHash": "d9b1081d45e5d217dca97175eb83bfea2931b2db0dd2273742eab9ce7b79dc41"
11527
11527
  },
11528
11528
  "7904": {
11529
11529
  "state": "CLOSED",
11530
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7904.md",
11530
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.11.0/issue-7904.md",
11531
11531
  "closedAt": "2025-11-25T17:29:44Z",
11532
11532
  "updatedAt": "2025-11-25T17:29:44Z",
11533
11533
  "contentHash": "b1cbc69a5455aa9cc284c8fca4eb777321bd3f7b1fa53737369940be50d4618f"
11534
11534
  },
11535
11535
  "7905": {
11536
11536
  "state": "CLOSED",
11537
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7905.md",
11537
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.11.0/issue-7905.md",
11538
11538
  "closedAt": "2025-11-25T16:58:34Z",
11539
11539
  "updatedAt": "2025-11-25T16:58:34Z",
11540
11540
  "contentHash": "19b77ac389380f988cffa09a9fe8275d941b945f1d0108be7910323e85dbccc2"
11541
11541
  },
11542
11542
  "7906": {
11543
11543
  "state": "CLOSED",
11544
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7906.md",
11544
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.11.0/issue-7906.md",
11545
11545
  "closedAt": "2025-11-25T17:12:28Z",
11546
11546
  "updatedAt": "2025-11-25T17:12:28Z",
11547
11547
  "contentHash": "3bc74d1d726307ce576f8fccdbacb955c37e7397c3e9455b6557c858f1403a2a"
11548
11548
  },
11549
11549
  "7907": {
11550
11550
  "state": "CLOSED",
11551
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7907.md",
11551
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.11.0/issue-7907.md",
11552
11552
  "closedAt": "2025-11-26T12:06:44Z",
11553
11553
  "updatedAt": "2025-11-26T12:06:44Z",
11554
11554
  "contentHash": "d90268f900a41a41cc260e28bc0706c4ebb58df375fda02078e96feb415642d3"
11555
11555
  },
11556
11556
  "7908": {
11557
11557
  "state": "CLOSED",
11558
- "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7908.md",
11558
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.11.0/issue-7908.md",
11559
11559
  "closedAt": "2025-11-26T12:16:41Z",
11560
11560
  "updatedAt": "2025-11-26T12:16:41Z",
11561
11561
  "contentHash": "e1743278c16039256ce4b5b1bf426954360b3932f0cd9c2b04d41ad8dd73c3e5"
11562
+ },
11563
+ "7910": {
11564
+ "state": "OPEN",
11565
+ "path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7910.md",
11566
+ "closedAt": null,
11567
+ "updatedAt": "2025-11-29T11:06:44Z",
11568
+ "contentHash": "7032459b4722cefc837924239ca8e5fe980aca20e14f651694839954d1cf21f5"
11562
11569
  }
11563
11570
  },
11564
11571
  "releases": {
@@ -12149,6 +12156,10 @@
12149
12156
  "11.10.0": {
12150
12157
  "publishedAt": "2025-11-24T14:55:45Z",
12151
12158
  "contentHash": "a8a57e77420ccf5b3c33c67f8378ebc4ee7e169d1bac62c051bf7900c9cef7ec"
12159
+ },
12160
+ "11.11.0": {
12161
+ "publishedAt": "2025-11-26T12:47:01Z",
12162
+ "contentHash": "a36a4eb6939c0210968c3e7bddb8225c14567b3e2941c7f2c6b70f656c9128b4"
12152
12163
  }
12153
12164
  }
12154
12165
  }
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.11.0'
23
+ * @member {String} version='11.12.0'
24
24
  */
25
- version: '11.11.0'
25
+ version: '11.12.0'
26
26
  }
27
27
 
28
28
  /**
@@ -166,7 +166,7 @@
166
166
  "@type": "CreativeWork",
167
167
  "name": "Neo.mjs v11.8.0: The Agent OS Release",
168
168
  "url": "https://github.com/neomjs/neo/releases/tag/v11.8.0",
169
- "datePublished": "2025-11-26",
169
+ "datePublished": "2025-11-29",
170
170
  "description": "Introduces standalone AI SDK with 'TypeScript without TypeScript' runtime safety (Zod + OpenAPI), enabling autonomous agent workflows. Includes self-healing repository proof-of-concept where agents monitor, analyze, and fix bugs without human intervention.",
171
171
  "keywords": ["agent OS", "code execution pattern", "autonomous agents", "self-healing repository", "runtime type safety", "typescript without typescript", "Zod validation"]
172
172
  },
@@ -32,119 +32,119 @@ For example, the Portal app is available at all four environment URLs, plus a fi
32
32
 
33
33
  ## main
34
34
 
35
- - [About Us](https://neomjs.com/#/about-us)
36
- - [Blog](https://neomjs.com/#/blog)
37
- - [Docs](https://neomjs.com/#/docs)
38
- - [Examples](https://neomjs.com/#/examples)
39
- - [Home](https://neomjs.com/#/home)
40
- - [Services](https://neomjs.com/#/services)
35
+ - [About Us](https://neomjs.com/about-us)
36
+ - [Blog](https://neomjs.com/blog)
37
+ - [Docs](https://neomjs.com/docs)
38
+ - [Examples](https://neomjs.com/examples)
39
+ - [Home](https://neomjs.com/home)
40
+ - [Services](https://neomjs.com/services)
41
41
 
42
42
  ## benefits
43
43
 
44
- - [Introduction](https://neomjs.com/#/learn/benefits/Introduction)
45
- - [Off the Main Thread](https://neomjs.com/#/learn/benefits/OffTheMainThread)
46
- - [4 Environments](https://neomjs.com/#/learn/benefits/FourEnvironments)
47
- - [Unified Config System](https://neomjs.com/#/learn/benefits/ConfigSystem)
48
- - [RPC Layer](https://neomjs.com/#/learn/benefits/RPCLayer)
49
- - [Extreme Speed](https://neomjs.com/#/learn/benefits/Speed)
50
- - [Multi-Window Applications](https://neomjs.com/#/learn/benefits/MultiWindow)
51
- - [Quick Application Development](https://neomjs.com/#/learn/benefits/Quick)
52
- - [Complexity and Effort](https://neomjs.com/#/learn/benefits/Effort)
53
- - [Forms Engine](https://neomjs.com/#/learn/benefits/FormsEngine)
54
- - [Features and Benefits Summary](https://neomjs.com/#/learn/benefits/Features)
44
+ - [Introduction](https://neomjs.com/learn/benefits/Introduction)
45
+ - [Off the Main Thread](https://neomjs.com/learn/benefits/OffTheMainThread)
46
+ - [4 Environments](https://neomjs.com/learn/benefits/FourEnvironments)
47
+ - [Unified Config System](https://neomjs.com/learn/benefits/ConfigSystem)
48
+ - [RPC Layer](https://neomjs.com/learn/benefits/RPCLayer)
49
+ - [Extreme Speed](https://neomjs.com/learn/benefits/Speed)
50
+ - [Multi-Window Applications](https://neomjs.com/learn/benefits/MultiWindow)
51
+ - [Quick Application Development](https://neomjs.com/learn/benefits/Quick)
52
+ - [Complexity and Effort](https://neomjs.com/learn/benefits/Effort)
53
+ - [Forms Engine](https://neomjs.com/learn/benefits/FormsEngine)
54
+ - [Features and Benefits Summary](https://neomjs.com/learn/benefits/Features)
55
55
 
56
56
  ## comparisons
57
57
 
58
- - [Overview](https://neomjs.com/#/learn/comparisons/Overview)
59
- - [Neo.mjs vs React.js](https://neomjs.com/#/learn/comparisons/NeoVsReact)
60
- - [Neo.mjs vs Angular](https://neomjs.com/#/learn/comparisons/NeoVsAngular)
61
- - [Neo.mjs vs Vue.js](https://neomjs.com/#/learn/comparisons/NeoVsVue)
62
- - [Neo.mjs vs Solid.js](https://neomjs.com/#/learn/comparisons/NeoVsSolid)
63
- - [Neo.mjs vs Next.js](https://neomjs.com/#/learn/comparisons/NeoVsNextJs)
64
- - [Neo.mjs vs Ext.js](https://neomjs.com/#/learn/comparisons/NeoVsExtJs)
58
+ - [Overview](https://neomjs.com/learn/comparisons/Overview)
59
+ - [Neo.mjs vs React.js](https://neomjs.com/learn/comparisons/NeoVsReact)
60
+ - [Neo.mjs vs Angular](https://neomjs.com/learn/comparisons/NeoVsAngular)
61
+ - [Neo.mjs vs Vue.js](https://neomjs.com/learn/comparisons/NeoVsVue)
62
+ - [Neo.mjs vs Solid.js](https://neomjs.com/learn/comparisons/NeoVsSolid)
63
+ - [Neo.mjs vs Next.js](https://neomjs.com/learn/comparisons/NeoVsNextJs)
64
+ - [Neo.mjs vs Ext.js](https://neomjs.com/learn/comparisons/NeoVsExtJs)
65
65
 
66
66
  ## gettingstarted
67
67
 
68
- - [Setup](https://neomjs.com/#/learn/gettingstarted/Setup)
69
- - [Workspaces and Applications](https://neomjs.com/#/learn/gettingstarted/Workspaces)
70
- - [Describing a View](https://neomjs.com/#/learn/gettingstarted/DescribingTheUI)
71
- - [Events](https://neomjs.com/#/learn/gettingstarted/Events)
72
- - [Component References](https://neomjs.com/#/learn/gettingstarted/References)
73
- - [Extending Classes](https://neomjs.com/#/learn/gettingstarted/Extending)
74
- - [Config](https://neomjs.com/#/learn/gettingstarted/Config)
75
- - [Shared Bindable Data](https://neomjs.com/#/learn/gettingstarted/ComponentModels)
76
- - [Creating Your First App](https://neomjs.com/#/learn/gettingstarted/CreatingYourFirstApp)
68
+ - [Setup](https://neomjs.com/learn/gettingstarted/Setup)
69
+ - [Workspaces and Applications](https://neomjs.com/learn/gettingstarted/Workspaces)
70
+ - [Describing a View](https://neomjs.com/learn/gettingstarted/DescribingTheUI)
71
+ - [Events](https://neomjs.com/learn/gettingstarted/Events)
72
+ - [Component References](https://neomjs.com/learn/gettingstarted/References)
73
+ - [Extending Classes](https://neomjs.com/learn/gettingstarted/Extending)
74
+ - [Config](https://neomjs.com/learn/gettingstarted/Config)
75
+ - [Shared Bindable Data](https://neomjs.com/learn/gettingstarted/ComponentModels)
76
+ - [Creating Your First App](https://neomjs.com/learn/gettingstarted/CreatingYourFirstApp)
77
77
 
78
78
  ## guides
79
79
 
80
- - [Codebase Overview](https://neomjs.com/#/learn/guides/fundamentals/CodebaseOverview)
81
- - [Application Bootstrap](https://neomjs.com/#/learn/guides/fundamentals/ApplicationBootstrap)
82
- - [Instance Lifecycle](https://neomjs.com/#/learn/guides/fundamentals/InstanceLifecycle)
83
- - [Declarative Component Trees VS Imperative Vdom](https://neomjs.com/#/learn/guides/fundamentals/DeclarativeComponentTreesVsImperativeVdom)
84
- - [Declarative VDOM with Effects](https://neomjs.com/#/learn/guides/fundamentals/DeclarativeVDOMWithEffects)
85
- - [Config System Deep Dive](https://neomjs.com/#/learn/guides/fundamentals/ConfigSystemDeepDive)
86
- - [Extending Neo Classes](https://neomjs.com/#/learn/guides/fundamentals/ExtendingNeoClasses)
87
- - [Main Thread Addons](https://neomjs.com/#/learn/guides/fundamentals/MainThreadAddons)
88
- - [Component and Container Basics](https://neomjs.com/#/learn/guides/uibuildingblocks/ComponentsAndContainers)
89
- - [Layouts](https://neomjs.com/#/learn/guides/uibuildingblocks/Layouts)
90
- - [Custom Components](https://neomjs.com/#/learn/guides/uibuildingblocks/CustomComponents)
91
- - [Working with VDom](https://neomjs.com/#/learn/guides/uibuildingblocks/WorkingWithVDom)
92
- - [HTML Templates](https://neomjs.com/#/learn/guides/uibuildingblocks/HtmlTemplates)
93
- - [Under the Hood: HTML Templates](https://neomjs.com/#/learn/guides/uibuildingblocks/HtmlTemplatesUnderTheHood)
94
- - [Styling and Theming](https://neomjs.com/#/learn/guides/uibuildingblocks/StylingAndTheming)
95
- - [Collections](https://neomjs.com/#/learn/guides/datahandling/Collections)
96
- - [Records](https://neomjs.com/#/learn/guides/datahandling/Records)
97
- - [Grids](https://neomjs.com/#/learn/guides/datahandling/Grids)
98
- - [Tables (Stores)](https://neomjs.com/#/learn/guides/datahandling/Tables)
99
- - [Shared Bindable Data (State Providers)](https://neomjs.com/#/learn/guides/datahandling/StateProviders)
100
- - [User Input (Forms)](https://neomjs.com/#/learn/guides/userinteraction/Forms)
101
- - [ComboBox](https://neomjs.com/#/learn/guides/userinteraction/form_fields/ComboBox)
102
- - [Custom Events](https://neomjs.com/#/learn/guides/userinteraction/events/CustomEvents)
103
- - [DOM Events](https://neomjs.com/#/learn/guides/userinteraction/events/DomEvents)
104
- - [Unit Testing with Siesta](https://neomjs.com/#/learn/guides/testing/UnitTestingWithSiesta)
105
- - [Multi-Window Applications](https://neomjs.com/#/learn/guides/specificfeatures/MultiWindow)
106
- - [Mixins](https://neomjs.com/#/learn/guides/specificfeatures/Mixins)
107
- - [Portal App](https://neomjs.com/#/learn/guides/specificfeatures/PortalApp)
108
- - [Introduction](https://neomjs.com/#/learn/guides/mcp/Introduction)
109
- - [The Knowledge Base Server](https://neomjs.com/#/learn/guides/mcp/KnowledgeBase)
110
- - [The Memory Core Server](https://neomjs.com/#/learn/guides/mcp/MemoryCore)
111
- - [The GitHub Workflow Server](https://neomjs.com/#/learn/guides/mcp/GitHubWorkflow)
112
- - [Code Execution](https://neomjs.com/#/learn/guides/mcp/CodeExecution)
113
- - [Strategic Workflows](https://neomjs.com/#/learn/guides/ai/StrategicWorkflows)
114
- - [Agent-Agnostic MCP Configuration](https://neomjs.com/#/learn/guides/ai/AgentAgnosticMcpConfig)
115
- - [Memory Core MCP API](https://neomjs.com/#/learn/guides/ai/MemoryCoreMcpApi)
116
- - [Chrome DevTools MCP Server](https://neomjs.com/#/learn/guides/ai/ChromeDevToolsMcpServer)
117
- - [GitHub CLI Setup](https://neomjs.com/#/learn/guides/ai/GitHubCLISetup)
118
- - [GitHub Workflow Server: gh-absent](https://neomjs.com/#/learn/guides/ai/GitHubWorkflowServerGhAbsent)
119
- - [Troubleshooting Tool Calls](https://neomjs.com/#/learn/guides/ai/TroubleshootingToolCalls)
120
- - [AI Tooling WSL Setup](https://neomjs.com/#/learn/guides/ai/AiToolingWslSetup)
80
+ - [Codebase Overview](https://neomjs.com/learn/guides/fundamentals/CodebaseOverview)
81
+ - [Application Bootstrap](https://neomjs.com/learn/guides/fundamentals/ApplicationBootstrap)
82
+ - [Instance Lifecycle](https://neomjs.com/learn/guides/fundamentals/InstanceLifecycle)
83
+ - [Declarative Component Trees VS Imperative Vdom](https://neomjs.com/learn/guides/fundamentals/DeclarativeComponentTreesVsImperativeVdom)
84
+ - [Declarative VDOM with Effects](https://neomjs.com/learn/guides/fundamentals/DeclarativeVDOMWithEffects)
85
+ - [Config System Deep Dive](https://neomjs.com/learn/guides/fundamentals/ConfigSystemDeepDive)
86
+ - [Extending Neo Classes](https://neomjs.com/learn/guides/fundamentals/ExtendingNeoClasses)
87
+ - [Main Thread Addons](https://neomjs.com/learn/guides/fundamentals/MainThreadAddons)
88
+ - [Component and Container Basics](https://neomjs.com/learn/guides/uibuildingblocks/ComponentsAndContainers)
89
+ - [Layouts](https://neomjs.com/learn/guides/uibuildingblocks/Layouts)
90
+ - [Custom Components](https://neomjs.com/learn/guides/uibuildingblocks/CustomComponents)
91
+ - [Working with VDom](https://neomjs.com/learn/guides/uibuildingblocks/WorkingWithVDom)
92
+ - [HTML Templates](https://neomjs.com/learn/guides/uibuildingblocks/HtmlTemplates)
93
+ - [Under the Hood: HTML Templates](https://neomjs.com/learn/guides/uibuildingblocks/HtmlTemplatesUnderTheHood)
94
+ - [Styling and Theming](https://neomjs.com/learn/guides/uibuildingblocks/StylingAndTheming)
95
+ - [Collections](https://neomjs.com/learn/guides/datahandling/Collections)
96
+ - [Records](https://neomjs.com/learn/guides/datahandling/Records)
97
+ - [Grids](https://neomjs.com/learn/guides/datahandling/Grids)
98
+ - [Tables (Stores)](https://neomjs.com/learn/guides/datahandling/Tables)
99
+ - [Shared Bindable Data (State Providers)](https://neomjs.com/learn/guides/datahandling/StateProviders)
100
+ - [User Input (Forms)](https://neomjs.com/learn/guides/userinteraction/Forms)
101
+ - [ComboBox](https://neomjs.com/learn/guides/userinteraction/form_fields/ComboBox)
102
+ - [Custom Events](https://neomjs.com/learn/guides/userinteraction/events/CustomEvents)
103
+ - [DOM Events](https://neomjs.com/learn/guides/userinteraction/events/DomEvents)
104
+ - [Unit Testing with Siesta](https://neomjs.com/learn/guides/testing/UnitTestingWithSiesta)
105
+ - [Multi-Window Applications](https://neomjs.com/learn/guides/specificfeatures/MultiWindow)
106
+ - [Mixins](https://neomjs.com/learn/guides/specificfeatures/Mixins)
107
+ - [Portal App](https://neomjs.com/learn/guides/specificfeatures/PortalApp)
108
+ - [Introduction](https://neomjs.com/learn/guides/mcp/Introduction)
109
+ - [The Knowledge Base Server](https://neomjs.com/learn/guides/mcp/KnowledgeBase)
110
+ - [The Memory Core Server](https://neomjs.com/learn/guides/mcp/MemoryCore)
111
+ - [The GitHub Workflow Server](https://neomjs.com/learn/guides/mcp/GitHubWorkflow)
112
+ - [Code Execution](https://neomjs.com/learn/guides/mcp/CodeExecution)
113
+ - [Strategic Workflows](https://neomjs.com/learn/guides/ai/StrategicWorkflows)
114
+ - [Agent-Agnostic MCP Configuration](https://neomjs.com/learn/guides/ai/AgentAgnosticMcpConfig)
115
+ - [Memory Core MCP API](https://neomjs.com/learn/guides/ai/MemoryCoreMcpApi)
116
+ - [Chrome DevTools MCP Server](https://neomjs.com/learn/guides/ai/ChromeDevToolsMcpServer)
117
+ - [GitHub CLI Setup](https://neomjs.com/learn/guides/ai/GitHubCLISetup)
118
+ - [GitHub Workflow Server: gh-absent](https://neomjs.com/learn/guides/ai/GitHubWorkflowServerGhAbsent)
119
+ - [Troubleshooting Tool Calls](https://neomjs.com/learn/guides/ai/TroubleshootingToolCalls)
120
+ - [AI Tooling WSL Setup](https://neomjs.com/learn/guides/ai/AiToolingWslSetup)
121
121
 
122
122
  ## tutorials
123
123
 
124
- - [Rock Scissors Paper](https://neomjs.com/#/learn/tutorials/RSP)
125
- - [Earthquakes](https://neomjs.com/#/learn/tutorials/Earthquakes)
126
- - [Todo List](https://neomjs.com/#/learn/tutorials/TodoList)
127
- - [Creating a Functional Button](https://neomjs.com/#/learn/tutorials/CreatingAFunctionalButton)
128
- - [Routing](https://neomjs.com/#/learn/tutorials/Routing)
124
+ - [Rock Scissors Paper](https://neomjs.com/learn/tutorials/RSP)
125
+ - [Earthquakes](https://neomjs.com/learn/tutorials/Earthquakes)
126
+ - [Todo List](https://neomjs.com/learn/tutorials/TodoList)
127
+ - [Creating a Functional Button](https://neomjs.com/learn/tutorials/CreatingAFunctionalButton)
128
+ - [Routing](https://neomjs.com/learn/tutorials/Routing)
129
129
 
130
130
  ## javascript
131
131
 
132
- - [Classes, Properties, and Methods](https://neomjs.com/#/learn/javascript/Classes)
133
- - [Overriding Methods](https://neomjs.com/#/learn/javascript/Overrides)
134
- - [Other JavaScript Class Features](https://neomjs.com/#/learn/javascript/ClassFeatures)
135
- - [Super](https://neomjs.com/#/learn/javascript/Super)
132
+ - [Classes, Properties, and Methods](https://neomjs.com/learn/javascript/Classes)
133
+ - [Overriding Methods](https://neomjs.com/learn/javascript/Overrides)
134
+ - [Other JavaScript Class Features](https://neomjs.com/learn/javascript/ClassFeatures)
135
+ - [Super](https://neomjs.com/learn/javascript/Super)
136
136
 
137
137
  ## blog
138
138
 
139
- - [Context Engineering Done Right](https://neomjs.com/#/learn/blog/context-engineering-done-right)
140
- - [A Platform That Answers Your Questions](https://neomjs.com/#/learn/blog/ai-native-platform-answers-questions)
141
- - [v10 Deep Dive: State Provider](https://neomjs.com/#/learn/blog/v10-deep-dive-state-provider)
142
- - [Benchmarking Frontends 2025](https://neomjs.com/#/learn/blog/benchmarking-frontends-2025)
143
- - [v10 Deep Dive: VDOM Revolution](https://neomjs.com/#/learn/blog/v10-deep-dive-vdom-revolution)
144
- - [v10 Deep Dive: Functional Components](https://neomjs.com/#/learn/blog/v10-deep-dive-functional-components)
145
- - [v10 Deep Dive: Reactivity](https://neomjs.com/#/learn/blog/v10-deep-dive-reactivity)
146
- - [v10 Post 1: A Love Story](https://neomjs.com/#/learn/blog/v10-post1-love-story)
147
- - [JSON Blueprints & Shared Workers](https://neomjs.com/#/learn/blog/json-blueprints-and-shared-workers)
139
+ - [Context Engineering Done Right](https://neomjs.com/learn/blog/context-engineering-done-right)
140
+ - [A Platform That Answers Your Questions](https://neomjs.com/learn/blog/ai-native-platform-answers-questions)
141
+ - [v10 Deep Dive: State Provider](https://neomjs.com/learn/blog/v10-deep-dive-state-provider)
142
+ - [Benchmarking Frontends 2025](https://neomjs.com/learn/blog/benchmarking-frontends-2025)
143
+ - [v10 Deep Dive: VDOM Revolution](https://neomjs.com/learn/blog/v10-deep-dive-vdom-revolution)
144
+ - [v10 Deep Dive: Functional Components](https://neomjs.com/learn/blog/v10-deep-dive-functional-components)
145
+ - [v10 Deep Dive: Reactivity](https://neomjs.com/learn/blog/v10-deep-dive-reactivity)
146
+ - [v10 Post 1: A Love Story](https://neomjs.com/learn/blog/v10-post1-love-story)
147
+ - [JSON Blueprints & Shared Workers](https://neomjs.com/learn/blog/json-blueprints-and-shared-workers)
148
148
 
149
149
  ## Demo Apps and Examples
150
150
 
@@ -1,426 +1,426 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <urlset xmlns="https://www.sitemaps.org/schemas/sitemap/0.9">
3
3
  <url>
4
- <loc>https://neomjs.com/#/about-us</loc>
4
+ <loc>https://neomjs.com/about-us</loc>
5
5
  <lastmod>2025-11-20T12:38:26+01:00</lastmod>
6
6
  <priority>0.7</priority>
7
7
  </url>
8
8
  <url>
9
- <loc>https://neomjs.com/#/blog</loc>
9
+ <loc>https://neomjs.com/blog</loc>
10
10
  <lastmod>2025-11-20T12:38:26+01:00</lastmod>
11
11
  <priority>0.8</priority>
12
12
  </url>
13
13
  <url>
14
- <loc>https://neomjs.com/#/docs</loc>
14
+ <loc>https://neomjs.com/docs</loc>
15
15
  <lastmod>2025-11-20T12:38:26+01:00</lastmod>
16
16
  <priority>0.9</priority>
17
17
  </url>
18
18
  <url>
19
- <loc>https://neomjs.com/#/examples</loc>
19
+ <loc>https://neomjs.com/examples</loc>
20
20
  <lastmod>2025-11-20T12:38:26+01:00</lastmod>
21
21
  <priority>0.9</priority>
22
22
  </url>
23
23
  <url>
24
- <loc>https://neomjs.com/#/home</loc>
24
+ <loc>https://neomjs.com/home</loc>
25
25
  <lastmod>2025-11-20T12:38:26+01:00</lastmod>
26
26
  <priority>1.0</priority>
27
27
  </url>
28
28
  <url>
29
- <loc>https://neomjs.com/#/services</loc>
29
+ <loc>https://neomjs.com/services</loc>
30
30
  <lastmod>2025-11-20T12:38:26+01:00</lastmod>
31
31
  <priority>0.7</priority>
32
32
  </url>
33
33
  <url>
34
- <loc>https://neomjs.com/#/learn/UsingTheseTopics</loc>
34
+ <loc>https://neomjs.com/learn/UsingTheseTopics</loc>
35
35
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
36
36
  </url>
37
37
  <url>
38
- <loc>https://neomjs.com/#/learn/benefits/Introduction</loc>
38
+ <loc>https://neomjs.com/learn/benefits/Introduction</loc>
39
39
  <lastmod>2025-09-15T13:47:23+02:00</lastmod>
40
40
  <priority>0.9</priority>
41
41
  </url>
42
42
  <url>
43
- <loc>https://neomjs.com/#/learn/benefits/OffTheMainThread</loc>
43
+ <loc>https://neomjs.com/learn/benefits/OffTheMainThread</loc>
44
44
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
45
45
  <priority>0.9</priority>
46
46
  </url>
47
47
  <url>
48
- <loc>https://neomjs.com/#/learn/benefits/FourEnvironments</loc>
48
+ <loc>https://neomjs.com/learn/benefits/FourEnvironments</loc>
49
49
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
50
50
  <priority>0.9</priority>
51
51
  </url>
52
52
  <url>
53
- <loc>https://neomjs.com/#/learn/benefits/ConfigSystem</loc>
53
+ <loc>https://neomjs.com/learn/benefits/ConfigSystem</loc>
54
54
  <lastmod>2025-11-18T20:22:43+01:00</lastmod>
55
55
  <priority>0.9</priority>
56
56
  </url>
57
57
  <url>
58
- <loc>https://neomjs.com/#/learn/benefits/RPCLayer</loc>
58
+ <loc>https://neomjs.com/learn/benefits/RPCLayer</loc>
59
59
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
60
60
  <priority>0.9</priority>
61
61
  </url>
62
62
  <url>
63
- <loc>https://neomjs.com/#/learn/benefits/Speed</loc>
63
+ <loc>https://neomjs.com/learn/benefits/Speed</loc>
64
64
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
65
65
  <priority>0.9</priority>
66
66
  </url>
67
67
  <url>
68
- <loc>https://neomjs.com/#/learn/benefits/MultiWindow</loc>
68
+ <loc>https://neomjs.com/learn/benefits/MultiWindow</loc>
69
69
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
70
70
  <priority>0.9</priority>
71
71
  </url>
72
72
  <url>
73
- <loc>https://neomjs.com/#/learn/benefits/Quick</loc>
73
+ <loc>https://neomjs.com/learn/benefits/Quick</loc>
74
74
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
75
75
  <priority>0.9</priority>
76
76
  </url>
77
77
  <url>
78
- <loc>https://neomjs.com/#/learn/benefits/Effort</loc>
78
+ <loc>https://neomjs.com/learn/benefits/Effort</loc>
79
79
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
80
80
  <priority>0.9</priority>
81
81
  </url>
82
82
  <url>
83
- <loc>https://neomjs.com/#/learn/benefits/FormsEngine</loc>
83
+ <loc>https://neomjs.com/learn/benefits/FormsEngine</loc>
84
84
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
85
85
  <priority>0.9</priority>
86
86
  </url>
87
87
  <url>
88
- <loc>https://neomjs.com/#/learn/benefits/Features</loc>
88
+ <loc>https://neomjs.com/learn/benefits/Features</loc>
89
89
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
90
90
  <priority>0.9</priority>
91
91
  </url>
92
92
  <url>
93
- <loc>https://neomjs.com/#/learn/comparisons/Overview</loc>
93
+ <loc>https://neomjs.com/learn/comparisons/Overview</loc>
94
94
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
95
95
  </url>
96
96
  <url>
97
- <loc>https://neomjs.com/#/learn/comparisons/NeoVsReact</loc>
97
+ <loc>https://neomjs.com/learn/comparisons/NeoVsReact</loc>
98
98
  <lastmod>2025-08-04T05:11:22+02:00</lastmod>
99
99
  <priority>0.8</priority>
100
100
  </url>
101
101
  <url>
102
- <loc>https://neomjs.com/#/learn/comparisons/NeoVsAngular</loc>
102
+ <loc>https://neomjs.com/learn/comparisons/NeoVsAngular</loc>
103
103
  <lastmod>2025-08-04T05:11:22+02:00</lastmod>
104
104
  <priority>0.8</priority>
105
105
  </url>
106
106
  <url>
107
- <loc>https://neomjs.com/#/learn/comparisons/NeoVsVue</loc>
107
+ <loc>https://neomjs.com/learn/comparisons/NeoVsVue</loc>
108
108
  <lastmod>2025-08-04T05:11:22+02:00</lastmod>
109
109
  <priority>0.8</priority>
110
110
  </url>
111
111
  <url>
112
- <loc>https://neomjs.com/#/learn/comparisons/NeoVsSolid</loc>
112
+ <loc>https://neomjs.com/learn/comparisons/NeoVsSolid</loc>
113
113
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
114
114
  <priority>0.8</priority>
115
115
  </url>
116
116
  <url>
117
- <loc>https://neomjs.com/#/learn/comparisons/NeoVsNextJs</loc>
117
+ <loc>https://neomjs.com/learn/comparisons/NeoVsNextJs</loc>
118
118
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
119
119
  <priority>0.8</priority>
120
120
  </url>
121
121
  <url>
122
- <loc>https://neomjs.com/#/learn/comparisons/NeoVsExtJs</loc>
122
+ <loc>https://neomjs.com/learn/comparisons/NeoVsExtJs</loc>
123
123
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
124
124
  <priority>0.8</priority>
125
125
  </url>
126
126
  <url>
127
- <loc>https://neomjs.com/#/learn/gettingstarted/Setup</loc>
127
+ <loc>https://neomjs.com/learn/gettingstarted/Setup</loc>
128
128
  <lastmod>2025-08-02T12:17:36+02:00</lastmod>
129
129
  <priority>0.9</priority>
130
130
  </url>
131
131
  <url>
132
- <loc>https://neomjs.com/#/learn/gettingstarted/Workspaces</loc>
132
+ <loc>https://neomjs.com/learn/gettingstarted/Workspaces</loc>
133
133
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
134
134
  <priority>0.9</priority>
135
135
  </url>
136
136
  <url>
137
- <loc>https://neomjs.com/#/learn/gettingstarted/DescribingTheUI</loc>
137
+ <loc>https://neomjs.com/learn/gettingstarted/DescribingTheUI</loc>
138
138
  <lastmod>2025-07-28T13:02:27+02:00</lastmod>
139
139
  <priority>0.9</priority>
140
140
  </url>
141
141
  <url>
142
- <loc>https://neomjs.com/#/learn/gettingstarted/Events</loc>
142
+ <loc>https://neomjs.com/learn/gettingstarted/Events</loc>
143
143
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
144
144
  <priority>0.8</priority>
145
145
  </url>
146
146
  <url>
147
- <loc>https://neomjs.com/#/learn/gettingstarted/References</loc>
147
+ <loc>https://neomjs.com/learn/gettingstarted/References</loc>
148
148
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
149
149
  <priority>0.8</priority>
150
150
  </url>
151
151
  <url>
152
- <loc>https://neomjs.com/#/learn/gettingstarted/Extending</loc>
152
+ <loc>https://neomjs.com/learn/gettingstarted/Extending</loc>
153
153
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
154
154
  <priority>0.8</priority>
155
155
  </url>
156
156
  <url>
157
- <loc>https://neomjs.com/#/learn/gettingstarted/Config</loc>
157
+ <loc>https://neomjs.com/learn/gettingstarted/Config</loc>
158
158
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
159
159
  <priority>0.8</priority>
160
160
  </url>
161
161
  <url>
162
- <loc>https://neomjs.com/#/learn/gettingstarted/ComponentModels</loc>
162
+ <loc>https://neomjs.com/learn/gettingstarted/ComponentModels</loc>
163
163
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
164
164
  <priority>0.8</priority>
165
165
  </url>
166
166
  <url>
167
- <loc>https://neomjs.com/#/learn/gettingstarted/CreatingYourFirstApp</loc>
167
+ <loc>https://neomjs.com/learn/gettingstarted/CreatingYourFirstApp</loc>
168
168
  <lastmod>2025-10-09T13:06:12+02:00</lastmod>
169
169
  <priority>0.9</priority>
170
170
  </url>
171
171
  <url>
172
- <loc>https://neomjs.com/#/learn/guides/fundamentals/CodebaseOverview</loc>
172
+ <loc>https://neomjs.com/learn/guides/fundamentals/CodebaseOverview</loc>
173
173
  <lastmod>2025-11-03T14:00:38+01:00</lastmod>
174
174
  <priority>1.0</priority>
175
175
  </url>
176
176
  <url>
177
- <loc>https://neomjs.com/#/learn/guides/fundamentals/ApplicationBootstrap</loc>
177
+ <loc>https://neomjs.com/learn/guides/fundamentals/ApplicationBootstrap</loc>
178
178
  <lastmod>2025-07-31T21:54:15+02:00</lastmod>
179
179
  <priority>0.9</priority>
180
180
  </url>
181
181
  <url>
182
- <loc>https://neomjs.com/#/learn/guides/fundamentals/InstanceLifecycle</loc>
182
+ <loc>https://neomjs.com/learn/guides/fundamentals/InstanceLifecycle</loc>
183
183
  <lastmod>2025-07-31T21:54:15+02:00</lastmod>
184
184
  </url>
185
185
  <url>
186
- <loc>https://neomjs.com/#/learn/guides/fundamentals/DeclarativeComponentTreesVsImperativeVdom</loc>
186
+ <loc>https://neomjs.com/learn/guides/fundamentals/DeclarativeComponentTreesVsImperativeVdom</loc>
187
187
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
188
188
  </url>
189
189
  <url>
190
- <loc>https://neomjs.com/#/learn/guides/fundamentals/DeclarativeVDOMWithEffects</loc>
190
+ <loc>https://neomjs.com/learn/guides/fundamentals/DeclarativeVDOMWithEffects</loc>
191
191
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
192
192
  </url>
193
193
  <url>
194
- <loc>https://neomjs.com/#/learn/guides/fundamentals/ConfigSystemDeepDive</loc>
194
+ <loc>https://neomjs.com/learn/guides/fundamentals/ConfigSystemDeepDive</loc>
195
195
  <lastmod>2025-07-28T12:35:48+02:00</lastmod>
196
196
  </url>
197
197
  <url>
198
- <loc>https://neomjs.com/#/learn/guides/fundamentals/ExtendingNeoClasses</loc>
198
+ <loc>https://neomjs.com/learn/guides/fundamentals/ExtendingNeoClasses</loc>
199
199
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
200
200
  </url>
201
201
  <url>
202
- <loc>https://neomjs.com/#/learn/guides/fundamentals/MainThreadAddons</loc>
202
+ <loc>https://neomjs.com/learn/guides/fundamentals/MainThreadAddons</loc>
203
203
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
204
204
  <priority>0.9</priority>
205
205
  </url>
206
206
  <url>
207
- <loc>https://neomjs.com/#/learn/guides/uibuildingblocks/ComponentsAndContainers</loc>
207
+ <loc>https://neomjs.com/learn/guides/uibuildingblocks/ComponentsAndContainers</loc>
208
208
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
209
209
  <priority>0.8</priority>
210
210
  </url>
211
211
  <url>
212
- <loc>https://neomjs.com/#/learn/guides/uibuildingblocks/Layouts</loc>
212
+ <loc>https://neomjs.com/learn/guides/uibuildingblocks/Layouts</loc>
213
213
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
214
214
  <priority>0.8</priority>
215
215
  </url>
216
216
  <url>
217
- <loc>https://neomjs.com/#/learn/guides/uibuildingblocks/CustomComponents</loc>
217
+ <loc>https://neomjs.com/learn/guides/uibuildingblocks/CustomComponents</loc>
218
218
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
219
219
  </url>
220
220
  <url>
221
- <loc>https://neomjs.com/#/learn/guides/uibuildingblocks/WorkingWithVDom</loc>
221
+ <loc>https://neomjs.com/learn/guides/uibuildingblocks/WorkingWithVDom</loc>
222
222
  <lastmod>2025-11-26T11:20:41+01:00</lastmod>
223
223
  </url>
224
224
  <url>
225
- <loc>https://neomjs.com/#/learn/guides/uibuildingblocks/HtmlTemplates</loc>
225
+ <loc>https://neomjs.com/learn/guides/uibuildingblocks/HtmlTemplates</loc>
226
226
  <lastmod>2025-07-31T18:54:44+02:00</lastmod>
227
227
  </url>
228
228
  <url>
229
- <loc>https://neomjs.com/#/learn/guides/uibuildingblocks/HtmlTemplatesUnderTheHood</loc>
229
+ <loc>https://neomjs.com/learn/guides/uibuildingblocks/HtmlTemplatesUnderTheHood</loc>
230
230
  <lastmod>2025-08-02T22:26:45+02:00</lastmod>
231
231
  </url>
232
232
  <url>
233
- <loc>https://neomjs.com/#/learn/guides/uibuildingblocks/StylingAndTheming</loc>
233
+ <loc>https://neomjs.com/learn/guides/uibuildingblocks/StylingAndTheming</loc>
234
234
  <lastmod>2025-09-21T14:51:15+02:00</lastmod>
235
235
  </url>
236
236
  <url>
237
- <loc>https://neomjs.com/#/learn/guides/datahandling/Collections</loc>
237
+ <loc>https://neomjs.com/learn/guides/datahandling/Collections</loc>
238
238
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
239
239
  </url>
240
240
  <url>
241
- <loc>https://neomjs.com/#/learn/guides/datahandling/Records</loc>
241
+ <loc>https://neomjs.com/learn/guides/datahandling/Records</loc>
242
242
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
243
243
  </url>
244
244
  <url>
245
- <loc>https://neomjs.com/#/learn/guides/datahandling/Grids</loc>
245
+ <loc>https://neomjs.com/learn/guides/datahandling/Grids</loc>
246
246
  <lastmod>2025-08-11T09:35:25+02:00</lastmod>
247
247
  <priority>0.8</priority>
248
248
  </url>
249
249
  <url>
250
- <loc>https://neomjs.com/#/learn/guides/datahandling/Tables</loc>
250
+ <loc>https://neomjs.com/learn/guides/datahandling/Tables</loc>
251
251
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
252
252
  </url>
253
253
  <url>
254
- <loc>https://neomjs.com/#/learn/guides/datahandling/StateProviders</loc>
254
+ <loc>https://neomjs.com/learn/guides/datahandling/StateProviders</loc>
255
255
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
256
256
  </url>
257
257
  <url>
258
- <loc>https://neomjs.com/#/learn/guides/userinteraction/Forms</loc>
258
+ <loc>https://neomjs.com/learn/guides/userinteraction/Forms</loc>
259
259
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
260
260
  <priority>0.8</priority>
261
261
  </url>
262
262
  <url>
263
- <loc>https://neomjs.com/#/learn/guides/userinteraction/form_fields/ComboBox</loc>
263
+ <loc>https://neomjs.com/learn/guides/userinteraction/form_fields/ComboBox</loc>
264
264
  <lastmod>2025-07-01T14:20:59+02:00</lastmod>
265
265
  </url>
266
266
  <url>
267
- <loc>https://neomjs.com/#/learn/guides/userinteraction/events/CustomEvents</loc>
267
+ <loc>https://neomjs.com/learn/guides/userinteraction/events/CustomEvents</loc>
268
268
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
269
269
  </url>
270
270
  <url>
271
- <loc>https://neomjs.com/#/learn/guides/userinteraction/events/DomEvents</loc>
271
+ <loc>https://neomjs.com/learn/guides/userinteraction/events/DomEvents</loc>
272
272
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
273
273
  </url>
274
274
  <url>
275
- <loc>https://neomjs.com/#/learn/guides/testing/UnitTestingWithSiesta</loc>
275
+ <loc>https://neomjs.com/learn/guides/testing/UnitTestingWithSiesta</loc>
276
276
  <lastmod>2025-09-20T14:17:55+02:00</lastmod>
277
277
  </url>
278
278
  <url>
279
- <loc>https://neomjs.com/#/learn/guides/specificfeatures/MultiWindow</loc>
279
+ <loc>https://neomjs.com/learn/guides/specificfeatures/MultiWindow</loc>
280
280
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
281
281
  </url>
282
282
  <url>
283
- <loc>https://neomjs.com/#/learn/guides/specificfeatures/Mixins</loc>
283
+ <loc>https://neomjs.com/learn/guides/specificfeatures/Mixins</loc>
284
284
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
285
285
  </url>
286
286
  <url>
287
- <loc>https://neomjs.com/#/learn/guides/specificfeatures/PortalApp</loc>
287
+ <loc>https://neomjs.com/learn/guides/specificfeatures/PortalApp</loc>
288
288
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
289
289
  </url>
290
290
  <url>
291
- <loc>https://neomjs.com/#/learn/guides/mcp/Introduction</loc>
291
+ <loc>https://neomjs.com/learn/guides/mcp/Introduction</loc>
292
292
  <lastmod>2025-11-23T13:10:07+01:00</lastmod>
293
293
  </url>
294
294
  <url>
295
- <loc>https://neomjs.com/#/learn/guides/mcp/KnowledgeBase</loc>
295
+ <loc>https://neomjs.com/learn/guides/mcp/KnowledgeBase</loc>
296
296
  <lastmod>2025-11-23T13:10:07+01:00</lastmod>
297
297
  </url>
298
298
  <url>
299
- <loc>https://neomjs.com/#/learn/guides/mcp/MemoryCore</loc>
299
+ <loc>https://neomjs.com/learn/guides/mcp/MemoryCore</loc>
300
300
  <lastmod>2025-11-23T13:10:07+01:00</lastmod>
301
301
  </url>
302
302
  <url>
303
- <loc>https://neomjs.com/#/learn/guides/mcp/GitHubWorkflow</loc>
303
+ <loc>https://neomjs.com/learn/guides/mcp/GitHubWorkflow</loc>
304
304
  <lastmod>2025-11-23T13:10:07+01:00</lastmod>
305
305
  </url>
306
306
  <url>
307
- <loc>https://neomjs.com/#/learn/guides/mcp/CodeExecution</loc>
307
+ <loc>https://neomjs.com/learn/guides/mcp/CodeExecution</loc>
308
308
  <lastmod>2025-11-23T13:10:07+01:00</lastmod>
309
309
  </url>
310
310
  <url>
311
- <loc>https://neomjs.com/#/learn/guides/ai/StrategicWorkflows</loc>
311
+ <loc>https://neomjs.com/learn/guides/ai/StrategicWorkflows</loc>
312
312
  <lastmod>2025-10-03T12:01:08+02:00</lastmod>
313
313
  </url>
314
314
  <url>
315
- <loc>https://neomjs.com/#/learn/guides/ai/AgentAgnosticMcpConfig</loc>
315
+ <loc>https://neomjs.com/learn/guides/ai/AgentAgnosticMcpConfig</loc>
316
316
  <lastmod>2025-11-08T13:08:38+01:00</lastmod>
317
317
  </url>
318
318
  <url>
319
- <loc>https://neomjs.com/#/learn/guides/ai/MemoryCoreMcpApi</loc>
319
+ <loc>https://neomjs.com/learn/guides/ai/MemoryCoreMcpApi</loc>
320
320
  <lastmod>2025-11-08T13:19:59+01:00</lastmod>
321
321
  </url>
322
322
  <url>
323
- <loc>https://neomjs.com/#/learn/guides/ai/ChromeDevToolsMcpServer</loc>
323
+ <loc>https://neomjs.com/learn/guides/ai/ChromeDevToolsMcpServer</loc>
324
324
  <lastmod>2025-10-08T22:57:31+02:00</lastmod>
325
325
  </url>
326
326
  <url>
327
- <loc>https://neomjs.com/#/learn/guides/ai/GitHubCLISetup</loc>
327
+ <loc>https://neomjs.com/learn/guides/ai/GitHubCLISetup</loc>
328
328
  <lastmod>2025-10-26T20:11:19+01:00</lastmod>
329
329
  </url>
330
330
  <url>
331
- <loc>https://neomjs.com/#/learn/guides/ai/GitHubWorkflowServerGhAbsent</loc>
331
+ <loc>https://neomjs.com/learn/guides/ai/GitHubWorkflowServerGhAbsent</loc>
332
332
  <lastmod>2025-11-10T21:07:23+01:00</lastmod>
333
333
  </url>
334
334
  <url>
335
- <loc>https://neomjs.com/#/learn/guides/ai/TroubleshootingToolCalls</loc>
335
+ <loc>https://neomjs.com/learn/guides/ai/TroubleshootingToolCalls</loc>
336
336
  <lastmod>2025-10-26T10:25:44+01:00</lastmod>
337
337
  </url>
338
338
  <url>
339
- <loc>https://neomjs.com/#/learn/guides/ai/AiToolingWslSetup</loc>
339
+ <loc>https://neomjs.com/learn/guides/ai/AiToolingWslSetup</loc>
340
340
  <lastmod>2025-10-26T12:20:56+01:00</lastmod>
341
341
  </url>
342
342
  <url>
343
- <loc>https://neomjs.com/#/learn/tutorials/RSP</loc>
343
+ <loc>https://neomjs.com/learn/tutorials/RSP</loc>
344
344
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
345
345
  </url>
346
346
  <url>
347
- <loc>https://neomjs.com/#/learn/tutorials/Earthquakes</loc>
347
+ <loc>https://neomjs.com/learn/tutorials/Earthquakes</loc>
348
348
  <lastmod>2025-08-03T02:34:14+02:00</lastmod>
349
349
  </url>
350
350
  <url>
351
- <loc>https://neomjs.com/#/learn/tutorials/TodoList</loc>
351
+ <loc>https://neomjs.com/learn/tutorials/TodoList</loc>
352
352
  <lastmod>2025-07-16T12:06:35+02:00</lastmod>
353
353
  </url>
354
354
  <url>
355
- <loc>https://neomjs.com/#/learn/tutorials/CreatingAFunctionalButton</loc>
355
+ <loc>https://neomjs.com/learn/tutorials/CreatingAFunctionalButton</loc>
356
356
  <lastmod>2025-10-04T19:22:39+02:00</lastmod>
357
357
  </url>
358
358
  <url>
359
- <loc>https://neomjs.com/#/learn/tutorials/Routing</loc>
359
+ <loc>https://neomjs.com/learn/tutorials/Routing</loc>
360
360
  <lastmod>2025-09-20T15:21:23+02:00</lastmod>
361
361
  </url>
362
362
  <url>
363
- <loc>https://neomjs.com/#/learn/javascript/Classes</loc>
363
+ <loc>https://neomjs.com/learn/javascript/Classes</loc>
364
364
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
365
365
  </url>
366
366
  <url>
367
- <loc>https://neomjs.com/#/learn/javascript/Overrides</loc>
367
+ <loc>https://neomjs.com/learn/javascript/Overrides</loc>
368
368
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
369
369
  </url>
370
370
  <url>
371
- <loc>https://neomjs.com/#/learn/javascript/ClassFeatures</loc>
371
+ <loc>https://neomjs.com/learn/javascript/ClassFeatures</loc>
372
372
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
373
373
  </url>
374
374
  <url>
375
- <loc>https://neomjs.com/#/learn/javascript/Super</loc>
375
+ <loc>https://neomjs.com/learn/javascript/Super</loc>
376
376
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
377
377
  </url>
378
378
  <url>
379
- <loc>https://neomjs.com/#/learn/Glossary</loc>
379
+ <loc>https://neomjs.com/learn/Glossary</loc>
380
380
  <lastmod>2025-07-15T21:37:07+02:00</lastmod>
381
381
  </url>
382
382
  <url>
383
- <loc>https://neomjs.com/#/learn/blog/context-engineering-done-right</loc>
383
+ <loc>https://neomjs.com/learn/blog/context-engineering-done-right</loc>
384
384
  <lastmod>2025-11-10T10:51:09+01:00</lastmod>
385
385
  <priority>0.9</priority>
386
386
  </url>
387
387
  <url>
388
- <loc>https://neomjs.com/#/learn/blog/ai-native-platform-answers-questions</loc>
388
+ <loc>https://neomjs.com/learn/blog/ai-native-platform-answers-questions</loc>
389
389
  <lastmod>2025-09-23T14:31:59+02:00</lastmod>
390
390
  <priority>0.9</priority>
391
391
  </url>
392
392
  <url>
393
- <loc>https://neomjs.com/#/learn/blog/v10-deep-dive-state-provider</loc>
393
+ <loc>https://neomjs.com/learn/blog/v10-deep-dive-state-provider</loc>
394
394
  <lastmod>2025-09-17T12:16:45+02:00</lastmod>
395
395
  <priority>0.9</priority>
396
396
  </url>
397
397
  <url>
398
- <loc>https://neomjs.com/#/learn/blog/benchmarking-frontends-2025</loc>
398
+ <loc>https://neomjs.com/learn/blog/benchmarking-frontends-2025</loc>
399
399
  <lastmod>2025-08-18T11:30:41+02:00</lastmod>
400
400
  <priority>0.9</priority>
401
401
  </url>
402
402
  <url>
403
- <loc>https://neomjs.com/#/learn/blog/v10-deep-dive-vdom-revolution</loc>
403
+ <loc>https://neomjs.com/learn/blog/v10-deep-dive-vdom-revolution</loc>
404
404
  <lastmod>2025-08-04T12:18:02+02:00</lastmod>
405
405
  <priority>0.9</priority>
406
406
  </url>
407
407
  <url>
408
- <loc>https://neomjs.com/#/learn/blog/v10-deep-dive-functional-components</loc>
408
+ <loc>https://neomjs.com/learn/blog/v10-deep-dive-functional-components</loc>
409
409
  <lastmod>2025-07-28T09:31:03+02:00</lastmod>
410
410
  <priority>0.9</priority>
411
411
  </url>
412
412
  <url>
413
- <loc>https://neomjs.com/#/learn/blog/v10-deep-dive-reactivity</loc>
413
+ <loc>https://neomjs.com/learn/blog/v10-deep-dive-reactivity</loc>
414
414
  <lastmod>2025-07-27T21:29:42+02:00</lastmod>
415
415
  <priority>0.9</priority>
416
416
  </url>
417
417
  <url>
418
- <loc>https://neomjs.com/#/learn/blog/v10-post1-love-story</loc>
418
+ <loc>https://neomjs.com/learn/blog/v10-post1-love-story</loc>
419
419
  <lastmod>2025-07-27T21:29:42+02:00</lastmod>
420
420
  <priority>0.9</priority>
421
421
  </url>
422
422
  <url>
423
- <loc>https://neomjs.com/#/learn/blog/json-blueprints-and-shared-workers</loc>
423
+ <loc>https://neomjs.com/learn/blog/json-blueprints-and-shared-workers</loc>
424
424
  <lastmod>2025-09-21T19:58:28+02:00</lastmod>
425
425
  <priority>0.9</priority>
426
426
  </url>
@@ -446,7 +446,7 @@
446
446
  </url>
447
447
  <url>
448
448
  <loc>https://neomjs.com/apps/portal/index.html</loc>
449
- <lastmod>2025-11-24T15:48:22+01:00</lastmod>
449
+ <lastmod>2025-11-29T12:17:50+01:00</lastmod>
450
450
  </url>
451
451
  <url>
452
452
  <loc>https://neomjs.com/apps/realworld/index.html</loc>
@@ -108,7 +108,7 @@ class FooterContainer extends Container {
108
108
  }, {
109
109
  module: Component,
110
110
  cls : ['neo-version'],
111
- text : 'v11.11.0'
111
+ text : 'v11.12.0'
112
112
  }]
113
113
  }],
114
114
  /**
@@ -167,8 +167,9 @@ async function collectRoutesFromTree() {
167
167
  const contentPath = await resolveContentFileFromId(node.id);
168
168
  if (!contentPath) continue;
169
169
  routes.push({
170
- id : node.id,
170
+ category: 'tree',
171
171
  filePath: contentPath,
172
+ id : node.id,
172
173
  name : node.name
173
174
  });
174
175
  }
@@ -182,8 +183,9 @@ async function collectRoutesFromTree() {
182
183
  */
183
184
  async function collectTopLevelRoutes() {
184
185
  return TOP_LEVEL_ROUTES.map(route => ({
185
- id : route,
186
- filePath: path.join(PORTAL_DIR, 'view/ViewportController.mjs')
186
+ category: 'top-level',
187
+ filePath: path.join(PORTAL_DIR, 'view/ViewportController.mjs'),
188
+ id : route
187
189
  }));
188
190
  }
189
191
 
@@ -225,8 +227,9 @@ async function collectExampleRoutes() {
225
227
  const titleMatch = content.match(/<title>(.*?)<\/title>/i);
226
228
 
227
229
  return {
228
- id : file,
230
+ category: 'file',
229
231
  filePath: filePath,
232
+ id : `/${file}`,
230
233
  name : titleMatch ? titleMatch[1] : getNameFromExamplePath(file)
231
234
  };
232
235
  }));
@@ -250,12 +253,13 @@ async function collectAllRoutes() {
250
253
  * Normalizes a route id into a hash-based route path suitable for a Single-Page Application.
251
254
  * @param {String} id
252
255
  * @param {String} [basePath] - Only used for content routes (e.g., '/learn')
253
- * @returns {String} e.g., /#/home or /#/learn/benefits/Introduction
256
+ * @param {Boolean} [useHash=true] - Whether to prepend /# to the route
257
+ * @returns {String} e.g., /#/home or /home
254
258
  */
255
- function buildRouteFromId(id, basePath=null) {
259
+ function buildRouteFromId(id, basePath=null, useHash=true) {
256
260
  // Top-level routes don't use basePath
257
261
  if (id.startsWith('/')) {
258
- return `/#${id}`;
262
+ return useHash ? `/#${id}` : id;
259
263
  }
260
264
 
261
265
  // Content routes use basePath
@@ -263,7 +267,9 @@ function buildRouteFromId(id, basePath=null) {
263
267
  const trimmedId = id.replace(/^\//, '');
264
268
  const prefix = trimmedBase.length > 0 ? trimmedBase : '';
265
269
  const route = `${prefix}/${trimmedId}`.replace(/\/+/g, '/');
266
- return `/#${route.startsWith('/') ? route : `/${route}`}`;
270
+ const fullRoute = route.startsWith('/') ? route : `/${route}`;
271
+
272
+ return useHash ? `/#${fullRoute}` : fullRoute;
267
273
  }
268
274
 
269
275
  /**
@@ -279,11 +285,14 @@ export async function getContentRoutes(options={}) {
279
285
 
280
286
  const routes = allRoutes
281
287
  .filter(({id}) => includeTopLevel || !id.startsWith('/'))
282
- .map(({id}) => {
283
- // Top-level routes don't use basePath
284
- if (id.startsWith('/')) {
288
+ .map(({category, id}) => {
289
+ if (category === 'file') {
290
+ return id; // Already has leading slash
291
+ }
292
+ if (category === 'top-level') {
285
293
  return buildRouteFromId(id);
286
294
  }
295
+ // category === 'tree'
287
296
  return buildRouteFromId(id, basePath);
288
297
  })
289
298
  .sort((a, b) => a.localeCompare(b));
@@ -291,6 +300,45 @@ export async function getContentRoutes(options={}) {
291
300
  return routes;
292
301
  }
293
302
 
303
+ /**
304
+ * Generates a list of route objects containing both real and client-side routes.
305
+ * @param {Object} [options]
306
+ * @param {String} [options.basePath='/learn'] - Only applies to content routes
307
+ * @param {Boolean} [options.includeTopLevel=true] - Include top-level routes
308
+ * @returns {Promise<Array<{route: String, clientSideRoute: String}>>}
309
+ */
310
+ export async function getContentRouteObjects(options={}) {
311
+ const {basePath = DEFAULT_BASE_PATH, includeTopLevel = true} = options;
312
+ const allRoutes = await collectAllRoutes();
313
+
314
+ const routes = allRoutes
315
+ .filter(({id}) => includeTopLevel || !id.startsWith('/'))
316
+ .map(({category, id}) => {
317
+ if (category === 'file') {
318
+ return {
319
+ route : id,
320
+ clientSideRoute: ''
321
+ };
322
+ }
323
+
324
+ if (category === 'top-level') {
325
+ return {
326
+ route : buildRouteFromId(id, null, false),
327
+ clientSideRoute: buildRouteFromId(id, null, true)
328
+ };
329
+ }
330
+
331
+ // category === 'tree'
332
+ return {
333
+ route : buildRouteFromId(id, basePath, false),
334
+ clientSideRoute: buildRouteFromId(id, basePath, true)
335
+ };
336
+ })
337
+ .sort((a, b) => a.route.localeCompare(b.route));
338
+
339
+ return routes;
340
+ }
341
+
294
342
  /**
295
343
  * Returns fully qualified URLs for all routes.
296
344
  * @param {Object} [options]
@@ -356,20 +404,21 @@ export async function getSitemapXml(options={}) {
356
404
  lastModMap = getGitLastModifiedBatch(filePaths);
357
405
  }
358
406
 
359
- const xmlEntries = filteredRoutes.map(({id, filePath}) => {
407
+ const xmlEntries = filteredRoutes.map(({category, id, filePath}) => {
360
408
  let url;
361
- if (id.endsWith('.html')) {
409
+ if (category === 'file') {
362
410
  url = new URL(id, normalizedBaseUrl).toString();
363
- } else {
364
- const route = id.startsWith('/')
365
- ? buildRouteFromId(id)
366
- : buildRouteFromId(id, basePath);
411
+ } else if (category === 'top-level') {
412
+ const route = buildRouteFromId(id, null, false);
413
+ url = new URL(route, normalizedBaseUrl).toString();
414
+ } else { // tree
415
+ const route = buildRouteFromId(id, basePath, false);
367
416
  url = new URL(route, normalizedBaseUrl).toString();
368
417
  }
369
418
 
370
419
  let lastmod = null;
371
420
  if (filePath) {
372
- const key = id.endsWith('.html') ? path.dirname(filePath) : filePath;
421
+ const key = category === 'file' ? path.dirname(filePath) : filePath;
373
422
  lastmod = lastModMap.get(key);
374
423
  }
375
424
 
@@ -441,14 +490,14 @@ For example, the Portal app is available at all four environment URLs, plus a fi
441
490
 
442
491
  `;
443
492
 
444
- const topLevelRoutes = allRoutes.filter(route => route.id.startsWith('/'));
445
- const exampleRoutes = allRoutes.filter(route => route.id.endsWith('.html'));
446
- const contentRoutes = allRoutes.filter(route => !route.id.startsWith('/') && !route.id.endsWith('.html'));
493
+ const topLevelRoutes = allRoutes.filter(route => route.category === 'top-level');
494
+ const exampleRoutes = allRoutes.filter(route => route.category === 'file');
495
+ const contentRoutes = allRoutes.filter(route => route.category === 'tree');
447
496
 
448
497
  content += `## main\n\n`;
449
498
  const topLevelUrls = topLevelRoutes.map(route => {
450
499
  const name = route.id.substring(1).split('-').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');
451
- const url = new URL(buildRouteFromId(route.id), baseUrl).toString();
500
+ const url = new URL(buildRouteFromId(route.id, null, false), baseUrl).toString();
452
501
  return `- [${name}](${url})`;
453
502
  });
454
503
  content += topLevelUrls.join('\n') + '\n\n';
@@ -468,7 +517,7 @@ For example, the Portal app is available at all four environment URLs, plus a fi
468
517
  for (const folder in topLevelFolders) {
469
518
  content += `## ${folder}\n\n`;
470
519
  const urls = topLevelFolders[folder].map(node => {
471
- const route = buildRouteFromId(node.id, basePath);
520
+ const route = buildRouteFromId(node.id, basePath, false);
472
521
  const url = new URL(route, baseUrl).toString();
473
522
  return `- [${node.name}](${url})`;
474
523
  });
@@ -493,7 +542,7 @@ async function runCli() {
493
542
  program
494
543
  .name('generate-seo-files')
495
544
  .description('Generates sitemap.xml and llms.txt for SEO purposes.')
496
- .option('-f, --format <type>', 'Output format: array, urls, xml, llms')
545
+ .option('-f, --format <type>', 'Output format: array, objects, urls, xml, llms')
497
546
  .option('--base-url <url>', 'Absolute base URL (e.g., https://neomjs.com)')
498
547
  .option('--base-path <path>', 'Base path for content routes')
499
548
  .option('-o, --output <path>', 'Output file path')
@@ -519,6 +568,11 @@ async function runCli() {
519
568
  outputContent = JSON.stringify(routes, null, 2);
520
569
  break;
521
570
  }
571
+ case 'objects': {
572
+ const routes = await getContentRouteObjects({basePath, includeTopLevel});
573
+ outputContent = JSON.stringify(routes, null, 2);
574
+ break;
575
+ }
522
576
  case 'urls': {
523
577
  const urls = await getContentUrls({baseUrl, basePath, includeTopLevel});
524
578
  outputContent = JSON.stringify(urls, null, 2);
@@ -534,7 +588,7 @@ async function runCli() {
534
588
  break;
535
589
  }
536
590
  default:
537
- throw new Error(`Unsupported format "${format}". Supported formats: array, urls, xml, llms.`);
591
+ throw new Error(`Unsupported format "${format}". Supported formats: array, objects, urls, xml, llms.`);
538
592
  }
539
593
 
540
594
  if (output) {
@@ -559,6 +613,7 @@ if (cliEntryPath && cliEntryPath === modulePath) {
559
613
 
560
614
  export default {
561
615
  getContentRoutes,
616
+ getContentRouteObjects,
562
617
  getContentUrls,
563
618
  getSitemapXml,
564
619
  getLlmsTxt
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name" : "neo.mjs",
3
- "version" : "11.11.0",
3
+ "version" : "11.12.0",
4
4
  "description": "Neo.mjs: The first Agent Operating System for the web. A standalone, type-safe AI SDK combined with a multi-threaded, zero-build platform for building autonomous agents and desktop-class web apps.",
5
5
  "type" : "module",
6
6
  "repository": {
@@ -131,18 +131,18 @@
131
131
  "@chroma-core/default-embed" : "^0.1.9",
132
132
  "@fortawesome/fontawesome-free": "^7.1.0",
133
133
  "@google/generative-ai" : "^0.24.1",
134
- "@modelcontextprotocol/sdk" : "^1.22.0",
135
- "@playwright/test" : "^1.56.1",
134
+ "@modelcontextprotocol/sdk" : "^1.23.0",
135
+ "@playwright/test" : "^1.57.0",
136
136
  "acorn" : "^8.15.0",
137
137
  "astring" : "^1.9.0",
138
138
  "autoprefixer" : "^10.4.22",
139
139
  "chalk" : "^5.6.2",
140
- "chromadb" : "^3.1.5",
140
+ "chromadb" : "^3.1.6",
141
141
  "clean-webpack-plugin" : "^4.0.0",
142
142
  "commander" : "^14.0.2",
143
143
  "cssnano" : "^7.1.2",
144
144
  "dotenv" : "^17.2.3",
145
- "envinfo" : "^7.20.0",
145
+ "envinfo" : "^7.21.0",
146
146
  "esbuild" : "^0.27.0",
147
147
  "fast-glob" : "^3.3.3",
148
148
  "fs-extra" : "^11.3.2",
@@ -150,10 +150,10 @@
150
150
  "gray-matter" : "^4.0.3",
151
151
  "highlightjs-line-numbers.js" : "^2.9.1",
152
152
  "html-minifier-terser" : "^7.2.0",
153
- "inquirer" : "^12.11.1",
153
+ "inquirer" : "^13.0.1",
154
154
  "jsdoc-api" : "^9.3.5",
155
155
  "js-yaml" : "^4.1.1",
156
- "marked" : "^17.0.0",
156
+ "marked" : "^17.0.1",
157
157
  "monaco-editor" : "0.50.0",
158
158
  "parse5" : "^8.0.0",
159
159
  "postcss" : "^8.5.6",
@@ -299,12 +299,12 @@ const DefaultConfig = {
299
299
  useVdomWorker: true,
300
300
  /**
301
301
  * buildScripts/injectPackageVersion.mjs will update this value
302
- * @default '11.11.0'
302
+ * @default '11.12.0'
303
303
  * @memberOf! module:Neo
304
304
  * @name config.version
305
305
  * @type String
306
306
  */
307
- version: '11.11.0'
307
+ version: '11.12.0'
308
308
  };
309
309
 
310
310
  Object.assign(DefaultConfig, {