@jskit-ai/agent-docs 0.1.4 → 0.1.6

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 (45) hide show
  1. package/DISTR_AGENT.md +2 -0
  2. package/guide/agent/generators/advanced-cruds.md +307 -51
  3. package/package.json +2 -1
  4. package/patterns/INDEX.md +33 -0
  5. package/patterns/child-cruds.md +30 -0
  6. package/patterns/crud-links.md +36 -0
  7. package/patterns/filters.md +92 -0
  8. package/patterns/live-actions.md +33 -0
  9. package/patterns/placements.md +28 -0
  10. package/patterns/surfaces.md +30 -0
  11. package/reference/autogen/KERNEL_MAP.md +27 -0
  12. package/reference/autogen/packages/agent-docs.md +1 -1
  13. package/reference/autogen/packages/assistant-core.md +1 -1
  14. package/reference/autogen/packages/assistant-runtime.md +22 -9
  15. package/reference/autogen/packages/assistant.md +1 -1
  16. package/reference/autogen/packages/auth-core.md +1 -1
  17. package/reference/autogen/packages/auth-provider-supabase-core.md +1 -1
  18. package/reference/autogen/packages/auth-web.md +1 -1
  19. package/reference/autogen/packages/console-core.md +1 -1
  20. package/reference/autogen/packages/console-web.md +1 -1
  21. package/reference/autogen/packages/crud-core.md +23 -1
  22. package/reference/autogen/packages/crud-server-generator.md +1 -1
  23. package/reference/autogen/packages/crud-ui-generator.md +2 -1
  24. package/reference/autogen/packages/database-runtime-mysql.md +1 -1
  25. package/reference/autogen/packages/database-runtime-postgres.md +1 -1
  26. package/reference/autogen/packages/database-runtime.md +1 -1
  27. package/reference/autogen/packages/http-runtime.md +1 -1
  28. package/reference/autogen/packages/kernel.md +28 -1
  29. package/reference/autogen/packages/realtime.md +1 -1
  30. package/reference/autogen/packages/shell-web.md +1 -1
  31. package/reference/autogen/packages/storage-runtime.md +1 -1
  32. package/reference/autogen/packages/ui-generator.md +1 -1
  33. package/reference/autogen/packages/uploads-image-web.md +1 -1
  34. package/reference/autogen/packages/uploads-runtime.md +1 -1
  35. package/reference/autogen/packages/users-core.md +1 -1
  36. package/reference/autogen/packages/users-web.md +36 -1
  37. package/reference/autogen/packages/workspaces-core.md +5 -1
  38. package/reference/autogen/packages/workspaces-web.md +9 -1
  39. package/reference/autogen/tooling/config-eslint.md +1 -1
  40. package/reference/autogen/tooling/create-app.md +1 -1
  41. package/reference/autogen/tooling/jskit-catalog.md +1 -1
  42. package/reference/autogen/tooling/jskit-cli.md +1 -1
  43. package/reference/autogen/tooling/test-support.md +1 -1
  44. package/reference/autogen/tooling/testUtils.md +1 -1
  45. package/templates/app/AGENTS.md +2 -0
@@ -0,0 +1,33 @@
1
+ # Live Action Patterns
2
+
3
+ Use when:
4
+
5
+ - wiring checkboxes
6
+ - toggles
7
+ - archive/delete/reopen/publish actions
8
+ - small inline PATCH/POST/DELETE actions
9
+
10
+ Rules:
11
+
12
+ - Prefer `useCommand()` for live actions.
13
+ - Prefer form runtimes such as `useCrudAddEdit()` or `useAddEdit()` for real forms.
14
+ - Prefer `useCrudList()` and `useCrudView()` for routed CRUD loading and URL resolution.
15
+
16
+ Good live-action pattern:
17
+
18
+ - build a narrow payload
19
+ - call `command.run()`
20
+ - disable only the busy control while the command is running
21
+ - invalidate the relevant query key on success
22
+ - keep derived business rules on the server
23
+
24
+ Examples:
25
+
26
+ - checkbox toggles
27
+ - inline status changes
28
+ - quick destructive or publish/unpublish actions
29
+
30
+ Avoid:
31
+
32
+ - manually hand-rolling fetch logic for a standard live action when `useCommand()` fits
33
+ - pushing derived write rules into the client just because the action is small
@@ -0,0 +1,28 @@
1
+ # Placement Patterns
2
+
3
+ Use when:
4
+
5
+ - changing tab icons
6
+ - changing menu link icons or labels
7
+ - moving shell links
8
+ - changing profile or settings menu entries
9
+ - debugging why a visible link does not match the page component
10
+
11
+ Check first:
12
+
13
+ - app `src/placement.js`
14
+ - package placement contributions
15
+ - linked component token props
16
+
17
+ Rules:
18
+
19
+ - In JSKIT, tab-like links and shell/menu entries are often placement-owned, not page-owned.
20
+ - When asked to change a tab or menu icon, inspect placement metadata before editing page components.
21
+ - Look at placement `props`, especially fields such as `icon`, `prependIcon`, `appendIcon`, or props passed into the linked component token.
22
+ - If the visible entry is contributed by a package, update the owning package placement contribution instead of patching a local page component.
23
+ - If the request is really about where a link appears, check the placement `target`, `surfaces`, `order`, and `when` fields before changing UI markup.
24
+
25
+ Avoid:
26
+
27
+ - editing the routed page just to change a shell/tab/menu icon that is actually placement-owned
28
+ - assuming a rendered tab label/icon lives in the page component
@@ -0,0 +1,30 @@
1
+ # Surface Patterns
2
+
3
+ Use when:
4
+
5
+ - adding a new screen or feature
6
+ - generating pages
7
+ - adding menu entries or widgets
8
+ - deciding whether something belongs in `home`, `app`, `admin`, `console`, or another surface
9
+
10
+ Check first:
11
+
12
+ - the blueprint surface plan
13
+ - existing route roots under `src/pages`
14
+ - placement visibility by `surfaces`
15
+
16
+ Rules:
17
+
18
+ - Always ask which surface the feature belongs to before generating routes, placements, or related UI.
19
+ - Do not silently default new functionality to `app`.
20
+ - Surface choice is architectural, not cosmetic. It controls routes, access, placement visibility, and often data ownership expectations.
21
+ - When a link or widget should only appear on certain surfaces, use placement `surfaces` first and keep runtime `when` conditions for behavior-specific gating.
22
+
23
+ Ask explicitly about:
24
+
25
+ - route pages
26
+ - menu entries
27
+ - top-left/top-right widgets
28
+ - settings pages
29
+ - CRUD screens
30
+ - helper components that only make sense on one surface
@@ -25,6 +25,33 @@ For the full repo inventory, read `reference/autogen/README.md` and the package
25
25
  Exports
26
26
  - `isContainerToken(value)`
27
27
 
28
+ ### `support/crudListFilters.js`
29
+ Exports
30
+ - `CRUD_LIST_FILTER_TYPE_FLAG`
31
+ - `CRUD_LIST_FILTER_TYPE_ENUM`
32
+ - `CRUD_LIST_FILTER_TYPE_ENUM_MANY`
33
+ - `CRUD_LIST_FILTER_TYPE_RECORD_ID`
34
+ - `CRUD_LIST_FILTER_TYPE_RECORD_ID_MANY`
35
+ - `CRUD_LIST_FILTER_TYPE_DATE`
36
+ - `CRUD_LIST_FILTER_TYPE_DATE_RANGE`
37
+ - `CRUD_LIST_FILTER_TYPE_NUMBER_RANGE`
38
+ - `CRUD_LIST_FILTER_TYPE_PRESENCE`
39
+ - `CRUD_LIST_FILTER_TYPES`
40
+ - `CRUD_LIST_FILTER_PRESENCE_PRESENT`
41
+ - `CRUD_LIST_FILTER_PRESENCE_MISSING`
42
+ - `CRUD_LIST_FILTER_PRESENCE_OPTIONS`
43
+ - `defineCrudListFilters(definitions = {})`
44
+ - `resolveCrudListFilterQueryKeys(definition = {})`
45
+ - `resolveCrudListFilterOptionLabel(definition = {}, value = "", { fallback = "" } = {})`
46
+ Local functions
47
+ - `normalizeCrudListFilterType(value = "")`
48
+ - `normalizeCrudListFilterOption(rawOption = null, { context = "filter option" } = {})`
49
+ - `normalizeCrudListFilterOptions(rawOptions = [], { context = "filter options" } = {})`
50
+ - `normalizeCrudListFilterPresenceOptions(rawOptions = [])`
51
+ - `normalizeCrudListFilterLookup(rawLookup = null)`
52
+ - `resolveCrudListFilterOptionSet(rawDefinition = {}, type = "")`
53
+ - `normalizeCrudListFilterDefinition(rawKey = "", rawDefinition = null)`
54
+
28
55
  ### `support/crudLookup.js`
29
56
  Exports
30
57
  - `DEFAULT_CRUD_LOOKUP_CONTAINER_KEY`
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/agent-docs/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/assistant-core/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/assistant-runtime/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -55,6 +55,13 @@ Exports
55
55
  Exports
56
56
  - `AssistantClientProvider`
57
57
 
58
+ ### `src/client/support/workspaceScopeSupport.js`
59
+ Exports
60
+ - `EMPTY_WORKSPACE_WEB_SCOPE_SUPPORT`
61
+ - `WORKSPACES_WEB_SCOPE_SUPPORT_INJECTION_KEY`
62
+ - `isWorkspaceWebScopeSupport(value)`
63
+ - `useWorkspaceWebScopeSupport({ required = false } = {})`
64
+
58
65
  ### `src/server/actionIds.js`
59
66
  Exports
60
67
  - `actionIds`
@@ -79,16 +86,16 @@ Exports
79
86
  Exports
80
87
  - `registerRoutes(app)`
81
88
  Local functions
82
- - `buildRouteParamsValidator(requiresWorkspace)`
83
- - `buildConversationMessagesRouteParamsValidator(requiresWorkspace)`
84
- - `readWorkspaceInput(request, requiresWorkspace)`
89
+ - `buildRouteParamsValidator(requiresWorkspace, workspaceScopeSupport = null)`
90
+ - `buildConversationMessagesRouteParamsValidator(requiresWorkspace, workspaceScopeSupport = null)`
91
+ - `readWorkspaceInput(request, requiresWorkspace, workspaceScopeSupport = null)`
85
92
  - `requireAssistantSurface(appConfig = {}, targetSurfaceId = "")`
86
93
  - `requireHostSurfaceId(request)`
87
94
  - `shouldExposeAppErrorDetails(errorCode = "")`
88
95
  - `sendPreStreamErrorResponse(reply, error)`
89
- - `resolveRouteRequestState(request, { resolveCurrentAppConfig = () => ({}), kind = "runtime", requiresWorkspace = false } = {})`
90
- - `registerSettingsRoutes(router, resolveCurrentAppConfig, { requiresWorkspace = false } = {})`
91
- - `registerRuntimeRoutes(router, resolveCurrentAppConfig, { requiresWorkspace = false } = {})`
96
+ - `resolveRouteRequestState(request, { resolveCurrentAppConfig = () => ({}), kind = "runtime", requiresWorkspace = false, workspaceScopeSupport = null } = {})`
97
+ - `registerSettingsRoutes(router, resolveCurrentAppConfig, { requiresWorkspace = false, workspaceScopeSupport = null } = {})`
98
+ - `registerRuntimeRoutes(router, resolveCurrentAppConfig, { requiresWorkspace = false, workspaceScopeSupport = null } = {})`
92
99
 
93
100
  ### `src/server/repositories/assistantConfigRepository.js`
94
101
  Exports
@@ -128,11 +135,11 @@ Local functions
128
135
 
129
136
  ### `src/server/services/assistantConfigService.js`
130
137
  Exports
131
- - `createService({ assistantConfigRepository, consoleService = null, appConfig = {}, resolveAppConfig = null } = {})`
138
+ - `createService({ assistantConfigRepository, consoleService = null, appConfig = {}, resolveAppConfig = null, workspaceScopeSupport = null } = {})`
132
139
 
133
140
  ### `src/server/services/chatService.js`
134
141
  Exports
135
- - `createChatService({ aiClientFactory, transcriptService, serviceToolCatalog, assistantConfigService, appConfig = {}, resolveAppConfig = null } = {})`
142
+ - `createChatService({ aiClientFactory, transcriptService, serviceToolCatalog, assistantConfigService, appConfig = {}, resolveAppConfig = null, workspaceScopeSupport = null } = {})`
136
143
  Local functions
137
144
  - `normalizeConversationId(value)`
138
145
  - `normalizeHistory(history = [])`
@@ -183,6 +190,12 @@ Local functions
183
190
  - `buildCatalogOptions(appConfig = {}, surfaceId = "")`
184
191
  - `requireContextSurfaceId(context = {})`
185
192
 
193
+ ### `src/server/support/workspaceScopeSupport.js`
194
+ Exports
195
+ - `WORKSPACES_SERVER_SCOPE_SUPPORT_TOKEN`
196
+ - `isWorkspaceServerScopeSupport(value)`
197
+ - `resolveWorkspaceServerScopeSupport(scope = null, { required = false, caller = "assistant-runtime" } = {})`
198
+
186
199
  ### `src/shared/assistantRuntimeConfig.js`
187
200
  Exports
188
201
  - `assistantRuntimeConfig`
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/assistant/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/auth-core/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/auth-provider-supabase-core/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/auth-web/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/console-core/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/console-web/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/crud-core/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -132,6 +132,28 @@ Local functions
132
132
  - `resolveRoleMatrixPolicy(matrix = {}, operation = "readable", input = {})`
133
133
  - `applyReadableFieldPolicyToRecord(record, allowedFields, outputRules = null, { context = "crudFieldAccess" } = {})`
134
134
 
135
+ ### `src/server/listFilters.js`
136
+ Exports
137
+ - `CRUD_LIST_FILTER_INVALID_VALUES_REJECT`
138
+ - `CRUD_LIST_FILTER_INVALID_VALUES_DISCARD`
139
+ - `createCrudListFilters(definitions = {}, { columns = {}, apply = {} } = {})`
140
+ Local functions
141
+ - `normalizeCrudListFilterInvalidValues(value = "")`
142
+ - `createSingleOrMultiValueSchema(itemSchema)`
143
+ - `firstValue(value)`
144
+ - `normalizeDateFilterValue(value)`
145
+ - `normalizeNumberFilterValue(value)`
146
+ - `normalizeRecordIdFilterValue(value)`
147
+ - `normalizeRecordIdFilterValues(value)`
148
+ - `resolveAllowedOptionValues(filter = {})`
149
+ - `normalizeAllowedTextValue(value, allowedValues = new Set())`
150
+ - `normalizeAllowedTextValues(value, allowedValues = new Set())`
151
+ - `addDaysToDateFilterValue(value = "", days = 0)`
152
+ - `createFilterQuerySchema(filter = {}, { invalidValues = CRUD_LIST_FILTER_INVALID_VALUES_REJECT } = {})`
153
+ - `normalizeFilterValue(filter = {}, source = {})`
154
+ - `normalizeColumnsMap(columns = {})`
155
+ - `applyDefaultFilterQuery(queryBuilder, filter = {}, value, column = "")`
156
+
135
157
  ### `src/server/listQueryValidators.js`
136
158
  Exports
137
159
  - `createCrudCursorPaginationQueryValidator(list = {})`
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/crud-server-generator/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/crud-ui-generator/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -82,6 +82,7 @@ Local functions
82
82
  - `toLookupRelation(fieldMetaMap = {}, fieldKey = "", { lookupContainerKey = "lookups" } = {})`
83
83
  - `resolveFormInputType(fieldType, fieldFormat)`
84
84
  - `resolveFormFieldComponent(fieldType, relation = null)`
85
+ - `buildDefaultNullableBooleanOptions()`
85
86
  - `toPositiveInteger(value)`
86
87
  - `toAccessorExpression(baseName, fieldKey)`
87
88
  - `toOptionalAccessorExpression(baseName, fieldKey)`
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/database-runtime-mysql/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/database-runtime-postgres/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/database-runtime/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/http-runtime/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/kernel/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -199,6 +199,33 @@ Exports
199
199
  Exports
200
200
  - `isContainerToken(value)`
201
201
 
202
+ ### `shared/support/crudListFilters.js`
203
+ Exports
204
+ - `CRUD_LIST_FILTER_TYPE_FLAG`
205
+ - `CRUD_LIST_FILTER_TYPE_ENUM`
206
+ - `CRUD_LIST_FILTER_TYPE_ENUM_MANY`
207
+ - `CRUD_LIST_FILTER_TYPE_RECORD_ID`
208
+ - `CRUD_LIST_FILTER_TYPE_RECORD_ID_MANY`
209
+ - `CRUD_LIST_FILTER_TYPE_DATE`
210
+ - `CRUD_LIST_FILTER_TYPE_DATE_RANGE`
211
+ - `CRUD_LIST_FILTER_TYPE_NUMBER_RANGE`
212
+ - `CRUD_LIST_FILTER_TYPE_PRESENCE`
213
+ - `CRUD_LIST_FILTER_TYPES`
214
+ - `CRUD_LIST_FILTER_PRESENCE_PRESENT`
215
+ - `CRUD_LIST_FILTER_PRESENCE_MISSING`
216
+ - `CRUD_LIST_FILTER_PRESENCE_OPTIONS`
217
+ - `defineCrudListFilters(definitions = {})`
218
+ - `resolveCrudListFilterQueryKeys(definition = {})`
219
+ - `resolveCrudListFilterOptionLabel(definition = {}, value = "", { fallback = "" } = {})`
220
+ Local functions
221
+ - `normalizeCrudListFilterType(value = "")`
222
+ - `normalizeCrudListFilterOption(rawOption = null, { context = "filter option" } = {})`
223
+ - `normalizeCrudListFilterOptions(rawOptions = [], { context = "filter options" } = {})`
224
+ - `normalizeCrudListFilterPresenceOptions(rawOptions = [])`
225
+ - `normalizeCrudListFilterLookup(rawLookup = null)`
226
+ - `resolveCrudListFilterOptionSet(rawDefinition = {}, type = "")`
227
+ - `normalizeCrudListFilterDefinition(rawKey = "", rawDefinition = null)`
228
+
202
229
  ### `shared/support/crudLookup.js`
203
230
  Exports
204
231
  - `DEFAULT_CRUD_LOOKUP_CONTAINER_KEY`
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/realtime/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/shell-web/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/storage-runtime/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/ui-generator/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/uploads-image-web/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/uploads-runtime/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/users-core/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/users-web/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -104,6 +104,7 @@ Local functions
104
104
  - `resolveStableFieldErrorList(fieldKey, message)`
105
105
  - `resolveFormFieldType(field = {})`
106
106
  - `resolveFormFieldFormat(field = {})`
107
+ - `isNullableFormField(field = {})`
107
108
  - `padDateTimePart(value)`
108
109
  - `normalizeTimeWhitespace(value)`
109
110
  - `toTimeInputValue(value)`
@@ -112,6 +113,18 @@ Local functions
112
113
  - `resolveFormFieldInitialValue(field = {})`
113
114
  - `shouldSerializeClearedFieldAsNull(field = {})`
114
115
 
116
+ ### `src/client/composables/internal/crudListFilterLookupSupport.js`
117
+ Exports
118
+ - `normalizeLookupQueryKeyPrefix(value = [])`
119
+ - `normalizeLookupLabelResolverMap(value = {})`
120
+ - `normalizeLookupRequestQueryParamsMap(value = {})`
121
+ - `resolveLookupSelectedValues(filter = {}, rawValue = undefined)`
122
+ - `createLookupOptionsFromItems(items = [], filter = {}, labelResolver = null)`
123
+ - `mergeSelectedLookupOptions(options = [], selectedValues = [], cachedOptions = new Map())`
124
+ - `resolveLookupOptionLabel(options = [], cachedOptions = new Map(), value = "", fallback = "Option")`
125
+ Local functions
126
+ - `createLookupOptionFromItem(item = {}, filter = {}, labelResolver = null)`
127
+
115
128
  ### `src/client/composables/internal/crudListParentTitleSupport.js`
116
129
  Exports
117
130
  - `resolveCrudListParentDescriptor({ resource = {}, route = null, recordIdParam = "recordId" } = {})`
@@ -339,6 +352,28 @@ Exports
339
352
  Exports
340
353
  - `useCommand({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", runPermissions = [], writeMethod = "POST", placementSource = "users-web.command", fallbackRunError = "Unable to complete action.", fieldErrorKeys = [], clearOnRouteChange = true, model, parseInput, buildRawPayload, buildCommandPayload, buildCommandOptions, onRunSuccess, onRunError, suppressSuccessMessage = false, messages = {}, realtime = null } = {})`
341
354
 
355
+ ### `src/client/composables/useCrudListFilterLookups.js`
356
+ Exports
357
+ - `useCrudListFilterLookups(definitions = {}, { values = {}, adapter = null, recordIdParam = "recordId", queryKeyPrefix = [], placementSourcePrefix = "", requestQueryParams = {}, labelResolvers = {} } = {})`
358
+
359
+ ### `src/client/composables/useCrudListFilters.js`
360
+ Exports
361
+ - `useCrudListFilters(definitions = {}, { labelResolvers = {}, chipLabels = {}, presets = [] } = {})`
362
+ Local functions
363
+ - `normalizeFunctionMap(value = {})`
364
+ - `createInitialFilterValue(filter = {})`
365
+ - `normalizePresetEntries(presets = [])`
366
+ - `resolvePresetValues(preset = {}, { values = {}, filters = {} } = {})`
367
+ - `normalizePresetFilterValue(filter = {}, rawValue)`
368
+ - `normalizeCurrentManyFilterValues(value)`
369
+ - `matchArrayValues(currentValue = [], expectedValue = [])`
370
+ - `matchesPresetFilterValue(filter = {}, currentValue, rawExpectedValue)`
371
+ - `resetFilterValue(values, filter = {})`
372
+ - `applyPresetFilterValue(values, filter = {}, rawValue)`
373
+ - `createQueryParams(values, filterEntries = [])`
374
+ - `resolveAtomicValueLabel(filter = {}, value = "", labelResolvers = {})`
375
+ - `defaultChipLabel(filter = {}, value, labelResolvers = {})`
376
+
342
377
  ### `src/client/composables/useCrudListParentTitle.js`
343
378
  Exports
344
379
  - `useCrudListParentTitle({ listRuntime = null, resource = {}, adapter = null, recordIdParam = "recordId", queryKeyPrefix = ["users-web", "crud-list-parent-title"], placementSource = "users-web.crud-list-parent-title", fallbackLoadError = "Unable to load parent record.", notFoundMessage = "Parent record not found.", route = null, viewRuntimeFactory = useView } = {})`
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/workspaces-core/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -154,6 +154,10 @@ Exports
154
154
  - `readWorkspaceSlugFromRouteParams(params = {})`
155
155
  - `buildWorkspaceInputFromRouteParams(params = {})`
156
156
 
157
+ ### `src/server/support/workspaceServerScopeSupport.js`
158
+ Exports
159
+ - `createWorkspaceServerScopeSupport()`
160
+
157
161
  ### `src/server/workspaceBootstrapContributor.js`
158
162
  Exports
159
163
  - `createWorkspaceBootstrapContributor({ workspaceService, workspacePendingInvitationsService, usersRepository, workspaceInvitationsEnabled = false, appConfig = {}, tenancyProfile = null } = {})`
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `packages/workspaces-web/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -313,6 +313,14 @@ Exports
313
313
  Exports
314
314
  - `buildWorkspaceQueryKey(kind = "", surfaceId = "", workspaceSlug = "")`
315
315
 
316
+ ### `src/client/support/workspaceScopeSupport.js`
317
+ Exports
318
+ - `WORKSPACES_WEB_SCOPE_SUPPORT_INJECTION_KEY`
319
+ - `createWorkspaceScopeSupport()`
320
+ - `readWorkspaceRouteScope(routeContext = {})`
321
+ Local functions
322
+ - `unwrapRefValue(value)`
323
+
316
324
  ### `src/shared/toolsOutletContracts.js`
317
325
  Exports
318
326
  - `DEFAULT_TOOLS_LINK_COMPONENT_TOKEN`
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `tooling/config-eslint/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14
 
@@ -8,7 +8,7 @@ Use this on demand; do not load the full index at startup.
8
8
 
9
9
  ## Scope
10
10
  - Source: `tooling/create-app/**/*{.js,.mjs,.cjs,.vue}`
11
- - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`
11
+ - Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
12
12
 
13
13
  ## Sections
14
14