You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: frontend/omni/CHANGELOG.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,11 +12,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
12
12
- i18n support via `i18next` with browser language detection (supports English fallback and German). Translations are module-scoped: each module with user-facing strings has its own `locales/de.json`. New `src/modules/i18n/` module provides the `getT(namespace)` helper used by all components.
13
13
- Tools can now be toggled directly from the chat input panel via a wrench-icon popover — no separate Tools page needed.
14
14
- External frontend modules under `src/modules/external-*` can now carry their own npm dependencies through pnpm workspace package discovery, without requiring edits to the root `package.json`.
15
+
- Manifest `includes` support: the root `modules.json` can now declare an `includes` array to compose the module list from multiple JSON files. Included files are merged left-to-right; the root manifest always wins. Per-module `collisionStrategy` (`merge` | `replace` | `drop`) controls collision behaviour, mirroring the backend YAML config loader.
15
16
16
17
### Changed
17
18
18
19
- Switch frontend to Svelte
19
-
- Updated tools fetching and chat tool handling to support `/api/tools` responses as a raw list of function tools (instead of requiring a `{ tools: [...] }` envelope); legacy envelope parsing remains supported for compatibility.
20
+
- Updated tools fetching and chat tool handling to support `/api/tools` responses as a raw list of function tools (instead of requiring a `{ tools: [...] }` envelope)
20
21
- ChatInputPanel redesigned: textarea, model selector, tools selector, and send button are now visually inside a single input box (ai-sdk.dev/examples/chatbot style).
21
22
- Removed the Tools sidebar navigation item and `/tools` route from all module configurations.
22
23
- Made the chat tools selector popover scrollable with a viewport-constrained height so long tool lists remain fully accessible.
Copy file name to clipboardExpand all lines: frontend/omni/docs/architecture/core.md
+46Lines changed: 46 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -115,6 +115,52 @@ To activate a module, add it to `modules*.json`.
115
115
116
116
> **Auto-discovery**: The module registry automatically discovers all `.svelte` and `.svelte.ts` files under `src/modules/**` via Vite's `import.meta.glob`. No manual TypeScript registry entry is required.
117
117
118
+
#### `modules*.json` — top-level structure and includes
119
+
120
+
A manifest file has the following top-level shape:
121
+
122
+
```json
123
+
{
124
+
"version": "1.0.0",
125
+
"includes": [{ "path": "base.json" }],
126
+
"modules": [...]
127
+
}
128
+
```
129
+
130
+
-**version**: manifest format version (currently `"1.0.0"`)
131
+
-**includes**_(optional, root manifest only)_: list of other manifest files to merge in before this file's own modules. Each entry is an object with a `path` field. Relative paths are resolved relative to the current manifest. Nested includes (an included file itself containing `includes`) are not supported and throw an error.
132
+
-**modules**: array of module entries (see below)
133
+
134
+
**Load order** — mirrors the backend YAML config loader:
135
+
1. Included files are fetched and applied left-to-right; later includes win on collision.
136
+
2. The root manifest's own `modules` are applied last and always win.
137
+
138
+
**`collisionStrategy`** on a module entry controls what happens when that module's `id` already exists from an earlier include:
139
+
-`"merge"`*(default)* — deep-merges `config`; incoming wins on shared keys. `dependencies` is shallow-merged; incoming wins on key collision.
140
+
-`"replace"` — incoming entry fully replaces the existing one.
141
+
-`"drop"` — removes the existing entry; does not add the incoming one either.
142
+
143
+
`collisionStrategy` is stripped from the resolved manifest before it is used.
144
+
145
+
**Example** — composing a deployment-specific manifest from a base:
0 commit comments