feat: add workspace templates and tab visibility
This commit is contained in:
+29
-10
@@ -872,8 +872,8 @@ Workspace existence/list хранится только в filesystem:
|
||||
`.verstak` может хранить только metadata, которая не заменяет filesystem:
|
||||
|
||||
- UI state: selected workspace, expanded folders, sort/pin state, preferences.
|
||||
- Semantic snapshot: applied template snapshot, enabled feature areas, folder
|
||||
conventions.
|
||||
- Semantic snapshot: applied template snapshot, enabled feature areas, exact
|
||||
`workspaceTools`, and folder conventions.
|
||||
|
||||
Template snapshot копируется в metadata при создании workspace. Workspace
|
||||
identity при этом остаётся именем top-level folder; `metadata.workspaceName`
|
||||
@@ -885,22 +885,39 @@ identity при этом остаётся именем top-level folder; `metada
|
||||
{
|
||||
"workspaceName": "Project",
|
||||
"createdFromTemplate": {
|
||||
"templateId": "client-project",
|
||||
"templateName": "Client Project",
|
||||
"templateId": "project",
|
||||
"templateName": "Project",
|
||||
"templateVersion": 1,
|
||||
"appliedAt": "2026-06-19T12:00:00Z"
|
||||
"appliedAt": "2026-06-19T12:00:00Z",
|
||||
"workspaceTools": [
|
||||
"verstak.notes",
|
||||
"verstak.files",
|
||||
"verstak.todo",
|
||||
"verstak.journal",
|
||||
"verstak.activity",
|
||||
"verstak.browser-inbox"
|
||||
]
|
||||
},
|
||||
"features": {
|
||||
"notes": true,
|
||||
"files": true,
|
||||
"secrets": true,
|
||||
"activity": false
|
||||
"todo": true,
|
||||
"journal": true,
|
||||
"activity": true,
|
||||
"browser-inbox": true
|
||||
},
|
||||
"folders": {
|
||||
"notes": "Notes",
|
||||
"files": "Files",
|
||||
"secrets": "Secrets"
|
||||
}
|
||||
"files": "Files"
|
||||
},
|
||||
"workspaceTools": [
|
||||
"verstak.notes",
|
||||
"verstak.files",
|
||||
"verstak.todo",
|
||||
"verstak.journal",
|
||||
"verstak.activity",
|
||||
"verstak.browser-inbox"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -912,6 +929,8 @@ update/migration может быть только явной future feature. Е
|
||||
### API
|
||||
|
||||
- `ListWorkspaces()` — список top-level physical folders.
|
||||
- `ListWorkspaceTemplates()` — selectable built-in templates с presentation
|
||||
metadata и `workspaceTools`.
|
||||
- `CreateWorkspace(name, templateId?)` — создать `<vault>/<name>/`, применить
|
||||
template один раз, сохранить snapshot metadata.
|
||||
- `RenameWorkspace(oldName, newName)` — физически переименовать top-level folder
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
# Workspace Templates
|
||||
|
||||
Workspace templates choose which dynamic plugin workspace tabs are visible when a
|
||||
new top-level workspace is created. They do not enable or disable plugins for the
|
||||
whole vault and do not affect global sidebar tools.
|
||||
|
||||
## Built-in templates
|
||||
|
||||
| Template | Workspace tabs |
|
||||
| --- | --- |
|
||||
| General | Notes, Files, Journal, Activity, Browser Inbox |
|
||||
| Project | Notes, Files, Todos, Journal, Activity, Browser Inbox |
|
||||
| Writing | Notes, Files, Journal |
|
||||
| Admin | Notes, Files, Secrets, Todos, Journal |
|
||||
| Minimal | Notes, Files |
|
||||
|
||||
The create-workspace modal displays the selected template description and its
|
||||
included plugin tabs before the folder is created.
|
||||
|
||||
## Metadata and compatibility
|
||||
|
||||
Creation stores a template snapshot in `.verstak/workspaces/` metadata. The
|
||||
snapshot contains the template id, name, version, applied time, and an ordered
|
||||
`workspaceTools` list of plugin IDs. Existing workspace metadata without
|
||||
`workspaceTools` remains compatible: its workspace continues to show all globally
|
||||
enabled workspace plugins rather than unexpectedly hiding tabs.
|
||||
|
||||
Templates are applied once. Editing the built-in catalog or creating another
|
||||
workspace with a different template never changes an existing workspace snapshot.
|
||||
There is no template editor or post-creation template switcher yet.
|
||||
|
||||
## Global tools and unavailable plugins
|
||||
|
||||
Template visibility applies only to `workspaceItems` in the selected workspace.
|
||||
Global views and sidebar items, such as global Todos, Browser Inbox, and Trash,
|
||||
remain available according to the normal plugin enablement state.
|
||||
|
||||
The workspace host intersects the snapshot with dynamically discovered, globally
|
||||
enabled plugin contributions. If a template references a plugin that is missing or
|
||||
disabled, that tab is simply absent; the other template tabs remain usable.
|
||||
Reference in New Issue
Block a user