@motebit/sdk 0.8.0 → 1.0.1

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.
Files changed (46) hide show
  1. package/LICENSE +198 -18
  2. package/NOTICE +19 -0
  3. package/README.md +52 -5
  4. package/dist/appearance-config.d.ts +6 -0
  5. package/dist/appearance-config.d.ts.map +1 -1
  6. package/dist/appearance-config.js +6 -0
  7. package/dist/appearance-config.js.map +1 -1
  8. package/dist/index.d.ts +11 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/models.d.ts +12 -4
  11. package/dist/models.d.ts.map +1 -1
  12. package/dist/models.js +7 -4
  13. package/dist/models.js.map +1 -1
  14. package/dist/provider-mode.d.ts +0 -40
  15. package/dist/provider-mode.d.ts.map +1 -1
  16. package/dist/provider-mode.js +0 -119
  17. package/dist/provider-mode.js.map +1 -1
  18. package/dist/voice-config.d.ts +6 -0
  19. package/dist/voice-config.d.ts.map +1 -1
  20. package/dist/voice-config.js +6 -0
  21. package/dist/voice-config.js.map +1 -1
  22. package/package.json +9 -6
  23. package/dist/__tests__/appearance-config.test.d.ts +0 -2
  24. package/dist/__tests__/appearance-config.test.d.ts.map +0 -1
  25. package/dist/__tests__/appearance-config.test.js +0 -104
  26. package/dist/__tests__/appearance-config.test.js.map +0 -1
  27. package/dist/__tests__/branded-ids.test.d.ts +0 -2
  28. package/dist/__tests__/branded-ids.test.d.ts.map +0 -1
  29. package/dist/__tests__/branded-ids.test.js +0 -70
  30. package/dist/__tests__/branded-ids.test.js.map +0 -1
  31. package/dist/__tests__/index.test.d.ts +0 -2
  32. package/dist/__tests__/index.test.d.ts.map +0 -1
  33. package/dist/__tests__/index.test.js +0 -194
  34. package/dist/__tests__/index.test.js.map +0 -1
  35. package/dist/__tests__/provider-mode.test.d.ts +0 -2
  36. package/dist/__tests__/provider-mode.test.d.ts.map +0 -1
  37. package/dist/__tests__/provider-mode.test.js +0 -180
  38. package/dist/__tests__/provider-mode.test.js.map +0 -1
  39. package/dist/__tests__/provider-resolver.test.d.ts +0 -2
  40. package/dist/__tests__/provider-resolver.test.d.ts.map +0 -1
  41. package/dist/__tests__/provider-resolver.test.js +0 -353
  42. package/dist/__tests__/provider-resolver.test.js.map +0 -1
  43. package/dist/__tests__/voice-config.test.d.ts +0 -2
  44. package/dist/__tests__/voice-config.test.d.ts.map +0 -1
  45. package/dist/__tests__/voice-config.test.js +0 -98
  46. package/dist/__tests__/voice-config.test.js.map +0 -1
@@ -52,125 +52,6 @@ export function isLocalServerUrl(url) {
52
52
  return false;
53
53
  }
54
54
  }
55
- /**
56
- * Migrate any legacy provider config shape to `UnifiedProviderConfig`.
57
- *
58
- * Rules:
59
- * - `hybrid` and `proxy` map to `motebit-cloud` (the product).
60
- * - `ollama` with a localhost URL maps to `on-device/local-server`.
61
- * - `ollama` with a remote URL maps to `on-device/local-server` with that endpoint preserved.
62
- * - `anthropic` / `openai` / `google` map to `byok` with that vendor.
63
- * - Mobile `local` with `localBackend` maps to `on-device` with that backend.
64
- * - If input is already a `UnifiedProviderConfig` (has `mode`), it passes through.
65
- *
66
- * Returns `null` only if the input is entirely unrecognizable.
67
- */
68
- export function migrateLegacyProvider(legacy) {
69
- if (!legacy)
70
- return null;
71
- // Already-new shape — passthrough with light validation.
72
- if (legacy.mode === "on-device" || legacy.mode === "motebit-cloud" || legacy.mode === "byok") {
73
- return legacy;
74
- }
75
- const apiKey = legacy.apiKey ?? legacy.api_key;
76
- const baseUrl = legacy.baseUrl ?? legacy.base_url;
77
- const proxyToken = legacy.proxyToken ?? legacy.proxy_token;
78
- const maxTokens = legacy.maxTokens ?? legacy.max_tokens;
79
- const temperature = legacy.temperature;
80
- const model = legacy.model ?? legacy.default_model;
81
- // Normalize the discriminator across shapes.
82
- const kind = legacy.type ?? legacy.provider ?? legacy.default_provider;
83
- if (!kind)
84
- return null;
85
- switch (kind) {
86
- case "proxy":
87
- case "hybrid":
88
- case "motebit-cloud":
89
- return {
90
- mode: "motebit-cloud",
91
- model,
92
- proxyToken,
93
- baseUrl,
94
- maxTokens,
95
- temperature,
96
- };
97
- case "anthropic":
98
- return {
99
- mode: "byok",
100
- vendor: "anthropic",
101
- apiKey: apiKey ?? "",
102
- model,
103
- baseUrl,
104
- maxTokens,
105
- temperature,
106
- };
107
- case "openai":
108
- return {
109
- mode: "byok",
110
- vendor: "openai",
111
- apiKey: apiKey ?? "",
112
- model,
113
- baseUrl,
114
- maxTokens,
115
- temperature,
116
- };
117
- case "google":
118
- return {
119
- mode: "byok",
120
- vendor: "google",
121
- apiKey: apiKey ?? "",
122
- model,
123
- baseUrl,
124
- maxTokens,
125
- temperature,
126
- };
127
- case "ollama": {
128
- // Ollama is always a local server — endpoint may or may not be localhost.
129
- const endpoint = baseUrl ?? legacy.ollamaEndpoint ?? legacy.endpoint;
130
- return {
131
- mode: "on-device",
132
- backend: "local-server",
133
- model,
134
- endpoint,
135
- maxTokens,
136
- temperature,
137
- };
138
- }
139
- case "webllm":
140
- return {
141
- mode: "on-device",
142
- backend: "webllm",
143
- model,
144
- maxTokens,
145
- temperature,
146
- };
147
- case "local": {
148
- // Mobile legacy: `local` with `localBackend` sub-option.
149
- const backend = (() => {
150
- switch (legacy.localBackend) {
151
- case "apple-fm":
152
- return "apple-fm";
153
- case "mlx":
154
- return "mlx";
155
- case "local-server":
156
- return "local-server";
157
- default:
158
- return "mlx";
159
- }
160
- })();
161
- return {
162
- mode: "on-device",
163
- backend,
164
- model,
165
- endpoint: legacy.ollamaEndpoint ?? legacy.endpoint,
166
- maxTokens,
167
- temperature,
168
- };
169
- }
170
- default:
171
- return null;
172
- }
173
- }
174
55
  // === Defaults ===
175
56
  /** Sensible default when no config has ever been persisted. */
176
57
  export function defaultProviderConfig() {
@@ -1 +1 @@
1
- {"version":3,"file":"provider-mode.js","sourceRoot":"","sources":["../src/provider-mode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-mode.js","sourceRoot":"","sources":["../src/provider-mode.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,EAAE;AACF,+EAA+E;AAC/E,4EAA4E;AAC5E,EAAE;AACF,mFAAmF;AACnF,qFAAqF;AACrF,qDAAqD;AACrD,EAAE;AACF,4EAA4E;AAC5E,+EAA+E;AAyE/E,oBAAoB;AACpB,EAAE;AACF,oDAAoD;AACpD,EAAE;AACF,mCAAmC;AACnC,sEAAsE;AACtE,0EAA0E;AAC1E,EAAE;AACF,4CAA4C;AAC5C,oFAAoF;AACpF,2CAA2C;AAC3C,uDAAuD;AACvD,EAAE;AACF,yCAAyC;AACzC,0EAA0E;AAC1E,sCAAsC;AACtC,EAAE;AACF,kCAAkC;AAClC,8DAA8D;AAC9D,gDAAgD;AAEhD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAA8B;IAC7D,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACtC,OAAO,CACL,IAAI,KAAK,WAAW;YACpB,IAAI,KAAK,WAAW;YACpB,IAAI,KAAK,KAAK;YACd,IAAI,KAAK,SAAS;YAClB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CACxC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,mBAAmB;AAEnB,+DAA+D;AAC/D,MAAM,UAAU,qBAAqB;IACnC,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;AACnC,CAAC"}
@@ -47,6 +47,12 @@ export declare const DEFAULT_VOICE_CONFIG: VoiceConfig;
47
47
  * The function is intentionally defensive — it operates on `unknown` because
48
48
  * the typical caller is reading from `localStorage` / `AsyncStorage` / a
49
49
  * Tauri JSON config, all of which return untyped blobs.
50
+ *
51
+ * @permanent — never remove. Unlike a deprecated-then-sunset API symbol
52
+ * (which has callers we can refactor and ship a removal for), this
53
+ * migration reads persisted user data we can never crawl and rewrite.
54
+ * It must keep working for every `localStorage` / `AsyncStorage` /
55
+ * Tauri JSON config that has ever existed in the wild.
50
56
  */
51
57
  export declare function migrateVoiceConfig(raw: unknown): VoiceConfig;
52
58
  //# sourceMappingURL=voice-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"voice-config.d.ts","sourceRoot":"","sources":["../src/voice-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,EAAE,WAMlC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAuB5D"}
1
+ {"version":3,"file":"voice-config.d.ts","sourceRoot":"","sources":["../src/voice-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,EAAE,WAMlC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAuB5D"}
@@ -34,6 +34,12 @@ export const DEFAULT_VOICE_CONFIG = {
34
34
  * The function is intentionally defensive — it operates on `unknown` because
35
35
  * the typical caller is reading from `localStorage` / `AsyncStorage` / a
36
36
  * Tauri JSON config, all of which return untyped blobs.
37
+ *
38
+ * @permanent — never remove. Unlike a deprecated-then-sunset API symbol
39
+ * (which has callers we can refactor and ship a removal for), this
40
+ * migration reads persisted user data we can never crawl and rewrite.
41
+ * It must keep working for every `localStorage` / `AsyncStorage` /
42
+ * Tauri JSON config that has ever existed in the wild.
37
43
  */
38
44
  export function migrateVoiceConfig(raw) {
39
45
  if (raw == null || typeof raw !== "object")
@@ -1 +1 @@
1
- {"version":3,"file":"voice-config.js","sourceRoot":"","sources":["../src/voice-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAsBH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAC/E,MAAM,GAAG,GAAG,GAA8B,CAAC;IAE3C,MAAM,IAAI,GAAG,CAAI,IAAc,EAAE,MAA8B,EAAiB,EAAE;QAChF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,MAAM,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,CAAU,EAAgB,EAAE,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;IACpE,MAAM,KAAK,GAAG,CAAC,CAAU,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;IAEjE,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,IAAI,oBAAoB,CAAC,OAAO;QAClF,QAAQ,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,IAAI,oBAAoB,CAAC,QAAQ;QACtF,cAAc,EACZ,IAAI,CAAC,CAAC,gBAAgB,EAAE,eAAe,EAAE,sBAAsB,CAAC,EAAE,MAAM,CAAC;YACzE,oBAAoB,CAAC,cAAc;QACrC,QAAQ,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,IAAI,oBAAoB,CAAC,QAAQ;QACpE,SAAS,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC3D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"voice-config.js","sourceRoot":"","sources":["../src/voice-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAsBH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAC/E,MAAM,GAAG,GAAG,GAA8B,CAAC;IAE3C,MAAM,IAAI,GAAG,CAAI,IAAc,EAAE,MAA8B,EAAiB,EAAE;QAChF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,MAAM,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,CAAU,EAAgB,EAAE,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;IACpE,MAAM,KAAK,GAAG,CAAC,CAAU,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;IAEjE,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,IAAI,oBAAoB,CAAC,OAAO;QAClF,QAAQ,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,IAAI,oBAAoB,CAAC,QAAQ;QACtF,cAAc,EACZ,IAAI,CAAC,CAAC,gBAAgB,EAAE,eAAe,EAAE,sBAAsB,CAAC,EAAE,MAAM,CAAC;YACzE,oBAAoB,CAAC,cAAc;QACrC,QAAQ,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,IAAI,oBAAoB,CAAC,QAAQ;QACpE,SAAS,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC3D,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@motebit/sdk",
3
- "version": "0.8.0",
4
- "description": "Motebit product development kitshared types, config schemas, normalization, and adapters for Motebit surfaces. Re-exports @motebit/protocol.",
3
+ "version": "1.0.1",
4
+ "description": "Developer contract for building Motebit-powered agents, services, and integrations stable types, adapter interfaces, governance config. Re-exports @motebit/protocol.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -17,10 +17,11 @@
17
17
  "dist/**/*.d.ts",
18
18
  "dist/**/*.d.ts.map",
19
19
  "LICENSE",
20
+ "NOTICE",
20
21
  "README.md"
21
22
  ],
22
23
  "sideEffects": false,
23
- "license": "MIT",
24
+ "license": "Apache-2.0",
24
25
  "keywords": [
25
26
  "motebit",
26
27
  "agent",
@@ -46,7 +47,7 @@
46
47
  "access": "public"
47
48
  },
48
49
  "dependencies": {
49
- "@motebit/protocol": "0.8.0"
50
+ "@motebit/protocol": "1.1.0"
50
51
  },
51
52
  "devDependencies": {
52
53
  "@types/node": "^22.0.0",
@@ -54,14 +55,16 @@
54
55
  "vitest": "^2.1.0"
55
56
  },
56
57
  "engines": {
57
- "node": ">=18"
58
+ "node": ">=20"
58
59
  },
59
60
  "scripts": {
60
61
  "build": "tsc -b",
61
62
  "test": "vitest run",
62
63
  "test:coverage": "vitest run --coverage",
63
64
  "typecheck": "tsc --noEmit",
64
- "lint": "eslint src/",
65
+ "lint": "eslint --parser-options=project:tsconfig.eslint.json src/",
66
+ "lint:pack": "publint --strict && attw --pack --profile esm-only",
67
+ "api:extract": "api-extractor run --local",
65
68
  "clean": "rm -rf dist .turbo *.tsbuildinfo"
66
69
  }
67
70
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=appearance-config.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appearance-config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/appearance-config.test.ts"],"names":[],"mappings":""}
@@ -1,104 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { DEFAULT_APPEARANCE_CONFIG, migrateAppearanceConfig } from "../appearance-config.js";
3
- describe("migrateAppearanceConfig", () => {
4
- it("returns a fresh default when input is null", () => {
5
- const result = migrateAppearanceConfig(null);
6
- expect(result).toEqual(DEFAULT_APPEARANCE_CONFIG);
7
- expect(result).not.toBe(DEFAULT_APPEARANCE_CONFIG);
8
- });
9
- it("returns a fresh default when input is undefined", () => {
10
- expect(migrateAppearanceConfig(undefined)).toEqual(DEFAULT_APPEARANCE_CONFIG);
11
- });
12
- it("returns a fresh default when input is a primitive", () => {
13
- expect(migrateAppearanceConfig("moonlight")).toEqual(DEFAULT_APPEARANCE_CONFIG);
14
- expect(migrateAppearanceConfig(42)).toEqual(DEFAULT_APPEARANCE_CONFIG);
15
- });
16
- it("normalizes the canonical mobile shape", () => {
17
- const input = {
18
- colorPreset: "violet",
19
- customHue: 180,
20
- customSaturation: 0.5,
21
- theme: "dark",
22
- };
23
- expect(migrateAppearanceConfig(input)).toEqual(input);
24
- });
25
- it("migrates the web legacy shape {preset, customHue, customSaturation}", () => {
26
- const result = migrateAppearanceConfig({
27
- preset: "rose",
28
- customHue: 10,
29
- customSaturation: 0.8,
30
- });
31
- expect(result.colorPreset).toBe("rose");
32
- expect(result.customHue).toBe(10);
33
- expect(result.customSaturation).toBe(0.8);
34
- // theme not provided → default
35
- expect(result.theme).toBe(DEFAULT_APPEARANCE_CONFIG.theme);
36
- });
37
- it("migrates the desktop Tauri snake_case shape", () => {
38
- const result = migrateAppearanceConfig({
39
- interior_color_preset: "ember",
40
- custom_soul_color: { hue: 30, saturation: 0.9 },
41
- });
42
- expect(result.colorPreset).toBe("ember");
43
- expect(result.customHue).toBe(30);
44
- expect(result.customSaturation).toBe(0.9);
45
- });
46
- it("prefers canonical colorPreset over legacy keys when both present", () => {
47
- const result = migrateAppearanceConfig({
48
- colorPreset: "cyan",
49
- preset: "rose",
50
- interior_color_preset: "amber",
51
- });
52
- expect(result.colorPreset).toBe("cyan");
53
- });
54
- it("falls through preset priority: colorPreset → preset → interior_color_preset", () => {
55
- expect(migrateAppearanceConfig({ preset: "rose" }).colorPreset).toBe("rose");
56
- expect(migrateAppearanceConfig({ interior_color_preset: "amber" }).colorPreset).toBe("amber");
57
- });
58
- it("prefers canonical customHue/customSaturation over desktop snake_case", () => {
59
- const result = migrateAppearanceConfig({
60
- customHue: 100,
61
- customSaturation: 0.3,
62
- custom_soul_color: { hue: 200, saturation: 0.6 },
63
- });
64
- expect(result.customHue).toBe(100);
65
- expect(result.customSaturation).toBe(0.3);
66
- });
67
- it("accepts partial desktop custom_soul_color (hue only, saturation only)", () => {
68
- const hueOnly = migrateAppearanceConfig({
69
- custom_soul_color: { hue: 45 },
70
- });
71
- expect(hueOnly.customHue).toBe(45);
72
- expect(hueOnly.customSaturation).toBe(DEFAULT_APPEARANCE_CONFIG.customSaturation);
73
- const satOnly = migrateAppearanceConfig({
74
- custom_soul_color: { saturation: 0.4 },
75
- });
76
- expect(satOnly.customHue).toBe(DEFAULT_APPEARANCE_CONFIG.customHue);
77
- expect(satOnly.customSaturation).toBe(0.4);
78
- });
79
- it("accepts all three theme values", () => {
80
- expect(migrateAppearanceConfig({ theme: "light" }).theme).toBe("light");
81
- expect(migrateAppearanceConfig({ theme: "dark" }).theme).toBe("dark");
82
- expect(migrateAppearanceConfig({ theme: "system" }).theme).toBe("system");
83
- });
84
- it("falls back to default theme on invalid theme value", () => {
85
- const result = migrateAppearanceConfig({ theme: "nonsense" });
86
- expect(result.theme).toBe(DEFAULT_APPEARANCE_CONFIG.theme);
87
- });
88
- it("ignores wrong-type fields and uses defaults", () => {
89
- const result = migrateAppearanceConfig({
90
- colorPreset: 42, // wrong type
91
- customHue: "purple", // wrong type
92
- });
93
- expect(result.colorPreset).toBe(DEFAULT_APPEARANCE_CONFIG.colorPreset);
94
- expect(result.customHue).toBe(DEFAULT_APPEARANCE_CONFIG.customHue);
95
- });
96
- it("ignores unknown keys", () => {
97
- const result = migrateAppearanceConfig({
98
- colorPreset: "moonlight",
99
- unrelated: "value",
100
- });
101
- expect(result).not.toHaveProperty("unrelated");
102
- });
103
- });
104
- //# sourceMappingURL=appearance-config.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appearance-config.test.js","sourceRoot":"","sources":["../../src/__tests__/appearance-config.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=branded-ids.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"branded-ids.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/branded-ids.test.ts"],"names":[],"mappings":""}
@@ -1,70 +0,0 @@
1
- import { describe, it, expect, expectTypeOf } from "vitest";
2
- import { asMotebitId, asDeviceId, asNodeId, asGoalId, asEventId, asConversationId, asPlanId, asAllocationId, asSettlementId, asListingId, asProposalId, } from "../index.js";
3
- describe("Branded ID types", () => {
4
- it("string is assignable to branded type (backward compat)", () => {
5
- expectTypeOf().toMatchTypeOf();
6
- expectTypeOf().toMatchTypeOf();
7
- expectTypeOf().toMatchTypeOf();
8
- expectTypeOf().toMatchTypeOf();
9
- });
10
- it("branded type is assignable to string (for SQL, JSON)", () => {
11
- expectTypeOf().toMatchTypeOf();
12
- expectTypeOf().toMatchTypeOf();
13
- });
14
- it("branded types are NOT cross-assignable (catches the bug)", () => {
15
- expectTypeOf().not.toMatchTypeOf();
16
- expectTypeOf().not.toMatchTypeOf();
17
- expectTypeOf().not.toMatchTypeOf();
18
- expectTypeOf().not.toMatchTypeOf();
19
- expectTypeOf().not.toMatchTypeOf();
20
- });
21
- });
22
- describe("Branded ID branding functions", () => {
23
- it("asMotebitId brands a string as MotebitId", () => {
24
- const id = asMotebitId("test-motebit-id");
25
- expect(id).toBe("test-motebit-id");
26
- // Runtime value is a plain string
27
- expect(typeof id).toBe("string");
28
- });
29
- it("asDeviceId brands a string as DeviceId", () => {
30
- const id = asDeviceId("dev-001");
31
- expect(id).toBe("dev-001");
32
- });
33
- it("asNodeId brands a string as NodeId", () => {
34
- const id = asNodeId("node-abc");
35
- expect(id).toBe("node-abc");
36
- });
37
- it("asGoalId brands a string as GoalId", () => {
38
- const id = asGoalId("goal-xyz");
39
- expect(id).toBe("goal-xyz");
40
- });
41
- it("asEventId brands a string as EventId", () => {
42
- const id = asEventId("evt-123");
43
- expect(id).toBe("evt-123");
44
- });
45
- it("asConversationId brands a string as ConversationId", () => {
46
- const id = asConversationId("conv-456");
47
- expect(id).toBe("conv-456");
48
- });
49
- it("asPlanId brands a string as PlanId", () => {
50
- const id = asPlanId("plan-789");
51
- expect(id).toBe("plan-789");
52
- });
53
- it("asAllocationId brands a string as AllocationId", () => {
54
- const id = asAllocationId("alloc-001");
55
- expect(id).toBe("alloc-001");
56
- });
57
- it("asSettlementId brands a string as SettlementId", () => {
58
- const id = asSettlementId("settle-002");
59
- expect(id).toBe("settle-002");
60
- });
61
- it("asListingId brands a string as ListingId", () => {
62
- const id = asListingId("list-003");
63
- expect(id).toBe("list-003");
64
- });
65
- it("asProposalId brands a string as ProposalId", () => {
66
- const id = asProposalId("prop-004");
67
- expect(id).toBe("prop-004");
68
- });
69
- });
70
- //# sourceMappingURL=branded-ids.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"branded-ids.test.js","sourceRoot":"","sources":["../../src/__tests__/branded-ids.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":""}
@@ -1,194 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { SPECIES_CONSTRAINTS, TrustMode, BatteryMode, SensitivityLevel, EventType, RelationType, } from "../index";
3
- // ---------------------------------------------------------------------------
4
- // SPECIES_CONSTRAINTS
5
- // ---------------------------------------------------------------------------
6
- describe("SPECIES_CONSTRAINTS", () => {
7
- it("has the correct MAX_AROUSAL value", () => {
8
- expect(SPECIES_CONSTRAINTS.MAX_AROUSAL).toBe(0.35);
9
- });
10
- it("has the correct SMILE_DELTA_MAX value", () => {
11
- expect(SPECIES_CONSTRAINTS.SMILE_DELTA_MAX).toBe(0.08);
12
- });
13
- it("has the correct GLOW_DELTA_MAX value", () => {
14
- expect(SPECIES_CONSTRAINTS.GLOW_DELTA_MAX).toBe(0.15);
15
- });
16
- it("has the correct DRIFT_VARIATION_MAX value", () => {
17
- expect(SPECIES_CONSTRAINTS.DRIFT_VARIATION_MAX).toBe(0.1);
18
- });
19
- it("is frozen (immutable)", () => {
20
- expect(Object.isFrozen(SPECIES_CONSTRAINTS)).toBe(true);
21
- });
22
- });
23
- // ---------------------------------------------------------------------------
24
- // Enums
25
- // ---------------------------------------------------------------------------
26
- describe("TrustMode enum", () => {
27
- it("has expected values", () => {
28
- expect(TrustMode.Full).toBe("full");
29
- expect(TrustMode.Guarded).toBe("guarded");
30
- expect(TrustMode.Minimal).toBe("minimal");
31
- });
32
- });
33
- describe("BatteryMode enum", () => {
34
- it("has expected values", () => {
35
- expect(BatteryMode.Normal).toBe("normal");
36
- expect(BatteryMode.LowPower).toBe("low_power");
37
- expect(BatteryMode.Critical).toBe("critical");
38
- });
39
- });
40
- describe("SensitivityLevel enum", () => {
41
- it("has expected values", () => {
42
- expect(SensitivityLevel.None).toBe("none");
43
- expect(SensitivityLevel.Personal).toBe("personal");
44
- expect(SensitivityLevel.Medical).toBe("medical");
45
- expect(SensitivityLevel.Financial).toBe("financial");
46
- expect(SensitivityLevel.Secret).toBe("secret");
47
- });
48
- });
49
- describe("EventType enum", () => {
50
- it("has all expected event types", () => {
51
- expect(EventType.IdentityCreated).toBe("identity_created");
52
- expect(EventType.StateUpdated).toBe("state_updated");
53
- expect(EventType.MemoryFormed).toBe("memory_formed");
54
- expect(EventType.MemoryDecayed).toBe("memory_decayed");
55
- expect(EventType.MemoryDeleted).toBe("memory_deleted");
56
- expect(EventType.MemoryAccessed).toBe("memory_accessed");
57
- expect(EventType.ProviderSwapped).toBe("provider_swapped");
58
- expect(EventType.ExportRequested).toBe("export_requested");
59
- expect(EventType.DeleteRequested).toBe("delete_requested");
60
- expect(EventType.SyncCompleted).toBe("sync_completed");
61
- expect(EventType.AuditEntry).toBe("audit_entry");
62
- });
63
- });
64
- describe("RelationType enum", () => {
65
- it("has expected values", () => {
66
- expect(RelationType.Related).toBe("related");
67
- expect(RelationType.CausedBy).toBe("caused_by");
68
- expect(RelationType.FollowedBy).toBe("followed_by");
69
- expect(RelationType.ConflictsWith).toBe("conflicts_with");
70
- expect(RelationType.Reinforces).toBe("reinforces");
71
- expect(RelationType.PartOf).toBe("part_of");
72
- });
73
- });
74
- // ---------------------------------------------------------------------------
75
- // Type construction checks (compile-time + runtime shape validation)
76
- // ---------------------------------------------------------------------------
77
- describe("Type construction", () => {
78
- it("constructs a valid MotebitIdentity", () => {
79
- const identity = {
80
- motebit_id: "test-id",
81
- created_at: Date.now(),
82
- owner_id: "owner-1",
83
- version_clock: 0,
84
- };
85
- expect(identity.motebit_id).toBe("test-id");
86
- expect(identity.version_clock).toBe(0);
87
- });
88
- it("constructs a valid MotebitState", () => {
89
- const state = {
90
- attention: 0.5,
91
- processing: 0.3,
92
- confidence: 0.7,
93
- affect_valence: -0.2,
94
- affect_arousal: 0.1,
95
- social_distance: 0.4,
96
- curiosity: 0.6,
97
- trust_mode: TrustMode.Guarded,
98
- battery_mode: BatteryMode.Normal,
99
- };
100
- expect(state.attention).toBe(0.5);
101
- expect(state.trust_mode).toBe(TrustMode.Guarded);
102
- });
103
- it("constructs a valid BehaviorCues", () => {
104
- const cues = {
105
- hover_distance: 0.4,
106
- drift_amplitude: 0.02,
107
- glow_intensity: 0.3,
108
- eye_dilation: 0.3,
109
- smile_curvature: 0,
110
- speaking_activity: 0,
111
- };
112
- expect(cues.hover_distance).toBe(0.4);
113
- });
114
- it("constructs a valid MemoryNode", () => {
115
- const node = {
116
- node_id: "n1",
117
- motebit_id: "m1",
118
- content: "hello",
119
- embedding: [0.1, 0.2],
120
- confidence: 0.9,
121
- sensitivity: SensitivityLevel.None,
122
- created_at: Date.now(),
123
- last_accessed: Date.now(),
124
- half_life: 7 * 24 * 60 * 60 * 1000,
125
- tombstoned: false,
126
- pinned: false,
127
- };
128
- expect(node.tombstoned).toBe(false);
129
- });
130
- it("constructs a valid EventLogEntry", () => {
131
- const entry = {
132
- event_id: "e1",
133
- motebit_id: "m1",
134
- timestamp: Date.now(),
135
- event_type: EventType.StateUpdated,
136
- payload: { key: "value" },
137
- version_clock: 1,
138
- tombstoned: false,
139
- };
140
- expect(entry.event_type).toBe(EventType.StateUpdated);
141
- });
142
- it("constructs a valid SyncCursor", () => {
143
- const cursor = {
144
- motebit_id: "m1",
145
- last_event_id: "e1",
146
- last_version_clock: 5,
147
- };
148
- expect(cursor.last_version_clock).toBe(5);
149
- });
150
- it("constructs a valid ConflictEdge", () => {
151
- const localEvent = {
152
- event_id: "e1",
153
- motebit_id: "m1",
154
- timestamp: 100,
155
- event_type: EventType.StateUpdated,
156
- payload: {},
157
- version_clock: 1,
158
- tombstoned: false,
159
- };
160
- const remoteEvent = {
161
- event_id: "e2",
162
- motebit_id: "m1",
163
- timestamp: 101,
164
- event_type: EventType.StateUpdated,
165
- payload: {},
166
- version_clock: 1,
167
- tombstoned: false,
168
- };
169
- const conflict = {
170
- local_event: localEvent,
171
- remote_event: remoteEvent,
172
- resolution: "unresolved",
173
- };
174
- expect(conflict.resolution).toBe("unresolved");
175
- });
176
- it("constructs a valid ExportManifest", () => {
177
- const manifest = {
178
- motebit_id: "m1",
179
- exported_at: Date.now(),
180
- identity: {
181
- motebit_id: "m1",
182
- created_at: Date.now(),
183
- owner_id: "owner",
184
- version_clock: 0,
185
- },
186
- memories: [],
187
- edges: [],
188
- events: [],
189
- audit_log: [],
190
- };
191
- expect(manifest.memories).toHaveLength(0);
192
- });
193
- });
194
- //# sourceMappingURL=index.test.js.map