@jskit-ai/agent-docs 0.1.85 → 0.1.88
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/guide/agent/app-setup/initial-scaffolding.md +3 -4
- package/guide/agent/app-setup/working-with-the-jskit-cli.md +3 -17
- package/guide/agent/generators/crud-generators.md +0 -18
- package/guide/agent/generators/row-policies.md +1 -1
- package/package.json +1 -1
- package/reference/autogen/tooling/jskit-cli.md +3 -16
|
@@ -162,7 +162,6 @@ The most important parts look like this:
|
|
|
162
162
|
"server": "node ./bin/server.js",
|
|
163
163
|
"server:all": "node ./bin/server.js",
|
|
164
164
|
"server:home": "SERVER_SURFACE=home node ./bin/server.js",
|
|
165
|
-
"devlinks": "jskit app link-local-packages",
|
|
166
165
|
"dev": "vite",
|
|
167
166
|
"dev:all": "vite",
|
|
168
167
|
"dev:home": "VITE_SURFACE=home vite",
|
|
@@ -206,9 +205,9 @@ The most important parts look like this:
|
|
|
206
205
|
|
|
207
206
|
Published JSKIT libraries and tooling support Node.js 22 from 22.12.0 onward, Node.js 24, and Node.js 26. Newly generated applications deliberately require Node 26: their app-level `engines` contract, `.nvmrc`, and JSKIT-managed verification workflow all name that runtime. The app-level contract is the runtime boundary for the app and its installed JSKIT runtime packages, while independently consumed JSKIT CLI and tooling packages retain the wider supported range. The dependency on `@local/main` points at `file:packages/main`, which means your app already contains its own local JSKIT package. The maintenance scripts are also useful to notice early, because they show an important ownership boundary in JSKIT.
|
|
208
207
|
|
|
209
|
-
`verify`, `jskit:update`,
|
|
208
|
+
`verify`, `jskit:update`, and `release` are intentionally thin wrappers. They stay in `package.json` because they are convenient app-local shortcuts, but the real implementation lives in `jskit app ...`, not in copied scaffold scripts.
|
|
210
209
|
|
|
211
|
-
That matters because JSKIT maintenance policy changes over time. If the scaffold copied a large shell script into every app, existing apps would freeze the old behavior forever. By delegating to `jskit app verify`, `jskit app update-packages`,
|
|
210
|
+
That matters because JSKIT maintenance policy changes over time. If the scaffold copied a large shell script into every app, existing apps would freeze the old behavior forever. By delegating to `jskit app verify`, `jskit app update-packages`, and `jskit app release`, the app keeps the nice `npm run` shortcuts while the maintained behavior stays in the installed CLI package.
|
|
212
211
|
|
|
213
212
|
The Playwright scaffold follows the same rule. `playwright.config.mjs` delegates to `@jskit-ai/jskit-cli/test/playwright`, and the starter browser specs delegate their shared responsive checks to published JSKIT helpers. The generated files stay small while later JSKIT package updates can change local server startup, managed `PLAYWRIGHT_BASE_URL` handling, and `JSKIT_PLAYWRIGHT_STORAGE_STATE` support without copying that logic into each new app.
|
|
214
213
|
|
|
@@ -819,7 +818,7 @@ That is why you saw `@jskit-ai/kernel` and `@jskit-ai/http-runtime` earlier in `
|
|
|
819
818
|
|
|
820
819
|
### Other files and options
|
|
821
820
|
|
|
822
|
-
The remaining files are easier to understand once you know the core pieces above. `vite.config.mjs` configures the frontend build and the `/api` proxy used during development. `index.html` is the HTML shell Vite uses to mount Vue. `tests/` contains basic smoke tests so the app has a verification path from day one. The `scripts/` directory is intentionally small because JSKIT maintenance helpers such as `verify`, `jskit:update`,
|
|
821
|
+
The remaining files are easier to understand once you know the core pieces above. `vite.config.mjs` configures the frontend build and the `/api` proxy used during development. `index.html` is the HTML shell Vite uses to mount Vue. `tests/` contains basic smoke tests so the app has a verification path from day one. The `scripts/` directory is intentionally small because JSKIT maintenance helpers such as `verify`, `jskit:update`, and `release` are package-owned CLI commands rather than copied app scripts.
|
|
823
822
|
|
|
824
823
|
The `create-app` command also accepts a few other flags that are useful without changing the basic meaning of this chapter's setup. `--title <text>` lets you replace the browser title and other template text with a friendlier app name. `--target <path>` lets you choose a different output directory instead of the default `./exampleapp`. `--tenancy-mode <mode>` can seed `none`, `personal`, or `workspaces`; for this chapter we intentionally use `none` so the first scaffold stays small and non-workspace. `--minimal` selects the bare `minimal-shell` template instead of the default shell-web app template. `--force` allows writing into a non-empty target directory when you know that is what you want. `--dry-run` prints the planned file writes without touching the filesystem, which is useful when you want to inspect what the generator would do. `-h` or `--help` prints the command help.
|
|
825
824
|
|
|
@@ -53,7 +53,6 @@ The important examples are:
|
|
|
53
53
|
|
|
54
54
|
- `npm run verify`
|
|
55
55
|
- `npm run jskit:update`
|
|
56
|
-
- `npm run devlinks`
|
|
57
56
|
- `npm run release`
|
|
58
57
|
|
|
59
58
|
In the current scaffold, those scripts are intentionally thin:
|
|
@@ -63,7 +62,6 @@ In the current scaffold, those scripts are intentionally thin:
|
|
|
63
62
|
"scripts": {
|
|
64
63
|
"verify": "jskit app verify && npm run --if-present verify:app",
|
|
65
64
|
"jskit:update": "jskit app update-packages",
|
|
66
|
-
"devlinks": "jskit app link-local-packages",
|
|
67
65
|
"release": "jskit app release"
|
|
68
66
|
}
|
|
69
67
|
}
|
|
@@ -71,12 +69,11 @@ In the current scaffold, those scripts are intentionally thin:
|
|
|
71
69
|
|
|
72
70
|
That is a deliberate design choice.
|
|
73
71
|
|
|
74
|
-
The app keeps the handy `npm run` names, but the real maintenance policy lives in the installed CLI package instead of copied shell scripts inside the app. That means if JSKIT later changes how package updates
|
|
72
|
+
The app keeps the handy `npm run` names, but the real maintenance policy lives in the installed CLI package instead of copied shell scripts inside the app. That means if JSKIT later changes how package updates or baseline verification should work, apps can pick up the new behavior by updating `@jskit-ai/jskit-cli` instead of hand-editing frozen scaffold files.
|
|
75
73
|
|
|
76
74
|
This gives you a clean ownership split:
|
|
77
75
|
|
|
78
76
|
- app-owned scripts still describe how *this app* runs, builds, and tests
|
|
79
|
-
- `npm run devlinks` re-applies local checkout links after `npm install` when you are testing an app against this monorepo
|
|
80
77
|
- JSKIT-owned wrapper scripts delegate framework maintenance to `jskit app ...`
|
|
81
78
|
|
|
82
79
|
That split is worth keeping in mind through the rest of the guide. When you see `npm run verify`, read it as "run the app's JSKIT baseline verification policy, then any app-specific extra verification hook".
|
|
@@ -116,14 +113,9 @@ npm run jskit:update
|
|
|
116
113
|
|
|
117
114
|
After it succeeds, npm dependencies and descriptor-managed app state are current together. If a managed app-owned file is missing, a required saved option can no longer be resolved, or another package update cannot be applied safely, the app-wide update fails instead of leaving that package silently stale. `--dry-run` reports which installed packages would be reapplied without invoking their update lifecycle.
|
|
118
115
|
|
|
119
|
-
|
|
116
|
+
At the start of a real update, JSKIT resolves and installs the latest `@jskit-ai/jskit-cli`, then hands the rest of the operation to that app-local CLI process. This keeps the one-command contract even when the updater itself has changed: the current code, not the already-running older process, owns package reapplication, migrations, workspace refreshes, and CI synchronization.
|
|
120
117
|
|
|
121
|
-
|
|
122
|
-
npm install --save-dev --save-exact @jskit-ai/jskit-cli@latest
|
|
123
|
-
npm run jskit:update
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
After that bootstrap, normal future upgrades use only `npm run jskit:update`. Do not work around the first upgrade by editing `.jskit/lock.json`; the new updater must reapply the descriptor contract and write managed state itself.
|
|
118
|
+
Do not pre-install the CLI separately and do not edit `.jskit/lock.json`. Run `npm run jskit:update`; the updater owns its bootstrap and writes managed state through the normal package lifecycle.
|
|
127
119
|
|
|
128
120
|
The update reports elapsed progress for registry and install work. It also refreshes JSKIT-managed migrations and CI after root package changes. Preview the complete operation without changing manifests, descriptors, the lockfile, migrations, or CI with:
|
|
129
121
|
|
|
@@ -571,12 +563,6 @@ npm install
|
|
|
571
563
|
|
|
572
564
|
`jskit add` changes the app. `npm install` downloads the dependencies that the changed app requires.
|
|
573
565
|
|
|
574
|
-
If the app is being tested against a local JSKIT checkout with linked packages, run the local-link wrapper again after every `npm install`:
|
|
575
|
-
|
|
576
|
-
```bash
|
|
577
|
-
npm run devlinks
|
|
578
|
-
```
|
|
579
|
-
|
|
580
566
|
### `add bundle`
|
|
581
567
|
|
|
582
568
|
Bundles are a convenience layer for catalog shortcuts. Prefer package commands in setup docs and normal app work, especially for auth, because provider ownership is clearer when the selected provider package is installed explicitly.
|
|
@@ -314,12 +314,6 @@ So before you build or run the app again, install that new local package:
|
|
|
314
314
|
npm install
|
|
315
315
|
```
|
|
316
316
|
|
|
317
|
-
If you are verifying the guide against a local JSKIT checkout and have already been using local package links, rerun:
|
|
318
|
-
|
|
319
|
-
```bash
|
|
320
|
-
npm run devlinks
|
|
321
|
-
```
|
|
322
|
-
|
|
323
317
|
The same rule applies after later server scaffolds such as `addresses` and `comments`. The UI generator can still read the generated resource file directly, but the app runtime needs the local package install boundary to be completed before the CRUD can boot normally.
|
|
324
318
|
|
|
325
319
|
For standard CRUDs, that file is intentionally compact. It uses `defineCrudResource(...)` from `@jskit-ai/resource-crud-core`, authors the canonical `schema` / `searchSchema` / `defaultSort` / `autofilter` shape once, and lets JSKIT derive the standard CRUD operation contracts from it.
|
|
@@ -435,12 +429,6 @@ Then install the generated local package:
|
|
|
435
429
|
npm install
|
|
436
430
|
```
|
|
437
431
|
|
|
438
|
-
If you are developing against a local JSKIT checkout, relink your app to the local packages before you run the UI:
|
|
439
|
-
|
|
440
|
-
```bash
|
|
441
|
-
npm run devlinks
|
|
442
|
-
```
|
|
443
|
-
|
|
444
432
|
### Step 3: refine the generated lookup metadata by hand
|
|
445
433
|
|
|
446
434
|
Open `packages/addresses/src/shared/addressResource.js` and add `labelKey: "fullName"` to the generated `contactId` relation:
|
|
@@ -617,12 +605,6 @@ Then install the generated local package:
|
|
|
617
605
|
npm install
|
|
618
606
|
```
|
|
619
607
|
|
|
620
|
-
If you are developing against a local JSKIT checkout, relink the app before you run the UI:
|
|
621
|
-
|
|
622
|
-
```bash
|
|
623
|
-
npm run devlinks
|
|
624
|
-
```
|
|
625
|
-
|
|
626
608
|
### Step 3: refine the generated lookup metadata by hand
|
|
627
609
|
|
|
628
610
|
Open `packages/comments/src/shared/commentResource.js` and add `labelKey: "fullName"` to the generated `contactId` relation:
|
|
@@ -515,7 +515,7 @@ The `json-rest-api` package owns exhaustive framework tests for pagination, coun
|
|
|
515
515
|
|
|
516
516
|
## AnyAPI comes later
|
|
517
517
|
|
|
518
|
-
`json-rest-api@1.0.
|
|
518
|
+
`json-rest-api@1.0.26` can apply row policies with `RestApiAnyapiKnexPlugin`, including grouped predicates evaluated after the policy hook returns. JSKIT's current `internal.json-rest-api` host installs `RestApiKnexPlugin`, so the code in this chapter targets normal tables.
|
|
519
519
|
|
|
520
520
|
Do not add backend detection, fallback queries, or an `isAnyApi` branch to the normal-table policy in anticipation of a host that does not exist.
|
|
521
521
|
|
package/package.json
CHANGED
|
@@ -512,15 +512,6 @@ Exports
|
|
|
512
512
|
Local functions
|
|
513
513
|
- `shouldRewriteScript(currentValue = "", scriptName = "", force = false)`
|
|
514
514
|
|
|
515
|
-
### `src/server/commandHandlers/appCommands/linkLocalPackages.js`
|
|
516
|
-
Exports
|
|
517
|
-
- `runAppLinkLocalPackagesCommand(ctx = {}, { appRoot = "", options = {}, stdout })`
|
|
518
|
-
Local functions
|
|
519
|
-
- `collectDeclaredPackageNames(packageJson = {})`
|
|
520
|
-
- `verifySymlinkTarget(targetPath = "", sourceDir = "", { packageName = "" } = {})`
|
|
521
|
-
- `replaceWithSymlink(targetPath = "", sourceDir = "", { packageName = "" } = {})`
|
|
522
|
-
- `maybeLinkCompanionPackages({ appRoot = "", repoRoot = "", stdout, createCliError })`
|
|
523
|
-
|
|
524
515
|
### `src/server/commandHandlers/appCommands/migrateSourceMutations.js`
|
|
525
516
|
Exports
|
|
526
517
|
- `buildCrudFormFieldPushMigration(sourceText = "")`
|
|
@@ -558,11 +549,7 @@ Exports
|
|
|
558
549
|
- `formatUtcReleaseTimestamp(date = new Date())`
|
|
559
550
|
- `resolveLocalJskitBin(appRoot = "")`
|
|
560
551
|
- `runLocalJskit(appRoot, args = [], { stdout, stderr, createCliError, quiet = false } = {})`
|
|
561
|
-
- `runLocalJskitAsync(appRoot, args = [], { stdout, stderr, createCliError, quiet = false } = {})`
|
|
562
|
-
- `resolveLocalRepoRoot({ appRoot = "", explicitRepoRoot = "" } = {})`
|
|
563
|
-
- `discoverLocalPackageMap(repoRoot = "")`
|
|
564
|
-
- `linkPackageBinEntries({ appRoot, packageDirName, sourceDir, stdout } = {})`
|
|
565
|
-
- `resolveSymlinkType()`
|
|
552
|
+
- `runLocalJskitAsync(appRoot, args = [], { env = {}, stdout, stderr, createCliError, quiet = false } = {})`
|
|
566
553
|
Local functions
|
|
567
554
|
- `ensureCommandSucceeded(result, label, { createCliError, cwd = "", stdout, stderr, quiet = false } = {})`
|
|
568
555
|
|
|
@@ -752,11 +739,11 @@ Local functions
|
|
|
752
739
|
- `collectPlacementComponentTokensFromManagedRecords(installedPackageRecords = [])`
|
|
753
740
|
- `renderWrappedShellCommand(binaryName, args = [], { maxWidth = 100, continuationIndent = " " } = {})`
|
|
754
741
|
- `runLocalProjectBinary(binaryName, args = [], { appRoot, io, pathModule = path, createCliError, explanation = "", dryRun = false } = {})`
|
|
755
|
-
- `installAppDependenciesForHook({ appRoot,
|
|
742
|
+
- `installAppDependenciesForHook({ appRoot, io, pathModule = path, createCliError, dryRun = false } = {})`
|
|
756
743
|
- `resolvePackageOptionInputForInstall({ packageEntry, existingInstall, packageInlineOptions, appRoot, readFileBufferIfExists })`
|
|
757
744
|
- `validateHookResult(result = {}, { packageId = "", hookLabel = "" } = {})`
|
|
758
745
|
- `loadInstallHook({ packageEntry, appRoot, hookSpec, hookLabel = "" } = {})`
|
|
759
|
-
- `createInstallHookHelpers({ ctx, appRoot, io, appPackageJson
|
|
746
|
+
- `createInstallHookHelpers({ ctx, appRoot, io, appPackageJson } = {})`
|
|
760
747
|
- `invokeInstallHook({ packageEntry, appRoot, hookSpec, hookLabel, hookContext, createCliError } = {})`
|
|
761
748
|
|
|
762
749
|
### `src/server/commandHandlers/packageCommands/create.js`
|