@kumbatio/energy-system 0.5.4 → 1.0.0

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.
@@ -218,4 +218,46 @@ export const interactionForgivenessStrategy = {
218
218
  return FORGIVENESS_CONFIGS[getEnergyLevel(level).value];
219
219
  },
220
220
  };
221
+ const AUTONOMY_CONFIGS = freezeObject({
222
+ 100: freezeObject({
223
+ confidenceThreshold: 0.6,
224
+ allowGeneratedContent: true,
225
+ maxUnattendedSteps: 8,
226
+ }),
227
+ 75: freezeObject({
228
+ confidenceThreshold: 0.7,
229
+ allowGeneratedContent: true,
230
+ maxUnattendedSteps: 5,
231
+ }),
232
+ 50: freezeObject({
233
+ confidenceThreshold: 0.8,
234
+ allowGeneratedContent: true,
235
+ maxUnattendedSteps: 3,
236
+ }),
237
+ 25: freezeObject({
238
+ confidenceThreshold: 0.9,
239
+ allowGeneratedContent: false,
240
+ maxUnattendedSteps: 1,
241
+ }),
242
+ // Rest: one certain, templated step at most. Not zero — an automated action
243
+ // the user has standing consent for (an out-of-office reply is the classic)
244
+ // is safest at rest precisely because it stops improvising.
245
+ 0: freezeObject({
246
+ confidenceThreshold: 1,
247
+ allowGeneratedContent: false,
248
+ maxUnattendedSteps: 1,
249
+ }),
250
+ });
251
+ export const autonomyStrategy = {
252
+ name: 'autonomy',
253
+ describe(level) {
254
+ const def = getEnergyLevel(level);
255
+ const config = AUTONOMY_CONFIGS[def.value];
256
+ const content = config.allowGeneratedContent ? 'generated content allowed' : 'templates only';
257
+ return `${def.label}: acts unattended at ${Math.round(config.confidenceThreshold * 100)}% confidence, ${content}, up to ${config.maxUnattendedSteps} chained step${config.maxUnattendedSteps === 1 ? '' : 's'}`;
258
+ },
259
+ resolve(level) {
260
+ return AUTONOMY_CONFIGS[getEnergyLevel(level).value];
261
+ },
262
+ };
221
263
  //# sourceMappingURL=strategies.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"strategies.js","sourceRoot":"","sources":["../src/strategies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"strategies.js","sourceRoot":"","sources":["../src/strategies.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kumbatio/energy-system",
3
- "version": "0.5.4",
3
+ "version": "1.0.0",
4
4
  "private": false,
5
5
  "description": "Framework-agnostic TypeScript library for energy-aware application behavior.",
6
6
  "license": "MIT",
@@ -8,6 +8,10 @@
8
8
  "dist",
9
9
  "src/energy.css",
10
10
  "api-surface.json",
11
+ "conformance.json",
12
+ "spec",
13
+ "SPEC.md",
14
+ "CHANGELOG.md",
11
15
  "README.md"
12
16
  ],
13
17
  "type": "module",
@@ -35,7 +39,9 @@
35
39
  },
36
40
  "./css": "./src/energy.css",
37
41
  "./api-surface.json": "./api-surface.json",
38
- "./package.json": "./package.json"
42
+ "./package.json": "./package.json",
43
+ "./conformance.json": "./conformance.json",
44
+ "./spec/energy-state.schema.json": "./spec/energy-state.schema.json"
39
45
  },
40
46
  "publishConfig": {
41
47
  "access": "public"
@@ -43,14 +49,14 @@
43
49
  "devDependencies": {
44
50
  "@happy-dom/global-registrator": "^20.11.1",
45
51
  "@types/node": "^26.1.2",
46
- "@types/react": "^19.2.17",
47
- "@types/react-dom": "^19.2.3",
48
- "oxfmt": "0.61.0",
49
- "oxlint": "1.76.0",
52
+ "@types/react": "^19.2.18",
53
+ "@types/react-dom": "^19.2.4",
54
+ "oxfmt": "0.62.0",
55
+ "oxlint": "1.77.0",
50
56
  "oxlint-tsgolint": "^7.0.2001",
51
57
  "react": "^19.2.8",
52
58
  "react-dom": "^19.2.8",
53
- "tsx": "^4.23.1",
59
+ "tsx": "^4.23.8",
54
60
  "typescript": "^7.0.2"
55
61
  },
56
62
  "peerDependencies": {
@@ -66,10 +72,10 @@
66
72
  }
67
73
  },
68
74
  "engines": {
69
- "node": ">=24"
75
+ "node": ">=24.19.0"
70
76
  },
71
77
  "scripts": {
72
- "build": "tsc -p tsconfig.build.json && pnpm run api:surface",
78
+ "build": "tsc -p tsconfig.build.json && pnpm run api:surface && pnpm run conformance",
73
79
  "api:surface": "tsx scripts/extract-api-surface.ts",
74
80
  "check-types": "tsc --noEmit -p tsconfig.json",
75
81
  "test": "pnpm run build && node --test --import tsx",
@@ -80,6 +86,7 @@
80
86
  "lint": "oxlint --import-plugin --type-aware --type-check --vitest-plugin .",
81
87
  "lint:fix": "oxlint --import-plugin --type-aware --type-check --vitest-plugin --fix . && oxfmt --write .",
82
88
  "lint:fix-unsafe": "oxlint --import-plugin --type-aware --type-check --vitest-plugin --fix --fix-suggestions --fix-dangerously . && oxfmt --write .",
83
- "check:fix-suggestions": "oxlint --import-plugin --type-aware --type-check --vitest-plugin --fix --fix-suggestions . && oxfmt --write ."
89
+ "check:fix-suggestions": "oxlint --import-plugin --type-aware --type-check --vitest-plugin --fix --fix-suggestions . && oxfmt --write .",
90
+ "conformance": "TZ=UTC tsx scripts/extract-conformance.ts"
84
91
  }
85
92
  }
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://kumbat.io/spec/energy-state.schema.json",
4
+ "title": "EnergyState",
5
+ "description": "One producer's point-in-time claim about a person's cognitive capacity. This is the interchange format: the shape an implementation writes to shared storage, sends over a wire, or hands to another process. Two implementations that agree on this schema and on the reconciliation rule in SPEC.md converge on the same current state without further coordination.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["level", "timestamp", "source", "revision", "origin"],
9
+ "properties": {
10
+ "level": {
11
+ "description": "The declared capacity. Five discrete values, never a continuum: a slider invites precision nobody has about their own state, and five is the most a depleted person should have to choose between.",
12
+ "type": "integer",
13
+ "enum": [0, 25, 50, 75, 100]
14
+ },
15
+ "timestamp": {
16
+ "description": "When this state was produced, in milliseconds since the Unix epoch. The primary ordering key. 0 is reserved for the unproduced sentinel (see SPEC.md).",
17
+ "type": "integer",
18
+ "minimum": 0
19
+ },
20
+ "source": {
21
+ "description": "How the level was arrived at. Load-bearing during reconciliation: manual outranks scheduled outranks inferred, so nothing the system worked out on its own overwrites what the person said.",
22
+ "type": "string",
23
+ "enum": ["manual", "scheduled", "inferred"]
24
+ },
25
+ "revision": {
26
+ "description": "Logical sequence number among states sharing one timestamp. Two writes inside a clock tick are not simultaneous, and this is what keeps them ordered.",
27
+ "type": "integer",
28
+ "minimum": 0,
29
+ "maximum": 9007199254740991
30
+ },
31
+ "origin": {
32
+ "description": "Stable identity of the producer — an engine instance, a device, a process. Must be unique per producer and stable across that producer's writes. The final tiebreaker compares it lexicographically, so a producer that reuses one identity for different state breaks convergence.",
33
+ "type": "string",
34
+ "minLength": 1
35
+ }
36
+ },
37
+ "examples": [
38
+ {
39
+ "level": 50,
40
+ "timestamp": 1786060800000,
41
+ "source": "manual",
42
+ "revision": 0,
43
+ "origin": "a4f1c2e8-0f3b-4a91-9f2d-6c1b2e5d8a70"
44
+ },
45
+ {
46
+ "level": 100,
47
+ "timestamp": 0,
48
+ "source": "manual",
49
+ "revision": 0,
50
+ "origin": "0-initial"
51
+ }
52
+ ]
53
+ }
package/src/energy.css CHANGED
@@ -18,6 +18,10 @@
18
18
  * applyEnergyLevel() sets the same properties as inline styles, which take
19
19
  * precedence but resolve to identical values, so the JS and CSS-only paths
20
20
  * always agree.
21
+ *
22
+ * The single exception is the accessibility block at the end of this file, which
23
+ * declares `!important` deliberately so a user's contrast preference outranks
24
+ * both paths. See the comment there.
21
25
  */
22
26
 
23
27
  /* ── Custom properties per level (mirror of uiVisibilityStrategy) ── */
@@ -129,6 +133,8 @@
129
133
  opacity: var(--energy-chrome-opacity-hover, 0.8);
130
134
  }
131
135
 
136
+ /* `font-size` scales relative to the parent, so this expects ONE .energy-content
137
+ * per tree. Nesting them compounds the scale (1.1 inside 1.1 is 1.21). */
132
138
  [data-energy-level='0'] .energy-content {
133
139
  max-width: var(--energy-content-max-width, 75ch);
134
140
  margin-inline: auto;
@@ -138,6 +144,10 @@
138
144
  cursor: default !important;
139
145
  }
140
146
 
147
+ /* A cursor is a HINT, and one only a pointer user receives. It changes nothing
148
+ * about what is focusable or clickable, so an app that means "read only" at Rest
149
+ * must also disable the controls — otherwise a keyboard user gets no signal at
150
+ * all and a pointer user gets a signal that turns out to be false. */
141
151
  [data-energy-level='0'] .energy-content * {
142
152
  cursor: default !important;
143
153
  }
@@ -202,3 +212,70 @@
202
212
  transition: none;
203
213
  }
204
214
  }
215
+
216
+ /* ── Contrast obligations ──
217
+ *
218
+ * Be honest about what the resting values are: chrome sits at 10% opacity at
219
+ * level 25 and 5% at level 0, and neither meets WCAG 1.4.11 (Non-text Contrast,
220
+ * 3:1 for UI components) in its resting state. That is a deliberate design
221
+ * default for a receding interface, not a conformance claim — and it is why
222
+ * every value here is a custom property an app can raise in one line.
223
+ *
224
+ * Two populations must not be left to do that themselves:
225
+ *
226
+ * `prefers-contrast: more` is a person explicitly asking the OS for more
227
+ * contrast. Fading their chrome to 5% is answering the opposite of the question.
228
+ * Chrome still recedes with energy, but never below a legible floor.
229
+ *
230
+ * `forced-colors: active` (Windows High Contrast and friends) overrides colors
231
+ * but NOT opacity, so faded chrome stays faded while everything around it snaps
232
+ * to a system palette — the fade is no longer a soft de-emphasis, it is the only
233
+ * thing still hiding content. Opacity comes off entirely.
234
+ *
235
+ * Both blocks declare `!important`, which is load-bearing rather than a shortcut.
236
+ * `applyEnergyLevel()` writes these same custom properties as INLINE styles, and
237
+ * an inline declaration outranks an ordinary rule — so without this, the JS path
238
+ * would silently defeat the user's stated contrast preference while the CSS-only
239
+ * path honoured it. An important author declaration beats a normal inline one,
240
+ * which is exactly the ordering wanted here: a preference the person set outranks
241
+ * a value the program computed. */
242
+ @media (prefers-contrast: more) {
243
+ [data-energy-level='75'] {
244
+ --energy-chrome-opacity: 0.9 !important;
245
+ }
246
+
247
+ [data-energy-level='50'] {
248
+ --energy-chrome-opacity: 0.8 !important;
249
+ }
250
+
251
+ [data-energy-level='25'] {
252
+ --energy-chrome-opacity: 0.7 !important;
253
+ }
254
+
255
+ [data-energy-level='0'] {
256
+ --energy-chrome-opacity: 0.7 !important;
257
+ --energy-chrome-opacity-hover: 1 !important;
258
+ }
259
+
260
+ [data-energy-level] {
261
+ --energy-muted-opacity: 0.85 !important;
262
+ }
263
+ }
264
+
265
+ @media (forced-colors: active) {
266
+ [data-energy-level] {
267
+ --energy-chrome-opacity: 1 !important;
268
+ --energy-chrome-opacity-hover: 1 !important;
269
+ --energy-muted-opacity: 1 !important;
270
+ }
271
+
272
+ [data-energy-level] .energy-chrome {
273
+ opacity: 1 !important;
274
+ }
275
+
276
+ /* `hidden` presence stays hidden: it is display, not contrast, and the
277
+ * element is meant to be absent from the tree at this level. */
278
+ [data-energy-presence='muted'] {
279
+ opacity: 1 !important;
280
+ }
281
+ }