@vxnus/siduri 0.1.8 → 0.1.11

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 (114) hide show
  1. package/README.md +3 -4
  2. package/dist/builtin-manifests.d.ts +2 -0
  3. package/dist/builtin-manifests.js +492 -0
  4. package/dist/clean-machine-e2e.test.d.ts +1 -0
  5. package/dist/clean-machine-e2e.test.js +236 -0
  6. package/dist/configurators/behavior.d.ts +2 -0
  7. package/dist/configurators/behavior.js +36 -0
  8. package/dist/configurators/body.d.ts +2 -0
  9. package/dist/configurators/body.js +60 -0
  10. package/dist/configurators/brain.d.ts +6 -0
  11. package/dist/configurators/brain.js +80 -0
  12. package/dist/configurators/ear.d.ts +2 -0
  13. package/dist/configurators/ear.js +28 -0
  14. package/dist/configurators/hands.d.ts +2 -0
  15. package/dist/configurators/hands.js +27 -0
  16. package/dist/configurators/index.d.ts +24 -0
  17. package/dist/configurators/index.js +78 -0
  18. package/dist/configurators/knowledge.d.ts +6 -0
  19. package/dist/configurators/knowledge.js +100 -0
  20. package/dist/configurators/memory.d.ts +2 -0
  21. package/dist/configurators/memory.js +44 -0
  22. package/dist/configurators/mouth.d.ts +2 -0
  23. package/dist/configurators/mouth.js +15 -0
  24. package/dist/configurators/observation.d.ts +2 -0
  25. package/dist/configurators/observation.js +12 -0
  26. package/dist/configurators/types.d.ts +12 -0
  27. package/dist/configurators/types.js +2 -0
  28. package/dist/configurators/vision.d.ts +2 -0
  29. package/dist/configurators/vision.js +39 -0
  30. package/dist/configurators/voice.d.ts +2 -0
  31. package/dist/configurators/voice.js +477 -0
  32. package/dist/configurators.test.d.ts +1 -0
  33. package/dist/configurators.test.js +331 -0
  34. package/dist/db.d.ts +25 -0
  35. package/dist/db.js +152 -0
  36. package/dist/discovery.d.ts +13 -0
  37. package/dist/discovery.js +87 -0
  38. package/dist/discovery.test.d.ts +1 -0
  39. package/dist/discovery.test.js +69 -0
  40. package/dist/doctor-db.test.d.ts +1 -0
  41. package/dist/doctor-db.test.js +141 -0
  42. package/dist/doctor.d.ts +19 -0
  43. package/dist/doctor.js +249 -0
  44. package/dist/generator.d.ts +20 -0
  45. package/dist/generator.js +615 -0
  46. package/dist/generator.test.d.ts +1 -0
  47. package/dist/generator.test.js +197 -0
  48. package/dist/index.d.ts +20 -0
  49. package/dist/index.js +395 -0
  50. package/dist/manifest.d.ts +33 -0
  51. package/dist/manifest.js +40 -0
  52. package/dist/providers/knowledge-hub.d.ts +37 -0
  53. package/dist/providers/knowledge-hub.js +141 -0
  54. package/dist/providers/openrouter.d.ts +32 -0
  55. package/dist/providers/openrouter.js +201 -0
  56. package/dist/release-check.d.ts +9 -0
  57. package/dist/release-check.js +133 -0
  58. package/dist/runtime-parity.test.d.ts +1 -0
  59. package/dist/runtime-parity.test.js +141 -0
  60. package/dist/schema-validator.d.ts +9 -0
  61. package/dist/schema-validator.js +107 -0
  62. package/dist/web-dist/404/index.html +1 -0
  63. package/dist/web-dist/404.html +1 -0
  64. package/dist/web-dist/__next.__PAGE__.txt +35 -0
  65. package/dist/web-dist/__next._full.txt +32 -0
  66. package/dist/web-dist/__next._tree.txt +4 -0
  67. package/dist/web-dist/_next/static/chunks/09y7khbmco_v4.js +1 -0
  68. package/dist/web-dist/_next/static/chunks/0cz1d0mv5g_q7.js +1 -0
  69. package/dist/web-dist/_next/static/chunks/0uwih7sydv413.js +1 -0
  70. package/dist/web-dist/_next/static/chunks/0xhe1hasjan-9.css +1 -0
  71. package/dist/web-dist/_next/static/chunks/1_yae15ffa5f6.js +1 -0
  72. package/dist/web-dist/_next/static/chunks/2_duynll0m51m.js +30 -0
  73. package/dist/web-dist/_next/static/chunks/2kcqevsmv6kh2.js +31 -0
  74. package/dist/web-dist/_next/static/chunks/2s3d1bfr0l4b0.js +1 -0
  75. package/dist/web-dist/_next/static/chunks/32z87id9k6i2z.js +22 -0
  76. package/dist/web-dist/_next/static/chunks/3bx2gs3idjmo1.js +1 -0
  77. package/dist/web-dist/_next/static/chunks/turbopack-3eipe4c-imn5l.js +1 -0
  78. package/dist/web-dist/_next/static/media/apple-icon.2g7-yefdphkmy.png +0 -0
  79. package/dist/web-dist/_next/static/media/favicon.3rlors1ui1gw9.ico +0 -0
  80. package/dist/web-dist/_next/static/media/icon.0580nb9h-ugue.svg +4 -0
  81. package/dist/web-dist/_next/static/pWHUixFDDvANZeAf-shqT/_buildManifest.js +11 -0
  82. package/dist/web-dist/_next/static/pWHUixFDDvANZeAf-shqT/_clientMiddlewareManifest.js +1 -0
  83. package/dist/web-dist/_next/static/pWHUixFDDvANZeAf-shqT/_ssgManifest.js +1 -0
  84. package/dist/web-dist/_not-found/__next._full.txt +17 -0
  85. package/dist/web-dist/_not-found/__next._not-found.__PAGE__.txt +23 -0
  86. package/dist/web-dist/_not-found/__next._tree.txt +3 -0
  87. package/dist/web-dist/_not-found/index.html +1 -0
  88. package/dist/web-dist/_not-found/index.txt +17 -0
  89. package/dist/web-dist/apple-icon.png +0 -0
  90. package/dist/web-dist/apple-touch-icon.png +0 -0
  91. package/dist/web-dist/chat/__next._full.txt +18 -0
  92. package/dist/web-dist/chat/__next._tree.txt +3 -0
  93. package/dist/web-dist/chat/__next.chat.__PAGE__.txt +24 -0
  94. package/dist/web-dist/chat/index.html +1 -0
  95. package/dist/web-dist/chat/index.txt +18 -0
  96. package/dist/web-dist/favicon.ico +0 -0
  97. package/dist/web-dist/favicon.svg +4 -0
  98. package/dist/web-dist/icon.svg +4 -0
  99. package/dist/web-dist/index.html +1 -0
  100. package/dist/web-dist/index.txt +32 -0
  101. package/dist/web-dist/live2d/live2dcubismcore.min.js +9 -0
  102. package/dist/web-dist/logo-circle.png +0 -0
  103. package/dist/web-dist/logo-circle.svg +4 -0
  104. package/dist/web-dist/logo-white.svg +3 -0
  105. package/dist/web-dist/logo.png +0 -0
  106. package/dist/web-dist/logo.svg +3 -0
  107. package/dist/web-dist/operator/__next._full.txt +18 -0
  108. package/dist/web-dist/operator/__next._tree.txt +3 -0
  109. package/dist/web-dist/operator/__next.operator.__PAGE__.txt +24 -0
  110. package/dist/web-dist/operator/index.html +1 -0
  111. package/dist/web-dist/operator/index.txt +18 -0
  112. package/dist/web-template.d.ts +2 -0
  113. package/dist/web-template.js +557 -0
  114. package/package.json +1 -1
package/README.md CHANGED
@@ -13,15 +13,15 @@ npx @vxnus/siduri create my-companion
13
13
  - **Node.js**: `v20.0.0` or newer
14
14
  - **LLM API Key**: e.g. `OPENROUTER_API_KEY` for Brain organ
15
15
  - **Optional Local Services**:
16
- - **Docker**: For running local PostgreSQL database (`docker compose up -d` / `npm run services:up`) and/or VOICEVOX engine.
17
- - *Non-Docker Alternatives*: Cloud databases (Supabase, Neon) or standalone [VOICEVOX Desktop App](https://voicevox.hiroshiba.jp/).
16
+ - **PostgreSQL**: Required if PostgreSQL memory organ is enabled (local PostgreSQL server or cloud Supabase/Neon).
17
+ - **VOICEVOX**: For voice synthesis (auto-downloaded at runtime by default, or connect to standalone app).
18
18
 
19
19
  ## Features
20
20
 
21
21
  - **Manifest-Driven Organ Discovery**: Dynamically discovers installed `@siduri-x/*` organs and generates custom, standalone ESM instance code.
22
22
  - **Interactive Configuration Wizard**: Model catalog discovery for OpenRouter, manifest inspection for E Knowledge Hub, and guided organ parameters.
23
23
  - **Zero Monolithic Bundling**: Scaffolds standard Node.js ESM projects with explicit dependency trees.
24
- - **Diagnostics (`siduri doctor`)**: Runs environment variable validation, external service checks, database health probes, and organ-specific assertions.
24
+ - **Diagnostics (`siduri doctor`)**: Runs environment variable validation, schema conformance checks, external service checks, database health probes, and organ-specific assertions.
25
25
  - **Database Migrations (`siduri db push`)**: Inspects database-owning organs (such as `@siduri-x/memory`) and executes SQL migrations with SHA-256 integrity checksums.
26
26
 
27
27
  ## CLI Usage
@@ -41,7 +41,6 @@ my-companion/
41
41
  ├── siduri.schema.json # Composed JSON Schema from organ manifests
42
42
  ├── .env.example # Only environment variables required by selected organs
43
43
  ├── README.md # Instance-specific guide
44
- ├── docker-compose.yml # Scaffolds PostgreSQL / VOICEVOX when selected
45
44
  └── src/
46
45
  └── index.js # Direct runtime bootstrapping with explicit organ factories
47
46
  ```
@@ -0,0 +1,2 @@
1
+ import { OrganManifest } from './manifest';
2
+ export declare const BUILTIN_ORGAN_MANIFESTS: OrganManifest[];
@@ -0,0 +1,492 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BUILTIN_ORGAN_MANIFESTS = void 0;
4
+ exports.BUILTIN_ORGAN_MANIFESTS = [
5
+ {
6
+ name: '@siduri-x/behavior',
7
+ organType: 'behavior',
8
+ version: '1.0.6',
9
+ displayName: 'Behavior (Active Self Directives)',
10
+ description: 'Atomic directive state machine and personality projection compiler',
11
+ entrypoint: './dist/index.js',
12
+ factory: 'ActiveSelfCompiler',
13
+ configKey: 'behavior',
14
+ configSchema: {
15
+ type: 'object',
16
+ required: ['provider'],
17
+ properties: {
18
+ provider: {
19
+ type: 'string',
20
+ enum: ['active_self', 'none']
21
+ },
22
+ preset: {
23
+ type: 'string'
24
+ }
25
+ }
26
+ },
27
+ environment: [],
28
+ services: [],
29
+ database: null,
30
+ healthCheck: null
31
+ },
32
+ {
33
+ name: '@siduri-x/body',
34
+ organType: 'body',
35
+ version: '1.0.4',
36
+ displayName: 'Body (Live2D & Avatar State)',
37
+ description: 'Renderer-agnostic avatar expression and embodiment event adapter',
38
+ entrypoint: './dist/index.js',
39
+ factory: 'NeutralBodyOrgan',
40
+ configKey: 'body',
41
+ configSchema: {
42
+ type: 'object',
43
+ required: ['provider'],
44
+ properties: {
45
+ provider: {
46
+ type: 'string',
47
+ enum: ['live2d', 'none']
48
+ },
49
+ initialExpression: {
50
+ type: 'string',
51
+ default: 'neutral'
52
+ },
53
+ modelPath: {
54
+ type: 'string'
55
+ },
56
+ modelUrl: {
57
+ type: 'string'
58
+ }
59
+ }
60
+ },
61
+ environment: [],
62
+ services: [],
63
+ database: null,
64
+ healthCheck: null
65
+ },
66
+ {
67
+ name: '@siduri-x/brain',
68
+ organType: 'brain',
69
+ version: '1.0.5',
70
+ displayName: 'Brain (Cognition & Planning)',
71
+ description: 'Provider-neutral LLM reasoning, response planning, and proposal generation',
72
+ entrypoint: './dist/index.js',
73
+ factory: 'OpenRouterBrain',
74
+ configKey: 'brain',
75
+ configSchema: {
76
+ type: 'object',
77
+ required: ['provider', 'model'],
78
+ properties: {
79
+ provider: {
80
+ type: 'string',
81
+ enum: ['openrouter', 'openai-compatible']
82
+ },
83
+ model: {
84
+ type: 'string'
85
+ },
86
+ apiKey: {
87
+ type: 'string'
88
+ },
89
+ apiKeyEnv: {
90
+ type: 'string',
91
+ default: 'OPENROUTER_API_KEY'
92
+ },
93
+ baseUrl: {
94
+ type: 'string'
95
+ }
96
+ }
97
+ },
98
+ environment: [
99
+ {
100
+ name: 'OPENROUTER_API_KEY',
101
+ required: false,
102
+ secret: true,
103
+ description: 'API key for OpenRouter managed routing'
104
+ },
105
+ {
106
+ name: 'OPENAI_COMPATIBLE_API_KEY',
107
+ required: false,
108
+ secret: true,
109
+ description: 'API key for OpenAI-compatible endpoint'
110
+ }
111
+ ],
112
+ services: [
113
+ {
114
+ name: 'LLM Inference API',
115
+ kind: 'http_service',
116
+ optional: false
117
+ }
118
+ ],
119
+ database: null,
120
+ healthCheck: 'probeBrainHealth'
121
+ },
122
+ {
123
+ name: '@siduri-x/ear',
124
+ organType: 'ear',
125
+ version: '1.0.2',
126
+ displayName: 'Ear (Perception Ingress)',
127
+ description: 'Multi-modal sensory input ingestion, transcription bounds, and mime validation',
128
+ entrypoint: './dist/index.js',
129
+ factory: 'DefaultEarOrgan',
130
+ configKey: 'ear',
131
+ configSchema: {
132
+ type: 'object',
133
+ properties: {
134
+ defaultSource: {
135
+ type: 'string',
136
+ default: 'text_chat'
137
+ },
138
+ maxTextLength: {
139
+ type: 'number',
140
+ default: 4000
141
+ },
142
+ maxAudioBytes: {
143
+ type: 'number',
144
+ default: 10485760
145
+ }
146
+ }
147
+ },
148
+ environment: [],
149
+ services: [],
150
+ database: null,
151
+ healthCheck: null
152
+ },
153
+ {
154
+ name: '@siduri-x/hands',
155
+ organType: 'hands',
156
+ version: '1.0.4',
157
+ displayName: 'Hands (MCP Tool Execution)',
158
+ description: 'Model Context Protocol tool management and cryptographically authorized action execution',
159
+ entrypoint: './dist/index.js',
160
+ factory: 'DefaultHandsOrgan',
161
+ configKey: 'hands',
162
+ configSchema: {
163
+ type: 'object',
164
+ properties: {
165
+ defaultTimeoutMs: {
166
+ type: 'number',
167
+ default: 10000
168
+ },
169
+ providers: {
170
+ type: 'array',
171
+ items: {
172
+ type: 'object',
173
+ required: ['serverName'],
174
+ properties: {
175
+ serverName: {
176
+ type: 'string'
177
+ },
178
+ baseUrl: {
179
+ type: 'string'
180
+ },
181
+ command: {
182
+ type: 'string'
183
+ },
184
+ args: {
185
+ type: 'array',
186
+ items: {
187
+ type: 'string'
188
+ }
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+ },
195
+ environment: [
196
+ {
197
+ name: 'ACTION_POLICY_SECRET',
198
+ required: false,
199
+ secret: true,
200
+ description: 'HMAC secret key for signing and verifying action execution capabilities (required in production)'
201
+ }
202
+ ],
203
+ services: [],
204
+ database: null,
205
+ healthCheck: 'probeHandsHealth'
206
+ },
207
+ {
208
+ name: '@siduri-x/knowledge',
209
+ organType: 'knowledge',
210
+ version: '1.0.2',
211
+ displayName: 'Knowledge (E-Compatible Cited Facts)',
212
+ description: 'Factual context retrieval from local or hosted E Knowledge packs',
213
+ entrypoint: './dist/index.js',
214
+ factory: 'EKnowledgeAdapter',
215
+ configKey: 'knowledge',
216
+ configSchema: {
217
+ type: 'object',
218
+ required: ['provider'],
219
+ properties: {
220
+ provider: {
221
+ type: 'string',
222
+ enum: ['e-knowledge', 'e-remote', 'e-hub', 'none']
223
+ },
224
+ packPath: {
225
+ type: 'string'
226
+ },
227
+ baseUrl: {
228
+ type: 'string'
229
+ },
230
+ registryUrl: {
231
+ type: 'string'
232
+ },
233
+ packId: {
234
+ type: 'string'
235
+ },
236
+ timeoutMs: {
237
+ type: 'number',
238
+ default: 5000
239
+ },
240
+ preferredMode: {
241
+ type: 'string',
242
+ enum: ['lexical', 'semantic', 'hybrid'],
243
+ default: 'lexical'
244
+ }
245
+ }
246
+ },
247
+ environment: [
248
+ {
249
+ name: 'SIDURI_KNOWLEDGE_PACK',
250
+ required: false,
251
+ secret: false,
252
+ description: 'Path to local E knowledge pack'
253
+ },
254
+ {
255
+ name: 'SIDURI_KNOWLEDGE_REGISTRY_URL',
256
+ required: false,
257
+ secret: false,
258
+ default: 'https://e.vxnus.xyz/api/v1/knowledge',
259
+ description: 'URL of the E Knowledge Hub registry'
260
+ }
261
+ ],
262
+ services: [
263
+ {
264
+ name: 'E Knowledge Hub',
265
+ kind: 'http_service',
266
+ optional: true
267
+ }
268
+ ],
269
+ database: null,
270
+ healthCheck: null
271
+ },
272
+ {
273
+ name: '@siduri-x/memory',
274
+ organType: 'memory',
275
+ version: '1.0.7',
276
+ displayName: 'Memory (PostgreSQL FTS Claims)',
277
+ description: 'Relational semantic claims with Full-Text Search and companion isolation',
278
+ entrypoint: './dist/index.js',
279
+ factory: 'PostgresMemoryOrgan',
280
+ configKey: 'memory',
281
+ configSchema: {
282
+ type: 'object',
283
+ required: ['provider'],
284
+ properties: {
285
+ provider: {
286
+ type: 'string',
287
+ enum: ['postgres']
288
+ },
289
+ deployment: {
290
+ type: 'string',
291
+ enum: ['local', 'neon', 'supabase', 'other']
292
+ },
293
+ connectionString: {
294
+ type: 'string'
295
+ },
296
+ maxConnections: {
297
+ type: 'number',
298
+ default: 10
299
+ }
300
+ }
301
+ },
302
+ environment: [
303
+ {
304
+ name: 'DATABASE_URL',
305
+ required: true,
306
+ secret: true,
307
+ default: 'postgresql://postgres:postgres@localhost:5432/siduri',
308
+ description: 'PostgreSQL connection string'
309
+ }
310
+ ],
311
+ services: [
312
+ {
313
+ name: 'PostgreSQL Database',
314
+ kind: 'database',
315
+ optional: false
316
+ }
317
+ ],
318
+ database: {
319
+ engine: 'postgres',
320
+ migrationsDir: './migrations'
321
+ },
322
+ healthCheck: 'probeMemoryHealth'
323
+ },
324
+ {
325
+ name: '@siduri-x/observation',
326
+ organType: 'observation',
327
+ version: '1.0.3',
328
+ displayName: 'Observation (Screen Perception & Frame Ingest)',
329
+ description: 'Screen capture frame ingest, SHA-256 deduplication, and visual grounding for Eyes/Vision',
330
+ entrypoint: './dist/index.js',
331
+ factory: 'FixtureObservationOrgan',
332
+ configKey: 'observation',
333
+ configSchema: {
334
+ type: 'object',
335
+ properties: {}
336
+ },
337
+ environment: [],
338
+ services: [],
339
+ database: null,
340
+ healthCheck: null
341
+ },
342
+ {
343
+ name: '@siduri-x/vision',
344
+ organType: 'vision',
345
+ version: '1.0.2',
346
+ displayName: 'Vision (Visual Perception & OCR)',
347
+ description: 'Image inspection, cropping, and multi-pass OCR perception adapter',
348
+ entrypoint: './dist/index.js',
349
+ factory: 'OpenRouterVisionAdapter',
350
+ configKey: 'vision',
351
+ configSchema: {
352
+ type: 'object',
353
+ required: ['provider'],
354
+ properties: {
355
+ provider: {
356
+ type: 'string',
357
+ enum: ['openrouter', 'none']
358
+ },
359
+ model: {
360
+ type: 'string',
361
+ default: 'gpt-4-vision'
362
+ },
363
+ apiKey: {
364
+ type: 'string'
365
+ },
366
+ baseUrl: {
367
+ type: 'string'
368
+ }
369
+ }
370
+ },
371
+ environment: [
372
+ {
373
+ name: 'OPENROUTER_API_KEY',
374
+ required: false,
375
+ secret: true,
376
+ description: 'API key for vision model inference'
377
+ }
378
+ ],
379
+ services: [
380
+ {
381
+ name: 'Vision Inference API',
382
+ kind: 'http_service',
383
+ optional: false
384
+ }
385
+ ],
386
+ database: null,
387
+ healthCheck: null
388
+ },
389
+ {
390
+ name: '@siduri-x/voice',
391
+ organType: 'voice',
392
+ version: '1.0.5',
393
+ displayName: 'Voice (VOICEVOX Speech Synthesis)',
394
+ description: 'Queued speech synthesis and audio rendering lifecycle adapter',
395
+ entrypoint: './dist/index.js',
396
+ factory: 'VoicevoxAdapter',
397
+ configKey: 'voice',
398
+ configSchema: {
399
+ type: 'object',
400
+ required: ['provider'],
401
+ properties: {
402
+ provider: {
403
+ type: 'string',
404
+ enum: ['voicevox', 'none']
405
+ },
406
+ speakerId: {
407
+ type: 'number',
408
+ default: 1
409
+ },
410
+ baseUrl: {
411
+ type: 'string',
412
+ default: 'http://localhost:50021'
413
+ },
414
+ maxQueueDepth: {
415
+ type: 'number',
416
+ default: 50
417
+ },
418
+ rvc: {
419
+ type: 'object',
420
+ properties: {
421
+ enabled: { type: 'boolean', default: false },
422
+ serviceUrl: { type: 'string', default: 'http://localhost:50055' },
423
+ modelName: { type: 'string' },
424
+ modelPath: { type: 'string' },
425
+ indexPath: { type: 'string' },
426
+ pitchShift: { type: 'number', default: 0 },
427
+ f0Method: { type: 'string', enum: ['rmvpe', 'pm', 'harvest', 'crepe'], default: 'rmvpe' },
428
+ indexRate: { type: 'number', default: 0.75 }
429
+ }
430
+ }
431
+ }
432
+ },
433
+ environment: [
434
+ {
435
+ name: 'VOICEVOX_URL',
436
+ required: false,
437
+ secret: false,
438
+ default: 'http://localhost:50021',
439
+ description: 'Base URL of the running VOICEVOX engine'
440
+ },
441
+ {
442
+ name: 'RVC_SERVICE_URL',
443
+ required: false,
444
+ secret: false,
445
+ default: 'http://localhost:50055',
446
+ description: 'Base URL of headless RVC voice conversion microservice'
447
+ }
448
+ ],
449
+ services: [
450
+ {
451
+ name: 'VOICEVOX Engine',
452
+ kind: 'http_service',
453
+ optional: false
454
+ },
455
+ {
456
+ name: 'RVC Headless Service',
457
+ kind: 'http_service',
458
+ optional: true
459
+ }
460
+ ],
461
+ database: null,
462
+ healthCheck: null
463
+ },
464
+ {
465
+ name: '@siduri-x/mouth',
466
+ organType: 'mouth',
467
+ version: '1.0.0',
468
+ displayName: 'Mouth (Communication & UI Delivery)',
469
+ description: 'Decoupled output delivery organ formatting cognitive decisions for web interfaces',
470
+ entrypoint: './dist/index.js',
471
+ factory: 'DefaultMouthOrgan',
472
+ configKey: 'mouth',
473
+ configSchema: {
474
+ type: 'object',
475
+ properties: {
476
+ defaultMedium: {
477
+ type: 'string',
478
+ enum: ['web'],
479
+ default: 'web'
480
+ },
481
+ maxTextLength: {
482
+ type: 'number',
483
+ default: 8000
484
+ }
485
+ }
486
+ },
487
+ environment: [],
488
+ services: [],
489
+ database: null,
490
+ healthCheck: null
491
+ }
492
+ ];
@@ -0,0 +1 @@
1
+ export {};