@jskit-ai/agent-docs 0.1.242 → 0.1.244
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-extras/assistant-conversation.md +4 -2
- package/guide/agent/app-extras/assistant.md +3 -1
- package/guide/agent/app-extras/realtime.md +12 -3
- package/guide/agent/app-setup/database-layer.md +1 -1
- package/guide/agent/app-setup/existing-application-migration.md +0 -7
- package/guide/agent/framework/application-operations.md +1 -1
- package/guide/agent/framework/crud-operations.md +9 -9
- package/guide/agent/index.md +2 -0
- package/package.json +2 -3
- package/patterns/feature-package/example/booking-engine/package.json +1 -1
- package/patterns/feature-package/example/booking-engine/src/server/actions.js +0 -2
- package/patterns/feature-package/example/variations/AvailabilityEngineProvider.js +1 -1
- package/patterns/feature-package/example/variations/InvoiceRollupProvider.js +1 -1
- package/patterns/minimal-foundation/example/AGENTS.md +19 -0
- package/patterns/minimal-foundation/example/package.json +3 -3
- package/patterns/minimal-foundation/example/server/lib/runtimeEnv.js +3 -11
- package/patterns/minimal-foundation/example/src/main.js +0 -2
- package/patterns/shell-foundation/PATTERN.md +11 -20
- package/patterns/shell-foundation/example/AGENTS.md +19 -0
- package/patterns/shell-foundation/example/package.json +4 -4
- package/patterns/shell-foundation/example/packages/main/package.json +1 -1
- package/patterns/shell-foundation/example/server/lib/runtimeEnv.js +3 -11
- package/patterns/shell-foundation/example/src/components/ShellLayout.vue +1 -0
- package/patterns/shell-foundation/example/src/main.js +0 -2
- package/patterns/shell-foundation/example/src/pages/home/settings.vue +2 -2
- package/reference/autogen/KERNEL_MAP.md +16 -147
- package/reference/autogen/PATTERN_INDEX.md +37 -37
- package/reference/autogen/packages/agent-docs.md +1 -9
- package/reference/autogen/packages/assistant-core.md +102 -68
- package/reference/autogen/packages/assistant-runtime.md +29 -15
- package/reference/autogen/packages/assistant-voice-sherpa.md +2 -1
- package/reference/autogen/packages/assistant-voice.md +8 -11
- package/reference/autogen/packages/auth-core.md +1 -1
- package/reference/autogen/packages/auth-provider-local-core.md +1 -1
- package/reference/autogen/packages/auth-provider-local-db-core.md +1 -1
- package/reference/autogen/packages/auth-provider-oidc-core.md +1 -1
- package/reference/autogen/packages/auth-provider-supabase-core.md +1 -1
- package/reference/autogen/packages/auth-web.md +1 -2
- package/reference/autogen/packages/connector-google-calendar.md +6 -2
- package/reference/autogen/packages/connectors-catalog.md +26 -7
- package/reference/autogen/packages/connectors-core.md +14 -3
- package/reference/autogen/packages/connectors-web.md +6 -1
- package/reference/autogen/packages/console-core.md +1 -1
- package/reference/autogen/packages/console-web.md +1 -1
- package/reference/autogen/packages/crud-core.md +1 -1
- package/reference/autogen/packages/database-runtime-mysql.md +1 -1
- package/reference/autogen/packages/database-runtime-postgres.md +1 -1
- package/reference/autogen/packages/database-runtime.md +2 -86
- package/reference/autogen/packages/http-runtime.md +6 -92
- package/reference/autogen/packages/http-web.md +29 -49
- package/reference/autogen/packages/json-rest-api-core.md +1 -1
- package/reference/autogen/packages/kernel.md +108 -405
- package/reference/autogen/packages/mobile-capacitor.md +11 -1
- package/reference/autogen/packages/oidc-issuer-core.md +1 -1
- package/reference/autogen/packages/payments-core.md +12 -4
- package/reference/autogen/packages/payments-web.md +1 -1
- package/reference/autogen/packages/realtime.md +7 -5
- package/reference/autogen/packages/resource-core.md +1 -4
- package/reference/autogen/packages/resource-crud-core.md +4 -3
- package/reference/autogen/packages/rewarded-core.md +1 -1
- package/reference/autogen/packages/rewarded-web.md +1 -1
- package/reference/autogen/packages/shell-web.md +114 -49
- package/reference/autogen/packages/storage-runtime.md +1 -1
- package/reference/autogen/packages/uploads-image-web.md +1 -1
- package/reference/autogen/packages/uploads-runtime.md +1 -1
- package/reference/autogen/packages/users-core.md +1 -1
- package/reference/autogen/packages/users-web.md +1 -2
- package/reference/autogen/packages/workspaces-core.md +3 -1
- package/reference/autogen/packages/workspaces-web.md +1 -1
- package/reference/autogen/tooling/config-eslint.md +1 -1
- package/reference/autogen/tooling/jskit-catalog.md +8 -9
- package/reference/autogen/tooling/jskit-release.md +3 -4
- package/reference/autogen/tooling/testUtils.md +1 -28
- package/skills/jskit/SKILL.md +8 -6
- package/skills/jskit/references/app-operations.md +1 -1
- package/skills/jskit/references/crud-form-actions.md +62 -0
- package/skills/jskit/references/crud-operations.md +9 -9
- package/skills/jskit/references/existing-application-migration.md +0 -7
- package/{patterns → skills/jskit/references/heuristics}/INDEX.md +24 -38
- package/{patterns → skills/jskit/references/heuristics}/child-cruds.md +2 -0
- package/{patterns → skills/jskit/references/heuristics}/client-requests.md +2 -0
- package/{patterns → skills/jskit/references/heuristics}/crud-authoring.md +2 -0
- package/{patterns → skills/jskit/references/heuristics}/crud-links.md +2 -0
- package/{patterns → skills/jskit/references/heuristics}/crud-repository-mapping.md +3 -1
- package/{patterns → skills/jskit/references/heuristics}/filters.md +3 -1
- package/{patterns → skills/jskit/references/heuristics}/live-actions.md +2 -0
- package/{patterns → skills/jskit/references/heuristics}/page-redirects.md +2 -0
- package/{patterns → skills/jskit/references/heuristics}/page-scaffolding.md +5 -3
- package/{patterns → skills/jskit/references/heuristics}/placements.md +2 -0
- package/{patterns → skills/jskit/references/heuristics}/row-policies.md +2 -0
- package/{patterns → skills/jskit/references/heuristics}/server-search.md +2 -0
- package/{patterns → skills/jskit/references/heuristics}/surfaces.md +5 -3
- package/{patterns → skills/jskit/references/heuristics}/ui-contract.md +3 -1
- package/{patterns → skills/jskit/references/heuristics}/ui-testing.md +2 -0
- package/skills/jskit/references/pattern-index.md +37 -37
- package/skills/jskit/references/patterns/app/minimal-foundation/example/AGENTS.md +19 -0
- package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +3 -3
- package/skills/jskit/references/patterns/app/minimal-foundation/example/server/lib/runtimeEnv.js +3 -11
- package/skills/jskit/references/patterns/app/minimal-foundation/example/src/main.js +0 -2
- package/skills/jskit/references/patterns/app/shell-foundation/PATTERN.md +11 -20
- package/skills/jskit/references/patterns/app/shell-foundation/example/AGENTS.md +19 -0
- package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +4 -4
- package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
- package/skills/jskit/references/patterns/app/shell-foundation/example/server/lib/runtimeEnv.js +3 -11
- package/skills/jskit/references/patterns/app/shell-foundation/example/src/components/ShellLayout.vue +1 -0
- package/skills/jskit/references/patterns/app/shell-foundation/example/src/main.js +0 -2
- package/skills/jskit/references/patterns/app/shell-foundation/example/src/pages/home/settings.vue +2 -2
- package/skills/jskit/references/patterns/auth/accounts-hub/example/package.json +2 -2
- package/skills/jskit/references/patterns/auth/oidc-sign-in/example/package.json +2 -2
- package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
- package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
- package/skills/jskit/references/patterns/connectors/oauth-connection/PATTERN.md +27 -610
- package/skills/jskit/references/patterns/connectors/paddle-catalogue/example/create-products.js +2 -1
- package/skills/jskit/references/patterns/connectors/redshift-queries/PATTERN.md +1 -1
- package/skills/jskit/references/patterns/crud/crud-screen-set/PATTERN.md +11 -1
- package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/package.json +2 -2
- package/skills/jskit/references/patterns/database/mysql-application/example/package.json +1 -1
- package/skills/jskit/references/patterns/database/postgres-application/example/package.json +1 -1
- package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
- package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/src/server/actions.js +0 -2
- package/skills/jskit/references/patterns/server/feature-package/example/variations/AvailabilityEngineProvider.js +1 -1
- package/skills/jskit/references/patterns/server/feature-package/example/variations/InvoiceRollupProvider.js +1 -1
- package/skills/jskit/references/patterns/shell/application-shell/example/src/pages/home/index.vue +15 -5
- package/skills/jskit/references/patterns/shell/application-shell/example/tests/e2e/adaptive-shell.spec.ts +1 -1
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +2 -2
- package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +3 -3
- package/templates/app/AGENTS.md +0 -38
|
@@ -56,8 +56,10 @@ admission; Claude's `duplicate-checked`, `native-history-read`, `process-ready`,
|
|
|
56
56
|
`prompt-rendered`, `metadata-ready`, `receipt-written` and `state-active`; and
|
|
57
57
|
`admission-authorized` and `turn-located` before `accepted`. A bound host's
|
|
58
58
|
`prepareInput(input, context, { deliveryTiming })` and Claude's
|
|
59
|
-
`preparation.message(..., { deliveryTiming })` receive the same observer
|
|
60
|
-
|
|
59
|
+
`preparation.message(..., { deliveryTiming })` receive the same observer. A host
|
|
60
|
+
that marks stages of its own preparation declares them with
|
|
61
|
+
`createConversationRuntime({ hostDeliveryStages: ["my-step"] })`; each name is
|
|
62
|
+
lowercase letters and hyphens. Undeclared stage names are ignored.
|
|
61
63
|
Native acknowledgement precedes the application's receipt write. Accepted delivery
|
|
62
64
|
still waits for the existing durable receipt contract.
|
|
63
65
|
|
|
@@ -399,7 +399,9 @@ catalog, the runtime automatically exposes compact paged action search, exact
|
|
|
399
399
|
one-action contract lookup, and contract-gated execution tools. Search returns
|
|
400
400
|
at most 20 compact matches and never includes schemas. Tool arguments and
|
|
401
401
|
results are byte-bounded; an oversized result returns a controlled error so it
|
|
402
|
-
cannot overflow assistant transcript storage.
|
|
402
|
+
cannot overflow assistant transcript storage. Empty tool arguments mean no
|
|
403
|
+
input; any other arguments must be one JSON object, so truncated JSON, arrays
|
|
404
|
+
and scalars return `assistant_tool_arguments_invalid` without running the action.
|
|
403
405
|
|
|
404
406
|
The runtime tells the model that discovery tools are entry points into the
|
|
405
407
|
authorized action catalog. Before claiming a capability or dataset is missing,
|
|
@@ -40,9 +40,18 @@ new handshake establishes the current actor.
|
|
|
40
40
|
|
|
41
41
|
When `auth.service.authenticateRequest()` is present, delivery reauthenticates
|
|
42
42
|
each socket before sending and rechecks idle sockets every 30 seconds. Revoked,
|
|
43
|
-
expired, or changed actors are disconnected.
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
expired, or changed actors are disconnected. Authentication lookup errors fail
|
|
44
|
+
closed.
|
|
45
|
+
|
|
46
|
+
Packages that know which scopes an actor belongs to contribute them through
|
|
47
|
+
`runtime.realtime.registerAudienceContributor({ id, resolveActorScopes })` during
|
|
48
|
+
setup. `resolveActorScopes(actorId)` returns event scopes (`{ kind: "user", id }`,
|
|
49
|
+
`{ kind: "workspace", id }` or `{ kind: "workspace_user", workspaceId, userId }`);
|
|
50
|
+
realtime turns each into the same room an `event_scope` audience targets. Sockets
|
|
51
|
+
join those rooms on connection and, on every revalidation, leave the contributed
|
|
52
|
+
rooms the actor no longer belongs to; rooms joined by anything else are left
|
|
53
|
+
alone. `@jskit-ai/workspaces-core` contributes the actor's active workspace
|
|
54
|
+
memberships this way when realtime is installed.
|
|
46
55
|
|
|
47
56
|
The authentication request includes parsed cookies, the `Host`, `Origin` and
|
|
48
57
|
`X-Forwarded-Proto` headers when present, and the socket address and TLS state.
|
|
@@ -200,7 +200,7 @@ product CRUD behavior fixed.
|
|
|
200
200
|
phases before commit share one repository transaction, and `execute` receives
|
|
201
201
|
`standard(nextInput)` for retaining the normal framework write.
|
|
202
202
|
- Named `actions` expose non-CRUD service methods through normal input,
|
|
203
|
-
permission,
|
|
203
|
+
permission, event, and optional HTTP route contracts.
|
|
204
204
|
|
|
205
205
|
Repositories own database access. Services and lifecycle hooks orchestrate
|
|
206
206
|
repositories. External delivery belongs after commit; when it must be durable,
|
|
@@ -297,13 +297,6 @@ ACL, and restrictive umask. Setup must fail if it cannot establish that
|
|
|
297
297
|
contract. Do not make package installation, Git, agents, or preview startup run
|
|
298
298
|
recursive ownership or mode repair afterward.
|
|
299
299
|
|
|
300
|
-
For Vibe64-managed workspaces, the concrete contract is group `vibe64`,
|
|
301
|
-
directory mode `2770`, access and inherited default group ACL `vibe64:rwx`, no
|
|
302
|
-
access for other users, and process umask `0007`. The enabled human user and
|
|
303
|
-
`v64d_<workspace>` identity both belong to the group. Other hosts may use
|
|
304
|
-
different concrete identities, but they must provide the same creation-time
|
|
305
|
-
guarantee.
|
|
306
|
-
|
|
307
300
|
Do not conflate these identities:
|
|
308
301
|
|
|
309
302
|
- The filesystem identity controls who may create and replace source files.
|
|
@@ -13,7 +13,7 @@ Adopt the foundation's accessible HTML skeleton, inline styles, Reload link and
|
|
|
13
13
|
startup-error message; package updates do not rewrite existing app HTML. Follow
|
|
14
14
|
its cold-browser proof at compact, medium and expanded widths: delay JavaScript,
|
|
15
15
|
check loading feedback, then release it and check app mount, including production
|
|
16
|
-
builds.
|
|
16
|
+
builds. Response compression belongs to hosting.
|
|
17
17
|
|
|
18
18
|
## Establish a new application
|
|
19
19
|
|
|
@@ -150,16 +150,15 @@ need cross-owner denial tests.
|
|
|
150
150
|
`useCrudAddEditScreen()` accepts `saveSuccess` at the top level. After saving,
|
|
151
151
|
the default behaviour invalidates `saveSuccess.invalidateQueryKey`, navigates
|
|
152
152
|
to a configured record-view URL when one resolves, and otherwise falls back to
|
|
153
|
-
the list URL. For a create-and-list app, use `navigateToView: false` and
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
the list URL. For a create-and-list app, use `navigateToView: false` and
|
|
154
|
+
`saveSuccess.listUrlTemplate`, the only list URL save navigation reads, as in the
|
|
155
|
+
public example above.
|
|
156
156
|
|
|
157
157
|
To keep the saved form open, set both `saveSuccess.navigateToView` and
|
|
158
158
|
`saveSuccess.navigateToList` to `false`. `addEditOptions.onSaveSuccess` replaces
|
|
159
159
|
the default success handling, including query invalidation and navigation;
|
|
160
160
|
reserve it for custom success behaviour. Returning to the list needs only the
|
|
161
|
-
|
|
162
|
-
the shared form implementation.
|
|
161
|
+
`saveSuccess` options, not a router callback.
|
|
163
162
|
|
|
164
163
|
## Browser routes and responsive lists
|
|
165
164
|
|
|
@@ -307,17 +306,18 @@ this raw test encoding into page code.
|
|
|
307
306
|
Deletion requires an explicit shared `DELETE` operation and confirmation
|
|
308
307
|
decision. Use `CrudDeleteAction` and `useCrudDeleteAction()` through the view
|
|
309
308
|
actions slot; do not rebuild their confirmation, request, invalidation, and
|
|
310
|
-
navigation flow.
|
|
309
|
+
navigation flow. After a delete it returns to the list before invalidating the
|
|
310
|
+
resource's queries, so the deleted record never refetches as "Record not found."
|
|
311
311
|
|
|
312
312
|
The delete action resolves its HTTP client from the resource's `apiAccess`, just
|
|
313
313
|
like the list, view and form helpers. For `apiAccess: "public"`, DELETE requests
|
|
314
314
|
skip session CSRF discovery; no `/api/session` endpoint or page-local client
|
|
315
315
|
wiring is required. Authenticated resources retain the configured client's CSRF
|
|
316
|
-
behavior. An explicit `client` override
|
|
317
|
-
|
|
316
|
+
behavior. An explicit `client` override receives the same request options.
|
|
317
|
+
Server authorization is unchanged.
|
|
318
318
|
|
|
319
319
|
For custom form actions, see
|
|
320
|
-
[record form actions](
|
|
320
|
+
[record form actions](./crud-form-actions.md).
|
|
321
321
|
|
|
322
322
|
## Strict temporal values
|
|
323
323
|
|
package/guide/agent/index.md
CHANGED
|
@@ -25,6 +25,7 @@ apply or adapt. It does not prescribe an agent host or project orchestrator.
|
|
|
25
25
|
|
|
26
26
|
- [Application operations](/guide/framework/application-operations)
|
|
27
27
|
- [CRUD operations](/guide/framework/crud-operations)
|
|
28
|
+
- [Record form actions](/guide/framework/crud-form-actions)
|
|
28
29
|
- [UI operations](/guide/framework/ui-operations)
|
|
29
30
|
- [Material 3](/guide/framework/material-3)
|
|
30
31
|
- [Complete source pattern library](/patterns/)
|
|
@@ -34,6 +35,7 @@ apply or adapt. It does not prescribe an agent host or project orchestrator.
|
|
|
34
35
|
- [Mobile Capacitor](/guide/app-extras/mobile-capacitor)
|
|
35
36
|
- [Realtime](/guide/app-extras/realtime)
|
|
36
37
|
- [Assistant](/guide/app-extras/assistant)
|
|
38
|
+
- [Embeddable assistant conversations](/guide/app-extras/assistant-conversation)
|
|
37
39
|
- [Voice conversations](/guide/app-extras/assistant-voice)
|
|
38
40
|
|
|
39
41
|
## How to use the guide
|
package/package.json
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jskit-ai/agent-docs",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.244",
|
|
4
4
|
"description": "Distributed JSKIT agent references, prompts, guides, and generated reference maps.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"guide",
|
|
8
8
|
"patterns",
|
|
9
9
|
"reference",
|
|
10
|
-
"skills"
|
|
11
|
-
"templates"
|
|
10
|
+
"skills"
|
|
12
11
|
],
|
|
13
12
|
"scripts": {
|
|
14
13
|
"test": "node --test --test-concurrency=1 test/*.test.js"
|
|
@@ -14,8 +14,6 @@ function createActions({ bookingEngine } = {}) {
|
|
|
14
14
|
input: statusQueryInputValidator,
|
|
15
15
|
output: null,
|
|
16
16
|
idempotency: "none",
|
|
17
|
-
audit: { actionName: ACTION_GET_STATUS },
|
|
18
|
-
observability: {},
|
|
19
17
|
async execute(input) {
|
|
20
18
|
return bookingEngine.readStatus(input);
|
|
21
19
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineFeature } from "@jskit-ai/kernel/server/features";
|
|
2
|
-
import { emptyInputValidator } from "@jskit-ai/kernel/
|
|
2
|
+
import { emptyInputValidator } from "@jskit-ai/kernel/server/actions/actionContributorHelpers";
|
|
3
3
|
import { createService } from "./orchestratorService.js";
|
|
4
4
|
|
|
5
5
|
const AvailabilityEngineProvider = defineFeature({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineFeature } from "@jskit-ai/kernel/server/features";
|
|
2
|
-
import { emptyInputValidator } from "@jskit-ai/kernel/
|
|
2
|
+
import { emptyInputValidator } from "@jskit-ai/kernel/server/actions/actionContributorHelpers";
|
|
3
3
|
import { createRepository } from "./repository.js";
|
|
4
4
|
|
|
5
5
|
const InvoiceRollupProvider = defineFeature({
|
|
@@ -12,6 +12,25 @@ Before implementation, read the narrow relevant source pattern completely. If
|
|
|
12
12
|
its owner package is installed, prefer that version-matched package-owned copy.
|
|
13
13
|
Do not install an unrelated runtime package only to read documentation.
|
|
14
14
|
|
|
15
|
+
Before adding or changing browser-test setup, read the browser verification
|
|
16
|
+
guide at
|
|
17
|
+
`https://mobily-enterprises.github.io/jskit-ai/guide/framework/ui-operations#browser-verification`.
|
|
18
|
+
Routine tests reuse the isolated schema and prepare fixtures once per suite
|
|
19
|
+
invocation. Keep `BROWSER_TEST_DB_NAME` distinct from disposable `TEST_DB_NAME`
|
|
20
|
+
and prove that disposable cleanup preserves browser migrations. Require
|
|
21
|
+
repeat-start regression proof; do not rebuild the database or production
|
|
22
|
+
frontend for each focused browser check.
|
|
23
|
+
|
|
24
|
+
Keep verification output small. Run the relevant cases together, save complete
|
|
25
|
+
stdout/stderr to local artifacts, and preserve the exit status. Report counts,
|
|
26
|
+
duration, failed case names and artifact paths; read only actionable failure
|
|
27
|
+
excerpts. Do not dump full JSON/TAP reports, passing assertions, request logs or
|
|
28
|
+
traces into agent context. Wait on the existing run instead of restarting it or
|
|
29
|
+
repeatedly printing unchanged output. Keep startup and cleanup errors visible.
|
|
30
|
+
For browser evidence, use existing automated cases, targeted locators and
|
|
31
|
+
meaningful visual checkpoints. Avoid a full DOM snapshot or screenshot after
|
|
32
|
+
every action; retain the required viewport, identity and security checks.
|
|
33
|
+
|
|
15
34
|
Pages never start with a page header, title block, welcome heading, or other
|
|
16
35
|
standalone heading copy. Start with the useful content and actions. If the user
|
|
17
36
|
wants a heading, they will ask for or add one.
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@local/main": "0.1.0",
|
|
36
36
|
"@fastify/static": "^10.1.3",
|
|
37
|
-
"@jskit-ai/kernel": "0.1.
|
|
37
|
+
"@jskit-ai/kernel": "0.1.246",
|
|
38
38
|
"@tanstack/vue-query": "^5.101.0",
|
|
39
39
|
"fastify": "^5.8.5",
|
|
40
40
|
"json-rest-schema": "^1.0.17",
|
|
@@ -42,13 +42,13 @@
|
|
|
42
42
|
"vue": "^3.5.44",
|
|
43
43
|
"vue-router": "^5.3.1",
|
|
44
44
|
"vuetify": "^4.1.2",
|
|
45
|
-
"@jskit-ai/http-runtime": "0.1.
|
|
45
|
+
"@jskit-ai/http-runtime": "0.1.244",
|
|
46
46
|
"@fastify/fast-json-stringify-compiler": "^5.1.0",
|
|
47
47
|
"@vue/devtools-api": "^8.2.1"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@jskit-ai/config-eslint": "0.1.241",
|
|
51
|
-
"@jskit-ai/jskit-catalog": "0.1.
|
|
51
|
+
"@jskit-ai/jskit-catalog": "0.1.297",
|
|
52
52
|
"@playwright/test": "1.61.1",
|
|
53
53
|
"@vitejs/plugin-vue": "^6.0.7",
|
|
54
54
|
"eslint": "^10.8.0",
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
2
|
import { surfaceRuntime } from "./surfaceRuntime.js";
|
|
3
3
|
|
|
4
|
-
const require = createRequire(import.meta.url);
|
|
5
|
-
|
|
6
4
|
function toPort(value, fallback = 3000) {
|
|
7
5
|
const parsed = Number.parseInt(String(value || "").trim(), 10);
|
|
8
6
|
if (Number.isInteger(parsed) && parsed > 0) {
|
|
@@ -17,14 +15,8 @@ function ensureRuntimeEnvLoaded() {
|
|
|
17
15
|
if (envLoaded) {
|
|
18
16
|
return;
|
|
19
17
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const loadDotEnv = dotenvModule?.config;
|
|
23
|
-
if (typeof loadDotEnv === "function") {
|
|
24
|
-
loadDotEnv();
|
|
25
|
-
}
|
|
26
|
-
} catch {
|
|
27
|
-
// dotenv is optional in base-shell; bundles can add it when needed.
|
|
18
|
+
if (existsSync(".env")) {
|
|
19
|
+
process.loadEnvFile(".env");
|
|
28
20
|
}
|
|
29
21
|
envLoaded = true;
|
|
30
22
|
}
|
|
@@ -35,8 +35,6 @@ const { router, fallbackRoute } = createShellRouter({
|
|
|
35
35
|
surfaceMode,
|
|
36
36
|
notFoundComponent: NotFoundView,
|
|
37
37
|
guard: {
|
|
38
|
-
surfaceDefinitions: config.surfaceDefinitions,
|
|
39
|
-
defaultSurfaceId: config.surfaceDefaultId,
|
|
40
38
|
webRootAllowed: config.webRootAllowed
|
|
41
39
|
}
|
|
42
40
|
});
|
|
@@ -74,6 +74,10 @@ source files.
|
|
|
74
74
|
`.gitignore` when copying it to an app. Managed preview identity belongs to the
|
|
75
75
|
authentication surface pattern, not the shell foundation.
|
|
76
76
|
|
|
77
|
+
The shell files are the `shell/application-shell` pattern's example from
|
|
78
|
+
`@jskit-ai/shell-web`, and the remaining files are the minimal foundation's,
|
|
79
|
+
byte for byte. Change those owners first and keep the copies identical.
|
|
80
|
+
|
|
77
81
|
Read these together before adapting the shell:
|
|
78
82
|
|
|
79
83
|
- `example/src/App.vue`
|
|
@@ -94,29 +98,16 @@ Do not preinstall capabilities solely because they appear in another app.
|
|
|
94
98
|
|
|
95
99
|
## Development warmup
|
|
96
100
|
|
|
97
|
-
Keep development-server warmup
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
Keep dependency optimization separate: reducing warmup does not require disabling
|
|
102
|
-
the dependency scanner or JSKIT's installed-package optimization settings.
|
|
103
|
-
The bootstrap plugin scans local client entries and their shared imports before
|
|
104
|
-
page loading. Do not exclude local package roots from optimization: Vite already
|
|
105
|
-
keeps their real paths as source, and exclusions hide their dependency imports.
|
|
106
|
-
Keep the example's Vuetify component/directive includes because auto-imports are
|
|
107
|
-
introduced after the initial scan.
|
|
101
|
+
Keep the development-server warmup, dependency optimization, and Vuetify
|
|
102
|
+
includes exactly as the
|
|
103
|
+
[minimal foundation](../minimal-foundation/PATTERN.md) describes in its
|
|
104
|
+
Development warmup section.
|
|
108
105
|
|
|
109
106
|
## Verification
|
|
110
107
|
|
|
111
|
-
Keep the initial loading shell in `index.html
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
Vue replaces it on mount; the bootstrap failure handler retains an actionable
|
|
115
|
-
error. A failed module download still leaves the static Reload link available.
|
|
116
|
-
Preserve `tests/e2e/startup.spec.ts`: it holds JavaScript requests while proving
|
|
117
|
-
visible loading feedback at three widths, then releases them and proves mounting.
|
|
118
|
-
Run this check against the production build as part of the application's release
|
|
119
|
-
verification, not only against Vite development mode.
|
|
108
|
+
Keep the initial loading shell in `index.html` and preserve
|
|
109
|
+
`tests/e2e/startup.spec.ts` as the minimal foundation's Verification section
|
|
110
|
+
describes, including its production-build check.
|
|
120
111
|
|
|
121
112
|
Install the declared packages once, run `npm run develop` for the live
|
|
122
113
|
application, then run lint, server tests, client tests, the production build,
|
|
@@ -12,6 +12,25 @@ Before implementation, read the narrow relevant source pattern completely. If
|
|
|
12
12
|
its owner package is installed, prefer that version-matched package-owned copy.
|
|
13
13
|
Do not install an unrelated runtime package only to read documentation.
|
|
14
14
|
|
|
15
|
+
Before adding or changing browser-test setup, read the browser verification
|
|
16
|
+
guide at
|
|
17
|
+
`https://mobily-enterprises.github.io/jskit-ai/guide/framework/ui-operations#browser-verification`.
|
|
18
|
+
Routine tests reuse the isolated schema and prepare fixtures once per suite
|
|
19
|
+
invocation. Keep `BROWSER_TEST_DB_NAME` distinct from disposable `TEST_DB_NAME`
|
|
20
|
+
and prove that disposable cleanup preserves browser migrations. Require
|
|
21
|
+
repeat-start regression proof; do not rebuild the database or production
|
|
22
|
+
frontend for each focused browser check.
|
|
23
|
+
|
|
24
|
+
Keep verification output small. Run the relevant cases together, save complete
|
|
25
|
+
stdout/stderr to local artifacts, and preserve the exit status. Report counts,
|
|
26
|
+
duration, failed case names and artifact paths; read only actionable failure
|
|
27
|
+
excerpts. Do not dump full JSON/TAP reports, passing assertions, request logs or
|
|
28
|
+
traces into agent context. Wait on the existing run instead of restarting it or
|
|
29
|
+
repeatedly printing unchanged output. Keep startup and cleanup errors visible.
|
|
30
|
+
For browser evidence, use existing automated cases, targeted locators and
|
|
31
|
+
meaningful visual checkpoints. Avoid a full DOM snapshot or screenshot after
|
|
32
|
+
every action; retain the required viewport, identity and security checks.
|
|
33
|
+
|
|
15
34
|
Pages never start with a page header, title block, welcome heading, or other
|
|
16
35
|
standalone heading copy. Start with the useful content and actions. If the user
|
|
17
36
|
wants a heading, they will ask for or add one.
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@local/main": "0.1.0",
|
|
36
36
|
"@fastify/static": "^10.1.3",
|
|
37
|
-
"@jskit-ai/kernel": "0.1.
|
|
37
|
+
"@jskit-ai/kernel": "0.1.246",
|
|
38
38
|
"@tanstack/vue-query": "^5.101.0",
|
|
39
39
|
"fastify": "^5.8.5",
|
|
40
40
|
"json-rest-schema": "^1.0.17",
|
|
@@ -42,15 +42,15 @@
|
|
|
42
42
|
"vue": "^3.5.44",
|
|
43
43
|
"vue-router": "^5.3.1",
|
|
44
44
|
"vuetify": "^4.1.2",
|
|
45
|
-
"@jskit-ai/http-runtime": "0.1.
|
|
45
|
+
"@jskit-ai/http-runtime": "0.1.244",
|
|
46
46
|
"@mdi/js": "^7.4.47",
|
|
47
|
-
"@jskit-ai/shell-web": "0.1.
|
|
47
|
+
"@jskit-ai/shell-web": "0.1.252",
|
|
48
48
|
"@fastify/fast-json-stringify-compiler": "^5.1.0",
|
|
49
49
|
"@vue/devtools-api": "^8.2.1"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@jskit-ai/config-eslint": "0.1.241",
|
|
53
|
-
"@jskit-ai/jskit-catalog": "0.1.
|
|
53
|
+
"@jskit-ai/jskit-catalog": "0.1.297",
|
|
54
54
|
"@playwright/test": "1.61.1",
|
|
55
55
|
"@vitejs/plugin-vue": "^6.0.7",
|
|
56
56
|
"eslint": "^10.8.0",
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
2
|
import { surfaceRuntime } from "./surfaceRuntime.js";
|
|
3
3
|
|
|
4
|
-
const require = createRequire(import.meta.url);
|
|
5
|
-
|
|
6
4
|
function toPort(value, fallback = 3000) {
|
|
7
5
|
const parsed = Number.parseInt(String(value || "").trim(), 10);
|
|
8
6
|
if (Number.isInteger(parsed) && parsed > 0) {
|
|
@@ -17,14 +15,8 @@ function ensureRuntimeEnvLoaded() {
|
|
|
17
15
|
if (envLoaded) {
|
|
18
16
|
return;
|
|
19
17
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const loadDotEnv = dotenvModule?.config;
|
|
23
|
-
if (typeof loadDotEnv === "function") {
|
|
24
|
-
loadDotEnv();
|
|
25
|
-
}
|
|
26
|
-
} catch {
|
|
27
|
-
// dotenv is optional in base-shell; bundles can add it when needed.
|
|
18
|
+
if (existsSync(".env")) {
|
|
19
|
+
process.loadEnvFile(".env");
|
|
28
20
|
}
|
|
29
21
|
envLoaded = true;
|
|
30
22
|
}
|
|
@@ -35,8 +35,6 @@ const { router, fallbackRoute } = createShellRouter({
|
|
|
35
35
|
surfaceMode,
|
|
36
36
|
notFoundComponent: NotFoundView,
|
|
37
37
|
guard: {
|
|
38
|
-
surfaceDefinitions: config.surfaceDefinitions,
|
|
39
|
-
defaultSurfaceId: config.surfaceDefaultId,
|
|
40
38
|
webRootAllowed: config.webRootAllowed
|
|
41
39
|
}
|
|
42
40
|
});
|
|
@@ -23,7 +23,7 @@ import { RouterView } from "vue-router";
|
|
|
23
23
|
|
|
24
24
|
<style scoped>
|
|
25
25
|
.settings-shell {
|
|
26
|
-
--settings-panel-padding: 1rem;
|
|
26
|
+
--settings-shell-panel-padding: 1rem;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
.settings-shell__panel {
|
|
@@ -34,7 +34,7 @@ import { RouterView } from "vue-router";
|
|
|
34
34
|
display: grid;
|
|
35
35
|
gap: 1rem;
|
|
36
36
|
grid-template-columns: minmax(12rem, 16rem) minmax(0, 1fr);
|
|
37
|
-
padding: var(--settings-panel-padding);
|
|
37
|
+
padding: var(--settings-shell-panel-padding);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
.settings-shell__content {
|