Media native modules
This page documents the non-cli.js JavaScript shims retained from the Bun standalone payload, plus the native addon boundary they reference. The .node binaries are part of the shipped executable payload, but they are no longer retained in the final repository layout.
Source anchors
| Semantic alias | Source | Approximate location | String or symbol | Meaning |
|---|---|---|---|---|
| ImageProcessorShim | claude-code-pkg/image-processor.js | line ~11 | require("/$bunfs/root/image-processor.node") | CommonJS wrapper loads image native addon from the original Bun payload path. |
| AudioCaptureShim | claude-code-pkg/audio-capture.js | line ~11 | require("/$bunfs/root/audio-capture.node") | CommonJS wrapper loads audio native addon from the original Bun payload path. |
| AudioNapiLoadedLog | cli.js | line ~7745, byte 0xb5dd23 | audio-capture-napi loaded | Main runtime attempts to load the audio N-API addon for voice capture. |
| VoiceTranscriptInjection | cli.js | line ~9514, byte 0xc8ce2c | Injecting transcript | Voice transcription result is injected back into the prompt input. |
| NativeElfClassification | shell file output | session validation | ELF 64-bit LSB shared object, x86-64, ... stripped | Both .node modules are stripped Linux x86-64 shared objects. |
| NativeNapiRegistration | shell nm -D --defined-only output | session validation | napi_register_module_v1 | Both native addons expose the N-API module registration symbol. |
| NativeNapiImports | shell nm -D output | session validation | U napi_create_*, U napi_call_*, U napi_get_* | Dynamic imports confirm Node-API/N-API interaction, not readable implementation internals. |
Module inventory
| Module | Bytes | SHA-256 | Role |
|---|---|---|---|
image-processor.js | 1,976 | 91adae12a122ebe5b60fa631ab73fb3a09314deddc9f372113ada67a0ffd9e91 | JS shim requiring image-processor.node. |
audio-capture.js | 1,974 | 744d40b4aeb92c2305144aba48374a3490fea3d2d7526a6820ec7f49b9e1a27b | JS shim requiring audio-capture.node. |
image-processor.node | 1,464,760 | 37bec7de530676e3dfe963d34a824b49191595809a8072348a2ef4571f1e5f4d | Original stripped N-API image module; not retained. |
audio-capture.node | 492,184 | 7e89edf4dde9b69b6c55a310788ad999e2d0dd469d8a31c529cf28f3ea5e929c | Original stripped N-API audio module; not retained. |
Interpretation
The two retained JavaScript files are straightforward Bun CommonJS shims. They do not implement media logic directly; each immediately requires its matching .node shared object from the original Bun payload. Because the native modules are stripped and no longer retained, this repository treats them as binary support modules rather than readable implementation targets.
The likely runtime boundary is media input support: the names indicate image processing and audio capture. The audio path is now source-confirmed in cli.js: voice mode loads the native capture addon when available, falls back to OS recorders, streams audio for transcription, and injects the final transcript into the prompt input. See Audio capture and voice mode for that runtime path.
Native binary triage status
The current binary inspection is enough to classify the modules but not to reconstruct their internals.
| Check | Result | Interpretation |
|---|---|---|
file image-processor.node / file audio-capture.node | ELF 64-bit LSB shared object, x86-64, dynamically linked, stripped | The modules are Linux shared objects without normal symbolic debug names. |
nm -D --defined-only | napi_register_module_v1 in both modules | The public dynamic export is the Node-API registration function. |
nm -D imports | Numerous napi_* imports such as napi_create_function, napi_create_object, napi_call_threadsafe_function | Runtime interaction is through N-API; function/class names inside the addon are not exposed by these imports. |
Future native reverse engineering would require re-extracting the native .node files temporarily from the package, then using runtime observation or binary tooling rather than treating the .node files as JavaScript-adjacent source. Useful next questions are which N-API exports are registered, which OS audio/image libraries are linked, and how failures propagate back to the JavaScript shims.
Caveats
- No native-symbol reverse engineering was performed for the stripped
.nodefiles. - The voice-mode JavaScript boundary is documented separately, but native device-capture internals remain a research opportunity.
Related docs
Created and maintained by Yingting Huang.