@jskit-ai/agent-docs 0.1.118 → 0.1.120

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 (64) hide show
  1. package/guide/agent/app-extras/assistant.md +0 -1
  2. package/guide/agent/app-extras/mobile-capacitor.md +3 -3
  3. package/guide/agent/app-extras/realtime.md +1 -2
  4. package/guide/agent/app-setup/a-more-interesting-shell.md +36 -14
  5. package/guide/agent/app-setup/authentication.md +7 -15
  6. package/guide/agent/app-setup/console.md +0 -1
  7. package/guide/agent/app-setup/database-layer.md +15 -18
  8. package/guide/agent/app-setup/initial-scaffolding.md +61 -101
  9. package/guide/agent/app-setup/multi-homing.md +2 -10
  10. package/guide/agent/app-setup/quickstart.md +0 -1
  11. package/guide/agent/app-setup/upgrade-beta-1-to-final.md +134 -0
  12. package/guide/agent/app-setup/users.md +8 -15
  13. package/guide/agent/app-setup/working-with-the-jskit-cli.md +168 -997
  14. package/guide/agent/generators/advanced-cruds.md +2 -3
  15. package/guide/agent/generators/crud-generators.md +27 -54
  16. package/guide/agent/generators/row-policies.md +1 -1
  17. package/package.json +1 -1
  18. package/patterns/INDEX.md +1 -1
  19. package/patterns/crud-scaffolding.md +9 -10
  20. package/patterns/generated-ui-contract-tracking.md +3 -3
  21. package/patterns/live-actions.md +5 -4
  22. package/patterns/placements.md +2 -2
  23. package/patterns/ui-testing.md +8 -15
  24. package/reference/autogen/packages/assistant-core.md +0 -6
  25. package/reference/autogen/packages/assistant-runtime.md +0 -6
  26. package/reference/autogen/packages/assistant.md +0 -6
  27. package/reference/autogen/packages/auth-core.md +0 -6
  28. package/reference/autogen/packages/auth-provider-local-core.md +0 -6
  29. package/reference/autogen/packages/auth-provider-local-db-core.md +0 -6
  30. package/reference/autogen/packages/auth-provider-supabase-core.md +0 -6
  31. package/reference/autogen/packages/auth-web.md +0 -6
  32. package/reference/autogen/packages/console-core.md +0 -6
  33. package/reference/autogen/packages/console-web.md +0 -6
  34. package/reference/autogen/packages/crud-core.md +0 -6
  35. package/reference/autogen/packages/crud-server-generator.md +0 -10
  36. package/reference/autogen/packages/crud-ui-generator.md +1 -8
  37. package/reference/autogen/packages/database-runtime-mysql.md +0 -6
  38. package/reference/autogen/packages/database-runtime-postgres.md +0 -6
  39. package/reference/autogen/packages/database-runtime.md +0 -6
  40. package/reference/autogen/packages/feature-server-generator.md +1 -11
  41. package/reference/autogen/packages/google-rewarded-core.md +0 -6
  42. package/reference/autogen/packages/google-rewarded-web.md +0 -6
  43. package/reference/autogen/packages/http-runtime.md +0 -6
  44. package/reference/autogen/packages/json-rest-api-core.md +0 -6
  45. package/reference/autogen/packages/kernel.md +45 -42
  46. package/reference/autogen/packages/mobile-capacitor.md +0 -6
  47. package/reference/autogen/packages/realtime.md +0 -6
  48. package/reference/autogen/packages/resource-core.md +0 -6
  49. package/reference/autogen/packages/resource-crud-core.md +0 -6
  50. package/reference/autogen/packages/shell-web.md +0 -6
  51. package/reference/autogen/packages/storage-runtime.md +0 -6
  52. package/reference/autogen/packages/ui-generator.md +0 -6
  53. package/reference/autogen/packages/uploads-image-web.md +0 -6
  54. package/reference/autogen/packages/uploads-runtime.md +0 -6
  55. package/reference/autogen/packages/users-core.md +0 -14
  56. package/reference/autogen/packages/users-web.md +8 -6
  57. package/reference/autogen/packages/workspaces-core.md +0 -6
  58. package/reference/autogen/packages/workspaces-web.md +0 -6
  59. package/reference/autogen/tooling/create-app.md +0 -14
  60. package/reference/autogen/tooling/jskit-cli.md +65 -190
  61. package/reference/autogen/tooling/testUtils.md +14 -0
  62. package/skills/jskit/SKILL.md +4 -4
  63. package/skills/jskit/references/crud-operations.md +7 -6
  64. package/skills/jskit/references/ui-operations.md +16 -19
@@ -50,22 +50,16 @@ Exports
50
50
  - `directoryLooksLikeJskitAppRoot(directoryPath)`
51
51
  - `resolveAppRootFromCwd(cwd)`
52
52
  - `loadAppPackageJson(appRoot)`
53
- - `createDefaultLock()`
54
- - `loadLockFile(appRoot)`
55
- - `createManagedPackageJsonChange(hadPrevious, previousValue, value)`
56
53
  - `ensurePackageJsonSection(packageJson, sectionName)`
57
54
  - `applyPackageJsonField(packageJson, sectionName, key, value)`
58
55
  - `removePackageJsonField(packageJson, sectionName, key)`
59
- - `restorePackageJsonField(packageJson, sectionName, key, managedChange)`
60
56
  - `parseEnvLineValue(line, key)`
61
57
  - `upsertEnvValue(content, key, value)`
62
- - `removeEnvValue(content, key, expectedValue, previous)`
63
- - `writeJsonFile`
64
58
 
65
59
  ### `src/server/cliRuntime/capabilitySupport.js`
66
60
  Exports
67
61
  - `listDeclaredCapabilities(capabilitiesSection, fieldName)`
68
- - `buildCapabilityDetailsForPackage({ packageRegistry, packageId, dependsOn = [], provides = [], requires = [] })`
62
+ - `buildCapabilityDetailsForPackage({ packageRegistry, packageId, dependencies = [], provides = [], requires = [] })`
69
63
  - `validatePlannedCapabilityClosure(plannedPackageIds, packageRegistry, actionLabel)`
70
64
  Local functions
71
65
  - `buildCapabilityGraph(packageRegistry)`
@@ -93,7 +87,7 @@ Exports
93
87
  - `normalizeCiContribution(value, context = {})`
94
88
  Local functions
95
89
  - `isPlainObject(value)`
96
- - `invalidCiContract(message, { descriptorPath = "", packageId = "" } = {})`
90
+ - `invalidCiContract(message, { metadataPath = "", packageId = "" } = {})`
97
91
  - `requirePlainObject(value, label, context)`
98
92
  - `rejectUnknownKeys(value, allowedKeys, label, context)`
99
93
  - `normalizeCiScalar(value, label, context)`
@@ -107,8 +101,6 @@ Local functions
107
101
  Exports
108
102
  - `GENERATED_WORKFLOW_HEADER`
109
103
  - `JSKIT_CI_WORKFLOW_RELATIVE_PATH`
110
- - `LEGACY_CI_WORKFLOW_RELATIVE_PATH`
111
- - `LEGACY_VERIFY_WORKFLOW_HASH`
112
104
  - `buildGithubWorkflowDocument(model = {})`
113
105
  - `parseGithubWorkflow(source = "")`
114
106
  - `renderGithubServiceOptions(service = {})`
@@ -119,28 +111,14 @@ Local functions
119
111
 
120
112
  ### `src/server/cliRuntime/ci/managedWorkflow.js`
121
113
  Exports
122
- - `assertAppManagedCiWorkflowUnmodified({ appRoot })`
123
- - `assertManagedCiWorkflowUnmodified({ appRoot, lock, allowManagedOverwrite = false })`
124
- - `composeInstalledPackageCi({ lock, packageRegistry, installedPackageIds = null })`
125
- - `synchronizeAppCiWorkflow({ appRoot, allowManagedOverwrite = false, dryRun = false })`
126
- - `synchronizeManagedCiWorkflow({ appRoot, lock, packageRegistry, installedPackageIds = null, touchedFiles = null, dryRun = false, allowManagedOverwrite = false })`
127
- - `validateAppCiWorkflow({ appRoot })`
128
- - `validateManagedCiWorkflow({ appRoot, lock, packageRegistry })`
114
+ - `assertAppCiCanSynchronize({ appRoot })`
115
+ - `composeInstalledPackageCi({ packageRegistry, installedPackageIds = null })`
116
+ - `synchronizeAppCiWorkflow({ appRoot, dryRun = false })`
117
+ - `synchronizeCiWorkflow({ appRoot, packageRegistry, installedPackageIds = null, touchedFiles = null, dryRun = false })`
129
118
  Local functions
130
- - `contentHash(content = "")`
131
- - `collectInstalledPackageEntries({ lock, packageRegistry, installedPackageIds = null })`
132
- - `managedCiRecord(lock = {})`
133
- - `setManagedCiRecord(lock, record)`
134
- - `recoveryError(message, { force = false } = {})`
135
- - `inspectWorkflowOwnership({ appRoot, lock })`
136
- - `createValidationIssue(code, message, details = {})`
137
- - `formatRequirementPackages(packageIds = [])`
138
- - `describeCiRequirements(model = {})`
139
- - `normalizeActualEnvironment(value)`
140
- - `collectEnvironmentIssues({ expected, actual, sources, issues })`
141
- - `collectServiceIssues({ model, verifyJob, issues })`
142
- - `collectStepIssues({ model, verifyJob, issues })`
143
- - `loadAppCiContext(appRoot)`
119
+ - `collectInstalledPackageEntries({ packageRegistry, installedPackageIds = null })`
120
+ - `inspectCiFiles(appRoot)`
121
+ - `assertCiCanSynchronize({ appRoot })`
144
122
 
145
123
  ### `src/server/cliRuntime/completion.js`
146
124
  Exports
@@ -159,13 +137,11 @@ Local functions
159
137
  - `resolveAllowedValues(schema = {})`
160
138
  - `ensureTrailingSlash(value = "")`
161
139
  - `pathExists(targetPath)`
162
- - `readJsonFile(filePath)`
163
140
  - `safeReaddir(directoryPath)`
164
141
  - `walkDirectory(rootPath, { includeDirectories = false, includeFiles = true, fileFilter = null } = {})`
165
- - `importDefaultModule(modulePath)`
166
142
  - `loadCommandCatalog()`
167
143
  - `isDirectoryLike(entry)`
168
- - `discoverDescriptorPackages(appRoot)`
144
+ - `discoverJskitPackages(appRoot)`
169
145
  - `discoverBundleIds(appRoot)`
170
146
  - `toShortPackageId(packageId = "")`
171
147
  - `discoverGenerators(appRoot)`
@@ -198,19 +174,6 @@ Local functions
198
174
  - `completeGenerateCommand({ appRoot, words, cword, catalogModule })`
199
175
  - `completeCommand({ appRoot, words, cword, catalogModule })`
200
176
 
201
- ### `src/server/cliRuntime/descriptorValidation.js`
202
- Exports
203
- - `validatePackageDescriptorShape(descriptor, descriptorPath)`
204
- - `validateAppLocalPackageDescriptorShape(descriptor, descriptorPath, { expectedPackageId = "", fallbackVersion = "" } = {})`
205
- - `createPackageEntry({ packageId, version, descriptor, rootDir = "", relativeDir = "", descriptorRelativePath = "", packageJson = {}, sourceType = "", source = {} })`
206
- - `isGeneratorPackageEntry(packageEntry)`
207
- Local functions
208
- - `normalizePackageKind(rawValue, descriptorPath)`
209
- - `validateFileMutationShape(descriptor, descriptorPath)`
210
- - `validateSourceMutationShape(descriptor, descriptorPath)`
211
- - `validateLifecycleHookSpec(spec = {}, descriptorPath, label = "lifecycle hook")`
212
- - `validateLifecycleShape(descriptor, descriptorPath)`
213
-
214
177
  ### `src/server/cliRuntime/ioAndMigrations.js`
215
178
  Exports
216
179
  - `buildFileWriteGroups(fileMutations, { packageId = "" } = {})`
@@ -237,7 +200,7 @@ Local functions
237
200
 
238
201
  ### `src/server/cliRuntime/localPackageSupport.js`
239
202
  Exports
240
- - `resolvePackageDependencySpecifier(packageEntry, { existingValue = "" } = {})`
203
+ - `resolvePackageDependencySpecifier(packageEntry)`
241
204
  - `normalizePackageNameSegment(rawValue, { label = "package name" } = {})`
242
205
  - `normalizeScopeName(rawScope)`
243
206
  - `resolveDefaultLocalScopeFromAppName(appPackageName)`
@@ -245,10 +208,14 @@ Exports
245
208
  - `toFileDependencySpecifier(relativePath)`
246
209
  - `resolveLocalPackageId({ rawName, appPackageName, inlineOptions })`
247
210
  - `createLocalPackageScaffoldFiles({ packageId, packageDescription })`
248
- - `resolveLocalDependencyOrder(initialPackageIds, packageRegistry)`
249
211
  Local functions
250
212
  - `normalizeJskitDependencySpecifier(packageId, dependencySpecifier)`
251
- - `createLocalPackageDescriptorTemplate({ packageId, description })`
213
+ - `createLocalPackageMetadata()`
214
+
215
+ ### `src/server/cliRuntime/migrationSync.js`
216
+ Exports
217
+ - `packageHasInstallMigrations(packageEntry = {})`
218
+ - `synchronizeInstalledMigrations(ctx = {}, { appRoot = "", check = false } = {})`
252
219
 
253
220
  ### `src/server/cliRuntime/mutationApplication.js`
254
221
  Exports
@@ -256,15 +223,13 @@ Exports
256
223
  - `prepareFileMutations`
257
224
  - `applyTextMutations`
258
225
  - `partitionPreFileConfigTextMutations`
259
- - `resolvePositioningMutations`
260
226
  - `applySourceMutations`
261
227
  - `partitionPreFileConfigSourceMutations`
262
- - `resolvePositioningSourceMutations`
263
228
 
264
229
  ### `src/server/cliRuntime/mutations/fileMutations.js`
265
230
  Exports
266
- - `applyFileMutations(packageEntry, appRoot, preparedMutations, managedFiles, managedMigrations, touchedFiles, warnings = [], existingManagedFiles = [], { dryRun = false, reapplyManagedAppFiles = false } = {})`
267
- - `prepareFileMutations(packageEntry, options, appRoot, fileMutations, existingManagedFiles = [])`
231
+ - `applyFileMutations(packageEntry, appRoot, preparedMutations, fileChanges, migrationChanges, touchedFiles, warnings = [], { dryRun = false } = {})`
232
+ - `prepareFileMutations(packageEntry, options, appRoot, fileMutations)`
268
233
 
269
234
  ### `src/server/cliRuntime/mutations/installMigrationMutation.js`
270
235
  Exports
@@ -278,7 +243,6 @@ Exports
278
243
  Exports
279
244
  - `applySourceMutations(packageEntry, appRoot, sourceMutations, options, managedSource, touchedFiles, { dryRun = false } = {})`
280
245
  - `partitionPreFileConfigSourceMutations(sourceMutations = [])`
281
- - `resolvePositioningSourceMutations(descriptorMutations = {})`
282
246
  Local functions
283
247
  - `createSourceFile(relativeFile, sourceText)`
284
248
  - `normalizeSourceText(value = "")`
@@ -297,7 +261,6 @@ Local functions
297
261
  - `ensureExportConst(sourceText, relativeFile, mutation, options, packageId, mutationId)`
298
262
  - `applySourceMutationToContent(sourceText, relativeFile, mutation, options, packageId)`
299
263
  - `createManagedSourceRecord(relativeFile, mutation)`
300
- - `isPositioningSourceMutation(value = {})`
301
264
  - `isPreFileConfigSourceMutation(value = {})`
302
265
 
303
266
  ### `src/server/cliRuntime/mutations/surfaceTargets.js`
@@ -319,9 +282,7 @@ Exports
319
282
  Exports
320
283
  - `applyTextMutations(packageEntry, appRoot, textMutations, options, managedText, touchedFiles, { dryRun = false } = {})`
321
284
  - `partitionPreFileConfigTextMutations(textMutations = [])`
322
- - `resolvePositioningMutations(descriptorMutations = {})`
323
285
  Local functions
324
- - `isPositioningTextMutation(value = {})`
325
286
  - `isPreFileConfigTextMutation(value = {})`
326
287
 
327
288
  ### `src/server/cliRuntime/mutationWhen.js`
@@ -342,18 +303,14 @@ Local functions
342
303
 
343
304
  ### `src/server/cliRuntime/packageInstallFlow.js`
344
305
  Exports
345
- - `adoptAppLocalPackageDependencies({ appRoot, appPackageJson, lock })`
346
- - `applyPackageInstall({ packageEntry, packageOptions, appRoot, appPackageJson, lock, packageRegistry, touchedFiles, reportTemplateFetchStatus = null, dryRun = false })`
347
- - `applyPackageMigrationsOnly({ packageEntry, packageOptions, appRoot, lock, touchedFiles, dryRun = false })`
348
- - `applyPackagePositioning({ packageEntry, packageOptions, appRoot, lock, touchedFiles, dryRun = false })`
306
+ - `applyPackageInstall({ packageEntry, packageOptions, appRoot, appPackageJson, packageRegistry, touchedFiles, directInstall = false, dryRun = false })`
307
+ - `applyStatelessPackageMigrations({ packageEntry, packageOptions = {}, appRoot, touchedFiles, dryRun = false })`
349
308
  Local functions
350
- - `createManagedRecordBase(packageEntry, options)`
351
- - `cloneManagedMap(value = {})`
352
- - `cloneManagedArray(value = [])`
309
+ - `createMutationResult(packageEntry)`
310
+ - `recordPackageJsonChange(result, sectionName, key, value)`
353
311
  - `normalizeModeToken(value = "")`
354
312
  - `isWorkspaceCapableTenancyMode(value = "")`
355
313
  - `collectInstallWarnings({ packageEntry, appRoot, appPackageJson })`
356
- - `resolveManagedSourceRecord(packageEntry, existingInstall = {})`
357
314
  - `dependencyMutationUsesWhen(entries = [])`
358
315
 
359
316
  ### `src/server/cliRuntime/packageIntrospection.js`
@@ -402,11 +359,24 @@ Local functions
402
359
  - `collectConstTokenAssignments(source)`
403
360
  - `resolveTokenFromExpression(expression, constAssignments, visited = new Set())`
404
361
 
362
+ ### `src/server/cliRuntime/packageMetadataValidation.js`
363
+ Exports
364
+ - `validatePackageMetadataShape(packageMetadata, metadataPath)`
365
+ - `validateAppLocalPackageMetadataShape(packageMetadata, metadataPath, { expectedPackageId = "", fallbackVersion = "" } = {})`
366
+ - `createPackageEntry({ packageId, version, packageMetadata, rootDir = "", relativeDir = "", manifestRelativePath = "", packageJson = {}, sourceType = "", source = {} })`
367
+ - `isGeneratorPackageEntry(packageEntry)`
368
+ Local functions
369
+ - `normalizePackageKind(rawValue, metadataPath)`
370
+ - `validateFileMutationShape(packageMetadata, metadataPath)`
371
+ - `validateSourceMutationShape(packageMetadata, metadataPath)`
372
+ - `validateLifecycleHookSpec(spec = {}, metadataPath, label = "lifecycle hook")`
373
+ - `validateLifecycleShape(packageMetadata, metadataPath)`
374
+
405
375
  ### `src/server/cliRuntime/packageOptions.js`
406
376
  Exports
407
377
  - `normalizeSurfaceIdForMutation(value = "")`
408
378
  - `parseSurfaceIdListForMutation(value = "")`
409
- - `resolvePackageOptions(packageEntry, inlineOptions, io, { appRoot = "" } = {})`
379
+ - `resolvePackageOptions(packageEntry, inlineOptions, io, { appRoot = "", onPrompt = null } = {})`
410
380
  - `validateInlineOptionsForPackage(packageEntry, inlineOptions)`
411
381
  - `validateInlineOptionValuesForPackage(packageEntry, inlineOptions, { appRoot = "", optionNames = null } = {})`
412
382
  Local functions
@@ -433,44 +403,33 @@ Exports
433
403
  - `loadAppLocalPackageRegistry(appRoot)`
434
404
  - `loadPackageRegistry()`
435
405
  - `resolveInstalledNodeModulePackageEntry({ appRoot, packageId })`
436
- - `hydratePackageRegistryFromInstalledNodeModules({ appRoot, packageRegistry, seedPackageIds = [], preferInstalledDescriptors = false })`
406
+ - `hydratePackageRegistryFromInstalledNodeModules({ appRoot, packageRegistry, seedPackageIds = [], preferInstalledPackages = false })`
437
407
  - `loadBundleRegistry()`
408
+ - `loadInstalledAppPackageRegistry(appRoot)`
409
+ - `installedPackageRecordFromRegistry(packageRegistry = new Map())`
438
410
  Local functions
439
411
  - `normalizeRelativePosixPath(pathValue)`
440
- - `validateBundleDescriptorShape(descriptor, descriptorPath)`
412
+ - `validateBundleMetadataShape(packageMetadata, metadataPath)`
441
413
  - `loadCatalogPackageRegistry()`
442
414
  - `loadInstalledNodeModulePackageEntry({ appRoot, packageId })`
443
415
 
444
416
  ### `src/server/cliRuntime/packageTemplateResolution.js`
445
417
  Exports
446
- - `buildCatalogPackageCacheInstallArgs(packageSpec)`
447
- - `cleanupMaterializedPackageRoots()`
448
- - `materializeCatalogPackageRoot({ packageEntry, appRoot, reportTemplateFetchStatus = null, installCatalogPackage = installCatalogPackageIntoCache } = {})`
449
- - `resolvePackageTemplateRoot({ packageEntry, appRoot, reportTemplateFetchStatus = null, materializeCatalogRoot = materializeCatalogPackageRoot } = {})`
418
+ - `cleanupPackageRootCaches()`
419
+ - `resolvePackageTemplateRoot({ packageEntry, appRoot } = {})`
450
420
  Local functions
451
- - `isInternalCatalogPackageEntry(packageEntry = {})`
452
- - `encodePackageCacheSegment(value = "")`
453
- - `buildMaterializedCacheKey(packageEntry = {})`
454
- - `buildMaterializedInstallRoot({ appRoot, packageEntry })`
455
- - `ensureMaterializedInstallWorkspace(installRoot)`
456
- - `installCatalogPackageIntoCache({ installRoot, packageEntry })`
421
+ - `hasJskitPackageManifest(packageRoot)`
457
422
  - `resolvePackageRootFromNodeModules({ appRoot, packageId })`
458
423
  - `loadLocalWorkspacePackageIdIndex()`
459
424
  - `resolvePackageRootFromLocalWorkspace({ packageId })`
460
425
 
461
- ### `src/server/cliRuntime/sensitiveLockState.js`
426
+ ### `src/server/cliRuntime/sensitiveOptions.js`
462
427
  Exports
463
428
  - `collectOptionReferences(value = "")`
464
429
  - `isSensitiveEnvKey(key = "")`
465
- - `isSensitiveManagedTextRecord({ packageEntry = {}, record = {} } = {})`
466
430
  - `isSensitivePackageOption(packageEntry = {}, optionName = "")`
467
431
  - `isSensitiveTextMutation({ packageEntry = {}, mutation = {}, resolvedKey = "" } = {})`
468
- - `resolveSensitiveOptionEnvFallbacks({ packageEntry = {}, appRoot = "", optionInput = {}, readFileBufferIfExists, environment = process.env } = {})`
469
- - `sanitizeInstalledPackageRecordForLock(record = {}, packageEntry = {})`
470
- - `sanitizeLockSecretsForWrite(lock = {}, packageRegistry = null)`
471
- - `sanitizeManagedTextForLock(packageEntry = {}, managedText = {})`
472
- - `sanitizePackageOptionsForLock(packageEntry = {}, options = {})`
473
- - `sanitizePackageOptionsForResolve(packageEntry = {}, options = {})`
432
+ - `resolveOptionEnvFallbacks({ packageEntry = {}, appRoot = "", optionInput = {}, readFileBufferIfExists, environment = process.env } = {})`
474
433
  Local functions
475
434
  - `isSensitiveName(value = "")`
476
435
  - `textValueReferencesSensitiveOption(packageEntry = {}, value = "")`
@@ -488,7 +447,6 @@ Exports
488
447
  - `writeViteDevProxyConfig(appRoot, config = {}, touchedFiles = null, { dryRun = false } = {})`
489
448
  - `normalizeViteProxyMutationRecord(value = {})`
490
449
  - `applyViteMutations(packageEntry, appRoot, viteMutations, options, managedVite, touchedFiles, { dryRun = false } = {})`
491
- - `removeManagedViteProxyEntries({ appRoot, packageId, managedViteChanges = {}, touchedFiles = null, dryRun = false } = {})`
492
450
 
493
451
  ### `src/server/commandHandlers/app.js`
494
452
  Exports
@@ -499,41 +457,11 @@ Local functions
499
457
  ### `src/server/commandHandlers/appCommandCatalog.js`
500
458
  Exports
501
459
  - `APP_SCRIPT_WRAPPERS`
502
- - `COPIED_APP_SCRIPT_VALUES`
503
- - `COPIED_APP_SCRIPT_FILES`
504
460
  - `APP_COMMAND_DEFINITIONS`
505
461
  - `listAppCommandDefinitions()`
506
462
  - `resolveAppCommandDefinition(rawName = "")`
507
463
  - `buildAppCommandOptionMeta(subcommandName = "")`
508
464
 
509
- ### `src/server/commandHandlers/appCommands/adoptManagedScripts.js`
510
- Exports
511
- - `runAppAdoptManagedScriptsCommand(ctx = {}, { appRoot = "", options = {}, stdout })`
512
- Local functions
513
- - `shouldRewriteScript(currentValue = "", scriptName = "", force = false)`
514
-
515
- ### `src/server/commandHandlers/appCommands/migrateSourceMutations.js`
516
- Exports
517
- - `buildCrudFormFieldPushMigration(sourceText = "")`
518
- - `buildMainClientProviderMigration(sourceText = "")`
519
- - `runAppMigrateSourceMutationsCommand(_ctx = {}, { appRoot = "", options = {}, stdout })`
520
- Local functions
521
- - `createSourceFile(sourceText = "")`
522
- - `readStringLiteralValue(node)`
523
- - `readRegisterMainClientComponentToken(statement)`
524
- - `escapeRegExp(value = "")`
525
- - `findMatchingDelimiter(sourceText = "", openIndex = -1, openChar = "(", closeChar = ")")`
526
- - `readLineIndent(sourceText = "", index = 0)`
527
- - `readFormFieldKey(sourceText = "")`
528
- - `readFormFieldKeys(sourceText = "")`
529
- - `formatArrayEntry(entrySource = "", indent = " ")`
530
- - `findFormFieldArrayDeclaration(sourceText = "", arrayName = "")`
531
- - `findLineRangeContaining(sourceText = "", searchText = "", { afterIndex = -1 } = {})`
532
- - `findFormFieldPushCalls(sourceText = "", arrayName = "")`
533
- - `buildArrayContentWithAddedEntries(existingContent = "", entries = [], indent = "", { marker = "" } = {})`
534
- - `applyTextReplacements(sourceText = "", replacements = [])`
535
- - `collectCrudFormFieldCandidateFiles(appRoot = "")`
536
-
537
465
  ### `src/server/commandHandlers/appCommands/previewIdentity.js`
538
466
  Exports
539
467
  - `PREVIEW_IDENTITY_PROTOCOL`
@@ -575,24 +503,17 @@ Exports
575
503
  Local functions
576
504
  - `ensureCommandSucceeded(result, label, { createCliError, cwd = "", stdout, stderr, quiet = false } = {})`
577
505
 
578
- ### `src/server/commandHandlers/appCommands/syncCi.js`
579
- Exports
580
- - `runAppSyncCiCommand(ctx = {}, { appRoot = "", options = {}, stdout })`
581
-
582
506
  ### `src/server/commandHandlers/appCommands/updatePackages.js`
583
507
  Exports
584
- - `collectChangedInstalledPackageIds(lock = {}, latestVersions = new Map())`
585
508
  - `findRangeIntersectionVersion(ranges = [])`
586
509
  - `formatElapsedTime(elapsedMilliseconds = 0)`
587
510
  - `resolveRequiredDirectPeerUpdates({ createCliError, packageJson = {}, packageManifests = new Map() } = {})`
588
- - `reapplyChangedInstalledPackages({ appRoot, createCliError, dryRun, latestVersions, loadLockFile, stderr, stdout })`
589
511
  - `runAppUpdatePackagesCommand(ctx = {}, { appRoot = "", options = {}, stdout, stderr })`
590
512
  - `runWithProgress(task, { activity, progressIntervalMs = PROGRESS_INTERVAL_MS, stdout, step } = {})`
591
513
  Local functions
592
514
  - `collectJskitPackageNames(packageMap = {})`
593
515
  - `collectManifestJskitPackageNames(packageJson = {})`
594
516
  - `resolveExactVersion(packageName = "", rawVersion = "", createCliError)`
595
- - `resolveMajorRange(packageName = "", version = "", createCliError)`
596
517
  - `resolveRegistryArgs(registryUrl = "")`
597
518
  - `resolveInstallSpecs(packageNames = [], latestVersions = new Map())`
598
519
  - `parseRegistryPackageManifest(rawValue, packageName, createCliError)`
@@ -600,24 +521,19 @@ Local functions
600
521
  - `resolveDeclaredDependencySection(packageJson = {}, packageName = "")`
601
522
  - `hasNpmWorkspaces(packageJson = {})`
602
523
  - `readJson(filePath)`
603
- - `readOptionalFile(filePath)`
604
524
  - `resolveWorkspaceDirectories({ appRoot, createCliError, packageJson, stderr, stdout })`
605
- - `descriptorJskitPackageNames(source = "")`
525
+ - `collectJskitMutationPackageNames(packageJson = {})`
606
526
  - `loadWorkspacePackages(workspaceDirectories = [])`
607
527
  - `resolveLatestVersions(packageNames = [], latestVersions = new Map(), { appRoot, createCliError, registryArgs, stderr, stdout })`
608
528
  - `updateWorkspaceManifest(packageJson = {}, latestVersions = new Map(), createCliError)`
609
- - `updateWorkspaceDescriptor(source = "", latestVersions = new Map(), createCliError)`
610
529
  - `synchronizeWorkspacePackageSpecs({ appRoot, createCliError, dryRun, latestVersions, packageJson, registryArgs, stderr, stdout })`
611
530
  - `updateRootPackages({ appRoot, createCliError, dryRun, latestVersions, packageJson, registryArgs, stderr, stdout })`
531
+ - `assertRootJskitVersionsAreExact({ appRoot, createCliError, latestVersions })`
612
532
 
613
533
  ### `src/server/commandHandlers/appCommands/verify.js`
614
534
  Exports
615
535
  - `runAppVerifyCommand(ctx = {}, { appRoot = "", options = {}, stdout, stderr })`
616
536
 
617
- ### `src/server/commandHandlers/appCommands/verifyUi.js`
618
- Exports
619
- - `runAppVerifyUiCommand(ctx = {}, { appRoot = "", options = {}, stdout, stderr })`
620
-
621
537
  ### `src/server/commandHandlers/blueprint.js`
622
538
  Exports
623
539
  - `createBlueprintCommands(ctx = {})`
@@ -673,7 +589,6 @@ Local functions
673
589
  - `appendUnmappedConcreteTargetWarnings(lines, { color, concreteTargets = [] } = {})`
674
590
  - `appendSemanticPlacementGroups(lines, { color, semanticPlacements = [], concreteTargets = [], showLayoutDetails = false } = {})`
675
591
  - `readFileIfExists(filePath = "")`
676
- - `resolveDescriptorFromLockEntry({ appRoot = "", packageId = "", installedPackageEntry = {} } = {})`
677
592
  - `collectProviderSourceFiles(rootPath = "")`
678
593
 
679
594
  ### `src/server/commandHandlers/mobile.js`
@@ -693,8 +608,6 @@ Local functions
693
608
  - `resolveAndroidDeviceTarget({ ctx, appRoot, explicitTarget = "", commandLabel = "this mobile command" } = {})`
694
609
  - `resolveInstalledMobileConfigForCommand({ appRoot, createCliError } = {})`
695
610
  - `runLocalBinary(binaryName, args = [], { appRoot, cwd = appRoot, env = {}, stderr, stdout, pathModule, createCliError, dryRun = false } = {})`
696
- - `hasPackageDependency(packageJson = {}, packageId = "")`
697
- - `readJsonFileForMobileCommand(filePath = "", label = "", createCliError)`
698
611
  - `assertMobileRuntimePackageInstalled({ ctx, appRoot } = {})`
699
612
  - `refreshManagedMobileFiles({ ctx, appRoot, options = {}, stdout } = {})`
700
613
  - `runMobileSyncAndroidCommand({ ctx, appRoot, options = {}, stdout, stderr })`
@@ -761,13 +674,19 @@ Exports
761
674
 
762
675
  ### `src/server/commandHandlers/packageCommands/add.js`
763
676
  Exports
677
+ - `orderRuntimePackagesForConfiguration(packageRegistry, requestedPackageIds, resolvePackageKind)`
764
678
  - `runPackageAddCommand(ctx = {}, { positional, options, cwd, io })`
765
679
  Local functions
766
- - `collectPlacementComponentTokensFromManagedRecords(installedPackageRecords = [])`
680
+ - `resolveAvailablePackageSource({ packageEntry, appRoot })`
681
+ - `withResolvedPackageSource({ packageEntry, packageRoot, appRoot })`
682
+ - `declareDirectPackageDependency({ packageEntry, packageJson, packageKind })`
683
+ - `serializeDependencyState(packageJson = {})`
684
+ - `collectPlannedRuntimePackageIds({ packageJson, packageRegistry, targetPackageIds, resolvePackageKind })`
685
+ - `collectPlacementComponentTokensFromMutationResults(mutationResults = [])`
767
686
  - `renderWrappedShellCommand(binaryName, args = [], { maxWidth = 100, continuationIndent = " " } = {})`
768
687
  - `runLocalProjectBinary(binaryName, args = [], { appRoot, io, pathModule = path, createCliError, explanation = "", dryRun = false } = {})`
769
688
  - `installAppDependenciesForHook({ appRoot, io, pathModule = path, createCliError, dryRun = false } = {})`
770
- - `resolvePackageOptionInputForInstall({ packageEntry, existingInstall, packageInlineOptions, appRoot, readFileBufferIfExists })`
689
+ - `resolvePackageOptionInputForInstall({ packageEntry, packageInlineOptions, appRoot, readFileBufferIfExists })`
771
690
  - `validateHookResult(result = {}, { packageId = "", hookLabel = "" } = {})`
772
691
  - `loadInstallHook({ packageEntry, appRoot, hookSpec, hookLabel = "" } = {})`
773
692
  - `createInstallHookHelpers({ ctx, appRoot, io, appPackageJson } = {})`
@@ -779,16 +698,8 @@ Exports
779
698
 
780
699
  ### `src/server/commandHandlers/packageCommands/createMigration.js`
781
700
  Exports
782
- - `addInstallMigrationMutationToDescriptor(source = "", mutation = {})`
783
701
  - `createMigrationTemplate({ packageId, migrationId } = {})`
784
702
  - `runMigrationCreateCommand(ctx = {}, { options, cwd, io })`
785
- Local functions
786
- - `maskNonCode(source = "")`
787
- - `findMatchingDelimiter(source, openIndex, openCharacter, closeCharacter)`
788
- - `findMutationsFilesArray(source = "")`
789
- - `lineIndentAt(source = "", index = 0)`
790
- - `renderInstallMigrationMutation({ from, id, indent } = {})`
791
- - `writeMigrationSourceAndDescriptor({ descriptorPath, descriptorSource, migrationPath, migrationSource, mkdir, rename, rm, writeFile, path } = {})`
792
703
 
793
704
  ### `src/server/commandHandlers/packageCommands/discoverabilityHelp.js`
794
705
  Exports
@@ -828,20 +739,12 @@ Exports
828
739
  Local functions
829
740
  - `resolveGeneratorSubcommandDefinitionMetadata(packageEntry = {}, subcommandName = "")`
830
741
  - `resolveSubcommandRequiresShellWeb(packageEntry = {}, subcommandName = "")`
831
- - `mapDescriptorBackedSubcommandArgsToInlineOptions(packageEntry = {}, subcommandName = "", subcommandArgs = [], inlineOptions = {}, createCliError)`
742
+ - `mapPackageMetadataBackedSubcommandArgsToInlineOptions(packageEntry = {}, subcommandName = "", subcommandArgs = [], inlineOptions = {}, createCliError)`
832
743
  - `resolveSubcommandRequiresInput(packageEntry = {}, subcommandName = "")`
833
744
  - `collectUnexpectedGeneratorSubcommandOptionNames(packageEntry = {}, subcommandName = "", inlineOptions = {})`
834
745
  - `resolveCreateTargetPolicy(packageEntry = {}, subcommandName = "")`
835
746
  - `normalizeRelativePathWithinApp(appRoot = "", targetPath = "", createCliError)`
836
- - `enforceDescriptorBackedCreateTargetPolicy({ packageEntry, subcommandName, inlineOptions = {}, appRoot = "", packageIdInput = "", createCliError, readdir } = {})`
837
-
838
- ### `src/server/commandHandlers/packageCommands/migrations.js`
839
- Exports
840
- - `runPackageMigrationsCommand(ctx = {}, { positional, options, cwd, io })`
841
-
842
- ### `src/server/commandHandlers/packageCommands/position.js`
843
- Exports
844
- - `runPackagePositionCommand(ctx = {}, { positional, options, cwd, io })`
747
+ - `enforcePackageMetadataBackedCreateTargetPolicy({ packageEntry, subcommandName, inlineOptions = {}, appRoot = "", packageIdInput = "", createCliError, readdir } = {})`
845
748
 
846
749
  ### `src/server/commandHandlers/packageCommands/remove.js`
847
750
  Exports
@@ -866,10 +769,6 @@ Local functions
866
769
  - `loadMainClientProviderSource({ appRoot = "", createCliError, componentToken = "" } = {})`
867
770
  - `ensureProvisionedProviderRegistration(definition, { appRoot = "", createCliError, dryRun = false, touchedFiles = new Set() } = {})`
868
771
 
869
- ### `src/server/commandHandlers/packageCommands/update.js`
870
- Exports
871
- - `runPackageUpdateCommand(ctx = {}, { positional, options, cwd, io }, { runCommandAdd })`
872
-
873
772
  ### `src/server/commandHandlers/shared.js`
874
773
  Exports
875
774
  - `createCommandHandlerShared(ctx = {})`
@@ -912,6 +811,12 @@ Local functions
912
811
  - `resolveOwnershipGuidance(payload = {})`
913
812
  - `renderDependencyMutationSpec(versionSpec)`
914
813
 
814
+ ### `src/server/commandHandlers/synchronization.js`
815
+ Exports
816
+ - `createSynchronizationCommands(ctx = {})`
817
+ Local functions
818
+ - `parseIntentInvocation({ positional = [], options = {}, createCliError, commandName, intent })`
819
+
915
820
  ### `src/server/core/argParser.js`
916
821
  Exports
917
822
  - `parseArgs(argv, { createCliError } = {})`
@@ -934,8 +839,6 @@ Local functions
934
839
  - `isHelpToken(value = "")`
935
840
  - `canDelegateAddInlineOptions(positional = [])`
936
841
  - `canDelegateGenerateInlineOptions(positional = [])`
937
- - `canDelegateMigrationsInlineOptions(positional = [])`
938
- - `canDelegatePackageTargetInlineOptions(positional = [], expectedTargetType = "")`
939
842
  - `sortOptionLabels(labels = [])`
940
843
 
941
844
  ### `src/server/core/createCliRunner.js`
@@ -948,7 +851,7 @@ Exports
948
851
 
949
852
  ### `src/server/core/dispatchCli.js`
950
853
  Exports
951
- - `createRunCli({ parseArgs, printUsage, shouldShowCommandHelpOnBareInvocation, validateCommandOptions, resolveCommandDescriptor, commandHandlers, cleanupMaterializedPackageRoots, createCliError } = {})`
854
+ - `createRunCli({ parseArgs, printUsage, shouldShowCommandHelpOnBareInvocation, validateCommandOptions, resolveCommandDescriptor, commandHandlers, cleanupPackageRootCaches, createCliError } = {})`
952
855
 
953
856
  ### `src/server/core/usageHelp.js`
954
857
  Exports
@@ -1004,7 +907,6 @@ Exports
1004
907
  Exports
1005
908
  - `runCli`
1006
909
  - `synchronizeAppCiWorkflow`
1007
- - `validateAppCiWorkflow`
1008
910
  - `composeCiContributions`
1009
911
  - `JSKIT_CI_WORKFLOW_RELATIVE_PATH`
1010
912
  - `renderGithubWorkflow`
@@ -1074,35 +976,8 @@ Exports
1074
976
  Local functions
1075
977
  - `resolveCatalogPackagesPath()`
1076
978
 
1077
- ### `src/server/shared/uiVerification.js`
1078
- Exports
1079
- - `UI_VERIFICATION_AUTH_MODES`
1080
- - `UI_VERIFICATION_RECEIPT_RELATIVE_PATH`
1081
- - `UI_VERIFICATION_RECEIPT_VERSION`
1082
- - `UI_VERIFICATION_RUNNER`
1083
- - `isUiVerificationAuthMode(value = "")`
1084
- - `isUiVerificationPath(relativePath = "")`
1085
- - `isValidUiVerificationReceipt(receipt)`
1086
- - `normalizeUiVerificationReceipt(rawReceipt = {})`
1087
- - `resolveChangedPathsFromGit(appRoot = "", { against = "", pathspecs = ["src", "packages"] } = {})`
1088
- - `resolveChangedUiFilesFromGit(appRoot = "", { against = "" } = {})`
1089
- - `sortUniqueStrings(values = [])`
1090
- Local functions
1091
- - `normalizeText(value = "")`
1092
- - `readGitPathList(appRoot = "", args = [])`
1093
-
1094
979
  ### bin
1095
980
 
1096
981
  ### `bin/jskit.js`
1097
982
  Exports
1098
983
  - None
1099
-
1100
- ### bundles
1101
-
1102
- ### `bundles/auth-base/bundle.descriptor.mjs`
1103
- Exports
1104
- - None
1105
-
1106
- ### `bundles/auth-local/bundle.descriptor.mjs`
1107
- Exports
1108
- - None
@@ -14,10 +14,24 @@ Use this on demand; do not load the full index at startup.
14
14
 
15
15
  ### root
16
16
 
17
+ ### `browserFixture.mjs`
18
+ Exports
19
+ - `createChromiumLaunchOptions({ env = process.env } = {})`
20
+ - `reservePort()`
21
+ - `startCapturedProcess(command, args, { cwd, env = {} } = {})`
22
+ - `startViteFixture({ fixtureRoot, configFile = "vite.config.mjs", env = {} } = {})`
23
+ - `stopProcess(runtime)`
24
+
17
25
  ### `fakeFastify.mjs`
18
26
  Exports
19
27
  - `createFakeFastifyPolicyRuntime({ csrfHandler, autoRunPlugin = null } = {})`
20
28
 
29
+ ### `jskitPackage.mjs`
30
+ Exports
31
+ - `writeJskitPackageMetadata(packageRoot, metadataOrExpression)`
32
+ Local functions
33
+ - `resolveMetadata(metadataOrExpression)`
34
+
21
35
  ### `runCli.js`
22
36
  Exports
23
37
  - `createCliRunner(cliPath)`
@@ -21,8 +21,8 @@ Discover only a missing fact or exact-command failure, then resume the lane.
21
21
  ## Establish context
22
22
 
23
23
  1. Read the request and nearest `AGENTS.md`.
24
- 2. Inspect `package.json`, `.jskit/lock.json`, the existing tree, and the
25
- current diff when reviewing changes.
24
+ 2. Inspect `package.json`, `package-lock.json`, installed package metadata, the
25
+ existing tree, and the current diff when reviewing changes.
26
26
  3. Read `.jskit/APP_BLUEPRINT.md` when present; do not invent requirements.
27
27
  4. Load only the task-relevant direct reference:
28
28
  - For creation, package selection, CLI use, or generators, read
@@ -41,8 +41,8 @@ or permission decisions when they would materially change the application.
41
41
  ## Discovery fallback
42
42
 
43
43
  Use the narrowest CLI query for a missing fact. Prefer existing packages,
44
- generators, placements, and high-level composables. Never hand-edit
45
- `.jskit/lock.json` or bypass managed-file lifecycle checks.
44
+ generators, placements, and high-level composables. Generate migration and CI
45
+ projections with their intent-specific commands.
46
46
 
47
47
  ## Implement a change
48
48
 
@@ -81,10 +81,11 @@ npx --no-install jskit generate crud-ui-generator crud notes \
81
81
  `--delete-confirmation` requires generated list and view pages and a shared
82
82
  resource with a `DELETE` operation. It supports a custom `--id-param` and fails
83
83
  clearly when the contract is unsupported. The view uses the public
84
- `CrudViewScreen` `actions` slot and `useCrudDeleteAction()`. A Vuetify alert
85
- dialog provides Cancel/Delete; `useCommand()` owns pending/error state and the
86
- resource request; success invalidates the CRUD list and navigates there. Do not
87
- inspect private `users-web` code, add a page transport, or use raw `fetch()`.
84
+ `CrudViewScreen` `actions` slot, `CrudDeleteAction`, and
85
+ `useCrudDeleteAction()`. The shared component owns the Cancel/Delete dialog;
86
+ `useCommand()` owns pending/error state and the resource request; success
87
+ invalidates the CRUD list and navigates there. Do not inspect private
88
+ `users-web` code, add a page transport, or use raw `fetch()`.
88
89
 
89
90
  ## Strict temporal values
90
91
 
@@ -99,7 +100,7 @@ the boundary (normally `toISOString()` for `dateTime`). `timestamp` is removed:
99
100
  after checking the existing unit, use `epochMilliseconds` or `epochSeconds`.
100
101
  Honor `temporalPrecision` without silently truncating fractions. Generated CRUD
101
102
  serializes supported database temporal output; custom repositories must return
102
- strict strings and write ISO/RFC 3339 strings themselves. There is no compatibility alias.
103
+ strict strings and write ISO/RFC 3339 strings themselves.
103
104
 
104
105
  ## Migration ownership
105
106
 
@@ -108,7 +109,7 @@ changes are immutable additive migrations owned by the app-local package:
108
109
 
109
110
  ```bash
110
111
  npx --no-install jskit create migration --package <package-id> --id <id>
111
- npx --no-install jskit migrations package <package-id>
112
+ npx --no-install jskit migrations sync
112
113
  npm run db:migrate
113
114
  ```
114
115