@jskit-ai/agent-docs 0.1.2 → 0.1.3
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/DISTR_AGENT.md +9 -2
- package/guide/agent/app-extras/assistant.md +1 -1
- package/guide/agent/app-extras/realtime.md +1 -1
- package/guide/agent/app-setup/a-more-interesting-shell.md +1 -1
- package/guide/agent/app-setup/authentication.md +1 -1
- package/guide/agent/app-setup/console.md +1 -1
- package/guide/agent/app-setup/database-layer.md +1 -1
- package/guide/agent/app-setup/initial-scaffolding.md +22 -5
- package/guide/agent/app-setup/multi-homing.md +1 -1
- package/guide/agent/app-setup/users.md +1 -1
- package/guide/agent/app-setup/working-with-the-jskit-cli.md +54 -2
- package/guide/agent/generators/advanced-cruds.md +1 -1
- package/guide/agent/generators/crud-generators.md +1 -1
- package/guide/agent/generators/intro.md +1 -1
- package/guide/agent/generators/ui-generators.md +1 -1
- package/guide/agent/index.md +1 -1
- package/guide/human/app-extras/assistant.md +0 -2
- package/guide/human/app-extras/realtime.md +0 -2
- package/guide/human/app-setup/a-more-interesting-shell.md +0 -2
- package/guide/human/app-setup/authentication.md +0 -2
- package/guide/human/app-setup/console.md +0 -2
- package/guide/human/app-setup/database-layer.md +0 -2
- package/guide/human/app-setup/initial-scaffolding.md +21 -6
- package/guide/human/app-setup/multi-homing.md +0 -2
- package/guide/human/app-setup/users.md +0 -2
- package/guide/human/app-setup/working-with-the-jskit-cli.md +53 -3
- package/guide/human/generators/advanced-cruds.md +0 -2
- package/guide/human/generators/crud-generators.md +0 -2
- package/guide/human/generators/intro.md +0 -2
- package/guide/human/generators/ui-generators.md +0 -2
- package/guide/human/index.md +0 -2
- package/package.json +2 -1
- package/reference/autogen/tooling/jskit-cli.md +61 -0
- package/skills/jskit-review/SKILL.md +84 -0
- package/skills/jskit-review/agents/openai.yaml +4 -0
- package/templates/APP_BLUEPRINT.md +14 -0
- package/templates/WORKBOARD.md +46 -0
- package/templates/app/AGENTS.md +15 -2
- package/workflow/app-state.md +2 -1
- package/workflow/bootstrap.md +21 -1
- package/workflow/feature-delivery.md +33 -7
- package/workflow/review.md +26 -7
- package/workflow/scoping.md +14 -2
- package/workflow/workboard.md +29 -0
package/DISTR_AGENT.md
CHANGED
|
@@ -5,8 +5,9 @@ Read these in order:
|
|
|
5
5
|
1. `workflow/app-state.md`
|
|
6
6
|
2. `workflow/bootstrap.md` if the workspace is empty or no JSKIT app exists yet
|
|
7
7
|
3. `workflow/scoping.md`
|
|
8
|
-
4. `workflow/
|
|
9
|
-
5. `workflow/
|
|
8
|
+
4. `workflow/workboard.md`
|
|
9
|
+
5. `workflow/feature-delivery.md`
|
|
10
|
+
6. `workflow/review.md`
|
|
10
11
|
|
|
11
12
|
Use these references on demand:
|
|
12
13
|
|
|
@@ -15,11 +16,17 @@ Use these references on demand:
|
|
|
15
16
|
- `guide/agent/index.md`
|
|
16
17
|
- `guide/human/index.md` when compressed guidance is ambiguous or missing nuance
|
|
17
18
|
- `templates/APP_BLUEPRINT.md`
|
|
19
|
+
- `templates/WORKBOARD.md`
|
|
20
|
+
- `skills/jskit-review/SKILL.md` for review passes when your Codex environment supports packaged skills
|
|
18
21
|
|
|
19
22
|
Core rules:
|
|
20
23
|
|
|
21
24
|
- Inspect the workspace before assuming a JSKIT app exists.
|
|
22
25
|
- Reuse existing JSKIT helpers and runtime seams before adding new local helpers.
|
|
26
|
+
- A freshly scaffolded JSKIT app can still be in Stage 1. If platform decisions are not settled yet, continue with the initialize workflow before adding runtime packages.
|
|
27
|
+
- Do not treat a missing `config.tenancyMode` line or an untouched minimal scaffold as a final tenancy decision.
|
|
28
|
+
- Do not install tenancy-sensitive packages until Stage 1 decisions are complete and the chosen tenancy is written into `config/public.js`.
|
|
23
29
|
- Do not implement app features before the blueprint has the database, surfaces, ownership model, and route/screen plan written down.
|
|
30
|
+
- For substantial or multi-chunk work, create or update `.jskit/WORKBOARD.md` as the per-request execution tracker.
|
|
24
31
|
- Use the compressed guide first for speed; fall back to the human guide when a workflow trap, migration caveat, or architectural boundary needs exact wording.
|
|
25
32
|
- Treat generated reference maps and guide copies as vendor reference. Do not edit them manually.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/a-more-interesting-shell.md`. Do not edit manually. -->
|
|
1
|
+
<!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/a-more-interesting-shell.md`. Do not edit manually. -->
|
|
2
2
|
|
|
3
3
|
# A more interesting shell
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/authentication.md`. Do not edit manually. -->
|
|
1
|
+
<!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/authentication.md`. Do not edit manually. -->
|
|
2
2
|
|
|
3
3
|
# Authentication
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/database-layer.md`. Do not edit manually. -->
|
|
1
|
+
<!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/database-layer.md`. Do not edit manually. -->
|
|
2
2
|
|
|
3
3
|
# Database layer
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/initial-scaffolding.md`. Do not edit manually. -->
|
|
1
|
+
<!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/initial-scaffolding.md`. Do not edit manually. -->
|
|
2
2
|
|
|
3
3
|
# Initial scaffolding
|
|
4
4
|
|
|
@@ -14,6 +14,16 @@ npm install
|
|
|
14
14
|
|
|
15
15
|
The first command creates a new folder called `exampleapp` and fills it with JSKIT's base shell template. The `exampleapp` name is used in a few template replacements, such as the package name and the browser title. The `--tenancy-mode none` flag tells JSKIT to start with the smallest routing model. In this mode, the app is not workspace-aware (more of this later in the guide, when multihoming is introduced). That keeps the first scaffold easier to read because there is no workspace slug handling yet.
|
|
16
16
|
|
|
17
|
+
If you are working with an AI agent and want the agent to explain the platform options after the scaffold exists, there is also a safe guided path:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npx @jskit-ai/create-app exampleapp
|
|
21
|
+
cd exampleapp
|
|
22
|
+
npm install
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
That produces the same minimal scaffold shape, but without writing an explicit `config.tenancyMode` line yet. The important rule is that this does **not** mean tenancy is already decided. Before installing tenancy-sensitive packages such as `workspaces-core` or `workspaces-web`, the agent still needs to finish the Stage 1 platform conversation and then write the chosen tenancy into `config/public.js`. If workspace packages are installed while the app is still effectively on `none`, you fall into the recovery path described later in the multi-homing chapter.
|
|
26
|
+
|
|
17
27
|
After creating the scaffolding (which comes with a package.json file), you will need to run `npm install` to install dependencies.
|
|
18
28
|
|
|
19
29
|
**Try Bash Completion!**
|
|
@@ -103,6 +113,7 @@ The most important parts look like this:
|
|
|
103
113
|
"server": "node ./bin/server.js",
|
|
104
114
|
"server:all": "node ./bin/server.js",
|
|
105
115
|
"server:home": "SERVER_SURFACE=home node ./bin/server.js",
|
|
116
|
+
"devlinks": "jskit app link-local-packages",
|
|
106
117
|
"dev": "vite",
|
|
107
118
|
"dev:all": "vite",
|
|
108
119
|
"dev:home": "VITE_SURFACE=home vite",
|
|
@@ -111,7 +122,9 @@ The most important parts look like this:
|
|
|
111
122
|
"build:home": "VITE_SURFACE=home vite build",
|
|
112
123
|
"test": "node --test",
|
|
113
124
|
"test:client": "vitest run tests/client",
|
|
114
|
-
"verify": "
|
|
125
|
+
"verify": "jskit app verify && npm run --if-present verify:app",
|
|
126
|
+
"release": "jskit app release",
|
|
127
|
+
"jskit:update": "jskit app update-packages"
|
|
115
128
|
},
|
|
116
129
|
"dependencies": {
|
|
117
130
|
"@local/main": "file:packages/main",
|
|
@@ -130,9 +143,13 @@ The most important parts look like this:
|
|
|
130
143
|
}
|
|
131
144
|
```
|
|
132
145
|
|
|
133
|
-
There are two details worth noticing immediately. The dependency on `@local/main` points at `file:packages/main`, which means your app already contains its own local JSKIT package. The
|
|
146
|
+
There are two details worth noticing immediately. 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.
|
|
147
|
+
|
|
148
|
+
`verify`, `jskit:update`, `devlinks`, and `release` are intentionally thin wrappers. They stay in `package.json` because they are convenient app-local shortcuts, but the real implementation now lives in `jskit app ...`, not in copied scaffold scripts.
|
|
149
|
+
|
|
150
|
+
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`, `jskit app link-local-packages`, and `jskit app release`, the app keeps the nice `npm run` shortcuts while the maintained behavior stays in the installed CLI package.
|
|
134
151
|
|
|
135
|
-
|
|
152
|
+
`jskit app verify` is worth noticing specifically. Linting, tests, and builds check your source code and runtime behavior. The JSKIT part of that flow runs `doctor`, which checks JSKIT-managed app state: installed package visibility, lock-file-backed managed files, and other JSKIT-specific health rules. It is there because a JSKIT app is not only code. It is also a descriptor-driven managed project.
|
|
136
153
|
|
|
137
154
|
The surface-specific script names are also worth noticing early, even in this tiny app. `dev:home`, `server:home`, and `build:home` are the first concrete places where surface selection shows up in the scaffold. They work by setting `VITE_SURFACE=home` on the client side and `SERVER_SURFACE=home` on the server side. In this first chapter, where `home` is the only surface, those variants behave almost the same as the default commands. Later, once more surfaces exist, those scripts become the simplest way to run or build just one surface at a time.
|
|
138
155
|
|
|
@@ -699,7 +716,7 @@ That is why you saw `@jskit-ai/kernel` and `@jskit-ai/http-runtime` earlier in `
|
|
|
699
716
|
|
|
700
717
|
### Other files and options
|
|
701
718
|
|
|
702
|
-
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
|
|
719
|
+
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 now much smaller than it used to be, because JSKIT maintenance helpers such as `verify`, `jskit:update`, `devlinks`, and `release` are package-owned CLI commands rather than copied app scripts.
|
|
703
720
|
|
|
704
721
|
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. `--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.
|
|
705
722
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/multi-homing.md`. Do not edit manually. -->
|
|
1
|
+
<!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/multi-homing.md`. Do not edit manually. -->
|
|
2
2
|
|
|
3
3
|
# Multi-homing
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/working-with-the-jskit-cli.md`. Do not edit manually. -->
|
|
1
|
+
<!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/app-setup/working-with-the-jskit-cli.md`. Do not edit manually. -->
|
|
2
2
|
|
|
3
3
|
# Working with the JSKIT CLI
|
|
4
4
|
|
|
@@ -45,6 +45,56 @@ That lock file is the source of truth for installed JSKIT-managed package state.
|
|
|
45
45
|
|
|
46
46
|
That is why commands such as `update`, `remove`, `position`, `migrations`, and `doctor` all care about `.jskit/lock.json`.
|
|
47
47
|
|
|
48
|
+
## JSKIT-managed app maintenance scripts
|
|
49
|
+
|
|
50
|
+
The scaffolded app also has a small set of `npm run` shortcuts that are really wrappers around JSKIT-owned maintenance behavior.
|
|
51
|
+
|
|
52
|
+
The important examples are:
|
|
53
|
+
|
|
54
|
+
- `npm run verify`
|
|
55
|
+
- `npm run jskit:update`
|
|
56
|
+
- `npm run devlinks`
|
|
57
|
+
- `npm run release`
|
|
58
|
+
|
|
59
|
+
In the current scaffold, those scripts are intentionally thin:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"scripts": {
|
|
64
|
+
"verify": "jskit app verify && npm run --if-present verify:app",
|
|
65
|
+
"jskit:update": "jskit app update-packages",
|
|
66
|
+
"devlinks": "jskit app link-local-packages",
|
|
67
|
+
"release": "jskit app release"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
That is a deliberate design choice.
|
|
73
|
+
|
|
74
|
+
The app keeps the handy `npm run` names, but the real maintenance policy now lives in the installed CLI package instead of copied shell scripts inside the app. That means if JSKIT later changes how package updates, local linking, 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
|
+
|
|
76
|
+
This gives you a clean ownership split:
|
|
77
|
+
|
|
78
|
+
- app-owned scripts still describe how *this app* runs, builds, and tests
|
|
79
|
+
- JSKIT-owned wrapper scripts delegate framework maintenance to `jskit app ...`
|
|
80
|
+
|
|
81
|
+
That split is worth keeping in mind through the rest of the guide. When you see `npm run verify`, that is now shorthand for "run the app's JSKIT baseline verification policy, then any app-specific extra verification hook".
|
|
82
|
+
|
|
83
|
+
If your app uses a non-default npm registry for JSKIT packages, pass it to the maintained CLI command rather than hard-coding it in the scaffold. For example:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
npm run jskit:update -- --registry https://registry.example.com
|
|
87
|
+
npm run release -- --registry https://registry.example.com
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
For older apps that still carry copied maintenance scripts, the migration path is:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
npx jskit app adopt-managed-scripts
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
That command rewrites known old scaffold values to the thin wrapper form above.
|
|
97
|
+
|
|
48
98
|
## Discover first, change second
|
|
49
99
|
|
|
50
100
|
One of the best habits in JSKIT is to inspect the catalog before mutating the app.
|
|
@@ -59,6 +109,7 @@ npx jskit help
|
|
|
59
109
|
|
|
60
110
|
That shows the available commands such as:
|
|
61
111
|
|
|
112
|
+
- `app`
|
|
62
113
|
- `list`
|
|
63
114
|
- `show`
|
|
64
115
|
- `add`
|
|
@@ -72,6 +123,7 @@ That shows the available commands such as:
|
|
|
72
123
|
Every command in the CLI also has its own help page. For example:
|
|
73
124
|
|
|
74
125
|
```bash
|
|
126
|
+
npx jskit help app
|
|
75
127
|
npx jskit help add
|
|
76
128
|
npx jskit help migrations
|
|
77
129
|
```
|
|
@@ -642,7 +694,7 @@ That is a different job from:
|
|
|
642
694
|
|
|
643
695
|
Those commands can all pass while JSKIT-managed state is still inconsistent. `doctor` is the command that checks that JSKIT's own view of the app still makes sense.
|
|
644
696
|
|
|
645
|
-
That is exactly why the starter scaffold
|
|
697
|
+
That is exactly why the starter scaffold now routes `npm run verify` through `jskit app verify`.
|
|
646
698
|
|
|
647
699
|
It belongs there because JSKIT apps are not only source trees. They also have:
|
|
648
700
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/generators/advanced-cruds.md`. Do not edit manually. -->
|
|
1
|
+
<!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/generators/advanced-cruds.md`. Do not edit manually. -->
|
|
2
2
|
|
|
3
3
|
# Advanced CRUDs
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/generators/crud-generators.md`. Do not edit manually. -->
|
|
1
|
+
<!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/generators/crud-generators.md`. Do not edit manually. -->
|
|
2
2
|
|
|
3
3
|
# CRUD Generators
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/generators/ui-generators.md`. Do not edit manually. -->
|
|
1
|
+
<!-- Generated by `npm run agent-docs:build` from `packages/agent-docs/guide/human/generators/ui-generators.md`. Do not edit manually. -->
|
|
2
2
|
|
|
3
3
|
# UI Generators
|
|
4
4
|
|
package/guide/agent/index.md
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-extras/realtime.md`. Do not edit manually. -->
|
|
2
|
-
|
|
3
1
|
# Realtime
|
|
4
2
|
|
|
5
3
|
At the end of the previous chapter, the app already had a real shell, authenticated users, operator tooling, and workspace-aware routing. What it still did not have was a live transport for pushing updates into that shell.
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/a-more-interesting-shell.md`. Do not edit manually. -->
|
|
2
|
-
|
|
3
1
|
# A more interesting shell
|
|
4
2
|
|
|
5
3
|
In the first chapter, the app was intentionally plain. That was useful because it let us see the smallest possible JSKIT scaffold without too many moving parts. In this chapter, we install `shell-web`, which is the package that turns that bare starting point into a real shell: a layout, navigation outlets, a first settings area, and a proper app-level error host.
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/authentication.md`. Do not edit manually. -->
|
|
2
|
-
|
|
3
1
|
# Authentication
|
|
4
2
|
|
|
5
3
|
At the end of the previous chapter, the app had a real shell, but it still did not know how to sign users in. In this chapter, we connect the app to Supabase Auth, add the stock JSKIT login and sign-out routes, and inspect the files that make authentication visible in the shell.
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/database-layer.md`. Do not edit manually. -->
|
|
2
|
-
|
|
3
1
|
# Database layer
|
|
4
2
|
|
|
5
3
|
At the end of the previous chapter, the app could already authenticate real users through Supabase, but JSKIT was still using its no-database fallback for the app-side user mirror. In this chapter, we install the MySQL database runtime, add the migration tooling, and explain what that changes immediately and what it still does **not** change yet.
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/initial-scaffolding.md`. Do not edit manually. -->
|
|
2
|
-
|
|
3
1
|
# Initial scaffolding
|
|
4
2
|
|
|
5
3
|
In this first chapter, we are going to create the smallest useful JSKIT app, install its dependencies, run it locally, and read the scaffold it gives us. The goal of this chapter is to explain how to get started with JSKIT and to understand what the generator produced, which files matter, and why the project already has concepts like _surfaces_, a local runtime package, and a server even before we add any real features.
|
|
@@ -14,6 +12,16 @@ npm install
|
|
|
14
12
|
|
|
15
13
|
The first command creates a new folder called `exampleapp` and fills it with JSKIT's base shell template. The `exampleapp` name is used in a few template replacements, such as the package name and the browser title. The `--tenancy-mode none` flag tells JSKIT to start with the smallest routing model. In this mode, the app is not workspace-aware (more of this later in the guide, when multihoming is introduced). That keeps the first scaffold easier to read because there is no workspace slug handling yet.
|
|
16
14
|
|
|
15
|
+
If you are working with an AI agent and want the agent to explain the platform options after the scaffold exists, there is also a safe guided path:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx @jskit-ai/create-app exampleapp
|
|
19
|
+
cd exampleapp
|
|
20
|
+
npm install
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
That produces the same minimal scaffold shape, but without writing an explicit `config.tenancyMode` line yet. The important rule is that this does **not** mean tenancy is already decided. Before installing tenancy-sensitive packages such as `workspaces-core` or `workspaces-web`, the agent still needs to finish the Stage 1 platform conversation and then write the chosen tenancy into `config/public.js`. If workspace packages are installed while the app is still effectively on `none`, you fall into the recovery path described later in the multi-homing chapter.
|
|
24
|
+
|
|
17
25
|
After creating the scaffolding (which comes with a package.json file), you will need to run `npm install` to install dependencies.
|
|
18
26
|
|
|
19
27
|
<DocsTerminalTip title="Try Bash Completion!">
|
|
@@ -120,6 +128,7 @@ The most important parts look like this:
|
|
|
120
128
|
"server": "node ./bin/server.js",
|
|
121
129
|
"server:all": "node ./bin/server.js",
|
|
122
130
|
"server:home": "SERVER_SURFACE=home node ./bin/server.js",
|
|
131
|
+
"devlinks": "jskit app link-local-packages",
|
|
123
132
|
"dev": "vite",
|
|
124
133
|
"dev:all": "vite",
|
|
125
134
|
"dev:home": "VITE_SURFACE=home vite",
|
|
@@ -128,7 +137,9 @@ The most important parts look like this:
|
|
|
128
137
|
"build:home": "VITE_SURFACE=home vite build",
|
|
129
138
|
"test": "node --test",
|
|
130
139
|
"test:client": "vitest run tests/client",
|
|
131
|
-
"verify": "
|
|
140
|
+
"verify": "jskit app verify && npm run --if-present verify:app",
|
|
141
|
+
"release": "jskit app release",
|
|
142
|
+
"jskit:update": "jskit app update-packages"
|
|
132
143
|
},
|
|
133
144
|
"dependencies": {
|
|
134
145
|
"@local/main": "file:packages/main",
|
|
@@ -147,9 +158,13 @@ The most important parts look like this:
|
|
|
147
158
|
}
|
|
148
159
|
```
|
|
149
160
|
|
|
150
|
-
There are two details worth noticing immediately. The dependency on `@local/main` points at `file:packages/main`, which means your app already contains its own local JSKIT package. The
|
|
161
|
+
There are two details worth noticing immediately. 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.
|
|
162
|
+
|
|
163
|
+
`verify`, `jskit:update`, `devlinks`, and `release` are intentionally thin wrappers. They stay in `package.json` because they are convenient app-local shortcuts, but the real implementation now lives in `jskit app ...`, not in copied scaffold scripts.
|
|
164
|
+
|
|
165
|
+
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`, `jskit app link-local-packages`, and `jskit app release`, the app keeps the nice `npm run` shortcuts while the maintained behavior stays in the installed CLI package.
|
|
151
166
|
|
|
152
|
-
|
|
167
|
+
`jskit app verify` is worth noticing specifically. Linting, tests, and builds check your source code and runtime behavior. The JSKIT part of that flow runs `doctor`, which checks JSKIT-managed app state: installed package visibility, lock-file-backed managed files, and other JSKIT-specific health rules. It is there because a JSKIT app is not only code. It is also a descriptor-driven managed project.
|
|
153
168
|
|
|
154
169
|
The surface-specific script names are also worth noticing early, even in this tiny app. `dev:home`, `server:home`, and `build:home` are the first concrete places where surface selection shows up in the scaffold. They work by setting `VITE_SURFACE=home` on the client side and `SERVER_SURFACE=home` on the server side. In this first chapter, where `home` is the only surface, those variants behave almost the same as the default commands. Later, once more surfaces exist, those scripts become the simplest way to run or build just one surface at a time.
|
|
155
170
|
|
|
@@ -721,7 +736,7 @@ That is why you saw `@jskit-ai/kernel` and `@jskit-ai/http-runtime` earlier in `
|
|
|
721
736
|
|
|
722
737
|
### Other files and options
|
|
723
738
|
|
|
724
|
-
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
|
|
739
|
+
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 now much smaller than it used to be, because JSKIT maintenance helpers such as `verify`, `jskit:update`, `devlinks`, and `release` are package-owned CLI commands rather than copied app scripts.
|
|
725
740
|
|
|
726
741
|
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. `--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.
|
|
727
742
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/multi-homing.md`. Do not edit manually. -->
|
|
2
|
-
|
|
3
1
|
# Multi-homing
|
|
4
2
|
|
|
5
3
|
Up to this point, the app has had several surfaces, but none of them were workspace-dependent. `home`, `auth`, `account`, and `console` all live outside any workspace slug.
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/users.md`. Do not edit manually. -->
|
|
2
|
-
|
|
3
1
|
# Users
|
|
4
2
|
|
|
5
3
|
At the end of the previous chapter, the app had a real database runtime, but it still did not have JSKIT's own persistent users layer. Authentication worked, but the app-side profile mirror was still only the temporary fallback from the auth chapter.
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
<!-- Generated by `npm run agent-docs:build` from `docs/guide/app-setup/working-with-the-jskit-cli.md`. Do not edit manually. -->
|
|
2
|
-
|
|
3
1
|
# Working with the JSKIT CLI
|
|
4
2
|
|
|
5
3
|
In the first chapter, we used the JSKIT CLI, but only in passing. We created the app, installed dependencies, and moved on.
|
|
@@ -59,6 +57,56 @@ That lock file is the source of truth for installed JSKIT-managed package state.
|
|
|
59
57
|
|
|
60
58
|
That is why commands such as `update`, `remove`, `position`, `migrations`, and `doctor` all care about `.jskit/lock.json`.
|
|
61
59
|
|
|
60
|
+
## JSKIT-managed app maintenance scripts
|
|
61
|
+
|
|
62
|
+
The scaffolded app also has a small set of `npm run` shortcuts that are really wrappers around JSKIT-owned maintenance behavior.
|
|
63
|
+
|
|
64
|
+
The important examples are:
|
|
65
|
+
|
|
66
|
+
- `npm run verify`
|
|
67
|
+
- `npm run jskit:update`
|
|
68
|
+
- `npm run devlinks`
|
|
69
|
+
- `npm run release`
|
|
70
|
+
|
|
71
|
+
In the current scaffold, those scripts are intentionally thin:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"scripts": {
|
|
76
|
+
"verify": "jskit app verify && npm run --if-present verify:app",
|
|
77
|
+
"jskit:update": "jskit app update-packages",
|
|
78
|
+
"devlinks": "jskit app link-local-packages",
|
|
79
|
+
"release": "jskit app release"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
That is a deliberate design choice.
|
|
85
|
+
|
|
86
|
+
The app keeps the handy `npm run` names, but the real maintenance policy now lives in the installed CLI package instead of copied shell scripts inside the app. That means if JSKIT later changes how package updates, local linking, 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.
|
|
87
|
+
|
|
88
|
+
This gives you a clean ownership split:
|
|
89
|
+
|
|
90
|
+
- app-owned scripts still describe how *this app* runs, builds, and tests
|
|
91
|
+
- JSKIT-owned wrapper scripts delegate framework maintenance to `jskit app ...`
|
|
92
|
+
|
|
93
|
+
That split is worth keeping in mind through the rest of the guide. When you see `npm run verify`, that is now shorthand for "run the app's JSKIT baseline verification policy, then any app-specific extra verification hook".
|
|
94
|
+
|
|
95
|
+
If your app uses a non-default npm registry for JSKIT packages, pass it to the maintained CLI command rather than hard-coding it in the scaffold. For example:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
npm run jskit:update -- --registry https://registry.example.com
|
|
99
|
+
npm run release -- --registry https://registry.example.com
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
For older apps that still carry copied maintenance scripts, the migration path is:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npx jskit app adopt-managed-scripts
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
That command rewrites known old scaffold values to the thin wrapper form above.
|
|
109
|
+
|
|
62
110
|
## Discover first, change second
|
|
63
111
|
|
|
64
112
|
One of the best habits in JSKIT is to inspect the catalog before mutating the app.
|
|
@@ -73,6 +121,7 @@ npx jskit help
|
|
|
73
121
|
|
|
74
122
|
That shows the available commands such as:
|
|
75
123
|
|
|
124
|
+
- `app`
|
|
76
125
|
- `list`
|
|
77
126
|
- `show`
|
|
78
127
|
- `add`
|
|
@@ -86,6 +135,7 @@ That shows the available commands such as:
|
|
|
86
135
|
Every command in the CLI also has its own help page. For example:
|
|
87
136
|
|
|
88
137
|
```bash
|
|
138
|
+
npx jskit help app
|
|
89
139
|
npx jskit help add
|
|
90
140
|
npx jskit help migrations
|
|
91
141
|
```
|
|
@@ -656,7 +706,7 @@ That is a different job from:
|
|
|
656
706
|
|
|
657
707
|
Those commands can all pass while JSKIT-managed state is still inconsistent. `doctor` is the command that checks that JSKIT's own view of the app still makes sense.
|
|
658
708
|
|
|
659
|
-
That is exactly why the starter scaffold
|
|
709
|
+
That is exactly why the starter scaffold now routes `npm run verify` through `jskit app verify`.
|
|
660
710
|
|
|
661
711
|
It belongs there because JSKIT apps are not only source trees. They also have:
|
|
662
712
|
|
package/guide/human/index.md
CHANGED
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jskit-ai/agent-docs",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Distributed JSKIT agent workflows, guides, and generated reference maps.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"DISTR_AGENT.md",
|
|
8
8
|
"guide",
|
|
9
9
|
"reference",
|
|
10
|
+
"skills",
|
|
10
11
|
"templates",
|
|
11
12
|
"workflow"
|
|
12
13
|
],
|
|
@@ -41,6 +41,8 @@ Exports
|
|
|
41
41
|
- `upsertEnvValue(content, key, value)`
|
|
42
42
|
- `removeEnvValue(content, key, expectedValue, previous)`
|
|
43
43
|
- `writeJsonFile`
|
|
44
|
+
Local functions
|
|
45
|
+
- `directoryLooksLikeJskitAppRoot(directoryPath)`
|
|
44
46
|
|
|
45
47
|
### `src/server/cliRuntime/capabilitySupport.js`
|
|
46
48
|
Exports
|
|
@@ -341,6 +343,65 @@ Exports
|
|
|
341
343
|
- `applyViteMutations(packageEntry, appRoot, viteMutations, options, managedVite, touchedFiles)`
|
|
342
344
|
- `removeManagedViteProxyEntries({ appRoot, packageId, managedViteChanges = {}, touchedFiles = null } = {})`
|
|
343
345
|
|
|
346
|
+
### `src/server/commandHandlers/app.js`
|
|
347
|
+
Exports
|
|
348
|
+
- `createAppCommands(ctx = {})`
|
|
349
|
+
Local functions
|
|
350
|
+
- `renderAppHelp(stream, definition = null)`
|
|
351
|
+
|
|
352
|
+
### `src/server/commandHandlers/appCommandCatalog.js`
|
|
353
|
+
Exports
|
|
354
|
+
- `APP_SCRIPT_WRAPPERS`
|
|
355
|
+
- `LEGACY_APP_SCRIPT_VALUES`
|
|
356
|
+
- `LEGACY_APP_SCRIPT_FILES`
|
|
357
|
+
- `APP_COMMAND_DEFINITIONS`
|
|
358
|
+
- `listAppCommandDefinitions()`
|
|
359
|
+
- `resolveAppCommandDefinition(rawName = "")`
|
|
360
|
+
- `buildAppCommandOptionMeta(subcommandName = "")`
|
|
361
|
+
|
|
362
|
+
### `src/server/commandHandlers/appCommands/adoptManagedScripts.js`
|
|
363
|
+
Exports
|
|
364
|
+
- `runAppAdoptManagedScriptsCommand(ctx = {}, { appRoot = "", options = {}, stdout })`
|
|
365
|
+
Local functions
|
|
366
|
+
- `shouldRewriteScript(currentValue = "", scriptName = "", force = false)`
|
|
367
|
+
|
|
368
|
+
### `src/server/commandHandlers/appCommands/linkLocalPackages.js`
|
|
369
|
+
Exports
|
|
370
|
+
- `runAppLinkLocalPackagesCommand(ctx = {}, { appRoot = "", options = {}, stdout })`
|
|
371
|
+
|
|
372
|
+
### `src/server/commandHandlers/appCommands/release.js`
|
|
373
|
+
Exports
|
|
374
|
+
- `runAppReleaseCommand(ctx = {}, { appRoot = "", options = {}, stdout, stderr })`
|
|
375
|
+
|
|
376
|
+
### `src/server/commandHandlers/appCommands/shared.js`
|
|
377
|
+
Exports
|
|
378
|
+
- `fileExists(filePath = "")`
|
|
379
|
+
- `normalizeText(value = "")`
|
|
380
|
+
- `isTruthyFlag(rawValue = "")`
|
|
381
|
+
- `runExternalCommand(command, args = [], { cwd = "", env = {}, stdout, stderr, quiet = false, createCliError } = {})`
|
|
382
|
+
- `formatUtcReleaseTimestamp(date = new Date())`
|
|
383
|
+
- `resolveLocalJskitBin(appRoot = "")`
|
|
384
|
+
- `runLocalJskit(appRoot, args = [], { stdout, stderr, createCliError, quiet = false } = {})`
|
|
385
|
+
- `resolveLocalRepoRoot({ appRoot = "", explicitRepoRoot = "" } = {})`
|
|
386
|
+
- `discoverLocalPackageMap(repoRoot = "")`
|
|
387
|
+
- `linkPackageBinEntries({ appRoot, packageDirName, sourceDir, stdout } = {})`
|
|
388
|
+
- `resolveSymlinkType()`
|
|
389
|
+
Local functions
|
|
390
|
+
- `ensureCommandSucceeded(result, label, { createCliError, cwd = "", stdout, stderr, quiet = false } = {})`
|
|
391
|
+
|
|
392
|
+
### `src/server/commandHandlers/appCommands/updatePackages.js`
|
|
393
|
+
Exports
|
|
394
|
+
- `runAppUpdatePackagesCommand(ctx = {}, { appRoot = "", options = {}, stdout, stderr })`
|
|
395
|
+
Local functions
|
|
396
|
+
- `collectJskitPackageNames(packageMap = {})`
|
|
397
|
+
- `resolveMajorRangeFromVersion(packageName = "", rawVersion = "", createCliError)`
|
|
398
|
+
- `resolveRegistryArgs(registryUrl = "")`
|
|
399
|
+
- `resolveInstallSpecs(packageNames = [], resolveMajorRange)`
|
|
400
|
+
|
|
401
|
+
### `src/server/commandHandlers/appCommands/verify.js`
|
|
402
|
+
Exports
|
|
403
|
+
- `runAppVerifyCommand(ctx = {}, { appRoot = "", options = {}, stdout, stderr })`
|
|
404
|
+
|
|
344
405
|
### `src/server/commandHandlers/completion.js`
|
|
345
406
|
Exports
|
|
346
407
|
- `createCompletionCommands(ctx = {})`
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jskit-review
|
|
3
|
+
description: Review or deslop a JSKIT chunk or whole changeset. Use when the user asks to review, deslop, run a JSKIT best-practices audit, or verify a JSKIT feature, chunk, or whole changeset before sign-off.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# JSKIT Review
|
|
7
|
+
|
|
8
|
+
Use this skill for independent review passes on JSKIT app work.
|
|
9
|
+
|
|
10
|
+
Preferred execution mode:
|
|
11
|
+
|
|
12
|
+
- Run this skill in a fresh review agent when the runtime supports delegation.
|
|
13
|
+
- Use the current agent only when delegation is unavailable.
|
|
14
|
+
- The same rule applies to chunk review and whole-changeset review.
|
|
15
|
+
|
|
16
|
+
## Read first
|
|
17
|
+
|
|
18
|
+
1. `../../workflow/review.md`
|
|
19
|
+
2. `../../workflow/feature-delivery.md`
|
|
20
|
+
|
|
21
|
+
Read these on demand:
|
|
22
|
+
|
|
23
|
+
- `../../reference/autogen/KERNEL_MAP.md`
|
|
24
|
+
- `../../reference/autogen/README.md`
|
|
25
|
+
- `../../guide/agent/index.md`
|
|
26
|
+
- `../../guide/human/index.md` when compressed guidance is ambiguous
|
|
27
|
+
|
|
28
|
+
Inspect app-local files when they exist:
|
|
29
|
+
|
|
30
|
+
- `.jskit/WORKBOARD.md`
|
|
31
|
+
- `.jskit/APP_BLUEPRINT.md`
|
|
32
|
+
|
|
33
|
+
## Review target
|
|
34
|
+
|
|
35
|
+
Determine whether the target is:
|
|
36
|
+
|
|
37
|
+
- the current chunk
|
|
38
|
+
- or the whole changeset
|
|
39
|
+
|
|
40
|
+
Use `.jskit/WORKBOARD.md` to determine the active chunk when available.
|
|
41
|
+
|
|
42
|
+
## Required passes
|
|
43
|
+
|
|
44
|
+
1. Deslop review
|
|
45
|
+
2. JSKIT best-practices review
|
|
46
|
+
3. Verification review
|
|
47
|
+
|
|
48
|
+
## Deslop review
|
|
49
|
+
|
|
50
|
+
Check for:
|
|
51
|
+
|
|
52
|
+
- repeated functions or duplicated local helpers
|
|
53
|
+
- local helpers that should reuse kernel/runtime seams
|
|
54
|
+
- placeholder, fake-complete, or vague UI/copy/code
|
|
55
|
+
- dead code, unused imports/props, TODO-shaped gaps, or accidental abstractions
|
|
56
|
+
- missing loading, empty, error, permission, or ownership states
|
|
57
|
+
- broken route wiring, missing migrations, or incomplete flows
|
|
58
|
+
|
|
59
|
+
## JSKIT review
|
|
60
|
+
|
|
61
|
+
Check for:
|
|
62
|
+
|
|
63
|
+
- missed reuse of existing JSKIT helpers or runtime seams
|
|
64
|
+
- hand code that should have been a package, generator, or scaffold step
|
|
65
|
+
- surface, route, ownership, and migration choices that violate JSKIT conventions
|
|
66
|
+
- metadata that no longer matches actual behavior
|
|
67
|
+
|
|
68
|
+
## Verification review
|
|
69
|
+
|
|
70
|
+
Check that verification is appropriate for the target:
|
|
71
|
+
|
|
72
|
+
- focused verification for a chunk
|
|
73
|
+
- broad regression for a whole changeset
|
|
74
|
+
- Playwright for meaningful user-facing flows
|
|
75
|
+
- explicit handling of login/test-auth strategy when auth is required
|
|
76
|
+
|
|
77
|
+
## Output format
|
|
78
|
+
|
|
79
|
+
- Present findings first, ordered by severity, with file references.
|
|
80
|
+
- If there are no findings, say so explicitly.
|
|
81
|
+
- Always finish with:
|
|
82
|
+
- files reviewed
|
|
83
|
+
- commands run
|
|
84
|
+
- anything still unverified
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "JSKIT Review"
|
|
3
|
+
short_description: "Deslop, audit JSKIT fit, and verify a chunk or changeset"
|
|
4
|
+
default_prompt: "Use $jskit-review to run a deslop pass, JSKIT best-practices audit, and verification review on the current JSKIT chunk or whole changeset."
|
|
@@ -51,7 +51,21 @@
|
|
|
51
51
|
- Non-CRUD pages to scaffold:
|
|
52
52
|
- Custom code areas:
|
|
53
53
|
|
|
54
|
+
## Delivery Plan
|
|
55
|
+
|
|
56
|
+
| Chunk | Goal | Type | Depends on | Done when |
|
|
57
|
+
| --- | --- | --- | --- | --- |
|
|
58
|
+
| | | | | |
|
|
59
|
+
|
|
60
|
+
Chunk notes:
|
|
61
|
+
|
|
62
|
+
- One CRUD is usually one chunk.
|
|
63
|
+
- Platform/auth/shell work may be its own chunk.
|
|
64
|
+
- Each chunk must be independently reviewable and testable.
|
|
65
|
+
|
|
54
66
|
## Verification
|
|
55
67
|
|
|
56
68
|
- Commands to run:
|
|
69
|
+
- Playwright coverage plan:
|
|
70
|
+
- Test auth strategy:
|
|
57
71
|
- Known open questions:
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Workboard
|
|
2
|
+
|
|
3
|
+
## Request
|
|
4
|
+
|
|
5
|
+
- Request summary:
|
|
6
|
+
- Current stage:
|
|
7
|
+
- Current status:
|
|
8
|
+
|
|
9
|
+
## Scope Snapshot
|
|
10
|
+
|
|
11
|
+
- Platform decisions:
|
|
12
|
+
- Current blueprint path:
|
|
13
|
+
- Current workboard owner:
|
|
14
|
+
|
|
15
|
+
## Chunk Tracker
|
|
16
|
+
|
|
17
|
+
| Chunk | Goal | Status | Deslop | JSKIT Review | Verification | Notes |
|
|
18
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
19
|
+
| | | | | | | |
|
|
20
|
+
|
|
21
|
+
Status guide:
|
|
22
|
+
|
|
23
|
+
- `planned`
|
|
24
|
+
- `active`
|
|
25
|
+
- `implemented`
|
|
26
|
+
- `reviewed`
|
|
27
|
+
- `verified`
|
|
28
|
+
- `done`
|
|
29
|
+
- `blocked`
|
|
30
|
+
|
|
31
|
+
## Current Focus
|
|
32
|
+
|
|
33
|
+
- Active chunk:
|
|
34
|
+
- Next action:
|
|
35
|
+
- Blockers:
|
|
36
|
+
|
|
37
|
+
## Verification Log
|
|
38
|
+
|
|
39
|
+
- Commands run:
|
|
40
|
+
- Playwright status:
|
|
41
|
+
- Remaining unverified:
|
|
42
|
+
|
|
43
|
+
## Notes
|
|
44
|
+
|
|
45
|
+
- Decisions made:
|
|
46
|
+
- Open questions:
|
package/templates/app/AGENTS.md
CHANGED
|
@@ -7,8 +7,9 @@ Read these workflow files in order:
|
|
|
7
7
|
1. `node_modules/@jskit-ai/agent-docs/workflow/app-state.md`
|
|
8
8
|
2. `node_modules/@jskit-ai/agent-docs/workflow/bootstrap.md` if the workspace is empty or no JSKIT app exists yet
|
|
9
9
|
3. `node_modules/@jskit-ai/agent-docs/workflow/scoping.md`
|
|
10
|
-
4. `node_modules/@jskit-ai/agent-docs/workflow/
|
|
11
|
-
5. `node_modules/@jskit-ai/agent-docs/workflow/
|
|
10
|
+
4. `node_modules/@jskit-ai/agent-docs/workflow/workboard.md`
|
|
11
|
+
5. `node_modules/@jskit-ai/agent-docs/workflow/feature-delivery.md`
|
|
12
|
+
6. `node_modules/@jskit-ai/agent-docs/workflow/review.md`
|
|
12
13
|
|
|
13
14
|
Use these references on demand:
|
|
14
15
|
|
|
@@ -17,12 +18,24 @@ Use these references on demand:
|
|
|
17
18
|
- `node_modules/@jskit-ai/agent-docs/guide/agent/index.md`
|
|
18
19
|
- `node_modules/@jskit-ai/agent-docs/guide/human/index.md` when compressed guidance is ambiguous or missing nuance
|
|
19
20
|
- `node_modules/@jskit-ai/agent-docs/templates/APP_BLUEPRINT.md`
|
|
21
|
+
- `node_modules/@jskit-ai/agent-docs/templates/WORKBOARD.md`
|
|
22
|
+
- `node_modules/@jskit-ai/agent-docs/skills/jskit-review/SKILL.md` for review passes when your Codex environment supports packaged skills
|
|
20
23
|
|
|
21
24
|
Core rules:
|
|
22
25
|
|
|
23
26
|
- Inspect the workspace before assuming a JSKIT app exists.
|
|
24
27
|
- Reuse existing JSKIT helpers and runtime seams before adding new local helpers.
|
|
28
|
+
- A freshly scaffolded JSKIT app can still be in Stage 1. If the app was just created and platform decisions are not settled yet, continue with the initialize workflow before adding runtime packages.
|
|
29
|
+
- Do not treat a missing `config.tenancyMode` line or an untouched minimal scaffold as a final tenancy decision.
|
|
30
|
+
- Do not install tenancy-sensitive packages until Stage 1 decisions are complete and the chosen tenancy is written into `config/public.js`.
|
|
25
31
|
- Do not implement app features before the blueprint has the database, surfaces, ownership model, and route/screen plan written down.
|
|
32
|
+
- For substantial or multi-chunk work, create or update `.jskit/WORKBOARD.md` as the per-request execution tracker.
|
|
33
|
+
- Break planned work into reviewable chunks before implementing. One CRUD is usually one chunk, but auth/platform setup, shell work, and cross-cutting integrations can be their own chunks.
|
|
34
|
+
- Do not move to the next chunk until the current chunk has passed implementation, deslop review, JSKIT best-practices review, and verification.
|
|
35
|
+
- If a feature spans more than one chunk, run a final whole-changeset deslop pass, JSKIT pass, and verification pass after the last chunk.
|
|
36
|
+
- Prefer a fresh review agent for chunk and whole-changeset review when the runtime supports delegation.
|
|
37
|
+
- Have that fresh review agent use the packaged `jskit-review` skill when it is available to the runtime.
|
|
38
|
+
- If delegation or skills are unavailable, follow `workflow/review.md` manually in the current agent.
|
|
26
39
|
- Use the compressed guide first for speed; fall back to the human guide when a workflow trap, migration caveat, or architectural boundary needs exact wording.
|
|
27
40
|
- Treat generated reference maps and guide copies as vendor reference. Do not edit them manually.
|
|
28
41
|
|
package/workflow/app-state.md
CHANGED
|
@@ -28,6 +28,7 @@ State handling:
|
|
|
28
28
|
- Explain which scaffold markers are missing.
|
|
29
29
|
- Recover or finish the scaffold instead of re-initializing from scratch.
|
|
30
30
|
- `jskit_app`
|
|
31
|
-
-
|
|
31
|
+
- If this is a fresh minimal scaffold and Stage 1 platform decisions are not settled yet, continue with the initialize workflow first.
|
|
32
|
+
- Otherwise continue with scoping or feature delivery.
|
|
32
33
|
|
|
33
34
|
This state gate is intentionally strict. The agent must inspect first and only then choose initialize, recover, or extend.
|
package/workflow/bootstrap.md
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
# Initialize Workflow
|
|
2
2
|
|
|
3
|
-
Use this
|
|
3
|
+
Use this when:
|
|
4
|
+
|
|
5
|
+
- the app state gate resolves to `empty`
|
|
6
|
+
- the user explicitly wants a brand-new JSKIT app in a new directory
|
|
7
|
+
- or a fresh minimal JSKIT scaffold exists but Stage 1 platform decisions are not settled yet
|
|
8
|
+
|
|
9
|
+
Safe bootstrap paths:
|
|
10
|
+
|
|
11
|
+
1. Empty directory path
|
|
12
|
+
- Ask the Stage 1 platform questions first.
|
|
13
|
+
- Once the high-level shape is clear, run `create-app` with the chosen tenancy mode.
|
|
14
|
+
2. Fresh scaffold path
|
|
15
|
+
- If the app was just created with `npx @jskit-ai/create-app <app-name>` and `npm install`, treat that scaffold as provisional.
|
|
16
|
+
- Ask the Stage 1 platform questions before adding tenancy-sensitive packages.
|
|
17
|
+
- If the chosen tenancy is `personal` or `workspaces`, write it into `config/public.js` before installing workspace packages.
|
|
18
|
+
|
|
19
|
+
Important constraint:
|
|
20
|
+
|
|
21
|
+
- Do not install tenancy-sensitive packages while tenancy is still provisional.
|
|
22
|
+
- In practice, that means `workspaces-core` and `workspaces-web` must wait until the Stage 1 tenancy decision is complete.
|
|
23
|
+
- A missing `config.tenancyMode` line behaves like `none` at runtime. Treat it as provisional only if no tenancy-sensitive package install has happened yet.
|
|
4
24
|
|
|
5
25
|
Version 0 sketch:
|
|
6
26
|
|
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
# Feature Delivery Workflow
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Before implementation, break the planned work into chunks.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
Chunk rules:
|
|
6
|
+
|
|
7
|
+
- One CRUD is usually one chunk.
|
|
8
|
+
- Platform setup, shell/navigation, and cross-cutting integrations may be separate chunks.
|
|
9
|
+
- A chunk must be independently reviewable and testable.
|
|
10
|
+
- If a chunk is too broad to review confidently, split it before coding.
|
|
11
|
+
|
|
12
|
+
For each chunk, follow this order:
|
|
13
|
+
|
|
14
|
+
1. Scope the chunk inside the blueprint.
|
|
15
|
+
2. Mark the chunk as active in `.jskit/WORKBOARD.md`.
|
|
16
|
+
3. Decide whether it is:
|
|
7
17
|
- package install
|
|
8
18
|
- generator scaffolding
|
|
9
19
|
- custom local code
|
|
10
20
|
- or a combination
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
21
|
+
4. Implement the smallest correct change.
|
|
22
|
+
5. Deslop the chunk.
|
|
23
|
+
6. Review the chunk against JSKIT reuse and best practices.
|
|
24
|
+
7. Verify the chunk with the relevant commands, including Playwright for meaningful UI flows.
|
|
25
|
+
8. Update `.jskit/WORKBOARD.md` with status, commands run, and anything still unverified.
|
|
26
|
+
9. Only then move to the next chunk.
|
|
15
27
|
|
|
16
28
|
During implementation:
|
|
17
29
|
|
|
@@ -19,3 +31,17 @@ During implementation:
|
|
|
19
31
|
- Use generated CRUD/UI scaffolds only after the route and ownership model are decided.
|
|
20
32
|
- Keep runtime, UI, and data concerns separated.
|
|
21
33
|
- Avoid “while I’m here” scope creep unless it is required for correctness.
|
|
34
|
+
|
|
35
|
+
After the last chunk:
|
|
36
|
+
|
|
37
|
+
- If there was only one chunk, the chunk review is the final review.
|
|
38
|
+
- If there was more than one chunk, run one more whole-changeset pass:
|
|
39
|
+
- deslop the whole changeset
|
|
40
|
+
- review the whole changeset against JSKIT best practices
|
|
41
|
+
- run the widest relevant verification, including Playwright
|
|
42
|
+
- update `.jskit/WORKBOARD.md` with the final result and any remaining gaps
|
|
43
|
+
|
|
44
|
+
Playwright note:
|
|
45
|
+
|
|
46
|
+
- When login is required, prefer a test-only impersonation or session bootstrap path over dependence on a live external auth provider.
|
|
47
|
+
- If such a path does not exist yet, treat that as a testability gap and decide whether the chunk must add it before the feature is considered complete.
|
package/workflow/review.md
CHANGED
|
@@ -1,18 +1,32 @@
|
|
|
1
1
|
# Review Workflow
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Preferred review mode:
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
- Prefer a fresh review agent for chunk and whole-changeset review when the runtime supports delegation.
|
|
6
|
+
- Have that fresh review agent use the packaged `jskit-review` skill when it is available.
|
|
7
|
+
- If delegation or skills are unavailable, follow this file manually in the current agent.
|
|
8
|
+
|
|
9
|
+
Before calling a chunk or a whole changeset done, review it in three passes:
|
|
10
|
+
|
|
11
|
+
1. Deslop review
|
|
12
|
+
- repeated functions or duplicated local helpers
|
|
13
|
+
- helpers reimplemented locally when a kernel/runtime seam already exists
|
|
14
|
+
- placeholder, fake-complete, or vague UI/copy/code structure
|
|
15
|
+
- dead code, unused props/imports, TODO-shaped gaps, or accidental abstractions
|
|
16
|
+
- missing loading, empty, error, permission, or ownership states
|
|
17
|
+
- broken flows, missing route wiring, or missing migrations
|
|
18
|
+
- surface or entity ownership mistakes: `public`, `user`, `workspace`, `workspace_user`
|
|
10
19
|
2. JSKIT review
|
|
11
20
|
- existing helper/runtime seam available?
|
|
12
21
|
- duplicate local code that should reuse kernel/runtime support?
|
|
22
|
+
- should this have been a package install, generator step, or scaffold extension instead of hand code?
|
|
23
|
+
- are surface, route, ownership, and migration choices aligned with JSKIT conventions?
|
|
13
24
|
- package metadata and actual behavior still aligned?
|
|
14
25
|
3. Verification review
|
|
15
|
-
- run the smallest relevant verification commands
|
|
26
|
+
- run the smallest relevant verification commands for a chunk
|
|
27
|
+
- run the widest relevant verification commands for a whole changeset
|
|
28
|
+
- include Playwright for meaningful user-facing flows
|
|
29
|
+
- if login is required, verify the chosen test-auth path or explicitly record that the lack of one is an open gap
|
|
16
30
|
- note anything left unverified
|
|
17
31
|
|
|
18
32
|
Minimum expectation:
|
|
@@ -20,3 +34,8 @@ Minimum expectation:
|
|
|
20
34
|
- list the files changed
|
|
21
35
|
- list the commands run
|
|
22
36
|
- list anything still unverified
|
|
37
|
+
- update `.jskit/WORKBOARD.md` with the review outcome
|
|
38
|
+
|
|
39
|
+
Whole-changeset rule:
|
|
40
|
+
|
|
41
|
+
- If the work was split into more than one chunk, repeat all three passes over the whole changeset after the final chunk is complete.
|
package/workflow/scoping.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# Scoping Workflow
|
|
2
2
|
|
|
3
|
-
Before implementing any feature or batch of features,
|
|
3
|
+
Before implementing any feature or batch of features, create or update an app-local working blueprint using `templates/APP_BLUEPRINT.md` as the template.
|
|
4
|
+
|
|
5
|
+
Recommended location:
|
|
6
|
+
|
|
7
|
+
- `.jskit/APP_BLUEPRINT.md`
|
|
8
|
+
- `.jskit/WORKBOARD.md` for per-request progress tracking
|
|
9
|
+
|
|
10
|
+
Do not edit the vendor template in `node_modules/` directly.
|
|
4
11
|
|
|
5
12
|
The blueprint must capture at least:
|
|
6
13
|
|
|
@@ -15,12 +22,17 @@ The blueprint must capture at least:
|
|
|
15
22
|
- package install plan
|
|
16
23
|
- generator plan
|
|
17
24
|
- custom-code areas
|
|
25
|
+
- delivery plan broken into chunks
|
|
18
26
|
|
|
19
27
|
Scoping rules:
|
|
20
28
|
|
|
21
29
|
- Use `guide/agent/index.md` for fast navigation and `guide/human/index.md` for exact details.
|
|
22
30
|
- Inspect packages and generators before choosing them.
|
|
23
31
|
- Decide ownership early; do not treat it as a UI-only detail.
|
|
32
|
+
- If Stage 1 platform choices are still provisional, finish them before installing tenancy-sensitive runtime packages.
|
|
33
|
+
- Create or refresh `.jskit/WORKBOARD.md` for substantial or multi-chunk work so the request has an explicit execution tracker.
|
|
34
|
+
- Break delivery into chunks that can be independently reviewed and tested.
|
|
35
|
+
- One CRUD is usually one chunk. Platform setup, shell work, and cross-cutting integrations may also be separate chunks.
|
|
24
36
|
- If the package/runtime choice is unclear, stop and resolve it before writing implementation code.
|
|
25
37
|
|
|
26
|
-
No feature implementation should start until the blueprint covers database, screens,
|
|
38
|
+
No feature implementation should start until the blueprint covers database, screens, functional boundaries, and chunk plan well enough that the implementation path is obvious.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Workboard Workflow
|
|
2
|
+
|
|
3
|
+
Use a workboard for any substantial request, especially:
|
|
4
|
+
|
|
5
|
+
- new app builds
|
|
6
|
+
- multi-chunk feature work
|
|
7
|
+
- requests that need scoping before coding
|
|
8
|
+
- requests where verification spans several steps
|
|
9
|
+
|
|
10
|
+
Recommended location:
|
|
11
|
+
|
|
12
|
+
- `.jskit/WORKBOARD.md`
|
|
13
|
+
|
|
14
|
+
Use `templates/WORKBOARD.md` as the starting template.
|
|
15
|
+
|
|
16
|
+
Purpose:
|
|
17
|
+
|
|
18
|
+
- track the current request
|
|
19
|
+
- record the current stage and current chunk
|
|
20
|
+
- track chunk status across implementation, deslop, JSKIT review, and verification
|
|
21
|
+
- record blockers, open questions, and remaining gaps
|
|
22
|
+
|
|
23
|
+
Workboard rules:
|
|
24
|
+
|
|
25
|
+
- The workboard is the execution tracker for the current request.
|
|
26
|
+
- The blueprint remains the durable product and architecture record.
|
|
27
|
+
- Keep the workboard concise and current.
|
|
28
|
+
- Update it when stage, chunk, blockers, or verification state changes.
|
|
29
|
+
- When the request finishes, either reset it for the next request or leave a short final state that makes completion obvious.
|