mythik 0.1.1 → 0.1.2
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/README.md +147 -62
- package/dist/actions/transaction-engine.d.ts.map +1 -1
- package/dist/actions/transaction-engine.js +43 -7
- package/dist/actions/transaction-engine.js.map +1 -1
- package/dist/design/dna.d.ts.map +1 -1
- package/dist/design/dna.js +9 -4
- package/dist/design/dna.js.map +1 -1
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +1 -13
- package/dist/factory.js.map +1 -1
- package/dist/security/api-spec-validator.d.ts.map +1 -1
- package/dist/security/api-spec-validator.js +32 -0
- package/dist/security/api-spec-validator.js.map +1 -1
- package/docs/consumer/ai-context-api.md +8 -0
- package/docs/consumer/ai-context-runtime-semantics.md +4 -2
- package/docs/consumer/ai-context.md +20 -15
- package/docs/consumer/reference-doc.md +23 -18
- package/docs/wiki/compiled/action-update-tokens.md +4 -3
- package/docs/wiki/compiled/concept-api-query-endpoint.md +2 -0
- package/docs/wiki/compiled/concept-api-scope-filter.md +2 -0
- package/docs/wiki/compiled/concept-dna-seeds.md +13 -0
- package/docs/wiki/compiled/concept-transactions.md +4 -1
- package/docs/wiki/compiled/path-tx-result-error.md +3 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
# mythik
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The Mythik runtime — types, validation, expressions, actions, spec
|
|
4
|
+
stores, and versioning. This is the foundation every Mythik consumer
|
|
5
|
+
imports. It also ships the canonical AI documentation bundled inside
|
|
6
|
+
the npm tarball — so the docs an agent reads always match the
|
|
7
|
+
installed version of the framework, no external doc fetching, no
|
|
8
|
+
version drift.
|
|
9
|
+
|
|
10
|
+
> See [the framework README on GitHub](https://github.com/mldixdev/mythik#readme)
|
|
11
|
+
> for the full Mythik architecture and design philosophy. This file
|
|
12
|
+
> documents what `mythik` gives you and how to use it.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## What Mythik is, briefly
|
|
17
|
+
|
|
18
|
+
Mythik is an **AI-first, spec-driven framework**. Every UI screen and
|
|
19
|
+
API endpoint lives as a JSON spec in a database — not a `.tsx` file
|
|
20
|
+
in a repo. Apps grow by adding rows, not files. The framework
|
|
21
|
+
validates every change atomically and versions everything
|
|
22
|
+
automatically, so your favorite AI agent can author and patch specs
|
|
23
|
+
through the CLI without human supervision in the loop. This package
|
|
24
|
+
is the runtime that makes all of that work.
|
|
4
25
|
|
|
5
26
|
## Install
|
|
6
27
|
|
|
@@ -8,91 +29,155 @@ Core runtime for Mythik, a spec-driven application framework where UI, state, ac
|
|
|
8
29
|
npm install mythik
|
|
9
30
|
```
|
|
10
31
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
32
|
+
`mythik` has no peer dependency. It's the foundation.
|
|
33
|
+
|
|
34
|
+
## When to install this
|
|
35
|
+
|
|
36
|
+
You install `mythik` whenever you're building anything Mythik-related:
|
|
37
|
+
|
|
38
|
+
| You want to... | Install |
|
|
39
|
+
|---|---|
|
|
40
|
+
| Render specs as a React app | `mythik` + `mythik-react` |
|
|
41
|
+
| Build a REST API from an ApiSpec | `mythik` + `mythik-server` |
|
|
42
|
+
| Author or patch specs from the command line | `mythik` + `mythik-cli` (dev) |
|
|
43
|
+
| Validate or query specs from a Node script | `mythik` alone |
|
|
44
|
+
|
|
45
|
+
## What you get
|
|
46
|
+
|
|
47
|
+
- **Strict TypeScript types** for `Spec`, `AppSpec`, `ApiSpec`,
|
|
48
|
+
primitives, expressions, actions, and validation results.
|
|
49
|
+
|
|
50
|
+
- **The validation gate** — `validateSpec()` and `validateApiSpec()`
|
|
51
|
+
are the atomic checks that run on every push and promote. Call them
|
|
52
|
+
directly to validate offline, in CI, or in a test.
|
|
53
|
+
|
|
54
|
+
- **Spec stores** — load and save specs through a swappable backend
|
|
55
|
+
interface:
|
|
56
|
+
- Browser-safe entry: `MemorySpecStore`, `SupabaseSpecStore`
|
|
57
|
+
- Node-only entry (`mythik/server`): `FileSpecStore`,
|
|
58
|
+
`SqlServerSpecStore`
|
|
59
|
+
- Versioned variants (`SupabaseVersionedSpecStore`,
|
|
60
|
+
`SupabaseEnvironmentStore`) add snapshot+patch-chain history,
|
|
61
|
+
structural diffs, and atomic promote gates
|
|
62
|
+
|
|
63
|
+
- **Expression and action engines** — the runtime that resolves
|
|
64
|
+
`$token`, `$state`, `$template`, and dispatches action chains,
|
|
65
|
+
transactions, forms, auth, derive, dataSources, uploads, and
|
|
66
|
+
exports. Specs reference these by name; this package implements
|
|
67
|
+
the resolution.
|
|
68
|
+
|
|
69
|
+
- **App engine** — navigation, auth integration, and screen lifecycle.
|
|
70
|
+
Most consumers reach the app engine through `<MythikApp>` in
|
|
71
|
+
`mythik-react`, but the runtime lives here and can be used directly
|
|
72
|
+
for non-React shells or custom integrations.
|
|
73
|
+
|
|
74
|
+
## Browser-safe vs Node-only entries
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
// Browser-safe (works in any runtime)
|
|
78
|
+
import { MemorySpecStore, SupabaseSpecStore } from 'mythik';
|
|
79
|
+
|
|
80
|
+
// Node-only (file system, SQL Server, anything that needs Node APIs)
|
|
81
|
+
import { FileSpecStore, SqlServerSpecStore } from 'mythik/server';
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Bundlers like Vite or Webpack should always import from `mythik` (the
|
|
85
|
+
main entry). The `mythik/server` subpath is for Node scripts and
|
|
86
|
+
server processes only — it pulls in modules like `mssql` and
|
|
87
|
+
`node:fs` that won't work in a browser.
|
|
88
|
+
|
|
89
|
+
## Minimal example
|
|
90
|
+
|
|
91
|
+
Validate a spec in-process:
|
|
27
92
|
|
|
28
93
|
```ts
|
|
29
|
-
import {
|
|
94
|
+
import { validateSpec, MemorySpecStore, type Spec } from 'mythik';
|
|
30
95
|
|
|
31
96
|
const homeSpec: Spec = {
|
|
32
97
|
root: 'root',
|
|
33
98
|
elements: {
|
|
34
99
|
root: {
|
|
100
|
+
type: 'box',
|
|
101
|
+
props: { style: { padding: 24 } },
|
|
102
|
+
children: ['title'],
|
|
103
|
+
},
|
|
104
|
+
title: {
|
|
35
105
|
type: 'text',
|
|
36
|
-
props: { content: 'Hello
|
|
106
|
+
props: { content: 'Hello, world', variant: 'heading' },
|
|
37
107
|
},
|
|
38
108
|
},
|
|
39
109
|
};
|
|
40
110
|
|
|
41
|
-
const
|
|
42
|
-
home: homeSpec,
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
const loadedSpec = await specStore.load('home') as Spec;
|
|
46
|
-
const result = validateSpec(loadedSpec);
|
|
111
|
+
const result = validateSpec(homeSpec);
|
|
47
112
|
|
|
48
113
|
if (!result.valid) {
|
|
49
|
-
|
|
114
|
+
for (const err of result.errors) {
|
|
115
|
+
console.error(`[${err.ruleId}] ${err.path}: ${err.message}`);
|
|
116
|
+
}
|
|
117
|
+
process.exit(1);
|
|
50
118
|
}
|
|
119
|
+
|
|
120
|
+
const store = new MemorySpecStore({ home: homeSpec });
|
|
121
|
+
const loaded = await store.load('home');
|
|
122
|
+
console.log('Loaded spec for screen:', loaded?.root);
|
|
51
123
|
```
|
|
52
124
|
|
|
53
|
-
|
|
125
|
+
`validateSpec()` is the same function the CLI calls when it runs
|
|
126
|
+
`mythik validate <spec-id>` and the same gate that `mythik patch`
|
|
127
|
+
enforces atomically. Same machine, three surfaces.
|
|
128
|
+
|
|
129
|
+
For rendering specs as a React UI, see
|
|
130
|
+
[`mythik-react`](https://github.com/mldixdev/mythik/tree/main/packages/react#readme).
|
|
131
|
+
For an AI agent surface to read, validate, patch, and promote specs
|
|
132
|
+
from the command line, see
|
|
133
|
+
[`mythik-cli`](https://github.com/mldixdev/mythik/tree/main/packages/cli#readme).
|
|
134
|
+
|
|
135
|
+
## AI documentation, bundled
|
|
136
|
+
|
|
137
|
+
This package ships the canonical AI documentation inside the npm
|
|
138
|
+
tarball — so the docs travel with the framework (no external doc
|
|
139
|
+
fetching, no version drift between docs and runtime):
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
node_modules/mythik/docs/
|
|
143
|
+
├── consumer/
|
|
144
|
+
│ ├── ai-context.md # spec-generation primer
|
|
145
|
+
│ ├── ai-context-primitives.md # every primitive's props
|
|
146
|
+
│ ├── ai-context-runtime-semantics.md # render-time behavior
|
|
147
|
+
│ ├── ai-context-custom-elements.md # custom expressions/actions
|
|
148
|
+
│ ├── reference-doc.md # full rule catalog
|
|
149
|
+
│ └── WHERE-TO-LOOK.md # navigation guide
|
|
150
|
+
├── wiki/compiled/ # 327 atomic per-concept articles
|
|
151
|
+
└── llms.txt # index for LLM tooling
|
|
152
|
+
```
|
|
54
153
|
|
|
55
|
-
|
|
154
|
+
`mythik-cli` adds a small helper to locate or copy these into your
|
|
155
|
+
project:
|
|
56
156
|
|
|
57
|
-
```
|
|
58
|
-
|
|
157
|
+
```bash
|
|
158
|
+
$ npx mythik docs path
|
|
159
|
+
/your-project/node_modules/mythik/docs
|
|
160
|
+
|
|
161
|
+
$ npx mythik docs copy ./mythik-docs
|
|
59
162
|
```
|
|
60
163
|
|
|
61
|
-
|
|
164
|
+
Point your AI agent at the printed path before asking it to author or
|
|
165
|
+
modify specs.
|
|
62
166
|
|
|
63
|
-
|
|
64
|
-
import { FileSpecStore, SqlServerSpecStore } from 'mythik/server';
|
|
65
|
-
```
|
|
167
|
+
## Related packages
|
|
66
168
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
- `mythik-
|
|
70
|
-
- `mythik-cli` provides the `mythik` command and programmatic CLI API.
|
|
71
|
-
- `mythik-server` turns an ApiSpec into a REST server.
|
|
72
|
-
|
|
73
|
-
React Native work is currently a repository preview track and is not part of the initial npm publish surface.
|
|
74
|
-
|
|
75
|
-
## AI Documentation
|
|
76
|
-
|
|
77
|
-
The npm package includes the documentation an AI agent needs to work with Mythik:
|
|
78
|
-
|
|
79
|
-
```text
|
|
80
|
-
node_modules/mythik/docs/llms.txt
|
|
81
|
-
node_modules/mythik/docs/consumer/ai-context.md
|
|
82
|
-
node_modules/mythik/docs/wiki/compiled/README.md
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
Use the CLI to locate or copy that documentation:
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
npx mythik docs path
|
|
89
|
-
npx mythik docs copy ./mythik-docs
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
## License
|
|
169
|
+
- [`mythik-react`](https://github.com/mldixdev/mythik/tree/main/packages/react#readme) — render the specs as a React app
|
|
170
|
+
- [`mythik-cli`](https://github.com/mldixdev/mythik/tree/main/packages/cli#readme) — author and patch specs from the command line (the AI-first surface)
|
|
171
|
+
- [`mythik-server`](https://github.com/mldixdev/mythik/tree/main/packages/server#readme) — declarative REST server from an `ApiSpec`
|
|
93
172
|
|
|
94
|
-
|
|
173
|
+
React Native work is a repository preview track and is not part of
|
|
174
|
+
the initial npm publish surface.
|
|
95
175
|
|
|
96
176
|
## Status
|
|
97
177
|
|
|
98
|
-
v0.1.
|
|
178
|
+
`v0.1.2` public release. APIs are documented for real-world feedback
|
|
179
|
+
as the framework evolves.
|
|
180
|
+
|
|
181
|
+
## License
|
|
182
|
+
|
|
183
|
+
Apache-2.0.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-engine.d.ts","sourceRoot":"","sources":["../../src/actions/transaction-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAiB,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,wBAAwB,CAAC;IACrC,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;
|
|
1
|
+
{"version":3,"file":"transaction-engine.d.ts","sourceRoot":"","sources":["../../src/actions/transaction-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAiB,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,wBAAwB,CAAC;IACrC,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAqDD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAwG1F"}
|
|
@@ -1,4 +1,43 @@
|
|
|
1
1
|
const DEFAULT_TIMEOUT = 10_000;
|
|
2
|
+
function isRecord(value) {
|
|
3
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
function firstString(...values) {
|
|
6
|
+
for (const value of values) {
|
|
7
|
+
if (typeof value === 'string' && value.length > 0)
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
function getErrorOwnFields(error) {
|
|
13
|
+
const fields = {};
|
|
14
|
+
for (const key of Object.getOwnPropertyNames(error)) {
|
|
15
|
+
if (key === 'message' || key === 'name' || key === 'stack')
|
|
16
|
+
continue;
|
|
17
|
+
fields[key] = error[key];
|
|
18
|
+
}
|
|
19
|
+
return fields;
|
|
20
|
+
}
|
|
21
|
+
function normalizeTransactionError(error, fallbackMessage = 'Transaction failed') {
|
|
22
|
+
if (error instanceof Error) {
|
|
23
|
+
return {
|
|
24
|
+
...getErrorOwnFields(error),
|
|
25
|
+
message: error.message || fallbackMessage,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (!isRecord(error)) {
|
|
29
|
+
return { message: fallbackMessage };
|
|
30
|
+
}
|
|
31
|
+
const data = isRecord(error.data) ? error.data : undefined;
|
|
32
|
+
const nestedError = data && isRecord(data.error) ? data.error : undefined;
|
|
33
|
+
const message = firstString(nestedError?.message, data?.message, error.message, fallbackMessage) ?? fallbackMessage;
|
|
34
|
+
const code = firstString(nestedError?.code, data?.code, error.code);
|
|
35
|
+
return {
|
|
36
|
+
...error,
|
|
37
|
+
...(code ? { code } : {}),
|
|
38
|
+
message,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
2
41
|
export function createTransactionEngine(config) {
|
|
3
42
|
const { store, dispatcher, resolve } = config;
|
|
4
43
|
// --- Queue: one transaction at a time ---
|
|
@@ -36,6 +75,7 @@ export function createTransactionEngine(config) {
|
|
|
36
75
|
await executeActions(txConfig.optimistic);
|
|
37
76
|
}
|
|
38
77
|
// Phase 4: confirm (with timeout)
|
|
78
|
+
let confirmError = null;
|
|
39
79
|
try {
|
|
40
80
|
// Clear any previous lastError so we can detect new ones
|
|
41
81
|
store.set('/ui/lastError', null);
|
|
@@ -46,7 +86,7 @@ export function createTransactionEngine(config) {
|
|
|
46
86
|
// Check if confirm resulted in an error stored by the fetch action
|
|
47
87
|
const lastError = store.get('/ui/lastError');
|
|
48
88
|
if (lastError) {
|
|
49
|
-
|
|
89
|
+
confirmError = normalizeTransactionError(lastError, 'Confirm phase failed');
|
|
50
90
|
throw new Error('Confirm phase failed');
|
|
51
91
|
}
|
|
52
92
|
// Phase 5a: onSuccess
|
|
@@ -57,12 +97,8 @@ export function createTransactionEngine(config) {
|
|
|
57
97
|
catch (err) {
|
|
58
98
|
// Rollback: restore snapshot atomically (single set, one re-render)
|
|
59
99
|
store.set('/', snapshot);
|
|
60
|
-
// Write error
|
|
61
|
-
|
|
62
|
-
store.set('/tx/error', {
|
|
63
|
-
message: err instanceof Error ? err.message : 'Transaction failed',
|
|
64
|
-
});
|
|
65
|
-
}
|
|
100
|
+
// Write error after rollback so root restore cannot erase details.
|
|
101
|
+
store.set('/tx/error', confirmError ?? normalizeTransactionError(err));
|
|
66
102
|
// Phase 5b: onError (after rollback)
|
|
67
103
|
if (txConfig.onError && txConfig.onError.length > 0) {
|
|
68
104
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-engine.js","sourceRoot":"","sources":["../../src/actions/transaction-engine.ts"],"names":[],"mappings":"AAcA,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,MAAM,UAAU,uBAAuB,CAAC,MAA+B;IACrE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAE9C,2CAA2C;IAC3C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,KAAK,GAA6D,EAAE,CAAC;IAE3E,SAAS,YAAY;QACnB,IAAI,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC1C,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC5B,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC1B,OAAO,CAAC,GAAG,EAAE;YACZ,OAAO,GAAG,KAAK,CAAC;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,sCAAsC;IACtC,KAAK,UAAU,cAAc,CAAC,OAAwB;QACpD,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,KAAK,UAAU,cAAc,CAAC,QAA2B;QACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,eAAe,CAAC;QAEpD,oCAAoC;QACpC,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,sDAAsD;QACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAErC,6CAA6C;QAC7C,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC5C,CAAC;QAED,kCAAkC;QAClC,IAAI,CAAC;YACH,yDAAyD;YACzD,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YAEjC,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAChC,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,CACpE;aACF,CAAC,CAAC;YAEH,mEAAmE;YACnE,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7C,IAAI,SAAS,EAAE,CAAC;gBACd,
|
|
1
|
+
{"version":3,"file":"transaction-engine.js","sourceRoot":"","sources":["../../src/actions/transaction-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/design/dna.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dna.d.ts","sourceRoot":"","sources":["../../src/design/dna.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"dna.d.ts","sourceRoot":"","sources":["../../src/design/dna.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAqCzE;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAkMrD"}
|
package/dist/design/dna.js
CHANGED
|
@@ -7,6 +7,11 @@ function roundTo(n, decimals) {
|
|
|
7
7
|
const factor = Math.pow(10, decimals);
|
|
8
8
|
return Math.round(n * factor) / factor;
|
|
9
9
|
}
|
|
10
|
+
function normalizeDnaNumericSeed(value, fallback) {
|
|
11
|
+
if (typeof value !== 'number')
|
|
12
|
+
return fallback;
|
|
13
|
+
return value > 1 ? value / 100 : value;
|
|
14
|
+
}
|
|
10
15
|
const HARMONY_OFFSETS = {
|
|
11
16
|
complementary: 180,
|
|
12
17
|
analogous: 50,
|
|
@@ -24,11 +29,11 @@ const MOTION_PRESETS = {
|
|
|
24
29
|
* Uses OKLCH color math for perceptually uniform palette generation.
|
|
25
30
|
*/
|
|
26
31
|
export function deriveDna(seed) {
|
|
27
|
-
const roundness = seed.roundness
|
|
28
|
-
const density = seed.density
|
|
29
|
-
const depth = seed.depth
|
|
32
|
+
const roundness = normalizeDnaNumericSeed(seed.roundness, 0.5);
|
|
33
|
+
const density = normalizeDnaNumericSeed(seed.density, 0.5);
|
|
34
|
+
const depth = normalizeDnaNumericSeed(seed.depth, 0.5);
|
|
30
35
|
const motionPreset = seed.motion ?? 'gentle';
|
|
31
|
-
const formality = seed.formality
|
|
36
|
+
const formality = normalizeDnaNumericSeed(seed.formality, 0.5);
|
|
32
37
|
const harmony = seed.harmony ?? 'complementary';
|
|
33
38
|
const neutralMode = seed.neutral ?? 'natural';
|
|
34
39
|
// --- Colors ---
|
package/dist/design/dna.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dna.js","sourceRoot":"","sources":["../../src/design/dna.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEpG,SAAS,IAAI,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAC3C,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,OAAO,CAAC,CAAS,EAAE,QAAgB;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AACzC,CAAC;AAED,MAAM,eAAe,GAA2B;IAC9C,aAAa,EAAE,GAAG;IAClB,SAAS,EAAE,EAAE;IACb,OAAO,EAAE,GAAG;IACZ,qBAAqB,EAAE,GAAG;CAC3B,CAAC;AAEF,MAAM,cAAc,GAKf;IACH,KAAK,EAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE;IACtJ,MAAM,EAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE;IACnJ,MAAM,EAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IAC/I,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,mCAAmC,EAAE;CAC7K,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"dna.js","sourceRoot":"","sources":["../../src/design/dna.ts"],"names":[],"mappings":"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"}
|
package/dist/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAyB,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACtG,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOvC,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,0EAA0E;IAC1E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uFAAuF;IACvF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE;QACR,QAAQ,EAAE,QAAQ,CAAC;QACnB,UAAU,EAAE,UAAU,CAAC;QACvB,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK;YAAE,KAAK,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,eAAe,EAAE,CAAA;SAAE,CAAC;QAC5E,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,yFAAyF;IACzF,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,6IAA6I;IAC7I,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACzD;AAED,wBAAgB,YAAY,CAAC,MAAM,GAAE,YAAiB,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAyB,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACtG,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOvC,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,0EAA0E;IAC1E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uFAAuF;IACvF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE;QACR,QAAQ,EAAE,QAAQ,CAAC;QACnB,UAAU,EAAE,UAAU,CAAC;QACvB,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK;YAAE,KAAK,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,eAAe,EAAE,CAAA;SAAE,CAAC;QAC5E,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,yFAAyF;IACzF,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,6IAA6I;IAC7I,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACzD;AAED,wBAAgB,YAAY,CAAC,MAAM,GAAE,YAAiB,GAAG,cAAc,CA+PtE"}
|
package/dist/factory.js
CHANGED
|
@@ -142,19 +142,7 @@ export function createMythik(config = {}) {
|
|
|
142
142
|
// Deep merge with previously-applied raw tokens — enables partial updates
|
|
143
143
|
currentRawTokens = deepMergeTokens(currentRawTokens, rawTokens);
|
|
144
144
|
}
|
|
145
|
-
|
|
146
|
-
const normalized = { ...currentRawTokens };
|
|
147
|
-
if (normalized.dna && typeof normalized.dna === 'object') {
|
|
148
|
-
const dna = { ...normalized.dna };
|
|
149
|
-
const numericSeeds = ['roundness', 'density', 'depth', 'formality'];
|
|
150
|
-
for (const key of numericSeeds) {
|
|
151
|
-
if (typeof dna[key] === 'number' && dna[key] > 1) {
|
|
152
|
-
dna[key] = dna[key] / 100;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
normalized.dna = dna;
|
|
156
|
-
}
|
|
157
|
-
resolvedTokens = resolveDeepTokens(normalized);
|
|
145
|
+
resolvedTokens = resolveDeepTokens(currentRawTokens);
|
|
158
146
|
injectColorTokens(resolvedTokens);
|
|
159
147
|
injectIconRenderer(resolvedTokens);
|
|
160
148
|
resolver = buildResolver();
|
package/dist/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-spec-validator.d.ts","sourceRoot":"","sources":["../../src/security/api-spec-validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;CAClC;
|
|
1
|
+
{"version":3,"file":"api-spec-validator.d.ts","sourceRoot":"","sources":["../../src/security/api-spec-validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;CAClC;AAgGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,uBAAuB,CA4StE"}
|
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
import { isValidIdentifier } from './identifier-guard.js';
|
|
2
2
|
const DANGEROUS_SQL_KEYWORDS = /\b(SELECT|INSERT|UPDATE|DELETE|DROP|ALTER|EXEC|EXECUTE|UNION|INTO)\b/i;
|
|
3
3
|
const SQL_COMMENTS = /(--|\/\*)/;
|
|
4
|
+
const SCOPE_COUNT_MACRO_PATTERN = /{{\s*scope(Where|And)(?::\s*([^}\s]+))?\s*}}/g;
|
|
5
|
+
function getScopeCountMacroAliases(sql) {
|
|
6
|
+
const aliases = [];
|
|
7
|
+
SCOPE_COUNT_MACRO_PATTERN.lastIndex = 0;
|
|
8
|
+
for (const match of sql.matchAll(SCOPE_COUNT_MACRO_PATTERN)) {
|
|
9
|
+
if (match[2])
|
|
10
|
+
aliases.push(match[2]);
|
|
11
|
+
}
|
|
12
|
+
return aliases;
|
|
13
|
+
}
|
|
14
|
+
function hasScopeCountMacro(sql) {
|
|
15
|
+
SCOPE_COUNT_MACRO_PATTERN.lastIndex = 0;
|
|
16
|
+
return SCOPE_COUNT_MACRO_PATTERN.test(sql);
|
|
17
|
+
}
|
|
18
|
+
function endpointHasActiveScopeFilter(endpoint, auth) {
|
|
19
|
+
return !!auth?.scopeFilter && endpoint.scopeFilter !== undefined && endpoint.scopeFilter !== false;
|
|
20
|
+
}
|
|
4
21
|
/**
|
|
5
22
|
* Lint rule: spec-crud-id-collision — error when `endpoint.path` ends with `/:id`
|
|
6
23
|
* AND the same node has `crud: {...}` present.
|
|
@@ -206,6 +223,21 @@ export function validateApiSpec(spec) {
|
|
|
206
223
|
errors.push(`endpoint "${name}": invalid SQL identifier "${sf.column}" in scopeFilter.column`);
|
|
207
224
|
}
|
|
208
225
|
}
|
|
226
|
+
if (typeof endpoint.count === 'string') {
|
|
227
|
+
const usesScopeFilter = endpointHasActiveScopeFilter(endpoint, s.auth);
|
|
228
|
+
const usesScopeMacro = hasScopeCountMacro(endpoint.count);
|
|
229
|
+
if (usesScopeFilter && !usesScopeMacro) {
|
|
230
|
+
errors.push(`endpoint "${name}": custom "count" with scopeFilter must include {{scopeWhere}} or {{scopeAnd}} so Mythik can expand scope and bypass-role behavior`);
|
|
231
|
+
}
|
|
232
|
+
if (!usesScopeFilter && usesScopeMacro) {
|
|
233
|
+
errors.push(`endpoint "${name}": custom "count" uses a scope macro but scopeFilter is not enabled for this endpoint`);
|
|
234
|
+
}
|
|
235
|
+
for (const alias of getScopeCountMacroAliases(endpoint.count)) {
|
|
236
|
+
if (!isValidIdentifier(alias)) {
|
|
237
|
+
errors.push(`endpoint "${name}": invalid scope macro alias "${alias}" in custom "count"`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
209
241
|
}
|
|
210
242
|
}
|
|
211
243
|
// Auth
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-spec-validator.js","sourceRoot":"","sources":["../../src/security/api-spec-validator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api-spec-validator.js","sourceRoot":"","sources":["../../src/security/api-spec-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -134,6 +134,7 @@ The `PUT` endpoint at `/api/items/:id` combined with the framework's auto-append
|
|
|
134
134
|
| `handler` | string | Handler file name (mutually exclusive with `query`) |
|
|
135
135
|
| `crud` | object | `{ table, primaryKey, insertable, updatable }` |
|
|
136
136
|
| `pagination` | `"offset"` or `false` | Enable offset pagination |
|
|
137
|
+
| `count` | string | Optional custom `_total` query for offset pagination. Prefer generated counts. |
|
|
137
138
|
| `totals` | string[] | Aggregate expressions: `"SUM:column"`, `"COUNT:*"` |
|
|
138
139
|
| `params` | object | Parameter definitions (see below) |
|
|
139
140
|
| `policy` | string | Reference to `auth.policies` key, or `"public"` |
|
|
@@ -142,6 +143,12 @@ The `PUT` endpoint at `/api/items/:id` combined with the framework's auto-append
|
|
|
142
143
|
|
|
143
144
|
**Param properties:** `type` (`int`/`string`/`float`/`date`/`boolean`), `required?`, `default?`, `max?`, `source?` (`query`/`path`/`body`).
|
|
144
145
|
|
|
146
|
+
`pagination: "offset"` is compatible with `scopeFilter`. For framework-generated counts, Mythik applies the scope filter to the query source before wrapping it in `COUNT(*)`, so `total` reflects the scoped tenant/role slice. Prefer generated counts. If custom `endpoint.count` is truly needed with `scopeFilter`, include `{{scopeWhere[:alias]}}` when the count has no `WHERE`, or `{{scopeAnd[:alias]}}` when it already has one. Mythik expands the macro to the correct scope predicate, or to an empty string for bypass roles. Other custom count SQL is left verbatim; use `:alias` for JOIN/subquery counts so the scope column is qualified.
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
"count": "SELECT COUNT(*) as _total FROM Orders o WHERE o.status = @status {{scopeAnd:o}}"
|
|
150
|
+
```
|
|
151
|
+
|
|
145
152
|
**Audit properties:** `createdBy?`, `createdAt?`, `updatedBy?`, `updatedAt?` (column names), `timezone?` (IANA string). All optional. Values override client-sent (prevents spoofing). Without timezone → UTC.
|
|
146
153
|
|
|
147
154
|
### Auth
|
|
@@ -191,5 +198,6 @@ The `PUT` endpoint at `/api/items/:id` combined with the framework's auto-append
|
|
|
191
198
|
- Audit values override client-sent values — prevents spoofing of created_by/updated_at
|
|
192
199
|
- `policy: "public"` skips auth — use for health checks and public endpoints only
|
|
193
200
|
- ScopeFilter `bypassRoles` lets admin roles see all data — other roles see only their scope
|
|
201
|
+
- Generated offset-pagination totals are scoped before aggregation when `scopeFilter` is enabled
|
|
194
202
|
- Provider queries use `@username` parameter and must return `val` column
|
|
195
203
|
- Param `source` defaults to auto-detect: path first, body for non-GET, query as fallback
|
|
@@ -146,7 +146,7 @@ Implementation: `packages/core/src/expressions/handlers/template.ts`.
|
|
|
146
146
|
- **`before`** — eager at dispatch start. Side-effects that must NOT be rolled back (closeModal, navigate). Runs before any network call (reference-doc rule 13).
|
|
147
147
|
- **`optimistic`** — eager at dispatch. State changes applied synchronously; UI reflects the change immediately. Rolled back on `onError`.
|
|
148
148
|
- **`onSuccess`** — eager at network resolve. Response available in resolver context. UPDATE transactions typically omit `onSuccess` — the optimistic state is already correct; re-fetch causes visible flash (reference-doc rule 14).
|
|
149
|
-
- **`onError`** — eager at network reject. Optimistic state reverted via snapshot BEFORE this phase runs. Error available in resolver context.
|
|
149
|
+
- **`onError`** — eager at network reject. Optimistic state reverted via snapshot BEFORE this phase runs. Error available in resolver context. For `fetch` confirm HTTP failures, `/tx/error` preserves backend details after rollback when available: HTTP `status`, raw `data`, nested `error.code`, and the best message from nested `error.message`, `data.message`, or fallback error text.
|
|
150
150
|
|
|
151
151
|
**Internal phase (not consumer-visible):** a `snapshot` phase captures the state immediately before `optimistic`, enabling rollback. Consumers never invoke `snapshot` directly.
|
|
152
152
|
|
|
@@ -600,7 +600,9 @@ For role `admin`, the filter is NOT applied (admin sees all rows). Any other rol
|
|
|
600
600
|
|
|
601
601
|
**Security invariant:** `scopeFilter` applies to UPDATE and DELETE, not just SELECT. A user cannot update or delete rows outside their scope — the filter is appended to the WHERE clause of those queries. Combined with audit fields (§3.1), this gives a defense-in-depth posture for multi-tenant apps.
|
|
602
602
|
|
|
603
|
-
|
|
603
|
+
For query endpoints with `pagination: "offset"`, framework-generated totals are scoped before aggregation: Mythik wraps the original query with the scope filter first, then performs `COUNT(*)` over that scoped source. This keeps `total` aligned with the rows the user is allowed to see. Custom `endpoint.count` SQL is an advanced escape hatch. When custom count SQL is used with `scopeFilter`, it must include a scope macro: `{{scopeWhere[:alias]}}` if the count has no `WHERE`, or `{{scopeAnd[:alias]}}` if it already has one. Mythik expands the macro to the correct predicate and removes it for bypass roles. Mythik does not otherwise rewrite custom count SQL; use `:alias` for JOIN/subquery counts so the generated scope predicate is qualified.
|
|
604
|
+
|
|
605
|
+
Implementation: `packages/server/src/server.ts` (search `buildScopeWhereClause` for all scope-filter call sites).
|
|
604
606
|
|
|
605
607
|
---
|
|
606
608
|
|
|
@@ -15,12 +15,12 @@ Public npm package names are unscoped:
|
|
|
15
15
|
|
|
16
16
|
- Runtime/core: `mythik`
|
|
17
17
|
- Browser-safe server helpers from core: `mythik/server`
|
|
18
|
-
- React host/runtime: `mythik-react`
|
|
19
|
-
- CLI binary package: `mythik-cli` (binary command: `mythik`)
|
|
20
|
-
- Programmatic CLI API: `mythik-cli/api`
|
|
21
|
-
- Node/Express server package: `mythik-server`
|
|
22
|
-
|
|
23
|
-
Use `npm install mythik mythik-react` for a React app, `npm install -D mythik-cli` for CLI workflows, and add `mythik-server` only when building a Mythik-backed Node server. The `mythik` npm package bundles the AI documentation corpus under `node_modules/mythik/docs`; use `mythik docs path` to locate it after install or `mythik docs copy ./mythik-docs` to copy it into the current project.
|
|
18
|
+
- React host/runtime: `mythik-react`
|
|
19
|
+
- CLI binary package: `mythik-cli` (binary command: `mythik`)
|
|
20
|
+
- Programmatic CLI API: `mythik-cli/api`
|
|
21
|
+
- Node/Express server package: `mythik-server`
|
|
22
|
+
|
|
23
|
+
Use `npm install mythik mythik-react` for a React app, `npm install -D mythik-cli` for CLI workflows, and add `mythik-server` only when building a Mythik-backed Node server. The `mythik` npm package bundles the AI documentation corpus under `node_modules/mythik/docs`; use `mythik docs path` to locate it after install or `mythik docs copy ./mythik-docs` to copy it into the current project.
|
|
24
24
|
|
|
25
25
|
## Spec Structure
|
|
26
26
|
|
|
@@ -85,12 +85,12 @@ Every screen is a flat tree: `root` ID + `elements` map + optional `initialActio
|
|
|
85
85
|
|
|
86
86
|
## CLI Workflow
|
|
87
87
|
|
|
88
|
-
```bash
|
|
89
|
-
mythik docs path # Locate bundled AI documentation
|
|
90
|
-
mythik docs copy ./mythik-docs # Copy docs for an AI agent / local review
|
|
91
|
-
mythik manifest <screen> # See structural tree
|
|
92
|
-
mythik elements <screen> <id1,id2> # Get element details
|
|
93
|
-
mythik patch <screen> --from-file patch.json # Apply RFC 6902 patches
|
|
88
|
+
```bash
|
|
89
|
+
mythik docs path # Locate bundled AI documentation
|
|
90
|
+
mythik docs copy ./mythik-docs # Copy docs for an AI agent / local review
|
|
91
|
+
mythik manifest <screen> # See structural tree
|
|
92
|
+
mythik elements <screen> <id1,id2> # Get element details
|
|
93
|
+
mythik patch <screen> --from-file patch.json # Apply RFC 6902 patches
|
|
94
94
|
mythik pull <screen> # Export full spec for backup/review
|
|
95
95
|
mythik push <screen> # Create or intentionally replace a full spec
|
|
96
96
|
mythik validate <screen> # Validate spec
|
|
@@ -434,7 +434,7 @@ Use `transaction` for CRUD operations. Instant UI → server confirm → auto-ro
|
|
|
434
434
|
- `optimistic` — data changes, ROLLED BACK on error (setState for data + form reset)
|
|
435
435
|
- `confirm` — network request, determines success. Write to `/tx/result` via target
|
|
436
436
|
- `onSuccess` — post-success sync (re-fetch). `$state: "/tx/result"` reads confirm result
|
|
437
|
-
- `onError` — runs after rollback. `$state: "/tx/error"` has `{ message }`
|
|
437
|
+
- `onError` — runs after rollback. `$state: "/tx/error"` has `{ message }`; fetch-based confirm failures preserve backend details when available (`status`, `data`, nested `error.code`, nested `error.message`)
|
|
438
438
|
|
|
439
439
|
**CRUD variations:**
|
|
440
440
|
|
|
@@ -962,6 +962,8 @@ Tokens go beyond colors. Every visual property reads from tokens — shape, typo
|
|
|
962
962
|
| `motion` | `fluid` \| `snappy` \| `gentle` \| `energetic` | Animation personality |
|
|
963
963
|
| `formality` | 0–1 | Typography: 0=casual (Inter) → 1=formal (Playfair Display) |
|
|
964
964
|
|
|
965
|
+
Use `0–1` numeric DNA values in generated specs. The runtime accepts legacy `0–100` values for `roundness`, `density`, `depth`, and `formality` by normalizing values greater than `1` with `/100`, but canonical specs should emit `0.7`, not `70`.
|
|
966
|
+
|
|
965
967
|
**Three control levels:**
|
|
966
968
|
|
|
967
969
|
Level 1 — Minimal: `"dna": { "primary": "#0D9488" }` → full identity from 1 color.
|
|
@@ -1370,5 +1372,8 @@ When the framework changes the schema in a future version, this section will gai
|
|
|
1370
1372
|
82. Use `editorSessions.<id>.persistence` plus `editorSave` for generic editor document persistence. The AI should not hand-compose `transaction` + `editorMarkSaved` for normal editor saves. `editorSave` captures the tracked paths snapshot, persists it through the host fetcher with URL-guard checks, and marks only the sent snapshot as saved after success. Failed saves keep `dirty: true` and expose save metadata under `/ui/editorSessions/<id>`.
|
|
1371
1373
|
83. Use `navigation.editorSessionGuard` for generic unsaved-changes protection in app specs instead of hand-rolled JSON dirty checks. Configure `sessions`, render your own JSON modal from `/ui/navigationGuard/pending`, call `navigationGuardCancel`, `navigationGuardSaveAndProceed`, `navigationGuardProceed`, or `navigationGuardDiscardAndProceed`, and keep `pendingPath` under a consumer-owned `/ui/<segment>` path that does not collide with reserved framework paths. `navigationGuardSaveAndProceed` is the normal save-first UX for persisted editor sessions; `navigationGuardProceed` is a low-level non-destructive retry that only resumes after the pending editor sessions are already clean; use `navigationGuardDiscardAndProceed` when the user explicitly chooses to abandon unsaved tracked-path changes.
|
|
1372
1374
|
84. In React apps without auth framework fetch, pass `fetcher` to `MythikApp` when editor sessions use `editorSave` or `navigationGuardSaveAndProceed`. Auth-enabled apps continue to use the framework fetch produced by auth interceptors. Do not route save-and-continue through `/ui/lastError` or a hand-composed fetch action; the editor session engine owns save metadata under `/ui/editorSessions/<id>`.
|
|
1373
|
-
85. For existing spec edits, the required AI loop is `mythik manifest` -> `mythik elements` -> `mythik patch --from-file` -> verify. Manifest tells you the structure; elements gives the exact JSON you are changing; patch is the validated write path. Do not skip directly to full-spec `pull`/rewrite/push for a local change, do not mutate DB rows manually, and do not call `SpecStore.save()` from app code. Use `push` for new specs or intentional full replacement only.
|
|
1374
|
-
86. Mythik's AI documentation ships with the `mythik` npm package. Before generating or modifying specs, locate it with `mythik docs path` and start from `docs/llms.txt`, `docs/consumer/ai-context.md`, and `docs/wiki/compiled/README.md`. Use `mythik docs copy ./mythik-docs` when a project-local copy is easier to hand to an AI agent.
|
|
1375
|
+
85. For existing spec edits, the required AI loop is `mythik manifest` -> `mythik elements` -> `mythik patch --from-file` -> verify. Manifest tells you the structure; elements gives the exact JSON you are changing; patch is the validated write path. Do not skip directly to full-spec `pull`/rewrite/push for a local change, do not mutate DB rows manually, and do not call `SpecStore.save()` from app code. Use `push` for new specs or intentional full replacement only.
|
|
1376
|
+
86. Mythik's AI documentation ships with the `mythik` npm package. Before generating or modifying specs, locate it with `mythik docs path` and start from `docs/llms.txt`, `docs/consumer/ai-context.md`, and `docs/wiki/compiled/README.md`. Use `mythik docs copy ./mythik-docs` when a project-local copy is easier to hand to an AI agent.
|
|
1377
|
+
87. DNA numeric seeds (`roundness`, `density`, `depth`, `formality`) are canonical `0–1` values. Generate `0.7`, not `70`. The runtime tolerates legacy `0–100` values by normalizing any numeric seed greater than `1` with `/100` during DNA derivation, including initial AppSpec load and runtime `updateTokens`.
|
|
1378
|
+
88. API query endpoints can combine `pagination: "offset"` with `scopeFilter`. For generated counts, Mythik applies the scope filter to the source query before `COUNT(*)`, so paginated totals remain tenant-scoped. Prefer generated counts. If a custom `endpoint.count` is truly needed with `scopeFilter`, include `{{scopeWhere[:alias]}}` or `{{scopeAnd[:alias]}}`; Mythik expands the macro to the correct scope predicate and removes it for bypass roles. Other custom count SQL is left verbatim. Use `:alias` for JOIN/subquery counts, and do not reference internal scope params directly.
|
|
1379
|
+
89. Transaction `confirm` failures from `fetch` preserve backend error details for `onError`. Read `/tx/error/message` for the best available message; when the backend returns `{ error: { code, message } }`, Mythik keeps that message, `code`, HTTP `status`, and raw `data` after rollback. Do not parse `/ui/lastError` from transaction specs.
|
|
@@ -11,16 +11,16 @@ When asked to create or modify UI, produce a JSON **Spec** following the structu
|
|
|
11
11
|
|
|
12
12
|
## CLI — Spec Modification via Mythik CLI
|
|
13
13
|
|
|
14
|
-
Use the `mythik` CLI to read and modify specs stored in Supabase (or other stores).
|
|
15
|
-
|
|
16
|
-
For AI agents, locate the bundled Mythik documentation before generating or changing specs:
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
mythik docs path
|
|
20
|
-
mythik docs copy ./mythik-docs
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
The `mythik` npm package ships `docs/llms.txt`, canonical `docs/consumer/*`, and the compiled `docs/wiki/compiled/*` wiki so the framework contract is available after install.
|
|
14
|
+
Use the `mythik` CLI to read and modify specs stored in Supabase (or other stores).
|
|
15
|
+
|
|
16
|
+
For AI agents, locate the bundled Mythik documentation before generating or changing specs:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
mythik docs path
|
|
20
|
+
mythik docs copy ./mythik-docs
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The `mythik` npm package ships `docs/llms.txt`, canonical `docs/consumer/*`, and the compiled `docs/wiki/compiled/*` wiki so the framework contract is available after install.
|
|
24
24
|
|
|
25
25
|
### Commands
|
|
26
26
|
|
|
@@ -912,7 +912,7 @@ The action executes in the background. The next action in the chain starts immed
|
|
|
912
912
|
| `uploadFile` | `{ bucket, target, path? }` | Upload file(s) to storage via StorageAdapter. Writes URL(s) to target path |
|
|
913
913
|
| `deleteFile` | `{ path, bucket }` | Delete file from storage |
|
|
914
914
|
| `export` | `{ source, columns, filename, format? }` | Export data as CSV (built-in) or via adapter (XLSX/PDF). Triggers download |
|
|
915
|
-
| `updateTokens` | `{ dna?: {...}, identity?: {...}, _replace?: true }` | Hot-swap design tokens at runtime. Deep-merges by default; `_replace: true` fully replaces. Persists raw config to `/tokens/raw`. Numeric DNA seeds > 1 auto-normalized (÷100) |
|
|
915
|
+
| `updateTokens` | `{ dna?: {...}, identity?: {...}, _replace?: true }` | Hot-swap design tokens at runtime. Deep-merges by default; `_replace: true` fully replaces. Persists raw config to `/tokens/raw`. Numeric DNA seeds > 1 auto-normalized (÷100) during DNA derivation |
|
|
916
916
|
|
|
917
917
|
### fetch Action Details
|
|
918
918
|
|
|
@@ -971,7 +971,7 @@ Use `transaction` for CRUD operations that need instant UI feedback. The framewo
|
|
|
971
971
|
| `setState` (form reset) | `optimistic` | Restore form so user can retry |
|
|
972
972
|
| `navigate` | `before` | Stay on page, show error there |
|
|
973
973
|
|
|
974
|
-
**Confirm result access:** The `fetch` in `confirm` can write to `/tx/result` via `target`. `onSuccess` reads it with `{ "$state": "/tx/result" }`. On error, `/tx/error` contains `{ message }
|
|
974
|
+
**Confirm result access:** The `fetch` in `confirm` can write to `/tx/result` via `target`. `onSuccess` reads it with `{ "$state": "/tx/result" }`. On error, `/tx/error` contains `{ message }`; fetch-based HTTP failures preserve backend details when available (`status`, `data`, nested `error.code`, nested `error.message`). Both are cleaned up automatically.
|
|
975
975
|
|
|
976
976
|
**Timeout:** Default 10 seconds. Override with `timeout` (ms):
|
|
977
977
|
```json
|
|
@@ -1985,7 +1985,7 @@ Reference tokens or write custom values:
|
|
|
1985
1985
|
98. **Use DNA seeds for app identity** — define `tokens.dna` in AppSpec with 1-8 seed values. The framework derives all visual tokens (colors via OKLCH tonal palette, shape, typography, spacing, elevation, motion, opacity) plus auto dark mode. No manual color palette or radius scale needed — DNA generates it from `{ "primary": "#0D9488" }`
|
|
1986
1986
|
99. **Three-layer token resolution** — Framework DEFAULTS (always present) → DNA derivation (if `dna` seed exists) → Manual overrides (explicit `tokens.*` values always win). Specs without tokens use defaults. Specs with only DNA get full derived identity. Specs with DNA + overrides get derived base with surgical customization
|
|
1987
1987
|
100. **`$token` auto-converts elevation to CSS** — `{ "$token": "elevation.md" }` returns a CSS `boxShadow` string on web (e.g., `"0px 4px 12px rgba(0,0,0,0.15)"`). On RN, primitives handle elevation internally via native shadow props. No manual conversion needed
|
|
1988
|
-
101. **`updateTokens` for runtime token changes** — `{ "action": "updateTokens", "params": { "dna": { "primary": "#F97316" } } }` hot-swaps all tokens without page reload. All primitives re-render with new values. Numeric DNA seeds > 1 are auto-normalized (divided by 100 for 0-100 slider compatibility)
|
|
1988
|
+
101. **`updateTokens` for runtime token changes** — `{ "action": "updateTokens", "params": { "dna": { "primary": "#F97316" } } }` hot-swaps all tokens without page reload. All primitives re-render with new values. Numeric DNA seeds > 1 are auto-normalized during DNA derivation (divided by 100 for 0-100 legacy/slider compatibility)
|
|
1989
1989
|
102. **Font loading is the project's responsibility** — DNA derives font family names (Inter, DM Sans, Playfair Display, Georgia, Source Sans) but does NOT load them. Web: include Google Fonts link or `@font-face`. RN: use `expo-font`. Without loading, browser falls back to system fonts
|
|
1990
1990
|
103. **`useDesignTokens` replaces `useThemeColors` in primitives** — all 35 migrated primitives (18 web + 17 RN) use `useDesignTokens` internally. It extracts colors, shape, typography, spacing, elevation, motion, and opacity with framework defaults as fallback. `useThemeColors` is deprecated but still works as wrapper
|
|
1991
1991
|
104. **`mythik tokens` inspects DNA derivation** — `mythik tokens --dna '{"primary":"#0D9488"}' --json` shows the full resolved token set. Use for debugging and verifying what DNA generates before applying to a spec
|
|
@@ -2010,7 +2010,7 @@ Reference tokens or write custom values:
|
|
|
2010
2010
|
123. **Custom checkbox is surface-aware** — Replaced native `<input type="checkbox">` with custom div+SVG. Unchecked: uses `t.surface.input` styles. Checked: fills with primary, preserves surface border (bold keeps 2px, neo keeps shadow). Focus uses `t.surface.inputFocus`. Hidden input preserved for accessibility
|
|
2011
2011
|
124. **Elevation and border resolvers ready but not yet consumed** — `resolveElevationStyle()` (diffuse/solid/color/none) and `resolveBorderStyle()` defined, tested, exported, values in `t.identity.*`. Primitives don't consume them yet — reserved for future phases when elevation identity overrides surface defaults
|
|
2012
2012
|
125. **`colors.background` is the STATIC base page background** — Distinct from `colors.surface` (card/component bg). Returns `#f8fafc` light gray (or dark-mode equivalent via `/preferences/theme`), but does NOT respond to preset `identity.colorScheme` changes. Safe for light-only apps. For preset-aware layouts (apps that support dark-surface or colored-surface presets), use `backgroundCSS` instead — see rule 155. Visible failure mode: dark preset with layout using `colors.background` produces a light frame around dark content
|
|
2013
|
-
126. **`updateTokens` does deep merge — partial updates work** — Calling `updateTokens({ dna: { roundness:
|
|
2013
|
+
126. **`updateTokens` does deep merge — partial updates work** — Calling `updateTokens({ dna: { roundness: 0.5 } })` merges with previously-applied tokens instead of replacing them. Previous primary color, surface settings, etc. persist. Enables live playground controls where each slider updates only its dimension. Legacy 0-100 values are tolerated by runtime normalization, but generated specs should use canonical 0-1 values.
|
|
2014
2014
|
127. **`deepMergeTokens` exported from core** — `import { deepMergeTokens } from 'mythik'`. Recursively merges objects (arrays and non-objects replace, objects deep-merge). Used internally by `updateTokens`
|
|
2015
2015
|
128. **Depth and angle are serializer concerns, not data concerns** — `identity.depth` (0-1) and `identity.shadowAngle` (0-360°) are NOT in `StructuredSurfaceStyleProps`. Shadows store raw `magnitude`/`blur`/`opacity`. The serializer (`surfaceToCSS`/`surfaceToRN`) applies `depthScale()` and sin/cos angle rotation when converting to platform-specific format. This keeps the structured data pure and reusable
|
|
2016
2016
|
129. **`resolveIdentity<T>()` — unified orchestrator** — Single function in core orchestrates: resolveSchemeColors → generateTonalStep → resolveSurfaceStyles → serializer(T) → resolveColorWeight → resolveRadiusPattern. Accepts a `SurfaceSerializer<T>` function — each platform passes its own (surfaceToCSS, surfaceToRN). Returns `{ schemeColors, surface: T, colorWeight, radius }`. Web/RN hooks call this one function instead of 6+ manual steps
|
|
@@ -2729,6 +2729,8 @@ Define in `tokens.dna` at the AppSpec level. The framework derives ALL token cat
|
|
|
2729
2729
|
| `motion` | `fluid` \| `snappy` \| `gentle` \| `energetic` | `gentle` | Animation duration, spring, stagger |
|
|
2730
2730
|
| `formality` | 0–1 | 0.5 | Typography: 5 font tiers. Body: Inter → Space Grotesk → Source Sans 3 → Lora → Merriweather. Heading: Inter → Space Grotesk → DM Sans → Lora → Playfair Display. Also drives continuous letterSpacing (0 → 0.03em), headingLetterSpacing (0 → -0.02em), lineHeight ratio (1.45 → 1.6), bold weight (700 → 800) |
|
|
2731
2731
|
|
|
2732
|
+
Numeric seeds are canonical `0–1` values. Generate `0.7`, not `70`. For backward compatibility with legacy exports and percentage-style inputs, values greater than `1` are auto-normalized by dividing by `100` during DNA derivation, so both initial AppSpec load and runtime `updateTokens` resolve consistently.
|
|
2733
|
+
|
|
2732
2734
|
### Three Control Levels
|
|
2733
2735
|
|
|
2734
2736
|
**Level 1 — Just a color:** `"dna": { "primary": "#0D9488" }` → full coherent identity.
|
|
@@ -2764,7 +2766,7 @@ Use `updateTokens` action to change tokens without page reload:
|
|
|
2764
2766
|
```json
|
|
2765
2767
|
{ "action": "updateTokens", "params": { "dna": { "primary": "#F97316", "roundness": 0.9 } } }
|
|
2766
2768
|
```
|
|
2767
|
-
All primitives re-render with new tokens. Numeric seeds > 1 are auto-divided by 100 (slider 0-100 compatibility).
|
|
2769
|
+
All primitives re-render with new tokens. Numeric seeds > 1 are auto-divided by 100 during DNA derivation (legacy slider 0-100 compatibility).
|
|
2768
2770
|
|
|
2769
2771
|
### Presets System
|
|
2770
2772
|
|
|
@@ -3041,7 +3043,7 @@ The current background and motion stack combines app-level `LayerBackground`, an
|
|
|
3041
3043
|
|
|
3042
3044
|
211. **`useShapeAnimations(ref, animations, options)` — Layer 3 web runner** — Exported from `mythik-react` via `packages/react/src/animation/useShapeAnimations.ts`. React hook for SVG-child animations (`<path>`/`<circle>`/`<rect>`/`<g>`…). Consumes the same `ElementAnimations` contract as `useElementAnimations` but narrowed to the `ambient` trigger ONLY; shape children have no hover/focus/active contract and no distinct mount ceremony. Attaches CSS animations via `el.style.animation` (surgical, preserves other inline styles); keyframes register once through the CSSOM singleton (zero `dangerouslySetInnerHTML`) and dedupe by hash so multiple shape instances with the same recipe share one CSS rule. Dev mode warns when non-ambient triggers are passed. Production silently ignores them. `options.recipes` SHOULD be stable for useMemo performance.
|
|
3043
3045
|
|
|
3044
|
-
212. **`useShapeAnimations(animations, options)` — Layer 3 RN runner** — Repository-preview implementation in `packages/react-native/src/animation/useShapeAnimations.ts`; it is not part of the initial npm publish surface. Reanimated parity of rule 211: returns `{ animatedProps }` that the consumer spreads onto `Animated.createAnimatedComponent(Path)` from `react-native-svg`. Uses the `HARD_PER_TRIGGER` (=6) fixed-pool `useSharedValue` pattern (`useSharedValueArray` helper, also exported) so React Hook count stays stable. Reuses `composeRNStyle(contributions, interpolate, interpolateColor)` shared with `useElementAnimations` — single composition pipeline for View-style and animated SVG props. Relies on `react-native-svg` v13+ auto-translating the transform array into SVG `transform="..."` strings. Same dev-mode non-ambient-trigger warning as the web hook.
|
|
3046
|
+
212. **`useShapeAnimations(animations, options)` — Layer 3 RN runner** — Repository-preview implementation in `packages/react-native/src/animation/useShapeAnimations.ts`; it is not part of the initial npm publish surface. Reanimated parity of rule 211: returns `{ animatedProps }` that the consumer spreads onto `Animated.createAnimatedComponent(Path)` from `react-native-svg`. Uses the `HARD_PER_TRIGGER` (=6) fixed-pool `useSharedValue` pattern (`useSharedValueArray` helper, also exported) so React Hook count stays stable. Reuses `composeRNStyle(contributions, interpolate, interpolateColor)` shared with `useElementAnimations` — single composition pipeline for View-style and animated SVG props. Relies on `react-native-svg` v13+ auto-translating the transform array into SVG `transform="..."` strings. Same dev-mode non-ambient-trigger warning as the web hook.
|
|
3045
3047
|
|
|
3046
3048
|
213. **Cross-platform Layer 3 parity pins** — `buildCSSKeyframes` (web) and `buildReanimatedSpec` (RN) interpret the same resolved `AnimationSpec` identically on load-bearing invariants: duration agreement (ms count matches regardless of input form `'28s'`/`'28000'`), keyframe stop count (web `%` markers match RN `inputRange` length), direction semantic (`'alternate'` token ⇔ `timing.reverse=true`), iterations `'infinite'`/numeric count, animated-prop enumeration (`translateX/Y`/`rotateDeg`/`scale`).
|
|
3047
3049
|
|
|
@@ -3197,5 +3199,8 @@ See `ai-context.md` for spec-gen anti-patterns the AI must NOT generate.
|
|
|
3197
3199
|
|
|
3198
3200
|
281. **`MythikApp.fetcher` supplies editor persistence when auth fetch is absent** - React hosts can pass `fetcher={(url, options) => ...}` to `MythikApp` so `editorSave` and `navigationGuardSaveAndProceed` have a transport in non-auth apps. When auth is configured, the framework fetch with auth interceptors remains the active fetcher. Save actions do not read global `/ui/lastError`; editor save status, errors, and attempts are reported under `/ui/editorSessions/<id>`.
|
|
3199
3201
|
|
|
3200
|
-
282. **Existing spec edits must use the CLI inspection-then-patch loop** - For an existing screen/app/api spec, AI agents should run `mythik manifest <id>` first, inspect only the target nodes with `mythik elements <id> <ids>`, apply a small RFC 6902 patch with `mythik patch <id> --from-file patch.json`, and verify with `manifest` or `elements`. This keeps edits surgical, validated, versionable, and reviewable. `pull` is for backup, migration, review, or full-document work; `push` is for new specs or intentional full replacement. Direct database edits and direct `SpecStore.save()` calls bypass validation and are not approved spec-write paths.
|
|
3201
|
-
283. **Bundled AI docs are part of the install surface** - The `mythik` package includes `docs/llms.txt`, `docs/consumer/*`, and `docs/wiki/compiled/*`. Agents should run `mythik docs path` before spec generation and read the bundled docs rather than guessing from package source. Use `mythik docs copy ./mythik-docs` to create a project-local copy when the host workflow needs explicit files.
|
|
3202
|
+
282. **Existing spec edits must use the CLI inspection-then-patch loop** - For an existing screen/app/api spec, AI agents should run `mythik manifest <id>` first, inspect only the target nodes with `mythik elements <id> <ids>`, apply a small RFC 6902 patch with `mythik patch <id> --from-file patch.json`, and verify with `manifest` or `elements`. This keeps edits surgical, validated, versionable, and reviewable. `pull` is for backup, migration, review, or full-document work; `push` is for new specs or intentional full replacement. Direct database edits and direct `SpecStore.save()` calls bypass validation and are not approved spec-write paths.
|
|
3203
|
+
283. **Bundled AI docs are part of the install surface** - The `mythik` package includes `docs/llms.txt`, `docs/consumer/*`, and `docs/wiki/compiled/*`. Agents should run `mythik docs path` before spec generation and read the bundled docs rather than guessing from package source. Use `mythik docs copy ./mythik-docs` to create a project-local copy when the host workflow needs explicit files.
|
|
3204
|
+
284. **DNA numeric seeds are canonical `0–1`, with legacy `0–100` normalization** - Generate `tokens.dna.roundness`, `density`, `depth`, and `formality` as `0–1` numbers (`0.7`, not `70`). The runtime normalizes numeric seed values greater than `1` by dividing by `100` inside DNA derivation, so initial AppSpec load and runtime `updateTokens` share the same backward-compatible behavior.
|
|
3205
|
+
285. **Scoped pagination counts filter before aggregation** - Query endpoints may combine `pagination: "offset"` with `scopeFilter`. For generated counts, the server applies the scope filter to the query source first and then counts the scoped source, so the response `total` matches the same tenant/role slice as `data`. Prefer generated counts. If custom `endpoint.count` is truly needed with `scopeFilter`, it must include `{{scopeWhere[:alias]}}` or `{{scopeAnd[:alias]}}`; Mythik expands the macro to the correct scope predicate and removes it for bypass roles. Other custom count SQL is left verbatim. Specs should use `:alias` for JOIN/subquery counts and should not reference internal scope parameter names directly.
|
|
3206
|
+
286. **Transaction fetch failures preserve backend error details** - When a transaction `confirm` uses `fetch` and the backend returns an HTTP error payload such as `{ error: { code, message } }`, `/tx/error` is written after rollback with the best backend message plus `code`, HTTP `status`, and raw `data`. `onError` should read `/tx/error/message`; transaction specs should not read global `/ui/lastError`.
|
|
@@ -39,15 +39,16 @@ Full reset (preset apply):
|
|
|
39
39
|
|
|
40
40
|
## Behavior
|
|
41
41
|
|
|
42
|
-
- Without `_replace`, `updateTokens({ dna: { roundness:
|
|
42
|
+
- Without `_replace`, `updateTokens({ dna: { roundness: 0.5 } })` merges
|
|
43
43
|
with previously-applied tokens — previous primary, surface, etc. persist.
|
|
44
44
|
- With `_replace: true`, fully replaces (used internally by `applyPreset`
|
|
45
45
|
to prevent stale flag values from carrying between presets — see
|
|
46
46
|
[[@action-apply-preset]]).
|
|
47
47
|
- After every call, the framework persists `currentRawTokens` to
|
|
48
48
|
`/tokens/raw` and `resolvedTokens` to `/tokens/resolved`.
|
|
49
|
-
- **Numeric DNA seeds > 1 are auto-normalized (
|
|
50
|
-
|
|
49
|
+
- **Numeric DNA seeds > 1 are auto-normalized (divided by 100)** for legacy
|
|
50
|
+
percentage-style compatibility, but generated specs should use canonical
|
|
51
|
+
0-1 values.
|
|
51
52
|
|
|
52
53
|
## Related concepts
|
|
53
54
|
|
|
@@ -40,6 +40,8 @@ SQL-driven read endpoint with optional pagination + totals.
|
|
|
40
40
|
Returns `{ data, total?, page?, pageSize?, totals? }` — see
|
|
41
41
|
[[@concept-query-envelope]].
|
|
42
42
|
|
|
43
|
+
With `pagination: "offset"` and `scopeFilter`, generated totals are scoped before aggregation: Mythik filters the query source first, then counts that scoped source. Prefer generated counts. If custom `endpoint.count` SQL is truly needed with `scopeFilter`, include `{{scopeWhere[:alias]}}` or `{{scopeAnd[:alias]}}`; Mythik expands the macro to the correct scope predicate and removes it for bypass roles. Mythik does not otherwise rewrite custom count SQL; use `:alias` for JOIN/subquery counts.
|
|
44
|
+
|
|
43
45
|
## Related concepts
|
|
44
46
|
|
|
45
47
|
- [[@concept-api-endpoints-overview]]
|
|
@@ -38,6 +38,8 @@ Or per-endpoint (boolean / per-endpoint config):
|
|
|
38
38
|
- For roles in `bypassRoles`, the filter is NOT applied (admin sees all).
|
|
39
39
|
- All other roles see only rows matching their JWT claim.
|
|
40
40
|
- **Applies to UPDATE and DELETE**, not just SELECT — defense in depth.
|
|
41
|
+
- For query endpoints with `pagination: "offset"`, generated totals are scoped before aggregation, so `total` matches the rows the user is allowed to see.
|
|
42
|
+
- Custom `endpoint.count` SQL with `scopeFilter` must use `{{scopeWhere[:alias]}}` or `{{scopeAnd[:alias]}}`; Mythik expands the macro to the correct predicate and removes it for bypass roles. Prefer generated counts when possible. Other custom count SQL is left verbatim; use `:alias` for JOIN/subquery counts.
|
|
41
43
|
|
|
42
44
|
## Security invariant
|
|
43
45
|
|
|
@@ -25,6 +25,19 @@ spacing, elevation, motion, opacity, plus auto dark mode.
|
|
|
25
25
|
| `motion` | enum | `gentle` | `fluid`, `snappy`, `gentle`, `energetic` — animation personality |
|
|
26
26
|
| `formality` | 0–1 | 0.5 | Typography (5 font tiers + continuous letterSpacing/lineHeight/bold weight) |
|
|
27
27
|
|
|
28
|
+
## Numeric seed scale
|
|
29
|
+
|
|
30
|
+
Numeric seeds (`roundness`, `density`, `depth`, `formality`) are canonical `0–1` values. Generate `0.7`, not `70`.
|
|
31
|
+
|
|
32
|
+
For backward compatibility with older exports and percentage-style values, the runtime auto-normalizes numeric seed values greater than `1` by dividing by `100` during DNA derivation. This applies consistently to initial AppSpec load and runtime `updateTokens`.
|
|
33
|
+
|
|
34
|
+
| Input | Behavior |
|
|
35
|
+
|---|---|
|
|
36
|
+
| `0.79` | Used as-is; recommended canonical form |
|
|
37
|
+
| `79` | Auto-normalized to `0.79` |
|
|
38
|
+
| `1` | Used as-is; boundary value, not divided |
|
|
39
|
+
| `0` | Used as-is |
|
|
40
|
+
|
|
28
41
|
## Examples
|
|
29
42
|
|
|
30
43
|
Minimal:
|
|
@@ -41,7 +41,10 @@ automatically.**
|
|
|
41
41
|
|
|
42
42
|
`fetch` in `confirm` writes to `/tx/result` via `target`. `onSuccess` reads
|
|
43
43
|
it via `{ "$state": "/tx/result" }`. On error, `/tx/error` contains
|
|
44
|
-
|
|
44
|
+
the best available error details. For `fetch` confirm HTTP failures, Mythik
|
|
45
|
+
preserves backend `error.message`, `error.code`, HTTP `status`, and raw `data`
|
|
46
|
+
after rollback so `onError` can show a useful message. Both paths are cleaned
|
|
47
|
+
up automatically.
|
|
45
48
|
|
|
46
49
|
## Timeout
|
|
47
50
|
|
|
@@ -15,10 +15,12 @@ messages.
|
|
|
15
15
|
| Path | Content |
|
|
16
16
|
|---|---|
|
|
17
17
|
| `/tx/result` | Server response when `confirm` writes via `target: "/tx/result"`. Read in `onSuccess` |
|
|
18
|
-
| `/tx/error` |
|
|
18
|
+
| `/tx/error` | Transaction error details. Read in `onError` |
|
|
19
19
|
|
|
20
20
|
Both are cleaned up automatically after the transaction completes.
|
|
21
21
|
|
|
22
|
+
For `fetch` confirm HTTP failures, `/tx/error` preserves backend details after rollback when available: `message`, `code`, HTTP `status`, and raw `data`. If the backend returns `{ "error": { "code": "...", "message": "..." } }`, `/tx/error/message` uses that backend message rather than the generic transaction phase text.
|
|
23
|
+
|
|
22
24
|
## Use
|
|
23
25
|
|
|
24
26
|
In `confirm` phase, write to `/tx/result`:
|
package/package.json
CHANGED