@jskit-ai/agent-docs 0.1.19 → 0.1.21
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/authentication.md +8 -0
- package/guide/agent/app-setup/initial-scaffolding.md +14 -8
- package/guide/agent/app-setup/multi-homing.md +59 -0
- package/guide/agent/app-setup/quickstart.md +214 -0
- package/guide/agent/app-setup/users.md +8 -0
- package/guide/agent/app-setup/working-with-the-jskit-cli.md +16 -0
- package/guide/agent/generators/crud-generators.md +210 -62
- package/guide/agent/generators/ui-generators.md +31 -0
- package/guide/agent/index.md +4 -2
- package/package.json +1 -1
- package/patterns/page-redirects.md +5 -1
- package/patterns/ui-testing.md +8 -0
- package/reference/autogen/README.md +1 -0
- package/reference/autogen/packages/assistant-core.md +13 -0
- package/reference/autogen/packages/assistant-runtime.md +2 -0
- package/reference/autogen/packages/auth-provider-supabase-core.md +6 -0
- package/reference/autogen/packages/console-core.md +2 -0
- package/reference/autogen/packages/crud-core.md +4 -0
- package/reference/autogen/packages/crud-ui-generator.md +3 -0
- package/reference/autogen/packages/feature-server-generator.md +74 -0
- package/reference/autogen/packages/json-rest-api-core.md +1 -5
- package/reference/autogen/packages/users-web.md +1 -0
- package/reference/autogen/tooling/create-app.md +4 -16
- package/reference/autogen/tooling/jskit-cli.md +12 -1
- package/templates/app/AGENTS.md +1 -1
- package/workflow/feature-delivery.md +2 -0
- package/workflow/review.md +1 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# packages/feature-server-generator
|
|
2
|
+
|
|
3
|
+
Generated by `npm run agent-docs:build`.
|
|
4
|
+
Do not edit manually.
|
|
5
|
+
|
|
6
|
+
Generated inventory for `packages/feature-server-generator`.
|
|
7
|
+
Use this on demand; do not load the full index at startup.
|
|
8
|
+
|
|
9
|
+
## Scope
|
|
10
|
+
- Source: `packages/feature-server-generator/**/*{.js,.mjs,.cjs,.vue}`
|
|
11
|
+
- Excludes: `test/`, `tests/`, `__tests__/`, `*.test.*`, `*.spec.*`, `*.vitest.*`, `node_modules/`, `dist/`, `coverage/`, `docs/`, `LEGACY/`, `.vitepress/cache/`, `.vitepress/dist/`
|
|
12
|
+
|
|
13
|
+
## Sections
|
|
14
|
+
|
|
15
|
+
### src
|
|
16
|
+
|
|
17
|
+
### `src/server/buildTemplateContext.js`
|
|
18
|
+
Exports
|
|
19
|
+
- `buildTemplateContext({ options = {} } = {})`
|
|
20
|
+
Local functions
|
|
21
|
+
- `splitTextIntoWords(value)`
|
|
22
|
+
- `wordsToPascal(words = [])`
|
|
23
|
+
- `wordsToKebab(words = [])`
|
|
24
|
+
- `wordsToCamel(words = [])`
|
|
25
|
+
- `normalizeFeatureName(value)`
|
|
26
|
+
- `normalizeSurfaceId(value)`
|
|
27
|
+
- `normalizeRoutePrefix(value)`
|
|
28
|
+
- `quoteArray(values = [])`
|
|
29
|
+
- `buildProviderContext({ featureName, mode, routePrefix, surface })`
|
|
30
|
+
- `buildActionsContext({ surface })`
|
|
31
|
+
- `buildServiceContext({ featureName, mode })`
|
|
32
|
+
- `buildRouteContext({ surface })`
|
|
33
|
+
- `buildDescriptorContext({ featureName, mode })`
|
|
34
|
+
|
|
35
|
+
### templates
|
|
36
|
+
|
|
37
|
+
### `templates/src/local-package/package.descriptor.mjs`
|
|
38
|
+
Exports
|
|
39
|
+
- None
|
|
40
|
+
|
|
41
|
+
### `templates/src/local-package/server/actions.js`
|
|
42
|
+
Exports
|
|
43
|
+
- `featureActions`
|
|
44
|
+
|
|
45
|
+
### `templates/src/local-package/server/FeatureProvider.js`
|
|
46
|
+
Exports
|
|
47
|
+
- `${option:feature-name|pascal`
|
|
48
|
+
|
|
49
|
+
### `templates/src/local-package/server/inputSchemas.js`
|
|
50
|
+
Exports
|
|
51
|
+
- `statusQueryInputValidator`
|
|
52
|
+
- `executeCommandInputValidator`
|
|
53
|
+
|
|
54
|
+
### `templates/src/local-package/server/registerRoutes.js`
|
|
55
|
+
Exports
|
|
56
|
+
- `registerRoutes(app, { routeSurface = "", routeRelativePath = "" } = {})`
|
|
57
|
+
|
|
58
|
+
### `templates/src/local-package/server/repositoryCustomKnex.js`
|
|
59
|
+
Exports
|
|
60
|
+
- `createRepository({ knex } = {})`
|
|
61
|
+
|
|
62
|
+
### `templates/src/local-package/server/repositoryJsonRest.js`
|
|
63
|
+
Exports
|
|
64
|
+
- `createRepository({ api } = {})`
|
|
65
|
+
|
|
66
|
+
### `templates/src/local-package/server/service.js`
|
|
67
|
+
Exports
|
|
68
|
+
- `createService({ featureRepository } = {})`
|
|
69
|
+
|
|
70
|
+
### root
|
|
71
|
+
|
|
72
|
+
### `package.descriptor.mjs`
|
|
73
|
+
Exports
|
|
74
|
+
- None
|
|
@@ -28,11 +28,11 @@ Exports
|
|
|
28
28
|
- `createJsonApiRelationship(resourceType = "", id = null)`
|
|
29
29
|
- `createJsonRestResourceScopeOptions(resource = {}, { writeSerializers = {}, normalizeId = null } = {})`
|
|
30
30
|
- `createJsonRestContext(context = null)`
|
|
31
|
+
- `extractJsonRestCollectionRows(payload = null)`
|
|
31
32
|
- `isJsonRestResourceMissingError(error = null)`
|
|
32
33
|
- `returnNullWhenJsonRestResourceMissing(run)`
|
|
33
34
|
- `resolveWorkspaceScopeValue(context = null)`
|
|
34
35
|
- `resolveUserScopeValue(context = null)`
|
|
35
|
-
- `simplifyJsonApiDocument(payload = {})`
|
|
36
36
|
- `createJsonRestApiHost({ knex })`
|
|
37
37
|
- `registerJsonRestApiHost(app)`
|
|
38
38
|
Local functions
|
|
@@ -43,10 +43,6 @@ Local functions
|
|
|
43
43
|
- `normalizeJsonRestObject(value)`
|
|
44
44
|
- `normalizeJsonRestList(value)`
|
|
45
45
|
- `extractJsonApiInputRelationships(attributes = {}, resource = null, relationships = null)`
|
|
46
|
-
- `normalizeJsonApiResourceObject(resource = {})`
|
|
47
|
-
- `buildJsonApiIncludedIndex(payload = {})`
|
|
48
|
-
- `simplifyJsonApiRelationshipData(data, { includedIndex = null, seen = null } = {})`
|
|
49
|
-
- `simplifyJsonApiResourceObject(resource = {}, { includedIndex = null, seen = null } = {})`
|
|
50
46
|
|
|
51
47
|
### root
|
|
52
48
|
|
|
@@ -84,6 +84,7 @@ Exports
|
|
|
84
84
|
### `src/client/composables/crud/crudJsonApiTransportSupport.js`
|
|
85
85
|
Exports
|
|
86
86
|
- `inferCrudJsonApiTransport(resource = null, { mode = "", operationName = "" } = {})`
|
|
87
|
+
- `inferCrudLookupJsonApiTransport({ namespace = "", apiPath = "" } = {})`
|
|
87
88
|
- `resolveCrudJsonApiTransport(transport = null, resource = null, options = {})`
|
|
88
89
|
- `resolveLookupFieldMap(resource = null)`
|
|
89
90
|
Local functions
|
|
@@ -95,29 +95,17 @@ Exports
|
|
|
95
95
|
- `MainClientProvider`
|
|
96
96
|
- `registerMainClientComponent(token, resolveComponent)`
|
|
97
97
|
|
|
98
|
-
### `templates/base-shell/packages/main/src/server/controllers/index.js`
|
|
99
|
-
Exports
|
|
100
|
-
- None
|
|
101
|
-
|
|
102
98
|
### `templates/base-shell/packages/main/src/server/index.js`
|
|
103
99
|
Exports
|
|
104
100
|
- `MainServiceProvider`
|
|
105
101
|
|
|
106
|
-
### `templates/base-shell/packages/main/src/server/
|
|
102
|
+
### `templates/base-shell/packages/main/src/server/loadAppConfig.js`
|
|
107
103
|
Exports
|
|
108
|
-
- `
|
|
109
|
-
|
|
110
|
-
### `templates/base-shell/packages/main/src/server/routes/index.js`
|
|
111
|
-
Exports
|
|
112
|
-
- None
|
|
113
|
-
|
|
114
|
-
### `templates/base-shell/packages/main/src/server/services/index.js`
|
|
115
|
-
Exports
|
|
116
|
-
- None
|
|
104
|
+
- `loadAppConfig({ moduleUrl = import.meta.url } = {})`
|
|
117
105
|
|
|
118
|
-
### `templates/base-shell/packages/main/src/server/
|
|
106
|
+
### `templates/base-shell/packages/main/src/server/MainServiceProvider.js`
|
|
119
107
|
Exports
|
|
120
|
-
- `
|
|
108
|
+
- `MainServiceProvider`
|
|
121
109
|
|
|
122
110
|
### `templates/base-shell/packages/main/src/shared/index.js`
|
|
123
111
|
Exports
|
|
@@ -371,6 +371,7 @@ Exports
|
|
|
371
371
|
Local functions
|
|
372
372
|
- `collectDeclaredPackageNames(packageJson = {})`
|
|
373
373
|
- `verifySymlinkTarget(targetPath = "", sourceDir = "", { packageName = "" } = {})`
|
|
374
|
+
- `replaceWithSymlink(targetPath = "", sourceDir = "", { packageName = "" } = {})`
|
|
374
375
|
- `maybeLinkCompanionPackages({ appRoot = "", repoRoot = "", stdout, createCliError })`
|
|
375
376
|
|
|
376
377
|
### `src/server/commandHandlers/appCommands/release.js`
|
|
@@ -429,6 +430,10 @@ Exports
|
|
|
429
430
|
Local functions
|
|
430
431
|
- `collectTokenMatches(source = "", pattern = COMPONENT_TOKEN_PATTERN)`
|
|
431
432
|
- `appendTokenSource(map, token = "", source = "")`
|
|
433
|
+
- `toShortPackageId(packageId = "")`
|
|
434
|
+
- `resolveGeneratorPrimarySubcommand(packageEntry = {})`
|
|
435
|
+
- `resolveGeneratorDescription(packageEntry = {})`
|
|
436
|
+
- `resolveGeneratorQuickStartRows(packageEntry = {}, { limit = 3 } = {})`
|
|
432
437
|
- `isLinkItemToken(token = "")`
|
|
433
438
|
- `readFileIfExists(filePath = "")`
|
|
434
439
|
- `resolveDescriptorFromLockEntry({ appRoot = "", packageId = "", installedPackageEntry = {} } = {})`
|
|
@@ -469,6 +474,7 @@ Local functions
|
|
|
469
474
|
- `normalizeHelpParagraphRows(rawValue = "")`
|
|
470
475
|
- `appendHelpLongDescription(lines = [], rawLongDescription = "", { color = null } = {})`
|
|
471
476
|
- `appendHelpExamples(lines = [], exampleRows = [], { color = null } = {})`
|
|
477
|
+
- `appendHelpExamplesWithHeading(lines = [], exampleRows = [], heading = "", { color = null } = {})`
|
|
472
478
|
- `appendHelpNotes(lines = [], rawNotes = [], { color = null } = {})`
|
|
473
479
|
- `appendSeparatedBlocks(lines = [], blocks = [])`
|
|
474
480
|
- `resolveGeneratorSubcommandMetadata(packageEntry = {})`
|
|
@@ -477,6 +483,7 @@ Local functions
|
|
|
477
483
|
- `formatPositionalArgSummary(arg = {}, { color = null } = {})`
|
|
478
484
|
- `findGeneratorSubcommandRow(packageEntry = {}, subcommandName = "")`
|
|
479
485
|
- `buildSubcommandOptionRows(optionRows = [], subcommandRow = {})`
|
|
486
|
+
- `resolvePrimaryGeneratorQuickStartRows(packageEntry = {}, { limit = 3 } = {})`
|
|
480
487
|
|
|
481
488
|
### `src/server/commandHandlers/packageCommands/generate.js`
|
|
482
489
|
Exports
|
|
@@ -563,6 +570,9 @@ Local functions
|
|
|
563
570
|
### `src/server/commandHandlers/show/renderPackageText.js`
|
|
564
571
|
Exports
|
|
565
572
|
- `renderPackagePayloadText({ payload, provides, requires, capabilityDetails, options, stdout, color, resolveWrapWidth, writeWrappedItems, normalizeRelativePosixPath, formatPackageSubpathImport, normalizePlacementOutlets, normalizePlacementContributions, shouldShowPackageExportTarget, classifyExportedSymbols, deriveProviderDisplayName } = {})`
|
|
573
|
+
Local functions
|
|
574
|
+
- `resolveGeneratorSubcommandRows(payload = {})`
|
|
575
|
+
- `resolveOwnershipGuidance(payload = {})`
|
|
566
576
|
|
|
567
577
|
### `src/server/core/argParser.js`
|
|
568
578
|
Exports
|
|
@@ -691,7 +701,8 @@ Exports
|
|
|
691
701
|
- `isUiVerificationPath(relativePath = "")`
|
|
692
702
|
- `isValidUiVerificationReceipt(receipt)`
|
|
693
703
|
- `normalizeUiVerificationReceipt(rawReceipt = {})`
|
|
694
|
-
- `
|
|
704
|
+
- `resolveChangedPathsFromGit(appRoot = "", { against = "", pathspecs = ["src", "packages"] } = {})`
|
|
705
|
+
- `resolveChangedUiFilesFromGit(appRoot = "", { against = "" } = {})`
|
|
695
706
|
- `sortUniqueStrings(values = [])`
|
|
696
707
|
Local functions
|
|
697
708
|
- `normalizeText(value = "")`
|
package/templates/app/AGENTS.md
CHANGED
|
@@ -73,7 +73,7 @@ Core rules:
|
|
|
73
73
|
- For CRUD chunks, ask the developer which operations are allowed, which fields belong in the list view if one exists, and the intended look of the view and edit/new forms before generating code.
|
|
74
74
|
- Every user-facing screen must pass a Material Design and Vuetify quality review before the chunk is considered done.
|
|
75
75
|
- Any chunk that adds or changes user-facing UI must include a Playwright check that exercises the changed behavior before the chunk is considered done.
|
|
76
|
-
- Record that Playwright run with `jskit app verify-ui --command "<playwright command>" --feature "<label>" --auth-mode <mode>` so `jskit doctor` can verify the receipt.
|
|
76
|
+
- Record that Playwright run with `jskit app verify-ui --command "<playwright command>" --feature "<label>" --auth-mode <mode>` so `jskit doctor` can verify the receipt. For local pre-merge review, normally follow it with `jskit doctor --against <base-ref>`. Advanced CI setups may also use `--against <base-ref>`, but that is app-specific.
|
|
77
77
|
- If the UI flow requires login, use the app's development-only auth bypass or session bootstrap path instead of a live external auth login flow.
|
|
78
78
|
- In JSKIT apps using the standard auth stack, that means enabling the dev auth bypass in development and using `POST /api/dev-auth/login-as` during Playwright setup.
|
|
79
79
|
- If authenticated UI work has no usable local auth bootstrap path yet, treat that as a testability gap and call it out before the chunk can be considered complete.
|
|
@@ -62,6 +62,8 @@ Playwright note:
|
|
|
62
62
|
|
|
63
63
|
- When login is required, use a test-only auth bypass or session bootstrap path instead of dependence on a live external auth provider.
|
|
64
64
|
- Record the run through `jskit app verify-ui --command "<playwright command>" --feature "<label>" --auth-mode <mode>` so `jskit doctor` can verify the receipt against the current changed UI files.
|
|
65
|
+
- In local pre-merge review, use `jskit doctor --against <base-ref>` after the recorded Playwright run so JSKIT compares against the branch delta, not only the current dirty worktree.
|
|
66
|
+
- Advanced CI setups may also use `--against <base-ref>`, but JSKIT does not scaffold hosted browser/auth/database verification by default.
|
|
65
67
|
- In the standard JSKIT auth stack, the default development path is `POST /api/dev-auth/login-as`, guarded by `AUTH_DEV_BYPASS_ENABLED=true` and `AUTH_DEV_BYPASS_SECRET=...`.
|
|
66
68
|
- That route is development-only and must not be enabled in production.
|
|
67
69
|
- Because it is still an unsafe POST, fetch `csrfToken` from `/api/session`, send it as the `csrf-token` header, and make the request in the same browser context that will run the Playwright assertions so the session cookies land in the page session.
|
package/workflow/review.md
CHANGED
|
@@ -33,6 +33,7 @@ Before calling a chunk or a whole changeset done, review it in four passes:
|
|
|
33
33
|
- run the widest relevant verification commands for a whole changeset
|
|
34
34
|
- any added or changed user-facing UI must be exercised with Playwright
|
|
35
35
|
- that Playwright run should normally be recorded through `jskit app verify-ui`
|
|
36
|
+
- for local pre-merge review, prefer following that receipt with `jskit doctor --against <base-ref>`
|
|
36
37
|
- if login is required, use the chosen local test-auth path instead of live external auth
|
|
37
38
|
- in the standard JSKIT auth stack, prefer the development-only `POST /api/dev-auth/login-as` path
|
|
38
39
|
- if there is no usable local auth bootstrap path, explicitly record that as a blocking testability gap
|