@vxnus/siduri 0.0.6 → 0.0.7

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.
@@ -0,0 +1,2 @@
1
+ import { OrganManifest } from './manifest';
2
+ export declare const BUILTIN_ORGAN_MANIFESTS: OrganManifest[];
@@ -0,0 +1,433 @@
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.0',
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.0',
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
+ }
54
+ },
55
+ environment: [],
56
+ services: [],
57
+ database: null,
58
+ healthCheck: null
59
+ },
60
+ {
61
+ name: '@siduri-x/brain',
62
+ organType: 'brain',
63
+ version: '1.0.0',
64
+ displayName: 'Brain (Cognition & Planning)',
65
+ description: 'Provider-neutral LLM reasoning, response planning, and proposal generation',
66
+ entrypoint: './dist/index.js',
67
+ factory: 'OpenRouterBrain',
68
+ configKey: 'brain',
69
+ configSchema: {
70
+ type: 'object',
71
+ required: ['provider', 'model'],
72
+ properties: {
73
+ provider: {
74
+ type: 'string',
75
+ enum: ['openrouter', 'openai-compatible']
76
+ },
77
+ model: {
78
+ type: 'string'
79
+ },
80
+ apiKey: {
81
+ type: 'string'
82
+ },
83
+ apiKeyEnv: {
84
+ type: 'string',
85
+ default: 'OPENROUTER_API_KEY'
86
+ },
87
+ baseUrl: {
88
+ type: 'string'
89
+ }
90
+ }
91
+ },
92
+ environment: [
93
+ {
94
+ name: 'OPENROUTER_API_KEY',
95
+ required: false,
96
+ secret: true,
97
+ description: 'API key for OpenRouter managed routing'
98
+ },
99
+ {
100
+ name: 'OPENAI_COMPATIBLE_API_KEY',
101
+ required: false,
102
+ secret: true,
103
+ description: 'API key for OpenAI-compatible endpoint'
104
+ }
105
+ ],
106
+ services: [
107
+ {
108
+ name: 'LLM Inference API',
109
+ kind: 'http_service',
110
+ optional: false
111
+ }
112
+ ],
113
+ database: null,
114
+ healthCheck: 'probeBrainHealth'
115
+ },
116
+ {
117
+ name: '@siduri-x/ear',
118
+ organType: 'ear',
119
+ version: '1.0.0',
120
+ displayName: 'Ear (Perception Ingress)',
121
+ description: 'Multi-modal sensory input ingestion, transcription bounds, and mime validation',
122
+ entrypoint: './dist/index.js',
123
+ factory: 'DefaultEarOrgan',
124
+ configKey: 'ear',
125
+ configSchema: {
126
+ type: 'object',
127
+ properties: {
128
+ defaultSource: {
129
+ type: 'string',
130
+ default: 'text_chat'
131
+ },
132
+ maxTextLength: {
133
+ type: 'number',
134
+ default: 4000
135
+ },
136
+ maxAudioBytes: {
137
+ type: 'number',
138
+ default: 10485760
139
+ }
140
+ }
141
+ },
142
+ environment: [],
143
+ services: [],
144
+ database: null,
145
+ healthCheck: null
146
+ },
147
+ {
148
+ name: '@siduri-x/hands',
149
+ organType: 'hands',
150
+ version: '1.0.0',
151
+ displayName: 'Hands (MCP Tool Execution)',
152
+ description: 'Model Context Protocol tool management and cryptographically authorized action execution',
153
+ entrypoint: './dist/index.js',
154
+ factory: 'DefaultHandsOrgan',
155
+ configKey: 'hands',
156
+ configSchema: {
157
+ type: 'object',
158
+ properties: {
159
+ defaultTimeoutMs: {
160
+ type: 'number',
161
+ default: 10000
162
+ },
163
+ providers: {
164
+ type: 'array',
165
+ items: {
166
+ type: 'object',
167
+ required: ['serverName'],
168
+ properties: {
169
+ serverName: {
170
+ type: 'string'
171
+ },
172
+ baseUrl: {
173
+ type: 'string'
174
+ },
175
+ command: {
176
+ type: 'string'
177
+ },
178
+ args: {
179
+ type: 'array',
180
+ items: {
181
+ type: 'string'
182
+ }
183
+ }
184
+ }
185
+ }
186
+ }
187
+ }
188
+ },
189
+ environment: [
190
+ {
191
+ name: 'ACTION_POLICY_SECRET',
192
+ required: false,
193
+ secret: true,
194
+ description: 'HMAC secret key for signing and verifying action execution capabilities (required in production)'
195
+ }
196
+ ],
197
+ services: [],
198
+ database: null,
199
+ healthCheck: 'probeHandsHealth'
200
+ },
201
+ {
202
+ name: '@siduri-x/knowledge',
203
+ organType: 'knowledge',
204
+ version: '1.0.0',
205
+ displayName: 'Knowledge (E-Compatible Cited Facts)',
206
+ description: 'Factual context retrieval from local or hosted E Knowledge packs',
207
+ entrypoint: './dist/index.js',
208
+ factory: 'EKnowledgeAdapter',
209
+ configKey: 'knowledge',
210
+ configSchema: {
211
+ type: 'object',
212
+ required: ['provider'],
213
+ properties: {
214
+ provider: {
215
+ type: 'string',
216
+ enum: ['e-knowledge', 'e-remote', 'e-hub', 'none']
217
+ },
218
+ packPath: {
219
+ type: 'string'
220
+ },
221
+ baseUrl: {
222
+ type: 'string'
223
+ },
224
+ registryUrl: {
225
+ type: 'string'
226
+ },
227
+ packId: {
228
+ type: 'string'
229
+ },
230
+ timeoutMs: {
231
+ type: 'number',
232
+ default: 5000
233
+ },
234
+ preferredMode: {
235
+ type: 'string',
236
+ enum: ['lexical', 'semantic', 'hybrid'],
237
+ default: 'lexical'
238
+ }
239
+ }
240
+ },
241
+ environment: [
242
+ {
243
+ name: 'SIDURI_KNOWLEDGE_PACK',
244
+ required: false,
245
+ secret: false,
246
+ description: 'Path to local E knowledge pack'
247
+ },
248
+ {
249
+ name: 'SIDURI_KNOWLEDGE_REGISTRY_URL',
250
+ required: false,
251
+ secret: false,
252
+ default: 'https://e.vxnus.xyz/api/v1/knowledge',
253
+ description: 'URL of the E Knowledge Hub registry'
254
+ }
255
+ ],
256
+ services: [
257
+ {
258
+ name: 'E Knowledge Hub',
259
+ kind: 'http_service',
260
+ optional: true
261
+ }
262
+ ],
263
+ database: null,
264
+ healthCheck: null
265
+ },
266
+ {
267
+ name: '@siduri-x/memory',
268
+ organType: 'memory',
269
+ version: '1.0.0',
270
+ displayName: 'Memory (PostgreSQL FTS Claims)',
271
+ description: 'Relational semantic claims with Full-Text Search and companion isolation',
272
+ entrypoint: './dist/index.js',
273
+ factory: 'PostgresMemoryOrgan',
274
+ configKey: 'memory',
275
+ configSchema: {
276
+ type: 'object',
277
+ required: ['provider'],
278
+ properties: {
279
+ provider: {
280
+ type: 'string',
281
+ enum: ['postgres']
282
+ },
283
+ deployment: {
284
+ type: 'string',
285
+ enum: ['local', 'neon', 'supabase', 'other']
286
+ },
287
+ connectionString: {
288
+ type: 'string'
289
+ },
290
+ maxConnections: {
291
+ type: 'number',
292
+ default: 10
293
+ }
294
+ }
295
+ },
296
+ environment: [
297
+ {
298
+ name: 'DATABASE_URL',
299
+ required: true,
300
+ secret: true,
301
+ default: 'postgresql://postgres:postgres@localhost:5432/siduri',
302
+ description: 'PostgreSQL connection string'
303
+ }
304
+ ],
305
+ services: [
306
+ {
307
+ name: 'PostgreSQL Database',
308
+ kind: 'database',
309
+ optional: false
310
+ }
311
+ ],
312
+ database: {
313
+ engine: 'postgres',
314
+ migrationsDir: './migrations'
315
+ },
316
+ healthCheck: 'probeMemoryHealth'
317
+ },
318
+ {
319
+ name: '@siduri-x/observation',
320
+ organType: 'observation',
321
+ version: '1.0.0',
322
+ displayName: 'Observation (Grounded Observation Ingestion)',
323
+ description: 'Cryptographically hashed video/image observation ingest and duplicate detection',
324
+ entrypoint: './dist/index.js',
325
+ factory: 'FixtureObservationOrgan',
326
+ configKey: 'observation',
327
+ configSchema: {
328
+ type: 'object',
329
+ properties: {}
330
+ },
331
+ environment: [],
332
+ services: [],
333
+ database: null,
334
+ healthCheck: null
335
+ },
336
+ {
337
+ name: '@siduri-x/vision',
338
+ organType: 'vision',
339
+ version: '1.0.0',
340
+ displayName: 'Vision (Visual Perception & OCR)',
341
+ description: 'Image inspection, cropping, and multi-pass OCR perception adapter',
342
+ entrypoint: './dist/index.js',
343
+ factory: 'OpenRouterVisionAdapter',
344
+ configKey: 'vision',
345
+ configSchema: {
346
+ type: 'object',
347
+ required: ['provider'],
348
+ properties: {
349
+ provider: {
350
+ type: 'string',
351
+ enum: ['openrouter', 'none']
352
+ },
353
+ model: {
354
+ type: 'string',
355
+ default: 'gpt-4-vision'
356
+ },
357
+ apiKey: {
358
+ type: 'string'
359
+ },
360
+ baseUrl: {
361
+ type: 'string'
362
+ }
363
+ }
364
+ },
365
+ environment: [
366
+ {
367
+ name: 'OPENROUTER_API_KEY',
368
+ required: false,
369
+ secret: true,
370
+ description: 'API key for vision model inference'
371
+ }
372
+ ],
373
+ services: [
374
+ {
375
+ name: 'Vision Inference API',
376
+ kind: 'http_service',
377
+ optional: false
378
+ }
379
+ ],
380
+ database: null,
381
+ healthCheck: null
382
+ },
383
+ {
384
+ name: '@siduri-x/voice',
385
+ organType: 'voice',
386
+ version: '1.0.0',
387
+ displayName: 'Voice (VOICEVOX Speech Synthesis)',
388
+ description: 'Queued speech synthesis and audio rendering lifecycle adapter',
389
+ entrypoint: './dist/index.js',
390
+ factory: 'VoicevoxAdapter',
391
+ configKey: 'voice',
392
+ configSchema: {
393
+ type: 'object',
394
+ required: ['provider'],
395
+ properties: {
396
+ provider: {
397
+ type: 'string',
398
+ enum: ['voicevox', 'none']
399
+ },
400
+ speakerId: {
401
+ type: 'number',
402
+ default: 1
403
+ },
404
+ baseUrl: {
405
+ type: 'string',
406
+ default: 'http://localhost:50021'
407
+ },
408
+ maxQueueDepth: {
409
+ type: 'number',
410
+ default: 50
411
+ }
412
+ }
413
+ },
414
+ environment: [
415
+ {
416
+ name: 'VOICEVOX_URL',
417
+ required: false,
418
+ secret: false,
419
+ default: 'http://localhost:50021',
420
+ description: 'Base URL of the running VOICEVOX engine'
421
+ }
422
+ ],
423
+ services: [
424
+ {
425
+ name: 'VOICEVOX Engine',
426
+ kind: 'http_service',
427
+ optional: false
428
+ }
429
+ ],
430
+ database: null,
431
+ healthCheck: null
432
+ }
433
+ ];
@@ -24,7 +24,7 @@ describe('Phase 5: Clean-Machine Distribution & E2E Integration Suite', () => {
24
24
  { filter: '@siduri-x/body', tarName: 'siduri-x-body-1.0.0.tgz', isOrgan: true },
25
25
  { filter: '@siduri-x/voice', tarName: 'siduri-x-voice-1.0.0.tgz', isOrgan: true },
26
26
  { filter: '@siduri-x/observation', tarName: 'siduri-x-observation-1.0.0.tgz', isOrgan: true },
27
- { filter: '@vxnus/siduri', tarName: 'vxnus-siduri-0.0.6.tgz', isOrgan: false },
27
+ { filter: '@vxnus/siduri', tarName: 'vxnus-siduri-0.0.7.tgz', isOrgan: false },
28
28
  ];
29
29
  beforeAll(() => {
30
30
  // 1. Prepare clean directories
package/dist/discovery.js CHANGED
@@ -7,6 +7,7 @@ exports.OrganRegistry = void 0;
7
7
  const node_fs_1 = __importDefault(require("node:fs"));
8
8
  const node_path_1 = __importDefault(require("node:path"));
9
9
  const manifest_1 = require("./manifest");
10
+ const builtin_manifests_1 = require("./builtin-manifests");
10
11
  class OrganRegistry {
11
12
  manifests = new Map();
12
13
  constructor(manifests) {
@@ -73,6 +74,13 @@ class OrganRegistry {
73
74
  // Continue scanning other roots
74
75
  }
75
76
  }
77
+ // If running in a standalone environment without local package folders (e.g. via npx in an empty directory),
78
+ // register canonical built-in @siduri-x/* organ manifests as fallback.
79
+ if (registry.getAll().length === 0) {
80
+ for (const builtinManifest of builtin_manifests_1.BUILTIN_ORGAN_MANIFESTS) {
81
+ registry.register(builtinManifest);
82
+ }
83
+ }
76
84
  return registry;
77
85
  }
78
86
  }
@@ -57,4 +57,11 @@ describe('Discovery & Dynamic Composition System Tests (Phase 3)', () => {
57
57
  invalidRegistry.register({});
58
58
  }).toThrow(/Invalid manifest/);
59
59
  });
60
+ test('Fallback to builtin organ manifests when scanning non-existent search roots', () => {
61
+ const registry = discovery_1.OrganRegistry.discover(['/non-existent-directory/empty']);
62
+ const manifests = registry.getAll();
63
+ expect(manifests.length).toBe(10);
64
+ expect(registry.get('brain')).toBeDefined();
65
+ expect(registry.get('memory')).toBeDefined();
66
+ });
60
67
  });
package/dist/index.js CHANGED
@@ -17,7 +17,7 @@ const generator_1 = require("./generator");
17
17
  const doctor_1 = require("./doctor");
18
18
  const db_1 = require("./db");
19
19
  const execFile = (0, node_util_1.promisify)(node_child_process_1.execFile);
20
- const CLI_VERSION = '0.0.6';
20
+ const CLI_VERSION = '0.0.7';
21
21
  const colors = {
22
22
  cyan: '\u001b[36m',
23
23
  dim: '\u001b[2m',
@@ -28,7 +28,7 @@ function runReleaseCheck(repoRoot = node_path_1.default.resolve(__dirname, '../.
28
28
  { name: '@siduri-x/body', dir: 'packages/organs/body', isOrgan: true, tarName: 'siduri-x-body-1.0.0.tgz' },
29
29
  { name: '@siduri-x/voice', dir: 'packages/organs/voice', isOrgan: true, tarName: 'siduri-x-voice-1.0.0.tgz' },
30
30
  { name: '@siduri-x/observation', dir: 'packages/organs/observation', isOrgan: true, tarName: 'siduri-x-observation-1.0.0.tgz' },
31
- { name: '@vxnus/siduri', dir: 'cli', isOrgan: false, tarName: 'vxnus-siduri-0.0.6.tgz' },
31
+ { name: '@vxnus/siduri', dir: 'cli', isOrgan: false, tarName: 'vxnus-siduri-0.0.7.tgz' },
32
32
  ];
33
33
  let packagesChecked = 0;
34
34
  let tarballsInspected = 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vxnus/siduri",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Experimental CLI for installing and configuring Siduri companions",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {