@jskit-ai/agent-docs 0.1.46 → 0.1.47
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.
- package/guide/agent/app-setup/a-more-interesting-shell.md +8 -5
- package/guide/agent/app-setup/working-with-the-jskit-cli.md +5 -3
- package/guide/agent/generators/ui-generators.md +8 -5
- package/package.json +1 -1
- package/reference/autogen/KERNEL_MAP.md +1 -0
- package/reference/autogen/packages/auth-core.md +18 -0
- package/reference/autogen/packages/auth-provider-supabase-core.md +1 -1
- package/reference/autogen/packages/crud-core.md +8 -2
- package/reference/autogen/packages/http-runtime.md +1 -1
- package/reference/autogen/packages/json-rest-api-core.md +1 -0
- package/reference/autogen/packages/kernel.md +2 -0
- package/reference/autogen/packages/shell-web.md +6 -0
- package/reference/autogen/packages/workspaces-web.md +0 -24
- package/reference/autogen/tooling/jskit-cli.md +13 -3
|
@@ -211,9 +211,11 @@ There are two different paths to keep straight:
|
|
|
211
211
|
1. placement and menu metadata such as `src/placement.js`
|
|
212
212
|
2. direct Vuetify icon props inside normal `.vue` components
|
|
213
213
|
|
|
214
|
-
|
|
214
|
+
For placement metadata, prefer importing app-specific icons from `@mdi/js` in the placement file itself. The shell menu runtime accepts the resolved SVG path value and passes it through to Vuetify:
|
|
215
215
|
|
|
216
216
|
```js
|
|
217
|
+
import { mdiAccountCircleOutline } from "@mdi/js";
|
|
218
|
+
|
|
217
219
|
addPlacement({
|
|
218
220
|
id: "home.settings.profile.link",
|
|
219
221
|
target: "page.section-nav",
|
|
@@ -223,18 +225,18 @@ addPlacement({
|
|
|
223
225
|
props: {
|
|
224
226
|
label: "Profile",
|
|
225
227
|
to: "./profile",
|
|
226
|
-
icon:
|
|
228
|
+
icon: mdiAccountCircleOutline
|
|
227
229
|
}
|
|
228
230
|
});
|
|
229
231
|
```
|
|
230
232
|
|
|
231
|
-
|
|
233
|
+
Do not copy raw `mdi-*` strings into a normal Vue component:
|
|
232
234
|
|
|
233
235
|
```vue
|
|
234
236
|
<v-list-item prepend-icon="mdi-account-circle-outline" />
|
|
235
237
|
```
|
|
236
238
|
|
|
237
|
-
JSKIT apps use Vuetify's SVG MDI renderer, so direct Vue icon props should use
|
|
239
|
+
JSKIT apps use Vuetify's SVG MDI renderer, so direct Vue icon props should use the same `@mdi/js` path or a Vuetify alias instead:
|
|
238
240
|
|
|
239
241
|
```vue
|
|
240
242
|
<script setup>
|
|
@@ -246,7 +248,8 @@ import { mdiAccountCircleOutline } from "@mdi/js";
|
|
|
246
248
|
|
|
247
249
|
So the practical rule is:
|
|
248
250
|
|
|
249
|
-
- editing `src/placement.js` or other shell menu metadata: `
|
|
251
|
+
- editing `src/placement.js` or other shell menu metadata: import app-specific icons from `@mdi/js` and pass the constant
|
|
252
|
+
- raw `mdi-*` metadata strings are only safe for shell-web's small core normalized icon map
|
|
250
253
|
- editing a normal `.vue` file: use `@mdi/js` or a Vuetify alias such as `$close`
|
|
251
254
|
|
|
252
255
|
Later in the guide, `jskit doctor` will help catch the second mistake automatically.
|
|
@@ -686,13 +686,15 @@ That last check is narrower than it sounds. `doctor` is looking for the broken c
|
|
|
686
686
|
<v-icon icon="mdi-paw" />
|
|
687
687
|
```
|
|
688
688
|
|
|
689
|
-
It does not flag
|
|
689
|
+
It does not flag `src/placement.js` menu metadata because shell menu links normalize a small core icon map and also accept imported `@mdi/js` path constants. For app-specific icons, prefer a local import:
|
|
690
690
|
|
|
691
691
|
```js
|
|
692
|
-
|
|
692
|
+
import { mdiPaw } from "@mdi/js";
|
|
693
|
+
|
|
694
|
+
icon: mdiPaw
|
|
693
695
|
```
|
|
694
696
|
|
|
695
|
-
|
|
697
|
+
So if you see a `doctor` icon warning, the fix is usually "switch this Vue component to `@mdi/js`", not "centralize every icon in the app."
|
|
696
698
|
|
|
697
699
|
In other words, `doctor` helps catch drift between:
|
|
698
700
|
|
|
@@ -100,20 +100,23 @@ normally get adjusted.
|
|
|
100
100
|
|
|
101
101
|
The important icon rule is this:
|
|
102
102
|
|
|
103
|
-
- inside `src/placement.js` menu metadata,
|
|
104
|
-
-
|
|
103
|
+
- inside `src/placement.js` menu metadata, import app-specific icons from `@mdi/js` and pass the path constant
|
|
104
|
+
- only use raw `mdi-*` strings for the small set of shell-web core icons that JSKIT normalizes
|
|
105
|
+
- inside normal Vue component props, use the same `@mdi/js` path constants or a Vuetify alias
|
|
105
106
|
|
|
106
107
|
So this is a valid menu-placement customization:
|
|
107
108
|
|
|
108
109
|
```js
|
|
110
|
+
import { mdiChartBoxOutline } from "@mdi/js";
|
|
111
|
+
|
|
109
112
|
props: {
|
|
110
113
|
label: "Reports",
|
|
111
114
|
to: "/reports",
|
|
112
|
-
icon:
|
|
115
|
+
icon: mdiChartBoxOutline
|
|
113
116
|
}
|
|
114
117
|
```
|
|
115
118
|
|
|
116
|
-
|
|
119
|
+
If you later open the generated page file itself and add a Vuetify icon to the template, use the same `@mdi/js` pattern:
|
|
117
120
|
|
|
118
121
|
```vue
|
|
119
122
|
<script setup>
|
|
@@ -123,7 +126,7 @@ import { mdiChartBoxOutline } from "@mdi/js";
|
|
|
123
126
|
<v-icon :icon="mdiChartBoxOutline" />
|
|
124
127
|
```
|
|
125
128
|
|
|
126
|
-
This
|
|
129
|
+
This keeps icon imports local and tree-shakeable. Do not import the whole `@mdi/js` namespace just to look up icon names dynamically.
|
|
127
130
|
|
|
128
131
|
## What `page` is really good at
|
|
129
132
|
|
package/package.json
CHANGED
|
@@ -106,6 +106,7 @@ Exports
|
|
|
106
106
|
- `normalizeCrudLookupApiPath(value = "")`
|
|
107
107
|
- `normalizeCrudLookupNamespace(value = "")`
|
|
108
108
|
- `resolveCrudLookupApiPathFromNamespace(value = "")`
|
|
109
|
+
- `resolveCrudResourceScopeName(value = "")`
|
|
109
110
|
- `normalizeCrudLookupContainerKey(value, { defaultValue = DEFAULT_CRUD_LOOKUP_CONTAINER_KEY, context = "crud lookup container key" } = {})`
|
|
110
111
|
- `resolveCrudLookupContainerKey(resource = {}, options = {})`
|
|
111
112
|
- `resolveCrudLookupFieldKeys(resource = {}, { allowKeys = [] } = {})`
|
|
@@ -176,6 +176,18 @@ Exports
|
|
|
176
176
|
- `AUTH_ACCESS_TOKEN_MAX_LENGTH`
|
|
177
177
|
- `AUTH_REFRESH_TOKEN_MAX_LENGTH`
|
|
178
178
|
|
|
179
|
+
### `src/shared/authDenied.js`
|
|
180
|
+
Exports
|
|
181
|
+
- `AUTH_DENIED_CODE_MAX_LENGTH`
|
|
182
|
+
- `AUTH_DENIED_CODE_PATTERN`
|
|
183
|
+
- `AUTH_DENIED_CODES`
|
|
184
|
+
- `AUTH_DENIED_DEFAULT_MESSAGES`
|
|
185
|
+
- `AUTH_DENIED_LOGIN_MESSAGES`
|
|
186
|
+
- `AUTH_DENIED_MESSAGE_MAX_LENGTH`
|
|
187
|
+
- `normalizeAuthDenied(input = null)`
|
|
188
|
+
- `normalizeAuthDeniedCode(value = "")`
|
|
189
|
+
- `resolveAuthDeniedLoginMessage(input = null)`
|
|
190
|
+
|
|
179
191
|
### `src/shared/authMethods.js`
|
|
180
192
|
Exports
|
|
181
193
|
- `AUTH_METHOD_PASSWORD_ID`
|
|
@@ -234,6 +246,7 @@ Exports
|
|
|
234
246
|
- `devLoginAsOutputValidator`
|
|
235
247
|
- `logoutOutputValidator`
|
|
236
248
|
- `oauthProviderCatalogEntryOutputValidator`
|
|
249
|
+
- `authDeniedOutputSchema`
|
|
237
250
|
- `sessionOutputValidator`
|
|
238
251
|
- `sessionUnavailableOutputValidator`
|
|
239
252
|
- `createCommandMessages({ fields = {}, defaultMessage = "Invalid value." } = {})`
|
|
@@ -347,6 +360,11 @@ Exports
|
|
|
347
360
|
Exports
|
|
348
361
|
- `createApi`
|
|
349
362
|
- `runAuthSignOutFlow`
|
|
363
|
+
- `AUTH_DENIED_CODES`
|
|
364
|
+
- `AUTH_DENIED_DEFAULT_MESSAGES`
|
|
365
|
+
- `AUTH_DENIED_LOGIN_MESSAGES`
|
|
366
|
+
- `normalizeAuthDenied`
|
|
367
|
+
- `resolveAuthDeniedLoginMessage`
|
|
350
368
|
- `AUTH_PATHS`
|
|
351
369
|
- `buildAuthOauthStartPath`
|
|
352
370
|
|
|
@@ -194,7 +194,7 @@ Local functions
|
|
|
194
194
|
Exports
|
|
195
195
|
- `buildSupabaseServerClientOptions(options = {})`
|
|
196
196
|
Local functions
|
|
197
|
-
- `resolveRealtimeTransport(
|
|
197
|
+
- `resolveRealtimeTransport(options = {})`
|
|
198
198
|
|
|
199
199
|
### `src/server/lib/test-utils.js`
|
|
200
200
|
Exports
|
|
@@ -300,13 +300,19 @@ Local functions
|
|
|
300
300
|
- `isRecord(value)`
|
|
301
301
|
- `resolveSchemaFieldDefinitions(definition = null)`
|
|
302
302
|
- `resolveJsonApiRelationshipEntries(definition = null)`
|
|
303
|
+
- `readOwnValue(source = {}, key = "")`
|
|
304
|
+
- `resolveLookupContainer(record = {}, lookupContainerKey = "")`
|
|
305
|
+
- `resolveRelationshipValueSource(record = {}, entry = {}, { lookupContainerKey = "", preferLookup = false } = {})`
|
|
306
|
+
- `normalizeLookupId(value)`
|
|
307
|
+
- `normalizeRelationshipIdentifierId(value = null)`
|
|
308
|
+
- `createRelationshipIdentifier(entry = {}, value = null)`
|
|
303
309
|
- `createRecordAttributesResolver(definition = null, { excludeKeys = [] } = {})`
|
|
304
|
-
- `createRecordRelationshipsResolver(definition = null)`
|
|
310
|
+
- `createRecordRelationshipsResolver(definition = null, { lookupContainerKey = "" } = {})`
|
|
305
311
|
- `createRequestRelationshipMapper(definition = null)`
|
|
306
312
|
- `resolveOutputAttributeExcludeKeys(resource = {})`
|
|
307
313
|
- `resolveLookupContainerKey(resource = {})`
|
|
308
|
-
- `normalizeLookupId(value)`
|
|
309
314
|
- `normalizeIncludedLookupRecord(source = null, fallbackId = null)`
|
|
315
|
+
- `appendIncludedRelationshipResource({ included = [], seen = new Set(), entry = {}, lookupRecord = null, fallbackId = null } = {})`
|
|
310
316
|
- `createLookupIncludedResolver(definition = null, { lookupContainerKey = "" } = {})`
|
|
311
317
|
|
|
312
318
|
### `src/server/serviceEvents.js`
|
|
@@ -282,7 +282,7 @@ Local functions
|
|
|
282
282
|
- `resolveRouteTypes(value = {})`
|
|
283
283
|
- `resolveEmbeddedAttributesTransportSchema(definition, { context = "JSON:API resource", defaultMode = "replace", removeId = false, removeKeys = [] } = {})`
|
|
284
284
|
- `normalizeRelationshipSchemaEntries(entries = [])`
|
|
285
|
-
- `createJsonApiRelationshipDataSchema(relationshipType = "", { nullable = false } = {})`
|
|
285
|
+
- `createJsonApiRelationshipDataSchema(relationshipType = "", { many = false, nullable = false } = {})`
|
|
286
286
|
- `createJsonApiRelationshipsTransportSchema(entries = [], { includeRequired = false } = {})`
|
|
287
287
|
- `createJsonApiMetaSuccessTransportSchema({ meta } = {})`
|
|
288
288
|
- `defaultRecordTypeResolver(type)`
|
|
@@ -42,6 +42,7 @@ Local functions
|
|
|
42
42
|
- `normalizeJsonRestText(value, { fallback = "" } = {})`
|
|
43
43
|
- `normalizeJsonRestObject(value)`
|
|
44
44
|
- `normalizeJsonRestList(value)`
|
|
45
|
+
- `resolveJsonRestCollectionRelationships(resource = {})`
|
|
45
46
|
- `extractJsonApiInputRelationships(attributes = {}, resource = null, relationships = null)`
|
|
46
47
|
|
|
47
48
|
### root
|
|
@@ -270,6 +270,7 @@ Exports
|
|
|
270
270
|
- `normalizeCrudLookupApiPath(value = "")`
|
|
271
271
|
- `normalizeCrudLookupNamespace(value = "")`
|
|
272
272
|
- `resolveCrudLookupApiPathFromNamespace(value = "")`
|
|
273
|
+
- `resolveCrudResourceScopeName(value = "")`
|
|
273
274
|
- `normalizeCrudLookupContainerKey(value, { defaultValue = DEFAULT_CRUD_LOOKUP_CONTAINER_KEY, context = "crud lookup container key" } = {})`
|
|
274
275
|
- `resolveCrudLookupContainerKey(resource = {}, options = {})`
|
|
275
276
|
- `resolveCrudLookupFieldKeys(resource = {}, { allowKeys = [] } = {})`
|
|
@@ -1532,5 +1533,6 @@ Exports
|
|
|
1532
1533
|
- `loadInstalledPackageDescriptor({ appRoot, packageId, installedPackageState, required = false })`
|
|
1533
1534
|
- `resolveDescriptorPathForInstalledPackage({ appRoot, packageId, installedPackageState, required = false })`
|
|
1534
1535
|
Local functions
|
|
1536
|
+
- `resolveNodeModulesDescriptorCandidatePaths({ appRoot, packageId })`
|
|
1535
1537
|
- `resolveDescriptorCandidatePaths({ appRoot, packageId, installedPackageState })`
|
|
1536
1538
|
- `normalizeDescriptorPayload(descriptorModule)`
|
|
@@ -353,6 +353,12 @@ Local functions
|
|
|
353
353
|
- `isRelativeMenuLinkTarget(target = "")`
|
|
354
354
|
- `surfaceRequiresWorkspaceFromPlacementContext(contextValue = null, surfaceId = "")`
|
|
355
355
|
|
|
356
|
+
### `src/client/support/routeTransitionKey.js`
|
|
357
|
+
Exports
|
|
358
|
+
- `resolveShellRouteTransitionKey({ routePathKey = "", routeTransitionName = "", surfaceId = "" } = {})`
|
|
359
|
+
Local functions
|
|
360
|
+
- `normalizeText(value = "")`
|
|
361
|
+
|
|
356
362
|
### `src/server/support/localLinkItemScaffolds.js`
|
|
357
363
|
Exports
|
|
358
364
|
- `LOCAL_LINK_ITEM_COMPONENT_DEFINITIONS`
|
|
@@ -95,10 +95,6 @@ Local functions
|
|
|
95
95
|
- `submitMemberRoleUpdate(member, roleSid)`
|
|
96
96
|
- `submitRemoveMember(member)`
|
|
97
97
|
|
|
98
|
-
### `src/client/components/WorkspaceProfileClientElement.vue`
|
|
99
|
-
Exports
|
|
100
|
-
- None
|
|
101
|
-
|
|
102
98
|
### `src/client/components/WorkspacesClientElement.vue`
|
|
103
99
|
Exports
|
|
104
100
|
- None
|
|
@@ -115,26 +111,6 @@ Local functions
|
|
|
115
111
|
- `createWorkspace()`
|
|
116
112
|
- `refreshBootstrap()`
|
|
117
113
|
|
|
118
|
-
### `src/client/components/WorkspaceSettingsClientElement.vue`
|
|
119
|
-
Exports
|
|
120
|
-
- None
|
|
121
|
-
Local functions
|
|
122
|
-
- `toWorkspaceEntrySnapshot(entry = null)`
|
|
123
|
-
- `toWorkspaceListSnapshot(list = [])`
|
|
124
|
-
- `toWorkspaceSettingsSnapshot(settings = null)`
|
|
125
|
-
- `applyShellWorkspaceContext(payload = {})`
|
|
126
|
-
- `handleFormSaved()`
|
|
127
|
-
|
|
128
|
-
### `src/client/components/WorkspaceSettingsFieldsClientElement.vue`
|
|
129
|
-
Exports
|
|
130
|
-
- None
|
|
131
|
-
|
|
132
|
-
### `src/client/composables/useBootstrapQuery.js`
|
|
133
|
-
Exports
|
|
134
|
-
- `useBootstrapQuery({ workspaceSlug = "", enabled = true, staleTime = DEFAULT_BOOTSTRAP_STALE_TIME_MS, refetchOnMount = false, refetchOnWindowFocus = false } = {})`
|
|
135
|
-
Local functions
|
|
136
|
-
- `normalizeStaleTime(value, fallback = DEFAULT_BOOTSTRAP_STALE_TIME_MS)`
|
|
137
|
-
|
|
138
114
|
### `src/client/composables/useWorkspaceRouteContext.js`
|
|
139
115
|
Exports
|
|
140
116
|
- `useWorkspaceRouteContext()`
|
|
@@ -770,24 +770,34 @@ Local functions
|
|
|
770
770
|
Exports
|
|
771
771
|
- `HELPER_MAP_JSON_RELATIVE_PATH`
|
|
772
772
|
- `HELPER_MAP_MARKDOWN_RELATIVE_PATH`
|
|
773
|
-
- `buildHelperMap({ targetRoot })`
|
|
773
|
+
- `buildHelperMap({ targetRoot, previousMap = null })`
|
|
774
774
|
- `readHelperMap({ targetRoot })`
|
|
775
775
|
- `updateHelperMap({ targetRoot })`
|
|
776
776
|
Local functions
|
|
777
777
|
- `pathExists(filePath)`
|
|
778
778
|
- `readJsonFile(filePath)`
|
|
779
|
+
- `readFileHash(filePath)`
|
|
779
780
|
- `normalizePackageDependencies(packageJson = {})`
|
|
780
781
|
- `classifySymbol(name = "")`
|
|
781
782
|
- `createExportAnalysisProject()`
|
|
782
|
-
- `kindFromDeclaration(declaration, exportName = "")`
|
|
783
783
|
- `addSymbol(symbols, symbol)`
|
|
784
|
+
- `compilerNodeHasModifier(node, modifierKind)`
|
|
785
|
+
- `exportedDeclarationName(node)`
|
|
786
|
+
- `addExportedDeclarationSymbol(symbols, node, kind = "export")`
|
|
787
|
+
- `bindingNameTexts(bindingName, names = [])`
|
|
788
|
+
- `addVariableStatementExports(symbols, statement)`
|
|
789
|
+
- `addNamedExportSymbols(symbols, exportClause)`
|
|
784
790
|
- `extractExportedSymbols(sourceFile)`
|
|
785
791
|
- `extractVueScriptSource(source = "", filePath = "")`
|
|
786
792
|
- `addCodeFileToProject(project, file)`
|
|
787
793
|
- `walkCodeFiles(rootPath, relativeRoot = "")`
|
|
788
794
|
- `collectAppExports(targetRoot)`
|
|
789
795
|
- `flattenPackageExports(exportsField)`
|
|
790
|
-
- `
|
|
796
|
+
- `packageExportTargetRecords(packageRoot, exportTargets = [])`
|
|
797
|
+
- `packageExportFingerprint({ installedPackageJson = {}, packageName = "", targetRecords = [] } = {})`
|
|
798
|
+
- `cachedPackageExports(previousPackagesByName = new Map(), packageName = "", fingerprint = "")`
|
|
799
|
+
- `previousPackageMap(previousMap = null)`
|
|
800
|
+
- `collectJskitPackageExports(targetRoot, packageJson = {}, previousMap = null)`
|
|
791
801
|
- `renderExportList(symbols = [])`
|
|
792
802
|
- `renderHelperMapMarkdown(map)`
|
|
793
803
|
|