omnius 1.0.631 → 1.0.633

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.
package/dist/index.js CHANGED
@@ -3849,7 +3849,7 @@ function sha256File(path16) {
3849
3849
  function loadManifest() {
3850
3850
  try {
3851
3851
  const manifest = JSON.parse(readFileSync7(manifestPath(), "utf8"));
3852
- if (manifest.runtimeVersion !== RUNTIME_VERSION || manifest.model !== MODEL_NAME || manifest.modelRevision !== MODEL_REVISION || manifest.modelDigest !== `sha256:${MODEL_SHA256}` || manifest.classMapDigest !== `sha256:${CLASS_MAP_SHA256}` || manifest.backend !== "tensorrt-fp16" || !manifest.tensorRtVersion || manifest.cudaRuntimeVersion !== 12020 || !manifest.l4tRelease || !manifest.trtexecVersion || !existsSync8(modelPath()) || !existsSync8(classMapPath()) || !existsSync8(enginePath()))
3852
+ if (manifest.runtimeVersion !== RUNTIME_VERSION || manifest.model !== MODEL_NAME || manifest.modelRevision !== MODEL_REVISION || manifest.modelDigest !== `sha256:${MODEL_SHA256}` || manifest.classMapDigest !== `sha256:${CLASS_MAP_SHA256}` || manifest.backend !== "tensorrt-fp16" || !manifest.tensorRtVersion || manifest.cudaRuntimeVersion !== 12020 || !manifest.l4tRelease || !manifest.engineBuilderVersion || !existsSync8(modelPath()) || !existsSync8(classMapPath()) || !existsSync8(enginePath()))
3853
3853
  return null;
3854
3854
  if (sha256File(modelPath()) !== MODEL_SHA256 || sha256File(classMapPath()) !== CLASS_MAP_SHA256 || manifest.engineDigest !== `sha256:${sha256File(enginePath())}`)
3855
3855
  return null;
@@ -4027,18 +4027,15 @@ async function probeAudioPlatform(python2) {
4027
4027
  const output2 = await execFileText2(python2, ["-c", script], { timeout: 3e4, env: managedEnv() });
4028
4028
  const parsed = JSON.parse(output2.trim().split(/\r?\n/).pop() || "{}");
4029
4029
  const l4tRelease = readFileSync7("/etc/nv_tegra_release", "utf8").replace(/\s+/g, " ").trim();
4030
- const trtexecVersion = (await execFileText2(findTrtexec(), ["--version"], {
4031
- timeout: 3e4,
4032
- env: managedEnv()
4033
- })).replace(/\s+/g, " ").trim().slice(0, 1e3);
4034
- if (!parsed.tensorrt || parsed.cuda_runtime !== 12020 || !l4tRelease || !trtexecVersion) {
4030
+ const engineBuilderVersion = `TensorRT ${parsed.tensorrt ?? ""}`.trim();
4031
+ if (!parsed.tensorrt || parsed.cuda_runtime !== 12020 || !l4tRelease) {
4035
4032
  throw new Error("Could not fingerprint the exact JetPack TensorRT/CUDA engine builder runtime");
4036
4033
  }
4037
4034
  return {
4038
4035
  tensorRtVersion: parsed.tensorrt,
4039
4036
  cudaRuntimeVersion: parsed.cuda_runtime,
4040
4037
  l4tRelease,
4041
- trtexecVersion
4038
+ engineBuilderVersion
4042
4039
  };
4043
4040
  }
4044
4041
  function assertTensorRtPython(python2) {
@@ -4104,7 +4101,7 @@ async function ensureAudioClassifierSetup() {
4104
4101
  await downloadChecked(MODEL_URL, modelPath(), MODEL_SHA256);
4105
4102
  await downloadChecked(CLASS_MAP_URL, classMapPath(), CLASS_MAP_SHA256);
4106
4103
  const current = loadManifest();
4107
- if (!current || current.device !== device2.name || current.computeCapability !== device2.computeCapability || current.tensorRtVersion !== platformFingerprint.tensorRtVersion || current.cudaRuntimeVersion !== platformFingerprint.cudaRuntimeVersion || current.l4tRelease !== platformFingerprint.l4tRelease || current.trtexecVersion !== platformFingerprint.trtexecVersion) {
4104
+ if (!current || current.device !== device2.name || current.computeCapability !== device2.computeCapability || current.tensorRtVersion !== platformFingerprint.tensorRtVersion || current.cudaRuntimeVersion !== platformFingerprint.cudaRuntimeVersion || current.l4tRelease !== platformFingerprint.l4tRelease || current.engineBuilderVersion !== platformFingerprint.engineBuilderVersion) {
4108
4105
  await buildEngine(device2);
4109
4106
  const manifest = {
4110
4107
  runtimeVersion: RUNTIME_VERSION,
@@ -4381,7 +4378,7 @@ var init_audio_classifier_runtime = __esm({
4381
4378
  init_jetson_monitor();
4382
4379
  init_model_store();
4383
4380
  init_venv_paths();
4384
- RUNTIME_VERSION = 2;
4381
+ RUNTIME_VERSION = 3;
4385
4382
  MODEL_NAME = "yamnet";
4386
4383
  MODEL_REVISION = "ac2ca3bd45d12ec1f19f1144205ea529b4e9dedf";
4387
4384
  MODEL_URL = `https://huggingface.co/zeropointnine/yamnet-onnx/resolve/${MODEL_REVISION}/yamnet.onnx`;
@@ -4464,16 +4461,28 @@ function updateJob(job, state3, error = null) {
4464
4461
  job.updated_at = (/* @__PURE__ */ new Date()).toISOString();
4465
4462
  persistJob(job);
4466
4463
  }
4464
+ function resolveOcrNativeProvider(name10, probed) {
4465
+ const providers = OCR_JETSON_NATIVE_PROVIDERS[name10] ?? [name10];
4466
+ for (const provider of providers) {
4467
+ const version5 = probed[provider];
4468
+ if (version5)
4469
+ return { name: name10, installed: true, version: version5, provider };
4470
+ }
4471
+ return { name: name10, installed: false };
4472
+ }
4467
4473
  async function probeNativePackage(name10) {
4468
4474
  if (process.platform !== "linux")
4469
4475
  return { name: name10, installed: false };
4470
- try {
4471
- const version5 = (await execFileText2("dpkg-query", ["-W", "-f=${Status} ${Version}", name10], { timeout: 5e3 })).trim();
4472
- const match = /^install ok installed\t(.+)$/.exec(version5);
4473
- return match ? { name: name10, installed: true, version: match[1] } : { name: name10, installed: false };
4474
- } catch {
4475
- return { name: name10, installed: false };
4476
+ const probed = {};
4477
+ for (const provider of OCR_JETSON_NATIVE_PROVIDERS[name10] ?? [name10]) {
4478
+ try {
4479
+ const output2 = (await execFileText2("dpkg-query", ["-W", "-f=${Status} ${Version}", provider], { timeout: 5e3 })).trim();
4480
+ probed[provider] = /^install ok installed\t(.+)$/.exec(output2)?.[1];
4481
+ } catch {
4482
+ probed[provider] = void 0;
4483
+ }
4476
4484
  }
4485
+ return resolveOcrNativeProvider(name10, probed);
4477
4486
  }
4478
4487
  async function probeTesseract(requested) {
4479
4488
  try {
@@ -4557,15 +4566,17 @@ async function getOcrRuntimeReadiness(language = "eng") {
4557
4566
  { name: "pytesseract", installed: modules["pytesseract"]?.version === OCR_PYTESTERACT_VERSION, version: modules["pytesseract"]?.version, required_version: OCR_PYTESTERACT_VERSION, source: selected.managed ? "venv" : "system" }
4558
4567
  ];
4559
4568
  const pipelineAvailable = Boolean(findAdvancedOcrScript());
4560
- const nativeReady = !jetson || native.every((item) => item.installed);
4561
4569
  const importsVerified = pythonPackages.every((item) => item.installed);
4562
- const ready = nativeReady && engine.available && engine.languages_ready && python2.available && importsVerified && pipelineAvailable;
4570
+ const ready = engine.available && engine.languages_ready && python2.available && importsVerified && pipelineAvailable;
4563
4571
  const persisted = activeSetup?.job ?? readPersistedJob();
4564
4572
  const state3 = activeSetup?.job.state ?? (ready ? "ready" : persisted?.state === "failed" ? "failed" : "unprovisioned");
4565
- const missingNative = native.filter((item) => !item.installed).map((item) => item.name);
4566
4573
  const missingLanguages = requested.filter((item) => !engine.languages.includes(item));
4567
- const installNames = [...missingNative, ...languagePackages(missingLanguages)];
4568
- const detail = ready ? "Advanced OCR runtime is ready." : selected.override && !python2.available ? "OMNIUS_OCR_PYTHON does not name a usable Python interpreter." : installNames.length > 0 ? `Native OCR prerequisites are missing: ${installNames.join(", ")}. Install them outside inference, then POST /v1/ocr/setup.` : "Run POST /v1/ocr/setup to create and validate the isolated OCR runtime.";
4574
+ const actualNativeInstallNames = [
4575
+ ...!engine.available ? ["tesseract-ocr"] : [],
4576
+ ...languagePackages(missingLanguages)
4577
+ ];
4578
+ const missingPython = pythonPackages.filter((item) => !item.installed).map((item) => item.name);
4579
+ const detail = ready ? "Advanced OCR runtime is ready." : selected.override ? !python2.available ? "OMNIUS_OCR_PYTHON does not name a usable Python interpreter." : `OMNIUS_OCR_PYTHON is missing required isolated imports or versions: ${missingPython.join(", ") || "none"}. Omnius will not modify the operator-managed interpreter.` : actualNativeInstallNames.length > 0 ? `Actual Tesseract capabilities are missing: ${actualNativeInstallNames.join(", ")}. Install them outside inference, then POST /v1/ocr/setup.` : python2.available && missingPython.length > 0 ? `Managed OCR imports are unavailable: ${missingPython.join(", ")}. On JetPack, preserve NVIDIA providers such as libopencv-python; do not install a second generic OpenCV stack.` : "Run POST /v1/ocr/setup to create and validate the isolated OCR runtime.";
4569
4580
  return {
4570
4581
  schema: "omnius.ocr-readiness.v1",
4571
4582
  ready,
@@ -4587,7 +4598,7 @@ async function getOcrRuntimeReadiness(language = "eng") {
4587
4598
  setup: persisted,
4588
4599
  setup_url: "/v1/ocr/setup",
4589
4600
  readiness_url: "/v1/ocr/readiness",
4590
- ...!ready ? { remediation: { ...installNames.length > 0 ? { native_install_command: `sudo apt-get install -y ${installNames.join(" ")}` } : {}, detail } } : {}
4601
+ ...!ready ? { remediation: { ...actualNativeInstallNames.length > 0 ? { native_install_command: `sudo apt-get install -y ${actualNativeInstallNames.join(" ")}` } : {}, detail } } : {}
4591
4602
  };
4592
4603
  }
4593
4604
  async function performSetup(job) {
@@ -4598,16 +4609,15 @@ async function performSetup(job) {
4598
4609
  updateJob(job, "ready");
4599
4610
  return;
4600
4611
  }
4601
- if (before.platform.jetson) {
4602
- const missing = before.packages.native.filter((item) => !item.installed).map((item) => item.name);
4603
- const missingLanguages = before.engine.requested_languages.filter((item) => !before.engine.languages.includes(item));
4604
- const allMissing = [...missing, ...languagePackages(missingLanguages)];
4605
- if (allMissing.length > 0) {
4606
- throw new Error(`Native OCR prerequisites must be provisioned outside inference: sudo apt-get install -y ${allMissing.join(" ")}`);
4607
- }
4608
- }
4609
4612
  if (!before.pipeline.available)
4610
4613
  throw new Error("Bundled advanced OCR pipeline script is unavailable.");
4614
+ if (!before.engine.available) {
4615
+ throw new Error("Tesseract is unavailable. Provision tesseract-ocr outside inference, then retry OCR setup.");
4616
+ }
4617
+ if (!before.engine.languages_ready) {
4618
+ const missingLanguages = before.engine.requested_languages.filter((item) => !before.engine.languages.includes(item));
4619
+ throw new Error(`Tesseract language data is unavailable: ${languagePackages(missingLanguages).join(", ")}. Provision it outside inference, then retry OCR setup.`);
4620
+ }
4611
4621
  const selected = configuredOcrPython();
4612
4622
  if (selected.override) {
4613
4623
  throw new Error("OMNIUS_OCR_PYTHON is configured but not ready. Omnius will not modify an operator-managed Python environment.");
@@ -4617,13 +4627,17 @@ async function performSetup(job) {
4617
4627
  const mustCreate = !existsSync9(selected.executable);
4618
4628
  const mustRepairJetsonVenv = before.platform.jetson && before.python.system_site_packages !== true;
4619
4629
  if (mustCreate || mustRepairJetsonVenv) {
4620
- await execFileText2("python3", [
4621
- "-m",
4622
- "venv",
4623
- ...mustRepairJetsonVenv ? ["--clear"] : [],
4624
- ...before.platform.jetson ? ["--system-site-packages"] : [],
4625
- ocrRuntimeDir()
4626
- ], { timeout: 12e4 });
4630
+ try {
4631
+ await execFileText2("python3", [
4632
+ "-m",
4633
+ "venv",
4634
+ ...mustRepairJetsonVenv ? ["--clear"] : [],
4635
+ ...before.platform.jetson ? ["--system-site-packages"] : [],
4636
+ ocrRuntimeDir()
4637
+ ], { timeout: 12e4 });
4638
+ } catch (error) {
4639
+ throw new Error(`Could not create the isolated OCR venv. Ensure the active Python venv module is provisioned (Ubuntu package: python3-venv): ${error instanceof Error ? error.message : String(error)}`);
4640
+ }
4627
4641
  }
4628
4642
  updateJob(job, "installing_python_dependencies");
4629
4643
  const pythonRequirements = before.platform.jetson ? ["--no-deps", `pytesseract==${OCR_PYTESTERACT_VERSION}`] : [
@@ -4686,7 +4700,7 @@ async function ensureOcrRuntimeSetup(options2 = {}) {
4686
4700
  await activeSetup.promise;
4687
4701
  return getOcrRuntimeReadiness(options2.language);
4688
4702
  }
4689
- var OCR_PYTESTERACT_VERSION, OCR_JETSON_NATIVE_PACKAGES, activeSetup;
4703
+ var OCR_PYTESTERACT_VERSION, OCR_JETSON_NATIVE_PACKAGES, OCR_JETSON_NATIVE_PROVIDERS, activeSetup;
4690
4704
  var init_ocr_advanced_runtime = __esm({
4691
4705
  "packages/execution/dist/ocr-advanced-runtime.js"() {
4692
4706
  "use strict";
@@ -4703,6 +4717,9 @@ var init_ocr_advanced_runtime = __esm({
4703
4717
  "python3-pil",
4704
4718
  "python3-reportlab"
4705
4719
  ];
4720
+ OCR_JETSON_NATIVE_PROVIDERS = Object.freeze({
4721
+ "python3-opencv": ["python3-opencv", "libopencv-python"]
4722
+ });
4706
4723
  activeSetup = null;
4707
4724
  }
4708
4725
  });
@@ -613334,6 +613351,7 @@ __export(dist_exports2, {
613334
613351
  NotebookEditTool: () => NotebookEditTool,
613335
613352
  OCRTool: () => OCRTool,
613336
613353
  OCR_JETSON_NATIVE_PACKAGES: () => OCR_JETSON_NATIVE_PACKAGES,
613354
+ OCR_JETSON_NATIVE_PROVIDERS: () => OCR_JETSON_NATIVE_PROVIDERS,
613337
613355
  OCR_PYTESTERACT_VERSION: () => OCR_PYTESTERACT_VERSION,
613338
613356
  OcrImageAdvancedTool: () => OcrImageAdvancedTool,
613339
613357
  OcrPdfTool: () => OcrPdfTool,
@@ -613754,6 +613772,7 @@ __export(dist_exports2, {
613754
613772
  resolveAsrSelection: () => resolveAsrSelection,
613755
613773
  resolveMediaCudaVisibleDevicesForEnv: () => resolveMediaCudaVisibleDevicesForEnv,
613756
613774
  resolveMediaModel: () => resolveMediaModel,
613775
+ resolveOcrNativeProvider: () => resolveOcrNativeProvider,
613757
613776
  resolveSecret: () => resolveSecret,
613758
613777
  resolveTranscribeCliPython: () => resolveTranscribeCliPython,
613759
613778
  resolveVendorCudaPythonSync: () => resolveVendorCudaPythonSync,
@@ -824173,7 +824192,7 @@ function getOpenApiSpec() {
824173
824192
  get: {
824174
824193
  summary: "Probe advanced OCR runtime readiness without mutation",
824175
824194
  tags: ["Tools", "Vision"],
824176
- description: "Reports exact Tesseract engine/language, native package, Python import/version, backend, override, and bundled-pipeline state. This endpoint never invokes sudo, apt, pip, venv creation, or inference. Optional query: ?language=eng+fra.",
824195
+ description: "Reports exact Tesseract engine/language, native provider inventory, Python import/version, backend, override, and bundled-pipeline state. Successful isolated imports are authoritative, including NVIDIA libopencv-python; readiness does not require Ubuntu's python3-opencv dpkg name. This endpoint never invokes sudo, apt, pip, venv creation, or inference. Optional query: ?language=eng+fra.",
824177
824196
  responses: { 200: { description: "OCR runtime is ready" }, 400: { description: "Invalid language expression" }, 503: { description: "OCR runtime is unprovisioned, provisioning, or failed" } }
824178
824197
  }
824179
824198
  },
@@ -99,7 +99,8 @@ function hasCmd(name) {
99
99
  return runQuiet("which " + name);
100
100
  }
101
101
 
102
- // Advanced OCR on JetPack uses Ubuntu's ABI-matched OpenCV/NumPy/Pillow stack.
102
+ // Advanced OCR on JetPack preserves whichever ABI-matched system Python stack
103
+ // is actually usable, including NVIDIA's libopencv-python provider.
103
104
  // Native packages belong to package installation, never to an inference or
104
105
  // readiness request. Jammy has no python3-pytesseract candidate, so that one
105
106
  // pure-Python package is intentionally handled later by /v1/ocr/setup.
@@ -114,17 +115,27 @@ function ensureJetsonOcrNativeDependencies() {
114
115
  }
115
116
  if (!jetson || !hasCmd("apt-get") || !hasCmd("dpkg-query")) return;
116
117
 
117
- var packages = [
118
- "tesseract-ocr",
119
- "python3-venv",
120
- "python3-opencv",
121
- "python3-numpy",
122
- "python3-pil",
123
- "python3-reportlab",
118
+ var systemPython = fs.existsSync("/usr/bin/python3") ? "/usr/bin/python3" : "python3";
119
+ var dependencies = [
120
+ { package: "tesseract-ocr", command: "tesseract" },
121
+ { package: "python3-venv" },
122
+ { package: "python3-opencv", module: "cv2", providers: ["python3-opencv", "libopencv-python"] },
123
+ { package: "python3-numpy", module: "numpy" },
124
+ { package: "python3-pil", module: "PIL" },
125
+ { package: "python3-reportlab", module: "reportlab" },
124
126
  ];
125
- var missing = packages.filter(function (pkg) {
126
- return !runQuiet("dpkg-query -W -f='${Status}' " + shellQuote(pkg) + " 2>/dev/null | grep -q 'install ok installed'");
127
- });
127
+ var missing = dependencies.filter(function (dependency) {
128
+ // Successful imports with user-site disabled are authoritative. This
129
+ // avoids replacing NVIDIA OpenCV 4.8 with Ubuntu's generic OpenCV 4.5 just
130
+ // because the provider package has a different dpkg name.
131
+ if (dependency.command && hasCmd(dependency.command)) return false;
132
+ if (dependency.module && runQuiet(
133
+ "PYTHONNOUSERSITE=1 " + shellQuote(systemPython) + " -c " + shellQuote("import " + dependency.module),
134
+ )) return false;
135
+ return !(dependency.providers || [dependency.package]).some(function (provider) {
136
+ return runQuiet("dpkg-query -W -f='${Status}' " + shellQuote(provider) + " 2>/dev/null | grep -q 'install ok installed'");
137
+ });
138
+ }).map(function (dependency) { return dependency.package; });
128
139
  if (missing.length === 0) {
129
140
  log("Jetson advanced-OCR native dependencies are installed.");
130
141
  return;
@@ -245090,6 +245090,9 @@ init_process_async();
245090
245090
  init_jetson_monitor();
245091
245091
  init_venv_paths();
245092
245092
  init_model_store();
245093
+ var OCR_JETSON_NATIVE_PROVIDERS = Object.freeze({
245094
+ "python3-opencv": ["python3-opencv", "libopencv-python"]
245095
+ });
245093
245096
 
245094
245097
  // packages/execution/dist/broker-mediated-backend.js
245095
245098
  init_model_broker();
@@ -10862,7 +10862,7 @@
10862
10862
  "Tools",
10863
10863
  "Vision"
10864
10864
  ],
10865
- "description": "Reports exact Tesseract engine/language, native package, Python import/version, backend, override, and bundled-pipeline state. This endpoint never invokes sudo, apt, pip, venv creation, or inference. Optional query: ?language=eng+fra.",
10865
+ "description": "Reports exact Tesseract engine/language, native provider inventory, Python import/version, backend, override, and bundled-pipeline state. Successful isolated imports are authoritative, including NVIDIA libopencv-python; readiness does not require Ubuntu's python3-opencv dpkg name. This endpoint never invokes sudo, apt, pip, venv creation, or inference. Optional query: ?language=eng+fra.",
10866
10866
  "responses": {
10867
10867
  "200": {
10868
10868
  "description": "OCR runtime is ready"
@@ -29108,7 +29108,7 @@
29108
29108
  "id": "guide.rest-endpoints-voice-vision",
29109
29109
  "kind": "guide",
29110
29110
  "title": "Voice, Audio, Vision, And Voicechat",
29111
- "summary": "First poll GET /v1/ocr/readiness?language=eng. On Jetson, a privileged or interactive npm installation/bootstrap provisions tesseract-ocr, python3-venv, python3-opencv, python3-numpy, python3-pil, and python3-reportlab. Daemon startup then creates (or repairs) ~/.omnius/runtimes/vision/ocr-advanced with --system-site-packages and installs only pytesseract==0",
29111
+ "summary": "First poll GET /v1/ocr/readiness?language=eng. On Jetson, a privileged or interactive npm installation/bootstrap provisions tesseract-ocr, python3-venv, an import-verified system OpenCV provider (including NVIDIA libopencv-python), python3-numpy, python3-pil, and python3-reportlab. Daemon startup then creates (or repairs) ~/.omnius/runtimes/vision/ocr-advanc",
29112
29112
  "keywords": [
29113
29113
  "rest",
29114
29114
  "endpoints",
package/docs/DISCOVERY.md CHANGED
@@ -463,7 +463,7 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
463
463
  | `guide.rest-endpoints-run` | Runs, Jobs, Todos, And Scheduled Work | Submits a long-running task to the daemon and returns an accepted job record. Runs are tracked under .omnius/jobs/. |
464
464
  | `guide.rest-endpoints-skills` | Skills And Commands | The REST docs bundle is available as: |
465
465
  | `guide.rest-endpoints-tools` | Tools, MCP, Hooks, Agents, And Code Graph | GET /v1/tools and POST /v1/tools/{name}/call use the same direct-call registry, built from the @omnius/execution tool manifest plus virtual lifecycle tools such as taskcomplete. If a tool appears in /v1/tools with directcallable: true, the same name is callable at /v1/tools/{name}/call. |
466
- | `guide.rest-endpoints-voice-vision` | Voice, Audio, Vision, And Voicechat | First poll GET /v1/ocr/readiness?language=eng. On Jetson, a privileged or interactive npm installation/bootstrap provisions tesseract-ocr, python3-venv, python3-opencv, python3-numpy, python3-pil, and python3-reportlab. Daemon startup then creates (or repairs) ~/.omnius/runtimes/vision/ocr-advanced with --system-site-packages and installs only pytesseract==0 |
466
+ | `guide.rest-endpoints-voice-vision` | Voice, Audio, Vision, And Voicechat | First poll GET /v1/ocr/readiness?language=eng. On Jetson, a privileged or interactive npm installation/bootstrap provisions tesseract-ocr, python3-venv, an import-verified system OpenCV provider (including NVIDIA libopencv-python), python3-numpy, python3-pil, and python3-reportlab. Daemon startup then creates (or repairs) ~/.omnius/runtimes/vision/ocr-advanc |
467
467
  | `guide.rest-errors-pagination-etags` | Errors, Pagination, ETags, And Request IDs | The OpenAPI contract documents RFC 7807 Problem Details for common errors: |
468
468
  | `guide.rest-examples-curl` | Curl Examples | curl -s "$BASE/openapi.json" \| jq '.info.title, .info.version' |
469
469
  | `guide.rest-examples-openai-sdk` | OpenAI SDK Examples | Omnius exposes an OpenAI-compatible chat-completions endpoint at /v1/chat/completions. |
@@ -41,7 +41,8 @@
41
41
 
42
42
  First poll `GET /v1/ocr/readiness?language=eng`. On Jetson, a privileged or
43
43
  interactive npm installation/bootstrap provisions `tesseract-ocr`, `python3-venv`,
44
- `python3-opencv`, `python3-numpy`, `python3-pil`, and `python3-reportlab`.
44
+ an import-verified system OpenCV provider (including NVIDIA
45
+ `libopencv-python`), `python3-numpy`, `python3-pil`, and `python3-reportlab`.
45
46
  Daemon startup then creates (or repairs)
46
47
  `~/.omnius/runtimes/vision/ocr-advanced` with `--system-site-packages` and
47
48
  installs only `pytesseract==0.3.13 --no-deps`. `POST /v1/ocr/setup` is the
@@ -63,7 +64,9 @@ curl -sS -X POST http://127.0.0.1:11435/v1/ocr/advanced \
63
64
  Inference never invokes sudo, apt, pip, or venv creation. If readiness is
64
65
  false, the tool returns `result.data.code=ocr_runtime_not_ready` with setup and
65
66
  readiness URLs. Jetson never installs generic CUDA, Torch, OpenCV, or NumPy
66
- packages. The caller needs `run` scope because optional
67
+ packages. A valid `OMNIUS_OCR_PYTHON` is accepted from its isolated import and
68
+ version results without requiring particular dpkg package names. The caller
69
+ needs `run` scope because optional
67
70
  `output_dir`, batch, and debug modes write OCR artifacts.
68
71
 
69
72
  ## TTS
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.631",
3
+ "version": "1.0.633",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omnius",
9
- "version": "1.0.631",
9
+ "version": "1.0.633",
10
10
  "bundleDependencies": [
11
11
  "image-to-ascii"
12
12
  ],
@@ -4091,9 +4091,9 @@
4091
4091
  }
4092
4092
  },
4093
4093
  "node_modules/hono": {
4094
- "version": "4.13.1",
4095
- "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.1.tgz",
4096
- "integrity": "sha512-kdJoFVv2xmayw6cY09H7AbMJMt8Jn5jdlEdXsP7AGBdF2DIptVlKlOLKXP41yPip4/a3yQPv9gVcJYI8YY04dw==",
4094
+ "version": "4.13.2",
4095
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.2.tgz",
4096
+ "integrity": "sha512-JydRilDRkYBQMt9qR9U92mXxmbGqsqSn/IKOrh4e7/gEbn+0zSr8igTu0obwJoNGN4sez28DIql7FBHWydoJpA==",
4097
4097
  "license": "MIT",
4098
4098
  "engines": {
4099
4099
  "node": ">=16.9.0"
@@ -5138,9 +5138,9 @@
5138
5138
  }
5139
5139
  },
5140
5140
  "node_modules/main-event": {
5141
- "version": "1.0.4",
5142
- "resolved": "https://registry.npmjs.org/main-event/-/main-event-1.0.4.tgz",
5143
- "integrity": "sha512-sKazUjIy2Jalv5lkQ446iOcrx8Q7TkaCuk6xfnzg5uUqMusMLDMPmRDmSNE2kjSVpSTJo4j1bQZusS+Ib7Bvrg==",
5141
+ "version": "1.0.5",
5142
+ "resolved": "https://registry.npmjs.org/main-event/-/main-event-1.0.5.tgz",
5143
+ "integrity": "sha512-4l9z8r7Q446mhhVTwdHmfPksOYBwN2xa7ewEW2yxPVNQapIaAf57ORFLMB91SpMEMa4wXowect7fq3uMLjDnGA==",
5144
5144
  "license": "Apache-2.0 OR MIT"
5145
5145
  },
5146
5146
  "node_modules/math-intrinsics": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.631",
3
+ "version": "1.0.633",
4
4
  "description": "AI coding agent powered by open-source models (Ollama/vLLM) — interactive TUI with agentic tool-calling loop",
5
5
  "type": "module",
6
6
  "main": "./dist/library.js",