@chatlychat/world 0.0.0-stage → 0.2.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.
Files changed (88) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/LICENSE +21 -0
  3. package/README.md +184 -2
  4. package/dist/agent.d.ts +63 -0
  5. package/dist/agent.d.ts.map +1 -0
  6. package/dist/agent.js +251 -0
  7. package/dist/agent.js.map +1 -0
  8. package/dist/bubble.d.ts +36 -0
  9. package/dist/bubble.d.ts.map +1 -0
  10. package/dist/bubble.js +108 -0
  11. package/dist/bubble.js.map +1 -0
  12. package/dist/capabilities.d.ts +77 -0
  13. package/dist/capabilities.d.ts.map +1 -0
  14. package/dist/capabilities.js +129 -0
  15. package/dist/capabilities.js.map +1 -0
  16. package/dist/cards.d.ts +51 -0
  17. package/dist/cards.d.ts.map +1 -0
  18. package/dist/cards.js +136 -0
  19. package/dist/cards.js.map +1 -0
  20. package/dist/composer.d.ts +25 -0
  21. package/dist/composer.d.ts.map +1 -0
  22. package/dist/composer.js +53 -0
  23. package/dist/composer.js.map +1 -0
  24. package/dist/handlers.d.ts +26 -0
  25. package/dist/handlers.d.ts.map +1 -0
  26. package/dist/handlers.js +41 -0
  27. package/dist/handlers.js.map +1 -0
  28. package/dist/index.d.ts +27 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +25 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/input.d.ts +46 -0
  33. package/dist/input.d.ts.map +1 -0
  34. package/dist/input.js +89 -0
  35. package/dist/input.js.map +1 -0
  36. package/dist/layout.d.ts +24 -0
  37. package/dist/layout.d.ts.map +1 -0
  38. package/dist/layout.js +69 -0
  39. package/dist/layout.js.map +1 -0
  40. package/dist/model.d.ts +57 -0
  41. package/dist/model.d.ts.map +1 -0
  42. package/dist/model.js +86 -0
  43. package/dist/model.js.map +1 -0
  44. package/dist/motion.d.ts +27 -0
  45. package/dist/motion.d.ts.map +1 -0
  46. package/dist/motion.js +65 -0
  47. package/dist/motion.js.map +1 -0
  48. package/dist/panel.d.ts +77 -0
  49. package/dist/panel.d.ts.map +1 -0
  50. package/dist/panel.js +214 -0
  51. package/dist/panel.js.map +1 -0
  52. package/dist/picks.d.ts +45 -0
  53. package/dist/picks.d.ts.map +1 -0
  54. package/dist/picks.js +186 -0
  55. package/dist/picks.js.map +1 -0
  56. package/dist/selection.d.ts +14 -0
  57. package/dist/selection.d.ts.map +1 -0
  58. package/dist/selection.js +21 -0
  59. package/dist/selection.js.map +1 -0
  60. package/dist/text.d.ts +26 -0
  61. package/dist/text.d.ts.map +1 -0
  62. package/dist/text.js +100 -0
  63. package/dist/text.js.map +1 -0
  64. package/dist/theme-apply.d.ts +19 -0
  65. package/dist/theme-apply.d.ts.map +1 -0
  66. package/dist/theme-apply.js +88 -0
  67. package/dist/theme-apply.js.map +1 -0
  68. package/dist/types.d.ts +108 -0
  69. package/dist/types.d.ts.map +1 -0
  70. package/dist/types.js +41 -0
  71. package/dist/types.js.map +1 -0
  72. package/dist/visemes.d.ts +28 -0
  73. package/dist/visemes.d.ts.map +1 -0
  74. package/dist/visemes.js +42 -0
  75. package/dist/visemes.js.map +1 -0
  76. package/dist/vrm.d.ts +97 -0
  77. package/dist/vrm.d.ts.map +1 -0
  78. package/dist/vrm.js +212 -0
  79. package/dist/vrm.js.map +1 -0
  80. package/dist/world-api.d.ts +39 -0
  81. package/dist/world-api.d.ts.map +1 -0
  82. package/dist/world-api.js +2 -0
  83. package/dist/world-api.js.map +1 -0
  84. package/dist/world.d.ts +5 -0
  85. package/dist/world.d.ts.map +1 -0
  86. package/dist/world.js +414 -0
  87. package/dist/world.js.map +1 -0
  88. package/package.json +75 -3
package/dist/world.js ADDED
@@ -0,0 +1,414 @@
1
+ /**
2
+ * `createWorld` — a Chatly conversation rendered into the host's three.js
3
+ * scene.
4
+ *
5
+ * The host adds `world.root` to ITS scene and calls `world.update(dt)` from
6
+ * ITS loop; it keeps the scene, the avatars, the input and the wayfinding.
7
+ * The world draws what the conversation contains (picks, bubbles, a panel, an
8
+ * agent body), routes taps and bot-fired capabilities back, and applies the
9
+ * `worldTheme` to all of it.
10
+ */
11
+ import { embodiedAgent, expressionClip, messageEmbodiment, resolveWorldPlacement, resolveWorldTheme, } from '@chatlychat/core';
12
+ import { Group, Raycaster, Vector2, Vector3 } from 'three';
13
+ import { AgentBody } from './agent.js';
14
+ import { MAX_BUBBLES, anchorBubble, animateTyping, createTyping, defaultBubble, speakerKind, } from './bubble.js';
15
+ import { CapabilityRegistry } from './capabilities.js';
16
+ import { createComposer } from './composer.js';
17
+ import { Gaze, attachController, pickRay } from './input.js';
18
+ import { cachedLoader, gltfLoader } from './model.js';
19
+ import { Motion, enter } from './motion.js';
20
+ import { PanelRig, defaultComposer, defaultPanel, followMode, } from './panel.js';
21
+ import { createPicks, named } from './picks.js';
22
+ import { Selection } from './selection.js';
23
+ import { ensureFont } from './text.js';
24
+ import { WORLD_CONTRACT, WorldError } from './types.js';
25
+ import { readVisemes } from './visemes.js';
26
+ // A panel that tracks the head exactly is nauseating, so `locked` is not offered.
27
+ const FOLLOWS = ['none', 'lazy'];
28
+ export function createWorld(opts) {
29
+ const { conversation, camera } = opts;
30
+ const now = opts.now ?? (() => Date.now());
31
+ const onError = opts.onError ?? (() => undefined);
32
+ const announce = opts.announce ?? (() => undefined);
33
+ const r = opts.renderers;
34
+ if (r?.contract !== undefined && r.contract !== WORLD_CONTRACT.version) {
35
+ throw new WorldError('unsupported_contract', `renderers were written for contract ${String(r.contract)}; this world speaks ${String(WORLD_CONTRACT.version)}`);
36
+ }
37
+ const readReduced = () => typeof opts.reducedMotion === 'function' ? opts.reducedMotion() : (opts.reducedMotion ?? false);
38
+ let reduced = readReduced();
39
+ let baseTheme = opts.theme ?? null;
40
+ let layers = opts.themeLayers ?? [];
41
+ let scene = opts.scene ?? 'light';
42
+ const resolve = () => resolveWorldTheme(baseTheme ?? {}, { scene, layers, reducedMotion: reduced });
43
+ let theme = resolve();
44
+ ensureFont(theme.fontUrl);
45
+ const placement = resolveWorldPlacement(opts.placement, {
46
+ ...opts.abilities,
47
+ follow: (opts.abilities?.follow ?? FOLLOWS).filter((f) => f !== 'locked'),
48
+ hud: false,
49
+ });
50
+ const root = new Group();
51
+ root.name = WORLD_CONTRACT.objects.root;
52
+ const motion = new Motion(reduced);
53
+ const selection = new Selection();
54
+ const capabilities = new CapabilityRegistry(announce);
55
+ const rawLoad = opts.loadModel ?? gltfLoader(opts.loadVrm === undefined ? {} : { loadVrm: opts.loadVrm });
56
+ const loadModel = cachedLoader(rawLoad);
57
+ // The avatar is loaded once and owned; a clone of a skinned mesh would share its skeleton.
58
+ const agent = new AgentBody(theme, rawLoad, onError, reduced);
59
+ const anchors = opts.anchors ?? {};
60
+ let agentNode = null;
61
+ root.add(agent.root);
62
+ const rig = new PanelRig(root, placement, followMode(placement, opts.follow));
63
+ const unbind = capabilities.bind(conversation);
64
+ const hooks = {
65
+ hostEvent: async (event, data, action) => {
66
+ if (capabilities.has(event)) {
67
+ const rep = await capabilities.invoke(event, data, false);
68
+ await conversation.reportAction({
69
+ messageId: action.messageId,
70
+ actionId: action.actionId,
71
+ status: rep.status,
72
+ ...(rep.text === null ? {} : { text: rep.text }),
73
+ });
74
+ return true;
75
+ }
76
+ opts.onHostEvent?.(event, data);
77
+ return opts.onHostEvent !== undefined;
78
+ },
79
+ openUrl: (href) => opts.onOpenUrl?.(href),
80
+ };
81
+ const sound = (kind, at) => {
82
+ const url = theme[`sound${kind[0]?.toUpperCase() ?? ''}${kind.slice(1)}`];
83
+ if (url !== null) {
84
+ opts.onSound?.({
85
+ kind,
86
+ url,
87
+ volume: theme.soundVolume,
88
+ spatial: theme.soundSpatial && at !== undefined,
89
+ position: at === undefined ? null : at.getWorldPosition(new Vector3()),
90
+ });
91
+ }
92
+ };
93
+ const { grid, select, release, showGrid } = createPicks({
94
+ conversation,
95
+ camera,
96
+ renderers: r,
97
+ anchors,
98
+ theme: () => theme,
99
+ reduced: () => reduced,
100
+ placement,
101
+ root,
102
+ motion,
103
+ selection,
104
+ hooks,
105
+ loadModel,
106
+ onError,
107
+ sound,
108
+ });
109
+ /* ─────────────────────────── speech and panel ───────────────────────── */
110
+ const bubbles = [];
111
+ let typing = null;
112
+ const seen = new Set();
113
+ let primed = false;
114
+ const bubbleOf = (m) => named((r?.renderBubble ?? defaultBubble)({
115
+ theme,
116
+ placement,
117
+ reducedMotion: reduced,
118
+ message: m,
119
+ embodiment: messageEmbodiment(m),
120
+ streaming: m.streamState === 'streaming',
121
+ }), WORLD_CONTRACT.objects.bubble);
122
+ const speakerFor = (m) => speakerKind(m) === 'visitor'
123
+ ? (anchors.visitor ?? null)
124
+ : (anchors.speaker?.(m.authorId) ?? agentNode ?? agent.root);
125
+ const addBubble = (m) => {
126
+ const speaker = speakerFor(m);
127
+ if (speaker === null || m.body === '') {
128
+ return;
129
+ }
130
+ const node = bubbleOf(m);
131
+ root.add(node);
132
+ enter(motion, node, theme.motionEntrance);
133
+ bubbles.push({ messageId: m.id, speaker, node, body: m.body, bornAt: now() });
134
+ while (bubbles.length > MAX_BUBBLES) {
135
+ bubbles.shift()?.node.removeFromParent();
136
+ }
137
+ };
138
+ const composer = createComposer({
139
+ conversation,
140
+ onError,
141
+ onSent: () => sound('send', anchors.visitor ?? undefined),
142
+ onChange: (composingChanged) => {
143
+ if (composingChanged) {
144
+ sync(conversation.getSnapshot());
145
+ }
146
+ redrawPanel(conversation.getSnapshot());
147
+ },
148
+ });
149
+ const composerView = {
150
+ get draft() {
151
+ return composer.draft;
152
+ },
153
+ submit: () => void composer.submit(),
154
+ requestInput: () => opts.onComposeRequest?.(),
155
+ };
156
+ let panel = null;
157
+ let composerNode = null;
158
+ function redrawPanel(snap) {
159
+ panel?.removeFromParent();
160
+ composerNode?.removeFromParent();
161
+ const ctx = { theme, placement, reducedMotion: reduced };
162
+ panel = named((r?.renderPanel ?? defaultPanel)({
163
+ ...ctx,
164
+ conversation: conversation,
165
+ messages: snap.messages,
166
+ typing: snap.typing,
167
+ }), WORLD_CONTRACT.objects.panel);
168
+ const cprops = {
169
+ ...ctx,
170
+ send: async (body) => {
171
+ await conversation.send(body);
172
+ },
173
+ setComposing: (c) => composer.setComposing(c),
174
+ disabled: snap.connection === 'closed' || composer.busy,
175
+ };
176
+ composerNode = named(r?.renderComposer !== undefined
177
+ ? r.renderComposer(cprops)
178
+ : defaultComposer(cprops, composerView, placement.widthMetres), WORLD_CONTRACT.objects.composer);
179
+ const ph = (panel.userData['size'] ?? [0, 0.3])[1];
180
+ const ch = (composerNode.userData['size'] ?? [0, 0.07])[1];
181
+ panel.position.y = 0;
182
+ composerNode.position.y = -(ph / 2 + ch / 2 + 0.02);
183
+ rig.group.add(panel, composerNode);
184
+ }
185
+ /* ───────────────────────────── snapshot sync ────────────────────────── */
186
+ let lastState = null;
187
+ let lastCue = null;
188
+ let cueSeq = 0;
189
+ let agentKey = '';
190
+ /** A host's own agent body, when it supplied `renderAgent`; the default body hides behind it. */
191
+ const drawAgent = (view) => {
192
+ if (r?.renderAgent === undefined) {
193
+ return;
194
+ }
195
+ const key = `${view.state}|${view.presence?.name ?? ''}|${String(cueSeq)}`;
196
+ if (key === agentKey) {
197
+ return;
198
+ }
199
+ agentKey = key;
200
+ const node = named(r.renderAgent({
201
+ theme,
202
+ placement,
203
+ reducedMotion: reduced,
204
+ agent: view,
205
+ embodiment: lastCue,
206
+ expressionClip: expressionClip(view.presence, lastCue),
207
+ }), WORLD_CONTRACT.objects.agent);
208
+ if (node !== agentNode) {
209
+ agentNode?.removeFromParent();
210
+ agentNode = node;
211
+ root.add(node);
212
+ }
213
+ agent.root.visible = false;
214
+ agent.root.name = `${WORLD_CONTRACT.objects.agent}-default`;
215
+ };
216
+ const agentView = (snap) => {
217
+ const view = embodiedAgent(snap, {
218
+ ...(opts.presences === undefined ? {} : { presences: opts.presences }),
219
+ visitorComposing: composer.composing,
220
+ });
221
+ agent.setPresence(view.presence);
222
+ agent.setState(view.state);
223
+ drawAgent(view);
224
+ if (view.state !== lastState) {
225
+ lastState = view.state;
226
+ if (view.described !== null) {
227
+ announce(view.described);
228
+ }
229
+ }
230
+ };
231
+ function sync(snap) {
232
+ if (snap.loaded && !primed) {
233
+ // History is not replayed as speech: only what arrives from here on.
234
+ primed = true;
235
+ for (const m of snap.messages) {
236
+ if (!m.pending) {
237
+ seen.add(m.id);
238
+ }
239
+ }
240
+ const lastCards = [...snap.messages]
241
+ .reverse()
242
+ .find((m) => m.blocks?.blocks.some((b) => b.type === 'card_grid' || b.type === 'card'));
243
+ if (lastCards !== undefined) {
244
+ showGrid(lastCards);
245
+ }
246
+ }
247
+ else if (primed) {
248
+ for (const m of snap.messages) {
249
+ if (m.pending ||
250
+ seen.has(m.id) ||
251
+ m.deletedAt !== null ||
252
+ m.hiddenFromContact ||
253
+ m.kind === 'system_event') {
254
+ continue;
255
+ }
256
+ seen.add(m.id);
257
+ addBubble(m);
258
+ const fromAgent = speakerKind(m) === 'agent';
259
+ if (fromAgent) {
260
+ sound('receive', agent.root);
261
+ announce(m.body);
262
+ const cue = messageEmbodiment(m);
263
+ lastCue = cue;
264
+ cueSeq += 1;
265
+ agent.express(cue?.expression ?? null);
266
+ agent.playExpression(expressionClip(agent.presence, cue));
267
+ if (cue?.lookAt != null) {
268
+ const t = cue.lookAt;
269
+ agent.lookAt(t.target === 'visitor' ? 'visitor' : (anchors.resolve?.(t.ref) ?? null));
270
+ }
271
+ agent.setVisemes(readVisemes(m), now());
272
+ }
273
+ if (m.blocks?.blocks.some((b) => b.type === 'card_grid' || b.type === 'card')) {
274
+ showGrid(m);
275
+ }
276
+ }
277
+ // A streaming reply grows in place.
278
+ for (const b of bubbles) {
279
+ const m = snap.messages.find((x) => x.id === b.messageId);
280
+ if (m !== undefined && m.body !== b.body) {
281
+ const next = bubbleOf(m);
282
+ next.position.copy(b.node.position);
283
+ b.node.parent?.add(next);
284
+ b.node.removeFromParent();
285
+ b.node = next;
286
+ b.body = m.body;
287
+ }
288
+ }
289
+ }
290
+ if (snap.typing !== null && theme.typingLook !== 'none' && theme.typingLook !== 'avatar') {
291
+ if (typing === null) {
292
+ typing = createTyping(theme);
293
+ root.add(typing);
294
+ }
295
+ }
296
+ else if (typing !== null) {
297
+ typing.removeFromParent();
298
+ typing = null;
299
+ }
300
+ agentView(snap);
301
+ redrawPanel(snap);
302
+ }
303
+ const unsubscribe = conversation.subscribe(() => sync(conversation.getSnapshot()));
304
+ rig.group.userData['rig'] = true;
305
+ sync(conversation.getSnapshot());
306
+ /* ───────────────────────────────── frame ────────────────────────────── */
307
+ const activate = (hit) => hit.activate();
308
+ const ndc = new Vector2();
309
+ const world = {
310
+ root,
311
+ capabilities,
312
+ selection,
313
+ agent,
314
+ composer,
315
+ get theme() {
316
+ return theme;
317
+ },
318
+ placement,
319
+ get reducedMotion() {
320
+ return reduced;
321
+ },
322
+ update(dtSeconds) {
323
+ const next = readReduced();
324
+ if (next !== reduced) {
325
+ world.setReducedMotion(next);
326
+ }
327
+ const dt = dtSeconds * 1000;
328
+ const t = now();
329
+ motion.update(dt);
330
+ agent.update(dt, t, camera);
331
+ rig.update(dt, {
332
+ camera,
333
+ reduced,
334
+ agent: agentNode ?? agent.root,
335
+ place: placement.ref === null ? null : (anchors.resolve?.(placement.ref) ?? null),
336
+ wrist: anchors.wrist ?? null,
337
+ });
338
+ for (let i = bubbles.length - 1; i >= 0; i -= 1) {
339
+ const b = bubbles[i];
340
+ if (t - b.bornAt > theme.bubbleDurationMs) {
341
+ b.node.removeFromParent();
342
+ bubbles.splice(i, 1);
343
+ }
344
+ }
345
+ bubbles.forEach((b, slot) => anchorBubble(b.node, b.speaker, camera, bubbles.length - 1 - slot, root));
346
+ if (typing !== null) {
347
+ animateTyping(typing, t, reduced);
348
+ anchorBubble(typing, agentNode ?? agent.root, camera, bubbles.length, root);
349
+ }
350
+ const g = grid();
351
+ if (g !== null && !reduced) {
352
+ for (const { node } of g.nodes.values()) {
353
+ if (node.userData['float'] === true) {
354
+ node.position.y += Math.sin(t / 700 + node.position.x * 3) * 0.0004 * dt;
355
+ }
356
+ }
357
+ }
358
+ },
359
+ pick: (origin, direction) => pickRay(root, origin, direction),
360
+ pickAtPointer(x, y) {
361
+ const ray = new Raycaster();
362
+ ray.setFromCamera(ndc.set(x, y), camera);
363
+ return pickRay(root, ray.ray.origin, ray.ray.direction);
364
+ },
365
+ activate,
366
+ attachController: (c) => attachController(root, c, activate),
367
+ attachGaze: (o) => new Gaze(root, camera, o?.dwellMs ?? 1500, activate),
368
+ setReducedMotion(v) {
369
+ reduced = v;
370
+ motion.reduced = v;
371
+ agent.reduced = v;
372
+ world.setTheme(baseTheme, layers);
373
+ },
374
+ setTheme(th, l) {
375
+ baseTheme = th;
376
+ layers = l ?? layers;
377
+ theme = resolve();
378
+ agent.setTheme(theme);
379
+ ensureFont(theme.fontUrl);
380
+ sync(conversation.getSnapshot());
381
+ const g = grid();
382
+ if (g !== null) {
383
+ showGrid(g.message);
384
+ }
385
+ },
386
+ setScene(s) {
387
+ scene = s;
388
+ world.setTheme(baseTheme, layers);
389
+ },
390
+ select,
391
+ release,
392
+ cardKeys: () => [...(grid()?.nodes.keys() ?? [])],
393
+ dispose() {
394
+ unsubscribe();
395
+ unbind();
396
+ motion.clear();
397
+ agent.dispose();
398
+ root.removeFromParent();
399
+ root.traverse((o) => {
400
+ const m = o;
401
+ m.geometry?.dispose();
402
+ for (const mat of Array.isArray(m.material)
403
+ ? m.material
404
+ : m.material === undefined
405
+ ? []
406
+ : [m.material]) {
407
+ mat.dispose();
408
+ }
409
+ });
410
+ },
411
+ };
412
+ return world;
413
+ }
414
+ //# sourceMappingURL=world.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world.js","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,78 @@
1
1
  {
2
2
  "name": "@chatlychat/world",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.2.0",
4
+ "description": "Render a Chatly conversation into your three.js scene: picks, speech bubbles, a world-space panel, an embodied agent and host capabilities. You keep the scene, the avatars, the input and the wayfinding.",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/chatlychat/chatly-world#readme",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/chatlychat/chatly-world.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/chatlychat/chatly-world/issues"
13
+ },
14
+ "keywords": [
15
+ "chatly",
16
+ "chat",
17
+ "three.js",
18
+ "webxr",
19
+ "3d",
20
+ "sdk",
21
+ "vrm"
22
+ ],
23
+ "author": "Chatly",
24
+ "type": "module",
25
+ "main": "./dist/index.js",
26
+ "module": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/index.js",
32
+ "default": "./dist/index.js"
33
+ }
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "!dist/**/*.spec.*",
38
+ "README.md",
39
+ "LICENSE",
40
+ "CHANGELOG.md"
41
+ ],
42
+ "sideEffects": false,
43
+ "publishConfig": {
44
+ "access": "public",
45
+ "registry": "https://registry.npmjs.org/"
46
+ },
47
+ "engines": {
48
+ "node": ">=18"
49
+ },
50
+ "peerDependencies": {
51
+ "@chatlychat/core": "^0.3.1",
52
+ "three": ">=0.160.0",
53
+ "@pixiv/three-vrm": "^3.5.5"
54
+ },
55
+ "devDependencies": {
56
+ "@pixiv/three-vrm": "3.5.5",
57
+ "@types/node": "20.14.10",
58
+ "three": "^0.186.1",
59
+ "typescript": "5.6.2",
60
+ "vite": "5.4.8",
61
+ "vitest": "2.1.2",
62
+ "@chatlychat/core": "0.3.1",
63
+ "@livechat/config": "0.1.0"
64
+ },
65
+ "peerDependenciesMeta": {
66
+ "@pixiv/three-vrm": {
67
+ "optional": true
68
+ }
69
+ },
70
+ "scripts": {
71
+ "build": "tsc -p tsconfig.build.json",
72
+ "verify:pack": "node ../../scripts/verify-package-tarball.mjs packages/world",
73
+ "typecheck": "tsc -p tsconfig.json --noEmit",
74
+ "lint": "eslint src --max-warnings=0",
75
+ "test": "vitest run",
76
+ "example": "vite examples"
77
+ }
6
78
  }