@geravant/sinain 1.0.19 → 1.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 (80) hide show
  1. package/README.md +10 -1
  2. package/cli.js +176 -0
  3. package/index.ts +4 -2
  4. package/install.js +89 -14
  5. package/launcher.js +622 -0
  6. package/openclaw.plugin.json +4 -0
  7. package/pack-prepare.js +48 -0
  8. package/package.json +24 -5
  9. package/sense_client/README.md +82 -0
  10. package/sense_client/__init__.py +1 -0
  11. package/sense_client/__main__.py +462 -0
  12. package/sense_client/app_detector.py +54 -0
  13. package/sense_client/app_detector_win.py +83 -0
  14. package/sense_client/capture.py +215 -0
  15. package/sense_client/capture_win.py +88 -0
  16. package/sense_client/change_detector.py +86 -0
  17. package/sense_client/config.py +64 -0
  18. package/sense_client/gate.py +145 -0
  19. package/sense_client/ocr.py +347 -0
  20. package/sense_client/privacy.py +65 -0
  21. package/sense_client/requirements.txt +13 -0
  22. package/sense_client/roi_extractor.py +84 -0
  23. package/sense_client/sender.py +173 -0
  24. package/sense_client/tests/__init__.py +0 -0
  25. package/sense_client/tests/test_stream1_optimizations.py +234 -0
  26. package/setup-overlay.js +82 -0
  27. package/sinain-agent/.env.example +17 -0
  28. package/sinain-agent/CLAUDE.md +87 -0
  29. package/sinain-agent/mcp-config.json +12 -0
  30. package/sinain-agent/run.sh +248 -0
  31. package/sinain-core/.env.example +93 -0
  32. package/sinain-core/package-lock.json +552 -0
  33. package/sinain-core/package.json +21 -0
  34. package/sinain-core/src/agent/analyzer.ts +366 -0
  35. package/sinain-core/src/agent/context-window.ts +172 -0
  36. package/sinain-core/src/agent/loop.ts +404 -0
  37. package/sinain-core/src/agent/situation-writer.ts +187 -0
  38. package/sinain-core/src/agent/traits.ts +520 -0
  39. package/sinain-core/src/audio/capture-spawner-macos.ts +44 -0
  40. package/sinain-core/src/audio/capture-spawner-win.ts +37 -0
  41. package/sinain-core/src/audio/capture-spawner.ts +14 -0
  42. package/sinain-core/src/audio/pipeline.ts +335 -0
  43. package/sinain-core/src/audio/transcription-local.ts +141 -0
  44. package/sinain-core/src/audio/transcription.ts +278 -0
  45. package/sinain-core/src/buffers/feed-buffer.ts +71 -0
  46. package/sinain-core/src/buffers/sense-buffer.ts +425 -0
  47. package/sinain-core/src/config.ts +245 -0
  48. package/sinain-core/src/escalation/escalation-slot.ts +136 -0
  49. package/sinain-core/src/escalation/escalator.ts +828 -0
  50. package/sinain-core/src/escalation/message-builder.ts +370 -0
  51. package/sinain-core/src/escalation/openclaw-ws.ts +726 -0
  52. package/sinain-core/src/escalation/scorer.ts +166 -0
  53. package/sinain-core/src/index.ts +537 -0
  54. package/sinain-core/src/learning/feedback-store.ts +253 -0
  55. package/sinain-core/src/learning/signal-collector.ts +218 -0
  56. package/sinain-core/src/log.ts +24 -0
  57. package/sinain-core/src/overlay/commands.ts +126 -0
  58. package/sinain-core/src/overlay/ws-handler.ts +267 -0
  59. package/sinain-core/src/privacy/index.ts +18 -0
  60. package/sinain-core/src/privacy/presets.ts +40 -0
  61. package/sinain-core/src/privacy/redact.ts +92 -0
  62. package/sinain-core/src/profiler.ts +181 -0
  63. package/sinain-core/src/recorder.ts +186 -0
  64. package/sinain-core/src/server.ts +456 -0
  65. package/sinain-core/src/trace/trace-store.ts +73 -0
  66. package/sinain-core/src/trace/tracer.ts +94 -0
  67. package/sinain-core/src/types.ts +427 -0
  68. package/sinain-core/src/util/dedup.ts +48 -0
  69. package/sinain-core/src/util/task-store.ts +84 -0
  70. package/sinain-core/tsconfig.json +18 -0
  71. package/sinain-knowledge/curation/engine.ts +137 -24
  72. package/sinain-knowledge/data/git-store.ts +26 -0
  73. package/sinain-knowledge/data/store.ts +117 -0
  74. package/sinain-mcp-server/index.ts +417 -0
  75. package/sinain-mcp-server/package.json +19 -0
  76. package/sinain-mcp-server/tsconfig.json +15 -0
  77. package/sinain-memory/graph_query.py +185 -0
  78. package/sinain-memory/knowledge_integrator.py +450 -0
  79. package/sinain-memory/memory-config.json +3 -1
  80. package/sinain-memory/session_distiller.py +162 -0
@@ -0,0 +1,93 @@
1
+ # sinain-core configuration
2
+ # Copy to .env and fill in your values: cp .env.example .env
3
+
4
+ # ── Server ──
5
+ PORT=9500
6
+
7
+ # ── System Audio ──
8
+ # Default: ScreenCaptureKit (zero-setup, macOS 13+). Fallback: ffmpeg + BlackHole.
9
+ AUDIO_CAPTURE_CMD=screencapturekit # screencapturekit | sox | ffmpeg
10
+ AUDIO_DEVICE=BlackHole 2ch # macOS audio device (only used by sox/ffmpeg)
11
+ AUDIO_SAMPLE_RATE=16000
12
+ AUDIO_CHUNK_MS=5000
13
+ AUDIO_VAD_ENABLED=true
14
+ AUDIO_VAD_THRESHOLD=0.003
15
+ AUDIO_AUTO_START=true
16
+ AUDIO_GAIN_DB=20
17
+ # AUDIO_ALT_DEVICE= # alternate device for switch_device command
18
+
19
+ # ── Microphone (opt-in for privacy) ──
20
+ MIC_ENABLED=false # set true to capture user's microphone
21
+ MIC_DEVICE=default # "default" = system mic. For specific device: use exact CoreAudio name
22
+ MIC_CAPTURE_CMD=sox # sox or ffmpeg (mic uses sox by default)
23
+ MIC_SAMPLE_RATE=16000
24
+ MIC_CHUNK_MS=5000
25
+ MIC_VAD_ENABLED=true
26
+ MIC_VAD_THRESHOLD=0.008 # higher threshold (ambient noise)
27
+ MIC_AUTO_START=false
28
+ MIC_GAIN_DB=0
29
+
30
+ # ── Transcription ──
31
+ OPENROUTER_API_KEY= # required (unless TRANSCRIPTION_BACKEND=local)
32
+ TRANSCRIPTION_BACKEND=openrouter # openrouter | local (local = whisper.cpp on-device)
33
+ TRANSCRIPTION_MODEL=google/gemini-2.5-flash
34
+ TRANSCRIPTION_LANGUAGE=en-US
35
+
36
+ # ── Local Transcription (only when TRANSCRIPTION_BACKEND=local) ──
37
+ # Install: brew install whisper-cpp
38
+ # Models: https://huggingface.co/ggerganov/whisper.cpp/tree/main
39
+ # LOCAL_WHISPER_BIN=whisper-cli
40
+ # LOCAL_WHISPER_MODEL=~/models/ggml-large-v3-turbo.bin
41
+ # LOCAL_WHISPER_TIMEOUT_MS=15000
42
+
43
+ # ── Agent ──
44
+ AGENT_ENABLED=true
45
+ AGENT_MODEL=google/gemini-2.5-flash-lite
46
+ # AGENT_FALLBACK_MODELS=google/gemini-2.5-flash,anthropic/claude-3.5-haiku
47
+ AGENT_MAX_TOKENS=300
48
+ AGENT_TEMPERATURE=0.3
49
+ AGENT_PUSH_TO_FEED=true
50
+ AGENT_DEBOUNCE_MS=3000
51
+ AGENT_MAX_INTERVAL_MS=30000
52
+ AGENT_COOLDOWN_MS=10000
53
+ AGENT_MAX_AGE_MS=120000 # context window lookback (2 min)
54
+
55
+ # ── Escalation ──
56
+ ESCALATION_MODE=selective # off | selective | focus | rich
57
+ ESCALATION_COOLDOWN_MS=30000
58
+ # ESCALATION_TRANSPORT=auto # ws | http | auto — use http for bare agent (no gateway)
59
+ # auto = WS when gateway connected, HTTP fallback
60
+ # http = skip gateway entirely, poll via GET /escalation/pending
61
+ # See docs/INSTALL-BARE-AGENT.md for bare agent setup
62
+
63
+ # ── OpenClaw / NemoClaw Gateway ─────────────────────────────────────────────
64
+ # Run ./setup-nemoclaw.sh to fill these in interactively (recommended).
65
+ #
66
+ # NemoClaw (NVIDIA Brev) quick-start:
67
+ # 1. In Brev dashboard: Expose Port(s) → enter 18789 → TCP → note the IP
68
+ # 2. In Code-Server terminal: npx sinain (installs plugin, prints token)
69
+ # 3. On Mac: ./setup-nemoclaw.sh (interactive wizard)
70
+ #
71
+ # URL: ws://YOUR-IP:18789 (use the IP shown after exposing port 18789)
72
+ # Token: printed by `npx sinain` / visible in Brev dashboard → Gateway Token
73
+ OPENCLAW_WS_URL=ws://localhost:18789
74
+ OPENCLAW_WS_TOKEN= # 48-char hex — from gateway config or `npx sinain` output
75
+ OPENCLAW_HTTP_URL=http://localhost:18789/hooks/agent
76
+ OPENCLAW_HTTP_TOKEN= # same token as WS_TOKEN
77
+ OPENCLAW_SESSION_KEY=agent:main:sinain # MUST be agent:main:sinain — see README § Session Key
78
+ # OPENCLAW_PHASE1_TIMEOUT_MS=10000 # Phase 1 (delivery) timeout — circuit trips on failure
79
+ # OPENCLAW_PHASE2_TIMEOUT_MS=120000 # Phase 2 (agent response) timeout — no circuit trip
80
+ # OPENCLAW_QUEUE_TTL_MS=300000 # Outbound queue message TTL (5 min)
81
+ # OPENCLAW_QUEUE_MAX_SIZE=10 # Max queued escalations (oldest dropped on overflow)
82
+ # OPENCLAW_PING_INTERVAL_MS=30000 # WS ping keepalive interval
83
+
84
+ # ── SITUATION.md ──
85
+ SITUATION_MD_PATH=~/.openclaw/workspace/SITUATION.md
86
+ # OPENCLAW_WORKSPACE_DIR=~/.openclaw/workspace
87
+
88
+ # ── Debug ──
89
+ # DEBUG=true # verbose logging (every tick, every chunk)
90
+
91
+ # ── Tracing ──
92
+ TRACE_ENABLED=true
93
+ TRACE_DIR=~/.sinain-core/traces
@@ -0,0 +1,552 @@
1
+ {
2
+ "name": "sinain-core",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "sinain-core",
9
+ "version": "1.0.0",
10
+ "dependencies": {
11
+ "@types/node": "^22.19.7",
12
+ "@types/ws": "^8.18.1",
13
+ "tsx": "^4.21.0",
14
+ "typescript": "^5.9.3",
15
+ "ws": "^8.18.0"
16
+ }
17
+ },
18
+ "node_modules/@esbuild/aix-ppc64": {
19
+ "version": "0.27.3",
20
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz",
21
+ "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==",
22
+ "cpu": [
23
+ "ppc64"
24
+ ],
25
+ "optional": true,
26
+ "os": [
27
+ "aix"
28
+ ],
29
+ "engines": {
30
+ "node": ">=18"
31
+ }
32
+ },
33
+ "node_modules/@esbuild/android-arm": {
34
+ "version": "0.27.3",
35
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz",
36
+ "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==",
37
+ "cpu": [
38
+ "arm"
39
+ ],
40
+ "optional": true,
41
+ "os": [
42
+ "android"
43
+ ],
44
+ "engines": {
45
+ "node": ">=18"
46
+ }
47
+ },
48
+ "node_modules/@esbuild/android-arm64": {
49
+ "version": "0.27.3",
50
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz",
51
+ "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==",
52
+ "cpu": [
53
+ "arm64"
54
+ ],
55
+ "optional": true,
56
+ "os": [
57
+ "android"
58
+ ],
59
+ "engines": {
60
+ "node": ">=18"
61
+ }
62
+ },
63
+ "node_modules/@esbuild/android-x64": {
64
+ "version": "0.27.3",
65
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz",
66
+ "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==",
67
+ "cpu": [
68
+ "x64"
69
+ ],
70
+ "optional": true,
71
+ "os": [
72
+ "android"
73
+ ],
74
+ "engines": {
75
+ "node": ">=18"
76
+ }
77
+ },
78
+ "node_modules/@esbuild/darwin-arm64": {
79
+ "version": "0.27.3",
80
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz",
81
+ "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==",
82
+ "cpu": [
83
+ "arm64"
84
+ ],
85
+ "optional": true,
86
+ "os": [
87
+ "darwin"
88
+ ],
89
+ "engines": {
90
+ "node": ">=18"
91
+ }
92
+ },
93
+ "node_modules/@esbuild/darwin-x64": {
94
+ "version": "0.27.3",
95
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz",
96
+ "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==",
97
+ "cpu": [
98
+ "x64"
99
+ ],
100
+ "optional": true,
101
+ "os": [
102
+ "darwin"
103
+ ],
104
+ "engines": {
105
+ "node": ">=18"
106
+ }
107
+ },
108
+ "node_modules/@esbuild/freebsd-arm64": {
109
+ "version": "0.27.3",
110
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz",
111
+ "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==",
112
+ "cpu": [
113
+ "arm64"
114
+ ],
115
+ "optional": true,
116
+ "os": [
117
+ "freebsd"
118
+ ],
119
+ "engines": {
120
+ "node": ">=18"
121
+ }
122
+ },
123
+ "node_modules/@esbuild/freebsd-x64": {
124
+ "version": "0.27.3",
125
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz",
126
+ "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==",
127
+ "cpu": [
128
+ "x64"
129
+ ],
130
+ "optional": true,
131
+ "os": [
132
+ "freebsd"
133
+ ],
134
+ "engines": {
135
+ "node": ">=18"
136
+ }
137
+ },
138
+ "node_modules/@esbuild/linux-arm": {
139
+ "version": "0.27.3",
140
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz",
141
+ "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==",
142
+ "cpu": [
143
+ "arm"
144
+ ],
145
+ "optional": true,
146
+ "os": [
147
+ "linux"
148
+ ],
149
+ "engines": {
150
+ "node": ">=18"
151
+ }
152
+ },
153
+ "node_modules/@esbuild/linux-arm64": {
154
+ "version": "0.27.3",
155
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz",
156
+ "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==",
157
+ "cpu": [
158
+ "arm64"
159
+ ],
160
+ "optional": true,
161
+ "os": [
162
+ "linux"
163
+ ],
164
+ "engines": {
165
+ "node": ">=18"
166
+ }
167
+ },
168
+ "node_modules/@esbuild/linux-ia32": {
169
+ "version": "0.27.3",
170
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz",
171
+ "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==",
172
+ "cpu": [
173
+ "ia32"
174
+ ],
175
+ "optional": true,
176
+ "os": [
177
+ "linux"
178
+ ],
179
+ "engines": {
180
+ "node": ">=18"
181
+ }
182
+ },
183
+ "node_modules/@esbuild/linux-loong64": {
184
+ "version": "0.27.3",
185
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz",
186
+ "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==",
187
+ "cpu": [
188
+ "loong64"
189
+ ],
190
+ "optional": true,
191
+ "os": [
192
+ "linux"
193
+ ],
194
+ "engines": {
195
+ "node": ">=18"
196
+ }
197
+ },
198
+ "node_modules/@esbuild/linux-mips64el": {
199
+ "version": "0.27.3",
200
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz",
201
+ "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==",
202
+ "cpu": [
203
+ "mips64el"
204
+ ],
205
+ "optional": true,
206
+ "os": [
207
+ "linux"
208
+ ],
209
+ "engines": {
210
+ "node": ">=18"
211
+ }
212
+ },
213
+ "node_modules/@esbuild/linux-ppc64": {
214
+ "version": "0.27.3",
215
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz",
216
+ "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==",
217
+ "cpu": [
218
+ "ppc64"
219
+ ],
220
+ "optional": true,
221
+ "os": [
222
+ "linux"
223
+ ],
224
+ "engines": {
225
+ "node": ">=18"
226
+ }
227
+ },
228
+ "node_modules/@esbuild/linux-riscv64": {
229
+ "version": "0.27.3",
230
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz",
231
+ "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==",
232
+ "cpu": [
233
+ "riscv64"
234
+ ],
235
+ "optional": true,
236
+ "os": [
237
+ "linux"
238
+ ],
239
+ "engines": {
240
+ "node": ">=18"
241
+ }
242
+ },
243
+ "node_modules/@esbuild/linux-s390x": {
244
+ "version": "0.27.3",
245
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz",
246
+ "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==",
247
+ "cpu": [
248
+ "s390x"
249
+ ],
250
+ "optional": true,
251
+ "os": [
252
+ "linux"
253
+ ],
254
+ "engines": {
255
+ "node": ">=18"
256
+ }
257
+ },
258
+ "node_modules/@esbuild/linux-x64": {
259
+ "version": "0.27.3",
260
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz",
261
+ "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==",
262
+ "cpu": [
263
+ "x64"
264
+ ],
265
+ "optional": true,
266
+ "os": [
267
+ "linux"
268
+ ],
269
+ "engines": {
270
+ "node": ">=18"
271
+ }
272
+ },
273
+ "node_modules/@esbuild/netbsd-arm64": {
274
+ "version": "0.27.3",
275
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz",
276
+ "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==",
277
+ "cpu": [
278
+ "arm64"
279
+ ],
280
+ "optional": true,
281
+ "os": [
282
+ "netbsd"
283
+ ],
284
+ "engines": {
285
+ "node": ">=18"
286
+ }
287
+ },
288
+ "node_modules/@esbuild/netbsd-x64": {
289
+ "version": "0.27.3",
290
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz",
291
+ "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==",
292
+ "cpu": [
293
+ "x64"
294
+ ],
295
+ "optional": true,
296
+ "os": [
297
+ "netbsd"
298
+ ],
299
+ "engines": {
300
+ "node": ">=18"
301
+ }
302
+ },
303
+ "node_modules/@esbuild/openbsd-arm64": {
304
+ "version": "0.27.3",
305
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz",
306
+ "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==",
307
+ "cpu": [
308
+ "arm64"
309
+ ],
310
+ "optional": true,
311
+ "os": [
312
+ "openbsd"
313
+ ],
314
+ "engines": {
315
+ "node": ">=18"
316
+ }
317
+ },
318
+ "node_modules/@esbuild/openbsd-x64": {
319
+ "version": "0.27.3",
320
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz",
321
+ "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==",
322
+ "cpu": [
323
+ "x64"
324
+ ],
325
+ "optional": true,
326
+ "os": [
327
+ "openbsd"
328
+ ],
329
+ "engines": {
330
+ "node": ">=18"
331
+ }
332
+ },
333
+ "node_modules/@esbuild/openharmony-arm64": {
334
+ "version": "0.27.3",
335
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz",
336
+ "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==",
337
+ "cpu": [
338
+ "arm64"
339
+ ],
340
+ "optional": true,
341
+ "os": [
342
+ "openharmony"
343
+ ],
344
+ "engines": {
345
+ "node": ">=18"
346
+ }
347
+ },
348
+ "node_modules/@esbuild/sunos-x64": {
349
+ "version": "0.27.3",
350
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz",
351
+ "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==",
352
+ "cpu": [
353
+ "x64"
354
+ ],
355
+ "optional": true,
356
+ "os": [
357
+ "sunos"
358
+ ],
359
+ "engines": {
360
+ "node": ">=18"
361
+ }
362
+ },
363
+ "node_modules/@esbuild/win32-arm64": {
364
+ "version": "0.27.3",
365
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz",
366
+ "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==",
367
+ "cpu": [
368
+ "arm64"
369
+ ],
370
+ "optional": true,
371
+ "os": [
372
+ "win32"
373
+ ],
374
+ "engines": {
375
+ "node": ">=18"
376
+ }
377
+ },
378
+ "node_modules/@esbuild/win32-ia32": {
379
+ "version": "0.27.3",
380
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz",
381
+ "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==",
382
+ "cpu": [
383
+ "ia32"
384
+ ],
385
+ "optional": true,
386
+ "os": [
387
+ "win32"
388
+ ],
389
+ "engines": {
390
+ "node": ">=18"
391
+ }
392
+ },
393
+ "node_modules/@esbuild/win32-x64": {
394
+ "version": "0.27.3",
395
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz",
396
+ "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==",
397
+ "cpu": [
398
+ "x64"
399
+ ],
400
+ "optional": true,
401
+ "os": [
402
+ "win32"
403
+ ],
404
+ "engines": {
405
+ "node": ">=18"
406
+ }
407
+ },
408
+ "node_modules/@types/node": {
409
+ "version": "22.19.11",
410
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz",
411
+ "integrity": "sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==",
412
+ "dependencies": {
413
+ "undici-types": "~6.21.0"
414
+ }
415
+ },
416
+ "node_modules/@types/ws": {
417
+ "version": "8.18.1",
418
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
419
+ "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
420
+ "dependencies": {
421
+ "@types/node": "*"
422
+ }
423
+ },
424
+ "node_modules/esbuild": {
425
+ "version": "0.27.3",
426
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz",
427
+ "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==",
428
+ "hasInstallScript": true,
429
+ "bin": {
430
+ "esbuild": "bin/esbuild"
431
+ },
432
+ "engines": {
433
+ "node": ">=18"
434
+ },
435
+ "optionalDependencies": {
436
+ "@esbuild/aix-ppc64": "0.27.3",
437
+ "@esbuild/android-arm": "0.27.3",
438
+ "@esbuild/android-arm64": "0.27.3",
439
+ "@esbuild/android-x64": "0.27.3",
440
+ "@esbuild/darwin-arm64": "0.27.3",
441
+ "@esbuild/darwin-x64": "0.27.3",
442
+ "@esbuild/freebsd-arm64": "0.27.3",
443
+ "@esbuild/freebsd-x64": "0.27.3",
444
+ "@esbuild/linux-arm": "0.27.3",
445
+ "@esbuild/linux-arm64": "0.27.3",
446
+ "@esbuild/linux-ia32": "0.27.3",
447
+ "@esbuild/linux-loong64": "0.27.3",
448
+ "@esbuild/linux-mips64el": "0.27.3",
449
+ "@esbuild/linux-ppc64": "0.27.3",
450
+ "@esbuild/linux-riscv64": "0.27.3",
451
+ "@esbuild/linux-s390x": "0.27.3",
452
+ "@esbuild/linux-x64": "0.27.3",
453
+ "@esbuild/netbsd-arm64": "0.27.3",
454
+ "@esbuild/netbsd-x64": "0.27.3",
455
+ "@esbuild/openbsd-arm64": "0.27.3",
456
+ "@esbuild/openbsd-x64": "0.27.3",
457
+ "@esbuild/openharmony-arm64": "0.27.3",
458
+ "@esbuild/sunos-x64": "0.27.3",
459
+ "@esbuild/win32-arm64": "0.27.3",
460
+ "@esbuild/win32-ia32": "0.27.3",
461
+ "@esbuild/win32-x64": "0.27.3"
462
+ }
463
+ },
464
+ "node_modules/fsevents": {
465
+ "version": "2.3.3",
466
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
467
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
468
+ "hasInstallScript": true,
469
+ "optional": true,
470
+ "os": [
471
+ "darwin"
472
+ ],
473
+ "engines": {
474
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
475
+ }
476
+ },
477
+ "node_modules/get-tsconfig": {
478
+ "version": "4.13.6",
479
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz",
480
+ "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==",
481
+ "dependencies": {
482
+ "resolve-pkg-maps": "^1.0.0"
483
+ },
484
+ "funding": {
485
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
486
+ }
487
+ },
488
+ "node_modules/resolve-pkg-maps": {
489
+ "version": "1.0.0",
490
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
491
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
492
+ "funding": {
493
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
494
+ }
495
+ },
496
+ "node_modules/tsx": {
497
+ "version": "4.21.0",
498
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz",
499
+ "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==",
500
+ "dependencies": {
501
+ "esbuild": "~0.27.0",
502
+ "get-tsconfig": "^4.7.5"
503
+ },
504
+ "bin": {
505
+ "tsx": "dist/cli.mjs"
506
+ },
507
+ "engines": {
508
+ "node": ">=18.0.0"
509
+ },
510
+ "optionalDependencies": {
511
+ "fsevents": "~2.3.3"
512
+ }
513
+ },
514
+ "node_modules/typescript": {
515
+ "version": "5.9.3",
516
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
517
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
518
+ "bin": {
519
+ "tsc": "bin/tsc",
520
+ "tsserver": "bin/tsserver"
521
+ },
522
+ "engines": {
523
+ "node": ">=14.17"
524
+ }
525
+ },
526
+ "node_modules/undici-types": {
527
+ "version": "6.21.0",
528
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
529
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
530
+ },
531
+ "node_modules/ws": {
532
+ "version": "8.19.0",
533
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
534
+ "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==",
535
+ "engines": {
536
+ "node": ">=10.0.0"
537
+ },
538
+ "peerDependencies": {
539
+ "bufferutil": "^4.0.1",
540
+ "utf-8-validate": ">=5.0.2"
541
+ },
542
+ "peerDependenciesMeta": {
543
+ "bufferutil": {
544
+ "optional": true
545
+ },
546
+ "utf-8-validate": {
547
+ "optional": true
548
+ }
549
+ }
550
+ }
551
+ }
552
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "sinain-core",
3
+ "version": "1.0.0",
4
+ "description": "Unified HUD-sense-audio-bridge-relay — replaces relay + bridge with a single process",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "scripts": {
8
+ "start": "tsx src/index.ts",
9
+ "dev": "tsx watch src/index.ts",
10
+ "build": "tsc",
11
+ "eval": "tsx eval/harness.ts --scenarios eval/scenarios/ --runs 3 --report eval/reports/",
12
+ "eval:quick": "tsx eval/harness.ts --scenarios eval/scenarios/ --runs 1 --fast --report /dev/stdout"
13
+ },
14
+ "dependencies": {
15
+ "@types/node": "^22.19.7",
16
+ "@types/ws": "^8.18.1",
17
+ "tsx": "^4.21.0",
18
+ "typescript": "^5.9.3",
19
+ "ws": "^8.18.0"
20
+ }
21
+ }