@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.
@@ -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
- In placement metadata, raw `mdi-*` strings are acceptable because the shell menu runtime normalizes them before Vuetify renders the icon. A menu entry like this is fine:
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: "mdi-account-circle-outline"
228
+ icon: mdiAccountCircleOutline
227
229
  }
228
230
  });
229
231
  ```
230
232
 
231
- But do not copy that same string into a normal Vue component:
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 an `@mdi/js` path or a Vuetify alias instead:
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: `mdi-*` strings are fine
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 the normal menu-metadata case in `src/placement.js`, where a shell menu link may still use:
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
- icon: "mdi-cog-outline"
692
+ import { mdiPaw } from "@mdi/js";
693
+
694
+ icon: mdiPaw
693
695
  ```
694
696
 
695
- because the shell runtime normalizes that metadata before Vuetify renders it. So if you see a `doctor` icon warning, the fix is usually "switch this Vue component to `@mdi/js`", not "remove every `mdi-*` string from the app."
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, raw `mdi-*` strings are fine
104
- - inside normal Vue component props, they are not
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: "mdi-chart-box-outline"
115
+ icon: mdiChartBoxOutline
113
116
  }
114
117
  ```
115
118
 
116
- But if you later open the generated page file itself and add a Vuetify icon to the template, switch back to `@mdi/js`:
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 split matters because JSKIT's shell menu components normalize menu metadata icons for you, while direct Vue icon props go straight to Vuetify.
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/agent-docs",
3
- "version": "0.1.46",
3
+ "version": "0.1.47",
4
4
  "description": "Distributed JSKIT agent references, prompts, guides, and generated reference maps.",
5
5
  "type": "module",
6
6
  "files": [
@@ -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({ nativeWebSocket = globalThis.WebSocket, fallbackTransport = WebSocket } = {})`
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
- - `collectJskitPackageExports(targetRoot, packageJson = {})`
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