@jskit-ai/agent-docs 0.1.131 → 0.1.133

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 (171) hide show
  1. package/guide/agent/app-extras/assistant.md +29 -605
  2. package/guide/agent/app-extras/mobile-capacitor.md +29 -362
  3. package/guide/agent/app-extras/realtime.md +29 -277
  4. package/guide/agent/app-setup/a-more-interesting-shell.md +44 -815
  5. package/guide/agent/app-setup/authentication.md +43 -1073
  6. package/guide/agent/app-setup/console.md +26 -298
  7. package/guide/agent/app-setup/database-layer.md +110 -790
  8. package/guide/agent/app-setup/existing-application-migration.md +273 -0
  9. package/guide/agent/app-setup/initial-scaffolding.md +50 -784
  10. package/guide/agent/app-setup/multi-homing.md +39 -712
  11. package/guide/agent/app-setup/quickstart.md +43 -179
  12. package/guide/agent/app-setup/users.md +34 -353
  13. package/guide/agent/index.md +17 -23
  14. package/package.json +2 -2
  15. package/patterns/INDEX.md +7 -7
  16. package/patterns/child-cruds.md +3 -3
  17. package/patterns/client-requests.md +6 -6
  18. package/patterns/crud-authoring.md +94 -0
  19. package/patterns/crud-links.md +1 -1
  20. package/patterns/feature-package/PATTERN.md +108 -0
  21. package/patterns/feature-package/example/booking-engine/package.json +48 -0
  22. package/patterns/feature-package/example/booking-engine/src/server/BookingEngineProvider.js +33 -0
  23. package/patterns/feature-package/example/booking-engine/src/server/actions.js +26 -0
  24. package/patterns/feature-package/example/booking-engine/src/server/inputSchemas.js +19 -0
  25. package/patterns/feature-package/example/variations/AvailabilityEngineProvider.js +31 -0
  26. package/patterns/feature-package/example/variations/InvoiceRollupProvider.js +36 -0
  27. package/patterns/feature-package/example/variations/customKnexRepository.js +34 -0
  28. package/patterns/feature-package/example/variations/orchestratorService.js +23 -0
  29. package/patterns/filters.md +8 -8
  30. package/patterns/live-actions.md +5 -18
  31. package/patterns/minimal-foundation/PATTERN.md +98 -0
  32. package/patterns/minimal-foundation/example/.nvmrc +1 -0
  33. package/patterns/minimal-foundation/example/AGENTS.md +17 -0
  34. package/patterns/minimal-foundation/example/Procfile +2 -0
  35. package/patterns/minimal-foundation/example/app.json +14 -0
  36. package/patterns/minimal-foundation/example/bin/develop.js +71 -0
  37. package/patterns/minimal-foundation/example/bin/server.js +8 -0
  38. package/patterns/minimal-foundation/example/config/public.js +40 -0
  39. package/patterns/minimal-foundation/example/config/server.js +1 -0
  40. package/patterns/minimal-foundation/example/config/surfaceAccessPolicies.js +3 -0
  41. package/patterns/minimal-foundation/example/eslint.config.mjs +19 -0
  42. package/patterns/minimal-foundation/example/favicon.svg +7 -0
  43. package/patterns/minimal-foundation/example/gitignore +9 -0
  44. package/patterns/minimal-foundation/example/index.html +13 -0
  45. package/patterns/minimal-foundation/example/jsconfig.json +8 -0
  46. package/patterns/minimal-foundation/example/package.json +57 -0
  47. package/patterns/minimal-foundation/example/packages/main/package.json +42 -0
  48. package/patterns/minimal-foundation/example/packages/main/src/shared/index.js +10 -0
  49. package/patterns/minimal-foundation/example/packages/main/src/shared/schemas/index.js +22 -0
  50. package/patterns/minimal-foundation/example/playwright.config.mjs +31 -0
  51. package/patterns/minimal-foundation/example/server/lib/runtimeEnv.js +45 -0
  52. package/patterns/minimal-foundation/example/server/lib/surfaceRuntime.js +10 -0
  53. package/patterns/minimal-foundation/example/server.js +195 -0
  54. package/patterns/minimal-foundation/example/src/App.vue +13 -0
  55. package/patterns/minimal-foundation/example/src/main.js +85 -0
  56. package/patterns/minimal-foundation/example/src/pages/home/index.vue +48 -0
  57. package/patterns/minimal-foundation/example/src/pages/home.vue +13 -0
  58. package/patterns/minimal-foundation/example/src/views/NotFound.vue +13 -0
  59. package/patterns/minimal-foundation/example/tests/client/smoke.vitest.js +7 -0
  60. package/patterns/minimal-foundation/example/tests/e2e/base-shell.spec.ts +23 -0
  61. package/patterns/minimal-foundation/example/tests/server/smoke.test.js +16 -0
  62. package/patterns/minimal-foundation/example/vite.config.mjs +81 -0
  63. package/patterns/page-scaffolding.md +20 -17
  64. package/patterns/placements.md +17 -15
  65. package/patterns/row-policies.md +4 -5
  66. package/patterns/server-search.md +3 -3
  67. package/patterns/shell-foundation/PATTERN.md +104 -0
  68. package/patterns/shell-foundation/example/.nvmrc +1 -0
  69. package/patterns/shell-foundation/example/AGENTS.md +17 -0
  70. package/patterns/shell-foundation/example/Procfile +2 -0
  71. package/patterns/shell-foundation/example/app.json +14 -0
  72. package/patterns/shell-foundation/example/bin/develop.js +71 -0
  73. package/patterns/shell-foundation/example/bin/server.js +8 -0
  74. package/patterns/shell-foundation/example/config/public.js +40 -0
  75. package/patterns/shell-foundation/example/config/server.js +1 -0
  76. package/patterns/shell-foundation/example/config/surfaceAccessPolicies.js +3 -0
  77. package/patterns/shell-foundation/example/eslint.config.mjs +19 -0
  78. package/patterns/shell-foundation/example/favicon.svg +7 -0
  79. package/patterns/shell-foundation/example/gitignore +9 -0
  80. package/patterns/shell-foundation/example/index.html +13 -0
  81. package/patterns/shell-foundation/example/jsconfig.json +8 -0
  82. package/patterns/shell-foundation/example/package.json +59 -0
  83. package/patterns/shell-foundation/example/packages/main/package.json +56 -0
  84. package/patterns/shell-foundation/example/packages/main/src/client/index.js +9 -0
  85. package/patterns/shell-foundation/example/packages/main/src/client/providers/MainClientProvider.js +18 -0
  86. package/patterns/shell-foundation/example/packages/main/src/shared/index.js +10 -0
  87. package/patterns/shell-foundation/example/packages/main/src/shared/schemas/index.js +22 -0
  88. package/patterns/shell-foundation/example/playwright.config.mjs +31 -0
  89. package/patterns/shell-foundation/example/server/lib/runtimeEnv.js +45 -0
  90. package/patterns/shell-foundation/example/server/lib/surfaceRuntime.js +10 -0
  91. package/patterns/shell-foundation/example/server.js +195 -0
  92. package/patterns/shell-foundation/example/src/App.vue +11 -0
  93. package/patterns/shell-foundation/example/src/components/ShellLayout.vue +12 -0
  94. package/patterns/shell-foundation/example/src/components/menus/MenuLinkItem.vue +30 -0
  95. package/patterns/shell-foundation/example/src/components/menus/SurfaceAwareMenuLinkItem.vue +42 -0
  96. package/patterns/shell-foundation/example/src/components/menus/TabLinkItem.vue +42 -0
  97. package/patterns/shell-foundation/example/src/error.js +19 -0
  98. package/patterns/shell-foundation/example/src/main.js +85 -0
  99. package/patterns/shell-foundation/example/src/pages/home/index.vue +116 -0
  100. package/patterns/shell-foundation/example/src/pages/home/settings/general/index.vue +40 -0
  101. package/patterns/shell-foundation/example/src/pages/home/settings/index.vue +7 -0
  102. package/patterns/shell-foundation/example/src/pages/home/settings.vue +109 -0
  103. package/patterns/shell-foundation/example/src/pages/home.vue +20 -0
  104. package/patterns/shell-foundation/example/src/placement.js +56 -0
  105. package/patterns/shell-foundation/example/src/placementTopology.js +149 -0
  106. package/patterns/shell-foundation/example/src/views/NotFound.vue +13 -0
  107. package/patterns/shell-foundation/example/tests/client/smoke.vitest.js +7 -0
  108. package/patterns/shell-foundation/example/tests/e2e/adaptive-shell.spec.ts +10 -0
  109. package/patterns/shell-foundation/example/tests/e2e/base-shell.spec.ts +23 -0
  110. package/patterns/shell-foundation/example/tests/server/smoke.test.js +16 -0
  111. package/patterns/shell-foundation/example/vite.config.mjs +81 -0
  112. package/patterns/ui-contract.md +56 -0
  113. package/patterns/ui-testing.md +10 -12
  114. package/reference/autogen/KERNEL_MAP.md +29 -107
  115. package/reference/autogen/PATTERN_INDEX.md +230 -0
  116. package/reference/autogen/README.md +4 -8
  117. package/reference/autogen/packages/agent-docs.md +259 -0
  118. package/reference/autogen/packages/assistant-core.md +3 -3
  119. package/reference/autogen/packages/assistant-runtime.md +32 -17
  120. package/reference/autogen/packages/auth-core.md +31 -33
  121. package/reference/autogen/packages/auth-provider-local-core.md +4 -12
  122. package/reference/autogen/packages/auth-provider-local-db-core.md +4 -4
  123. package/reference/autogen/packages/auth-provider-supabase-core.md +14 -18
  124. package/reference/autogen/packages/auth-web.md +42 -22
  125. package/reference/autogen/packages/console-core.md +8 -25
  126. package/reference/autogen/packages/console-web.md +5 -5
  127. package/reference/autogen/packages/crud-core.md +61 -17
  128. package/reference/autogen/packages/database-runtime-mysql.md +12 -2
  129. package/reference/autogen/packages/database-runtime-postgres.md +12 -2
  130. package/reference/autogen/packages/database-runtime.md +26 -25
  131. package/reference/autogen/packages/google-rewarded-core.md +19 -104
  132. package/reference/autogen/packages/http-runtime.md +4 -8
  133. package/reference/autogen/packages/http-web.md +32 -0
  134. package/reference/autogen/packages/json-rest-api-core.md +4 -6
  135. package/reference/autogen/packages/kernel.md +109 -390
  136. package/reference/autogen/packages/mobile-capacitor.md +2 -13
  137. package/reference/autogen/packages/realtime.md +29 -26
  138. package/reference/autogen/packages/resource-crud-core.md +6 -0
  139. package/reference/autogen/packages/shell-web.md +69 -54
  140. package/reference/autogen/packages/storage-runtime.md +3 -3
  141. package/reference/autogen/packages/uploads-image-web.md +0 -1
  142. package/reference/autogen/packages/uploads-runtime.md +3 -3
  143. package/reference/autogen/packages/users-core.md +45 -90
  144. package/reference/autogen/packages/users-web.md +5 -7
  145. package/reference/autogen/packages/workspaces-core.md +53 -74
  146. package/reference/autogen/packages/workspaces-web.md +15 -16
  147. package/reference/autogen/tooling/jskit-catalog.md +34 -0
  148. package/reference/autogen/tooling/testUtils.md +4 -4
  149. package/skills/jskit/SKILL.md +38 -31
  150. package/skills/jskit/references/app-operations.md +68 -53
  151. package/skills/jskit/references/crud-operations.md +58 -106
  152. package/skills/jskit/references/material-3.md +1 -1
  153. package/skills/jskit/references/ui-operations.md +41 -44
  154. package/templates/app/AGENTS.md +7 -3
  155. package/guide/agent/app-setup/upgrade-beta-1-to-final.md +0 -252
  156. package/guide/agent/app-setup/working-with-the-jskit-cli.md +0 -325
  157. package/guide/agent/generators/advanced-cruds.md +0 -1935
  158. package/guide/agent/generators/crud-generators.md +0 -948
  159. package/guide/agent/generators/intro.md +0 -65
  160. package/guide/agent/generators/row-policies.md +0 -537
  161. package/guide/agent/generators/ui-generators.md +0 -690
  162. package/patterns/crud-scaffolding.md +0 -198
  163. package/patterns/generated-ui-contract-tracking.md +0 -66
  164. package/reference/autogen/packages/assistant.md +0 -68
  165. package/reference/autogen/packages/crud-server-generator.md +0 -215
  166. package/reference/autogen/packages/crud-ui-generator.md +0 -192
  167. package/reference/autogen/packages/feature-server-generator.md +0 -65
  168. package/reference/autogen/packages/ui-generator.md +0 -127
  169. package/reference/autogen/tooling/create-app.md +0 -317
  170. package/reference/autogen/tooling/jskit-cli.md +0 -933
  171. package/reference/autogen/tooling/test-support.md +0 -27
@@ -26,7 +26,6 @@ Exports
26
26
  ### `src/client/bootstrap/user-bootstrap-handler.js`
27
27
  Exports
28
28
  - `createUsersBootstrapUserHandler()`
29
- - `registerUsersBootstrapPayloadHandlers(app)`
30
29
 
31
30
  ### `src/client/components/AccountSettingsClientElement.vue`
32
31
  Exports
@@ -78,7 +77,6 @@ Exports
78
77
  Exports
79
78
  - `UsersWebClientProvider`
80
79
  - `AccountSettingsClientElement`
81
- - `clientProviders`
82
80
 
83
81
  ### `src/client/lib/bootstrap.js`
84
82
  Exports
@@ -110,20 +108,20 @@ Exports
110
108
  Exports
111
109
  - `HOME_COG_OUTLET`
112
110
 
113
- ### templates
111
+ ### patterns
114
112
 
115
- ### `templates/src/components/account/settings/AccountSettingsNotificationsSection.vue`
113
+ ### `patterns/account-settings/example/src/components/account/settings/AccountSettingsNotificationsSection.vue`
116
114
  Exports
117
115
  - None
118
116
 
119
- ### `templates/src/components/account/settings/AccountSettingsPreferencesSection.vue`
117
+ ### `patterns/account-settings/example/src/components/account/settings/AccountSettingsPreferencesSection.vue`
120
118
  Exports
121
119
  - None
122
120
 
123
- ### `templates/src/components/account/settings/AccountSettingsProfileSection.vue`
121
+ ### `patterns/account-settings/example/src/components/account/settings/AccountSettingsProfileSection.vue`
124
122
  Exports
125
123
  - None
126
124
 
127
- ### `templates/src/pages/account/index.vue`
125
+ ### `patterns/account-settings/example/src/pages/account/index.vue`
128
126
  Exports
129
127
  - None
@@ -16,17 +16,17 @@ Use this on demand; do not load the full index at startup.
16
16
 
17
17
  ### `src/server/common/contributors/workspaceActionContextContributor.js`
18
18
  Exports
19
- - `createWorkspaceActionContextContributor({ workspaceService, workspaceSurfaceIds = [] } = {})`
19
+ - `createWorkspaceActionContextContributor({ workspaceService, workspaceMembershipOptionalSurfaceIds = [], workspaceSurfaceIds = [] } = {})`
20
20
  Local functions
21
21
  - `normalizeWorkspaceSurfaceIds(surfaceIds = [])`
22
22
 
23
23
  ### `src/server/common/contributors/workspaceAuthPolicyContextResolver.js`
24
24
  Exports
25
- - `createWorkspaceAuthPolicyContextResolver({ workspaceService } = {})`
25
+ - `createWorkspaceAuthPolicyContextResolver({ workspaceService, workspaceMembershipOptionalSurfaceIds = [] } = {})`
26
26
 
27
27
  ### `src/server/common/contributors/workspaceRouteVisibilityResolver.js`
28
28
  Exports
29
- - `createWorkspaceRouteVisibilityResolver({ workspaceService } = {})`
29
+ - `createWorkspaceRouteVisibilityResolver({ workspaceService, workspaceMembershipOptionalSurfaceIds = [] } = {})`
30
30
  Local functions
31
31
  - `buildVisibilityContribution({ visibility, scopeOwnerId = null, userId = null } = {})`
32
32
 
@@ -91,11 +91,17 @@ Exports
91
91
 
92
92
  ### `src/server/common/support/realtimeServiceEvents.js`
93
93
  Exports
94
- - `ACCOUNT_SETTINGS_AND_BOOTSTRAP_EVENTS`
95
- - `createWorkspaceEntityAndBootstrapEvents({ workspaceEntity, workspaceOperation, workspaceRealtimeEvent, workspaceEntityId = ({ args }) => args?.[0]?.id, bootstrapEntityId = ({ args }) => args?.[0]?.id, bootstrapAudience = "event_scope" } = {})`
94
+ - `INVITE_RECIPIENT_BOOTSTRAP_AUDIENCE`
95
+ - `createInviteDecisionEvents()`
96
+ - `createWorkspaceEntityAndBootstrapEvents({ workspaceEntity, workspaceOperation, workspaceRealtimeEvent, bootstrapEntityId = workspaceId, bootstrapAudience = "event_scope" } = {})`
96
97
  Local functions
97
- - `resolveActorScopedEntityId({ options } = {})`
98
- - `resolveWorkspaceSlugPayload({ args } = {})`
98
+ - `resultValue({ result } = {})`
99
+ - `actorId({ context } = {})`
100
+ - `workspaceId(execution = {})`
101
+ - `workspaceSlugPayload(execution = {})`
102
+ - `createActorEvent({ source, entity, realtimeEvent })`
103
+ - `createWorkspaceAudienceEvent({ entity, realtimeEvent })`
104
+ - `onlyAccepted(builder)`
99
105
 
100
106
  ### `src/server/common/support/resolveActionUser.js`
101
107
  Exports
@@ -111,18 +117,6 @@ Exports
111
117
  - `routeParamsValidator`
112
118
  - `workspaceSlugParamsValidator`
113
119
 
114
- ### `src/server/registerWorkspaceBootstrap.js`
115
- Exports
116
- - `registerWorkspaceBootstrap(app)`
117
-
118
- ### `src/server/registerWorkspaceCore.js`
119
- Exports
120
- - `registerWorkspaceCore(app)`
121
-
122
- ### `src/server/registerWorkspaceRepositories.js`
123
- Exports
124
- - `registerWorkspaceRepositories(app)`
125
-
126
120
  ### `src/server/support/resolveWorkspace.js`
127
121
  Exports
128
122
  - `resolveWorkspace(context = {}, input = {})`
@@ -132,10 +126,10 @@ Local functions
132
126
  ### `src/server/support/workspaceActionSurfaces.js`
133
127
  Exports
134
128
  - `resolveWorkspaceSurfaceIdsFromAppConfig(appConfig = {})`
129
+ - `resolveWorkspaceMembershipOptionalSurfaceIdsFromAppConfig(appConfig = {})`
135
130
  - `resolveDefaultWorkspaceRouteSurfaceIdFromAppConfig(appConfig = {})`
136
131
  - `materializeWorkspaceActionSurfaces(actions = [], { workspaceSurfaceIds = [] } = {})`
137
132
  - `materializeWorkspaceActionSurfacesFromAppConfig(actions = [], { appConfig = {} } = {})`
138
- - `registerWorkspaceActionSurfaceSources(app)`
139
133
  Local functions
140
134
  - `normalizeSurfaceIds(surfaceIds = [])`
141
135
  - `resolveSurfaceIdsFromAppConfig(appConfig = {}, predicate)`
@@ -150,10 +144,6 @@ Exports
150
144
  - `readWorkspaceSlugFromRouteParams(params = {})`
151
145
  - `buildWorkspaceInputFromRouteParams(params = {})`
152
146
 
153
- ### `src/server/support/workspaceServerScopeSupport.js`
154
- Exports
155
- - `createWorkspaceServerScopeSupport()`
156
-
157
147
  ### `src/server/workspaceBootstrapContributor.js`
158
148
  Exports
159
149
  - `createWorkspaceBootstrapContributor({ workspaceService, workspacePendingInvitationsService, userProfilesRepository, workspaceInvitationsEnabled = false, appConfig = {}, tenancyProfile = null } = {})`
@@ -167,21 +157,18 @@ Local functions
167
157
 
168
158
  ### `src/server/workspaceDirectory/bootWorkspaceDirectoryRoutes.js`
169
159
  Exports
170
- - `bootWorkspaceDirectoryRoutes(app)`
160
+ - `registerWorkspaceDirectoryRoutes(router, { config = {}, workspaceSelfCreateEnabled = false } = {})`
171
161
  Local functions
172
162
  - `resolveWorkspaceRecordId(record = {}, context = {})`
173
163
 
174
- ### `src/server/workspaceDirectory/registerWorkspaceDirectory.js`
175
- Exports
176
- - `registerWorkspaceDirectory(app)`
177
-
178
164
  ### `src/server/workspaceDirectory/workspaceDirectoryActions.js`
179
165
  Exports
180
- - `workspaceDirectoryActions`
166
+ - `workspaceDirectoryActionSpecifications`
167
+ - `buildWorkspaceDirectoryActions({ workspaceService } = {})`
181
168
 
182
169
  ### `src/server/workspaceMembers/bootWorkspaceMembers.js`
183
170
  Exports
184
- - `bootWorkspaceMembers(app)`
171
+ - `registerWorkspaceMembersRoutes(router, { config = {}, workspaceInvitationsEnabled = false } = {})`
185
172
  Local functions
186
173
  - `resolveWorkspaceAggregateRecordId(record = {}, context = {})`
187
174
 
@@ -191,13 +178,6 @@ Exports
191
178
  Local functions
192
179
  - `escapeHtml(value = "")`
193
180
 
194
- ### `src/server/workspaceMembers/registerWorkspaceMembers.js`
195
- Exports
196
- - `registerWorkspaceMembers(app)`
197
- Local functions
198
- - `resolveWorkspaceMembersInviteExpiresInMs(appConfig = {})`
199
- - `resolveWorkspaceInviteEmailTemplate(scope, appConfig = {})`
200
-
201
181
  ### `src/server/workspaceMembers/workspaceInviteUrls.js`
202
182
  Exports
203
183
  - `buildInvitePath(token, pathTemplate = "/invite/:token")`
@@ -208,7 +188,8 @@ Local functions
208
188
 
209
189
  ### `src/server/workspaceMembers/workspaceMembersActions.js`
210
190
  Exports
211
- - `workspaceMembersActions`
191
+ - `workspaceMembersActionSpecifications`
192
+ - `buildWorkspaceMembersActions({ workspaceMembersService } = {})`
212
193
 
213
194
  ### `src/server/workspaceMembers/workspaceMembersService.js`
214
195
  Exports
@@ -216,60 +197,56 @@ Exports
216
197
 
217
198
  ### `src/server/workspacePendingInvitations/bootWorkspacePendingInvitations.js`
218
199
  Exports
219
- - `bootWorkspacePendingInvitations(app)`
200
+ - `registerWorkspacePendingInvitationsRoutes(router)`
220
201
  Local functions
221
202
  - `resolveAuthenticatedUserRecordId(_record, context = {})`
222
203
  - `resolveInviteResolutionRecordId(record = {})`
223
204
 
224
- ### `src/server/workspacePendingInvitations/registerWorkspacePendingInvitations.js`
225
- Exports
226
- - `registerWorkspacePendingInvitations(app)`
227
- Local functions
228
- - `workspaceAudienceFromEntityId({ event } = {})`
229
- - `actorUserEntityId({ options } = {})`
230
- - `createActorUserEvent({ source, entity, realtimeEvent })`
231
- - `createWorkspaceAudienceEvent({ entity, realtimeEvent })`
232
- - `createInviteDecisionEvents({ includeDirectoryAndMembers = false } = {})`
233
-
234
205
  ### `src/server/workspacePendingInvitations/workspacePendingInvitationsActions.js`
235
206
  Exports
236
- - `workspacePendingInvitationsActions`
207
+ - `workspacePendingInvitationsActionSpecifications`
208
+ - `buildWorkspacePendingInvitationsActions({ workspacePendingInvitationsService } = {})`
237
209
 
238
210
  ### `src/server/workspacePendingInvitations/workspacePendingInvitationsService.js`
239
211
  Exports
240
212
  - `createService({ workspaceInvitesRepository, workspaceMembershipsRepository } = {})`
241
213
 
242
- ### `src/server/WorkspacesCoreServiceProvider.js`
243
- Exports
244
- - `WorkspacesCoreServiceProvider`
245
-
246
214
  ### `src/server/workspaceSettings/bootWorkspaceSettings.js`
247
215
  Exports
248
- - `bootWorkspaceSettings(app)`
216
+ - `registerWorkspaceSettingsRoutes(router, { config = {} } = {})`
249
217
  Local functions
250
218
  - `resolveWorkspaceSettingsRecordId(record = {}, context = {})`
251
219
 
252
- ### `src/server/workspaceSettings/registerWorkspaceSettings.js`
253
- Exports
254
- - `registerWorkspaceSettings(app)`
255
- Local functions
256
- - `resolveWorkspaceSettingsDefaultInvitesEnabled(appConfig = {})`
257
-
258
220
  ### `src/server/workspaceSettings/workspaceSettingsActions.js`
259
221
  Exports
260
- - `workspaceSettingsActions`
222
+ - `workspaceSettingsActionSpecifications`
223
+ - `buildWorkspaceSettingsActions({ workspaceSettingsService } = {})`
261
224
 
262
225
  ### `src/server/workspaceSettings/workspaceSettingsRepository.js`
263
226
  Exports
264
- - `createRepository({ api, knex } = {})`
227
+ - `createRepository({ api, knex, defaultInvitesEnabled = true } = {})`
265
228
  Local functions
266
229
  - `pickPatchFields(source = {})`
267
- - `createDefaultWorkspaceSettingsCreatePayload(workspaceId)`
230
+ - `createDefaultWorkspaceSettingsCreatePayload(workspaceId, defaultInvitesEnabled)`
268
231
 
269
232
  ### `src/server/workspaceSettings/workspaceSettingsService.js`
270
233
  Exports
271
234
  - `createService({ workspaceSettingsRepository, workspaceInvitationsEnabled = true, roleCatalog = null } = {})`
272
235
 
236
+ ### `src/server/WorkspacesFeature.js`
237
+ Exports
238
+ - `WorkspacesFeature`
239
+ - `createWorkspacesRuntime({ config, database, env, jsonRestApi } = {})`
240
+ - `installWorkspaceResources(jsonRestApi)`
241
+ Local functions
242
+ - `requirePositiveInteger(value, label)`
243
+ - `requireBoolean(value, label)`
244
+ - `resolveInviteEmailTemplate(config)`
245
+
246
+ ### `src/server/WorkspacesIntegrationsProvider.js`
247
+ Exports
248
+ - `WorkspacesIntegrationsProvider`
249
+
273
250
  ### `src/shared/jsonApiTransports.js`
274
251
  Exports
275
252
  - `WORKSPACES_TRANSPORT`
@@ -397,24 +374,20 @@ Local functions
397
374
  - `resolveWorkspacePolicyOverrides(appConfig = {})`
398
375
  - `resolveWorkspacePolicy(mode, overrides = {})`
399
376
 
400
- ### templates
401
-
402
- ### `templates/config/roles.js`
403
- Exports
404
- - `roleCatalog`
377
+ ### migrations
405
378
 
406
- ### `templates/migrations/workspaces_core_initial.cjs`
379
+ ### `migrations/workspaces_core_initial.cjs`
407
380
  Exports
408
381
  - None
409
382
 
410
- ### `templates/migrations/workspaces_core_workspace_settings_single_name_source.cjs`
383
+ ### `migrations/workspaces_core_workspace_settings_single_name_source.cjs`
411
384
  Exports
412
385
  - None
413
386
  Local functions
414
387
  - `hasTable(knex, tableName)`
415
388
  - `hasColumn(knex, tableName, columnName)`
416
389
 
417
- ### `templates/migrations/workspaces_core_workspaces_drop_color.cjs`
390
+ ### `migrations/workspaces_core_workspaces_drop_color.cjs`
418
391
  Exports
419
392
  - None
420
393
  Local functions
@@ -422,6 +395,12 @@ Local functions
422
395
  - `hasColumn(knex, tableName, columnName)`
423
396
  - `normalizeHexColor(value)`
424
397
 
425
- ### `templates/packages/main/src/server/email/workspaceInviteEmail.js`
398
+ ### patterns
399
+
400
+ ### `patterns/workspace-server/example/config/roles.js`
401
+ Exports
402
+ - `roleCatalog`
403
+
404
+ ### `patterns/workspace-server/example/packages/main/src/server/email/workspaceInviteEmail.js`
426
405
  Exports
427
406
  - `renderWorkspaceInviteEmail({ inviteUrl = "", workspace = {}, inviter = null, roleSid = "member", expiresAt = "" } = {})`
@@ -136,7 +136,6 @@ Exports
136
136
  - `WorkspacesWebClientProvider`
137
137
  - `WorkspaceMembersClientElement`
138
138
  - `WorkspaceInviteLanding`
139
- - `clientProviders`
140
139
 
141
140
  ### `src/client/lib/bootstrap.js`
142
141
  Exports
@@ -247,7 +246,7 @@ Exports
247
246
  - `WORKSPACE_BOOTSTRAP_STATUS_FORBIDDEN`
248
247
  - `WORKSPACE_BOOTSTRAP_STATUS_UNAUTHENTICATED`
249
248
  - `WORKSPACE_BOOTSTRAP_STATUS_ERROR`
250
- - `createBootstrapPlacementRuntime({ app, logger = null } = {})`
249
+ - `createBootstrapPlacementRuntime({ bootstrapRuntime, placementRuntime, realtime = null, router = null, vueApp = null, logger = null } = {})`
251
250
 
252
251
  ### `src/client/runtime/bootstrapPlacementRuntimeConstants.js`
253
252
  Exports
@@ -264,7 +263,7 @@ Exports
264
263
  ### `src/client/runtime/bootstrapPlacementRuntimeHelpers.js`
265
264
  Exports
266
265
  - `countPendingInvites(entries = [])`
267
- - `createProviderLogger(app)`
266
+ - `createProviderLogger(logger)`
268
267
  - `fetchBootstrapPayload(workspaceSlug = "")`
269
268
  - `isGuardDenied(outcome)`
270
269
  - `normalizeSearch(search = "")`
@@ -300,9 +299,9 @@ Exports
300
299
  Exports
301
300
  - `ADMIN_COG_OUTLET`
302
301
 
303
- ### templates
302
+ ### patterns
304
303
 
305
- ### `templates/packages/main/src/client/components/AccountPendingInvitesCue.vue`
304
+ ### `patterns/workspace-surfaces/example/packages/main/src/client/components/AccountPendingInvitesCue.vue`
306
305
  Exports
307
306
  - None
308
307
  Local functions
@@ -310,48 +309,48 @@ Local functions
310
309
  - `resolveReturnTo()`
311
310
  - `resolveReturnToHref()`
312
311
 
313
- ### `templates/packages/main/src/client/components/AccountSettingsInvitesSection.vue`
312
+ ### `patterns/workspace-surfaces/example/packages/main/src/client/components/AccountSettingsInvitesSection.vue`
314
313
  Exports
315
314
  - None
316
315
 
317
- ### `templates/src/components/WorkspaceNotFoundCard.vue`
316
+ ### `patterns/workspace-surfaces/example/src/components/WorkspaceNotFoundCard.vue`
318
317
  Exports
319
318
  - None
320
319
 
321
- ### `templates/src/composables/useWorkspaceNotFoundState.js`
320
+ ### `patterns/workspace-surfaces/example/src/composables/useWorkspaceNotFoundState.js`
322
321
  Exports
323
322
  - `useWorkspaceNotFoundState()`
324
323
 
325
- ### `templates/src/pages/admin/members/index.vue`
324
+ ### `patterns/workspace-surfaces/example/src/pages/admin/members/index.vue`
326
325
  Exports
327
326
  - None
328
327
 
329
- ### `templates/src/pages/admin/workspace/settings.vue`
328
+ ### `patterns/workspace-surfaces/example/src/pages/admin/workspace/settings.vue`
330
329
  Exports
331
330
  - None
332
331
 
333
- ### `templates/src/pages/admin/workspace/settings/index.vue`
332
+ ### `patterns/workspace-surfaces/example/src/pages/admin/workspace/settings/index.vue`
334
333
  Exports
335
334
  - None
336
335
 
337
- ### `templates/src/pages/invite/[token].vue`
336
+ ### `patterns/workspace-surfaces/example/src/pages/invite/[token].vue`
338
337
  Exports
339
338
  - None
340
339
 
341
- ### `templates/src/surfaces/admin/index.vue`
340
+ ### `patterns/workspace-surfaces/example/src/surfaces/admin/index.vue`
342
341
  Exports
343
342
  - None
344
343
  Local functions
345
344
  - `adminChildPath(suffix = "")`
346
345
 
347
- ### `templates/src/surfaces/admin/root.vue`
346
+ ### `patterns/workspace-surfaces/example/src/surfaces/admin/root.vue`
348
347
  Exports
349
348
  - None
350
349
 
351
- ### `templates/src/surfaces/app/index.vue`
350
+ ### `patterns/workspace-surfaces/example/src/surfaces/app/index.vue`
352
351
  Exports
353
352
  - None
354
353
 
355
- ### `templates/src/surfaces/app/root.vue`
354
+ ### `patterns/workspace-surfaces/example/src/surfaces/app/root.vue`
356
355
  Exports
357
356
  - None
@@ -25,3 +25,37 @@ Local functions
25
25
  - `readJson(absolutePath)`
26
26
  - `buildCatalog({ repoRoot, packagesRoot, outputPath })`
27
27
  - `main()`
28
+
29
+ ### `scripts/pattern-assets.mjs`
30
+ Exports
31
+ - `PATTERN_DOCUMENT_NAME`
32
+ - `PATTERN_EXAMPLE_DIRECTORY`
33
+ - `REQUIRED_PATTERN_SECTIONS`
34
+ - `assertUniquePatternIds(patterns = [])`
35
+ - `discoverPackagePatterns({ packageRoot, packageJson } = {})`
36
+ - `parsePatternDocument(source = "", { documentPath = PATTERN_DOCUMENT_NAME } = {})`
37
+ Local functions
38
+ - `normalizeText(value = "")`
39
+ - `normalizePath(value = "")`
40
+ - `sortedUniqueStrings(values = [])`
41
+ - `parseCommaSeparatedValue(value = "")`
42
+ - `requirePatternFrontMatter(source = "", { documentPath = PATTERN_DOCUMENT_NAME } = {})`
43
+ - `requirePatternSections(body = "", { documentPath = PATTERN_DOCUMENT_NAME } = {})`
44
+ - `directoryExists(directoryPath)`
45
+ - `collectFiles(rootDirectory)`
46
+
47
+ ### `scripts/verify-packages.mjs`
48
+ Exports
49
+ - `main()`
50
+ - `validateCapabilityClosure(packages, { builtinCapabilities = BUILTIN_CAPABILITIES } = {})`
51
+ - `validateMigrations(packageRecord, migrationOwners)`
52
+ - `validateProviderExport(value, label)`
53
+ - `validateProviderList(packageRecord, side)`
54
+ Local functions
55
+ - `fileExists(filePath)`
56
+ - `discoverFrameworkPackages()`
57
+ - `requireStringArray(value, label)`
58
+ - `requireArchitectureId(value, label)`
59
+ - `validateCapabilityMap(value, label)`
60
+ - `validateProviderDefinition(value, label)`
61
+ - `validatePackage(packageRecord, localVersions, migrationOwners)`
@@ -41,13 +41,13 @@ Exports
41
41
  Local functions
42
42
  - `resolveJskitConfig(jskitOrSource)`
43
43
 
44
- ### `runCli.js`
44
+ ### `patternApp.mjs`
45
45
  Exports
46
- - `createCliRunner(cliPath)`
46
+ - `copyFoundationPattern({ cwd, name, pattern = "shell-foundation" } = {})`
47
47
 
48
- ### `runJskit.mjs`
48
+ ### `runCli.js`
49
49
  Exports
50
- - `runJskit({ cwd, args = [], input = undefined } = {})`
50
+ - `createCliRunner(cliPath)`
51
51
 
52
52
  ### `tempDir.mjs`
53
53
  Exports
@@ -1,31 +1,37 @@
1
1
  ---
2
2
  name: jskit
3
- description: Build, extend, troubleshoot, review, deslop, and verify JSKIT apps using its CLI, packages, generators, surfaces, placements, CRUDs, managed files, verification conventions, and Vue/Vuetify Material 3 UI contract. Use for every JSKIT UI creation, modification, review, or cleanup task.
3
+ description: Build, extend, troubleshoot, review, deslop, and verify JSKIT apps using its public framework APIs, package-owned source patterns, runtime capabilities, surfaces, placements, CRUDs, verification conventions, and Vue/Vuetify Material 3 UI contract. Use for every JSKIT UI creation, modification, review, or cleanup task.
4
4
  ---
5
5
 
6
6
  # JSKIT
7
7
 
8
- Use JSKIT's CLI, generators, packages, and app-local contracts. The request
9
- and app files define the product.
8
+ Use JSKIT's framework APIs, package-owned patterns, packages, and app-local
9
+ contracts. The request and app files define the product. Adapted pattern source
10
+ belongs to the application immediately.
10
11
 
11
- ## Exact caller lanes
12
+ ## Pattern-first implementation
12
13
 
13
- Execute a caller-supplied complete exact JSKIT command lane with all option
14
- values directly. Read the nearest `AGENTS.md` and relevant skill reference;
15
- skip `help`, `list`, `show --details`, `list-placements`, sibling docs,
16
- `node_modules` or generator-source inspection, plus any verification the
17
- caller owns.
14
+ Search [the generated source pattern index](../../reference/autogen/PATTERN_INDEX.md)
15
+ for the requested outcome before reading broad operational guidance or
16
+ inventing a local structure. Read a selected package's `PATTERN.md` completely,
17
+ then use its example directly, adapt it, compose compatible patterns, or treat
18
+ it as evidence for a different implementation through the same public APIs.
18
19
 
19
- Discover only a missing fact or exact-command failure, then resume the lane.
20
+ Do not write or consult receipts, provenance, completion ledgers, or other
21
+ durable bookkeeping for pattern or authoring-tool runs. Current source,
22
+ manifests, migrations, tests, and runtime behaviour are the evidence.
20
23
 
21
24
  ## Establish context
22
25
 
23
26
  1. Read the request and nearest `AGENTS.md`.
24
27
  2. Inspect `package.json`, `package-lock.json`, installed package metadata, the
25
28
  existing tree, and the current diff when reviewing changes.
26
- 3. Read `.jskit/APP_BLUEPRINT.md` when present; do not invent requirements.
29
+ 3. Read the project's product documentation and current source. JSKIT does not
30
+ own a second project brain or prescribe a particular agent orchestrator.
27
31
  4. Load only the task-relevant direct reference:
28
- - For creation, package selection, CLI use, or generators, read
32
+ - Existing-app migration: read
33
+ [port guide](../../guide/agent/app-setup/existing-application-migration.md).
34
+ - For creation, foundation patterns, or package selection, read
29
35
  [application operations](references/app-operations.md).
30
36
  - Before database, schema, CRUD, repository, or persistence work, read
31
37
  [CRUD operations](references/crud-operations.md) completely.
@@ -34,25 +40,28 @@ Discover only a missing fact or exact-command failure, then resume the lane.
34
40
  - For every Vue/Vuetify UI creation, modification, review, or deslop task,
35
41
  also read [Material 3](references/material-3.md) completely before acting.
36
42
 
37
- Those files are the complete operational references required by this skill.
38
- Do not depend on sibling docs. Do not load irrelevant references.
43
+ These are complete operational references required by this skill. Do not load
44
+ irrelevant references or other docs.
39
45
 
40
46
  Do not invent missing tenancy, authentication, database, surface, ownership,
41
47
  or permission decisions when they would materially change the application.
42
48
 
43
49
  ## Discovery fallback
44
50
 
45
- Use the narrowest CLI query for a missing fact. Prefer existing packages,
46
- generators, placements, and high-level composables. Generate migration and CI
47
- projections with their intent-specific commands.
51
+ Use the pattern index, package metadata, and public API reference for a missing
52
+ fact. Prefer existing framework APIs, patterns, placements, and high-level
53
+ composables. JSKIT has no general authoring CLI: inspect current source and
54
+ installed packages directly, edit app-owned files deliberately, and use npm
55
+ for dependency installation.
48
56
 
49
57
  ## Implement a change
50
58
 
51
- Read the matching reference and implement the smallest complete slice at
52
- documented seams. Install dependencies/migrate only when required. Use only a
53
- fresh disposable development database for schema work—never valuable data.
54
- For UI, respect surface/placements, compact layout, all operational states,
55
- permissions/ownership, and browser verification.
59
+ Read the matching pattern and reference, then implement the smallest complete
60
+ slice at documented seams. Install one planned dependency closure and migrate
61
+ only when required. Use only a fresh disposable development database for
62
+ schema work—never valuable data. For UI, respect surface/placements, compact
63
+ layout, all operational states, permissions/ownership, and browser
64
+ verification.
56
65
 
57
66
  ## Caller-owned verification
58
67
 
@@ -63,16 +72,14 @@ unless requested in the current task.
63
72
 
64
73
  ## Review or deslop
65
74
 
66
- For review-only work, report without editing. Check duplicated/dead/wrong code,
75
+ For review-only work, report without editing. Check dead or duplicated code,
67
76
  accidental abstraction, incomplete states, missed high-level JSKIT seams,
68
- invalid routing/ownership/permission/migration/managed-file choices, weak
69
- Vuetify/Material behavior, and proportional verification. For affected UI, run
70
- the Material 3 audit in the selected reference. Put findings first by severity
71
- with file references; state when none exist.
77
+ invalid ownership or migration choices, UI quality, and verification. Run the
78
+ Material 3 audit for affected UI. Put findings first by severity and file.
72
79
 
73
80
  ## Verify
74
81
 
75
- Run focused tests for a slice and broad checks for a whole changeset. Run
76
- Doctor for managed state, `npm run verify` before sign-off, rebuild changed
77
- persistence from zero in a disposable database, and use Playwright for UI.
78
- Report files, commands, and anything unverified.
82
+ Run focused tests for a slice and the application's `npm run verify` for a
83
+ whole changeset. Use the current-state owners in application operations and
84
+ Playwright for affected UI. There is no current JSKIT Doctor command; ignore
85
+ old CLI authoring-history diagnoses. Never expose environment values.