@agentikos/omega-os 0.19.22 → 0.19.23

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.
@@ -131,6 +131,25 @@ _CATALOG: list[CliSpec] = [
131
131
  install_cmd=["npm", "install", "-g", "@continuedev/cli"],
132
132
  description="Continue.dev CLI — multi-provider with config.json",
133
133
  ),
134
+ # v0.19.23 — local LLM runtimes (no API key needed, free local inference).
135
+ CliSpec(
136
+ id="ollama", label="Ollama (local model runtime)",
137
+ bin_name="ollama",
138
+ install_cmd=[], # filled at runtime — curl|sh installer
139
+ description="Local LLM runtime — pull + run Llama/Mistral/Qwen/etc.",
140
+ ),
141
+ CliSpec(
142
+ id="lm_studio", label="LM Studio CLI (local)",
143
+ bin_name="lms",
144
+ install_cmd=["npx", "-y", "@lmstudio/cli", "install"],
145
+ description="LM Studio command-line manager (`lms`) for local models",
146
+ ),
147
+ CliSpec(
148
+ id="gh_copilot", label="GitHub Copilot Chat (via gh extension)",
149
+ bin_name="gh", # we extend an existing binary
150
+ install_cmd=["gh", "extension", "install", "github/gh-copilot"],
151
+ description="GitHub Copilot Chat as a `gh copilot` subcommand",
152
+ ),
134
153
  ]
135
154
 
136
155
 
@@ -545,6 +545,13 @@ for entry in missing:
545
545
  elif "npm_global" in install and shutil.which("npm"):
546
546
  rc, out = _run(["npm", "install", "-g", "--silent", install["npm_global"]])
547
547
  attempt = f"npm install -g {install['npm_global']}"
548
+ elif "uv_tool" in install and (shutil.which("uv") or os.path.isfile(
549
+ os.path.expanduser("~/.local/bin/uv"))):
550
+ # uv-managed Python tools — installs to ~/.local/share/uv/tools
551
+ # and links to ~/.local/bin (which step_system_deps put on PATH)
552
+ uv_bin = shutil.which("uv") or os.path.expanduser("~/.local/bin/uv")
553
+ rc, out = _run([uv_bin, "tool", "install", "--quiet", install["uv_tool"]])
554
+ attempt = f"uv tool install {install['uv_tool']}"
548
555
  elif "curl" in install:
549
556
  # curl|bash installer — last resort
550
557
  rc, out = _run(["bash", "-c", f"curl -fsSL {install['curl']} | bash"])
@@ -188,7 +188,7 @@ from omega_engine.genesis import (
188
188
  )
189
189
  from omega_engine import plan as plan_v7
190
190
 
191
- __version__ = "0.19.22"
191
+ __version__ = "0.19.23"
192
192
 
193
193
  __all__ = [
194
194
  "__version__",
@@ -2965,6 +2965,86 @@ def _set_active_provider(provider_id: str) -> None:
2965
2965
  p.write_text(provider_id.strip() + "\n")
2966
2966
 
2967
2967
 
2968
+ def cmd_scrape(args: argparse.Namespace) -> int:
2969
+ """`omega scrape <url> [--out file] [--humanize]` — stealth scraper.
2970
+
2971
+ Thin wrapper over CloakBrowser (https://github.com/CloakHQ/CloakBrowser).
2972
+ Bypasses Cloudflare/Turnstile/FingerprintJS by patching the browser at
2973
+ the C++ level. Default output = markdown to stdout so any LLM CLI can
2974
+ pipe it directly into a context. The wrapper is what makes
2975
+ CloakBrowser usable as a SHELL CLI for Claude/Gemini/Codex/etc.
2976
+
2977
+ Usage:
2978
+ omega scrape https://example.com # → markdown to stdout
2979
+ omega scrape https://example.com --out page.md # → file
2980
+ omega scrape https://example.com --humanize # mouse curves + scroll
2981
+ omega scrape https://example.com --proxy <url> # SOCKS5/HTTP
2982
+
2983
+ Inside any Claude Code chat session: ``omega scrape <url>`` returns the
2984
+ cleaned page content. No MCP server, no Playwright dance.
2985
+ """
2986
+ import shutil
2987
+ import subprocess
2988
+ if not args.url:
2989
+ print("usage: omega scrape <url> [--out FILE] [--humanize] [--proxy URL]")
2990
+ return 2
2991
+ # CloakBrowser is installed as a uv tool (`cloakbrowser`) but we need
2992
+ # to drive it from Python — the canonical path is `python -m
2993
+ # cloakbrowser` after `pip install cloakbrowser`, OR we invoke the
2994
+ # uv-tool-installed Python directly. Try shutil.which("cloakbrowser")
2995
+ # first; if absent, fall back to running through the installer venv.
2996
+ runner = None
2997
+ if shutil.which("cloakbrowser"):
2998
+ # Direct CLI is mostly for binary management (install/info/update).
2999
+ # For SCRAPING we still need our Python wrapper.
3000
+ pass
3001
+ # Inline Python wrapper — no separate script file, no version drift.
3002
+ py_code = (
3003
+ "import sys, asyncio\n"
3004
+ "try:\n"
3005
+ " from cloakbrowser import launch_async\n"
3006
+ "except ImportError:\n"
3007
+ " sys.stderr.write('cloakbrowser not importable — install with: "
3008
+ "uv tool install cloakbrowser\\n'); sys.exit(2)\n"
3009
+ "URL = sys.argv[1]\n"
3010
+ "HUMANIZE = '--humanize' in sys.argv\n"
3011
+ "PROXY = None\n"
3012
+ "if '--proxy' in sys.argv:\n"
3013
+ " PROXY = sys.argv[sys.argv.index('--proxy') + 1]\n"
3014
+ "async def main():\n"
3015
+ " kwargs = {'humanize': HUMANIZE}\n"
3016
+ " if PROXY:\n"
3017
+ " kwargs['proxy'] = PROXY\n"
3018
+ " browser = await launch_async(**kwargs)\n"
3019
+ " page = await browser.new_page()\n"
3020
+ " await page.goto(URL, wait_until='networkidle')\n"
3021
+ " text = await page.evaluate(\"document.body.innerText\")\n"
3022
+ " await browser.close()\n"
3023
+ " print(text)\n"
3024
+ "asyncio.run(main())\n"
3025
+ )
3026
+ cmd = ["python3", "-c", py_code, args.url]
3027
+ if getattr(args, "humanize", False):
3028
+ cmd.append("--humanize")
3029
+ if getattr(args, "proxy", None):
3030
+ cmd += ["--proxy", args.proxy]
3031
+ try:
3032
+ proc = subprocess.run(cmd, capture_output=True, text=True, timeout=120)
3033
+ except subprocess.TimeoutExpired:
3034
+ print(" cloakbrowser timed out after 120s")
3035
+ return 2
3036
+ out_target = getattr(args, "out", None)
3037
+ if out_target:
3038
+ from pathlib import Path
3039
+ Path(out_target).write_text(proc.stdout)
3040
+ print(f" wrote {len(proc.stdout)} bytes → {out_target}")
3041
+ else:
3042
+ print(proc.stdout)
3043
+ if proc.returncode != 0:
3044
+ print(f" cloakbrowser stderr: {proc.stderr[:400]}", file=__import__('sys').stderr)
3045
+ return proc.returncode
3046
+
3047
+
2968
3048
  def cmd_switch(args: argparse.Namespace) -> int:
2969
3049
  """`omega switch <provider>` — hot-swap the LLM provider for new chats.
2970
3050
 
@@ -4109,6 +4189,22 @@ def _build_parser() -> argparse.ArgumentParser:
4109
4189
  p_sw.add_argument("provider", nargs="?", default=None,
4110
4190
  help="provider id (omit to print current + available)")
4111
4191
  p_sw.set_defaults(fn=cmd_switch)
4192
+
4193
+ # `omega scrape <url>` — official OmegaOS web scraper (CloakBrowser).
4194
+ p_sc = sub.add_parser(
4195
+ "scrape",
4196
+ help="stealth scrape a URL via CloakBrowser — bypasses Cloudflare, "
4197
+ "Turnstile, FingerprintJS. Output: markdown to stdout (or --out FILE)",
4198
+ )
4199
+ p_sc.add_argument("url", nargs="?", default=None,
4200
+ help="URL to fetch")
4201
+ p_sc.add_argument("--out", default=None,
4202
+ help="write result to file instead of stdout")
4203
+ p_sc.add_argument("--humanize", action="store_true",
4204
+ help="mouse curves + keyboard timing + scroll patterns")
4205
+ p_sc.add_argument("--proxy", default=None,
4206
+ help="HTTP or SOCKS5 proxy (with inline creds)")
4207
+ p_sc.set_defaults(fn=cmd_scrape)
4112
4208
  p_doc = sub.add_parser("doctor", help="validate the deployment")
4113
4209
  p_doc.add_argument("--json", action="store_true",
4114
4210
  help="emit a single JSON object instead of pretty text")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "omega-engine"
3
- version = "0.19.22"
3
+ version = "0.19.23"
4
4
  description = "The Omega OS orchestration engine — event-sourced, verified-completion agent graphs."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -1 +1 @@
1
- 0.19.22
1
+ 0.19.23
@@ -64,6 +64,16 @@ native:
64
64
  secrets: []
65
65
  recommended: true
66
66
 
67
+ - id: cloakbrowser
68
+ name: CloakBrowser (official OmegaOS scraper — bypasses bot detection)
69
+ # PyPI package — installed into a uv tool so it's globally available
70
+ # as `cloakbrowser` + `python -m cloakbrowser`. ~200MB binary
71
+ # downloaded on first run (cached).
72
+ install: { uv_tool: "cloakbrowser" }
73
+ binary: cloakbrowser
74
+ secrets: []
75
+ recommended: true
76
+
67
77
  # --- 2. Printing Press CLIs --------------------------------------------
68
78
  # Installed via `npx -y @mvanhorn/printing-press-library install <name>`.
69
79
  # Each ships with a local SQLite mirror + Claude Code skill.
@@ -0,0 +1,169 @@
1
+ # Omega OS — LLM provider catalog (v0.19.23+)
2
+ #
3
+ # Maps the operator's intent ("I want to talk to GLM") to a concrete
4
+ # (cli + provider_config) pair. Most providers don't ship their own CLI —
5
+ # they're configurable backends inside OpenCode / Continue.dev / Aider.
6
+ #
7
+ # Used by:
8
+ # * `omega switch <provider>` — looks up the cli + writes the
9
+ # provider-active marker.
10
+ # * step_provider_configs — drops templated config files for every
11
+ # supported provider with secret refs from the vault.
12
+ # * `omega account login --provider <id>` — guides the auth flow per
13
+ # provider.
14
+ #
15
+ # Secrets are vault refs, never literal. Templated config files end up at
16
+ # the LLM CLI's expected path on first launch.
17
+
18
+ version: 1
19
+
20
+ providers:
21
+ # -- Anthropic family --
22
+ - id: anthropic
23
+ label: "Anthropic Claude (API key)"
24
+ cli: claude_code
25
+ auth_kind: api_key
26
+ secret_refs: [ANTHROPIC_API_KEY]
27
+ notes: |
28
+ Direct Anthropic API access. Pay-per-token. For OmegaOS's own
29
+ L3-L5 stack we prefer Claude Max OAuth (no cost) — this entry is
30
+ for L2 / Hermès style "use my paid Anthropic budget" scenarios.
31
+
32
+ - id: chatgpt_subscription
33
+ label: "ChatGPT Subscription (OpenAI Codex)"
34
+ cli: codex
35
+ auth_kind: oauth
36
+ secret_refs: []
37
+ notes: |
38
+ Codex CLI uses the same OAuth as your ChatGPT Plus/Team sub —
39
+ no separate API key needed. `codex login` opens the browser.
40
+
41
+ # -- OpenAI family --
42
+ - id: openai
43
+ label: "OpenAI (API key — gpt-4o, gpt-5, o3-pro)"
44
+ cli: codex # codex IS OpenAI's official agentic CLI
45
+ auth_kind: api_key
46
+ secret_refs: [OPENAI_API_KEY]
47
+ notes: |
48
+ Pay-per-token OpenAI API. Use this when you want gpt-5/o3-pro
49
+ without the ChatGPT subscription cap.
50
+
51
+ - id: openai_compatible
52
+ label: "OpenAI API-Compatible endpoint (custom)"
53
+ cli: opencode # OpenCode's `provider: openai_compatible`
54
+ auth_kind: api_key
55
+ secret_refs: [OPENAI_API_BASE, OPENAI_API_KEY]
56
+ notes: |
57
+ For LM Studio, vLLM, llama.cpp's `/v1` server, Together.ai's
58
+ OpenAI-shape endpoint, etc.
59
+
60
+ # -- Google --
61
+ - id: google_ai
62
+ label: "Google AI Studio (Gemini)"
63
+ cli: gemini_cli
64
+ auth_kind: api_key
65
+ secret_refs: [GOOGLE_API_KEY]
66
+ notes: |
67
+ Direct Gemini API via the official `gemini` CLI. Free tier
68
+ generous; paid tier for higher RPM.
69
+
70
+ # -- China --
71
+ - id: glm
72
+ label: "Zhipu GLM-4.5 / GLM-4.6 (via OpenCode)"
73
+ cli: opencode
74
+ auth_kind: api_key
75
+ secret_refs: [GLM_API_KEY]
76
+ notes: |
77
+ Zhipu AI's GLM models — open weights for the smaller variants,
78
+ hosted API for GLM-4.6. OpenCode provider `zhipu`.
79
+
80
+ - id: deepseek
81
+ label: "DeepSeek V3 / R1 (via OpenCode)"
82
+ cli: opencode
83
+ auth_kind: api_key
84
+ secret_refs: [DEEPSEEK_API_KEY]
85
+ notes: |
86
+ DeepSeek's V3 + R1 reasoning. Excellent price/perf. OpenCode
87
+ provider `deepseek`.
88
+
89
+ - id: qwen
90
+ label: "Qwen (Alibaba) — dedicated CLI"
91
+ cli: qwen_code
92
+ auth_kind: api_key
93
+ secret_refs: [DASHSCOPE_API_KEY]
94
+ notes: |
95
+ Qwen3-Coder via Alibaba's DashScope. Standalone `qwen` CLI.
96
+
97
+ # -- Local --
98
+ - id: ollama
99
+ label: "Ollama (local — Llama/Mistral/Qwen/DeepSeek-Coder)"
100
+ cli: ollama
101
+ auth_kind: none
102
+ secret_refs: []
103
+ notes: |
104
+ Local model runtime. Free, private, runs offline. Pull a model
105
+ with `ollama pull llama3.3:70b` then `ollama run`.
106
+
107
+ - id: lm_studio
108
+ label: "LM Studio (local — GUI + CLI)"
109
+ cli: lm_studio
110
+ auth_kind: none
111
+ secret_refs: []
112
+ notes: |
113
+ LM Studio for desktop. Run any GGUF model locally. Exposes an
114
+ OpenAI-compatible `/v1` endpoint OpenCode can consume.
115
+
116
+ # -- Aggregators / Gateways --
117
+ - id: openrouter
118
+ label: "OpenRouter (300+ models, one API key)"
119
+ cli: opencode
120
+ auth_kind: api_key
121
+ secret_refs: [OPENROUTER_API_KEY]
122
+ notes: |
123
+ Route to any of 300+ models with one API key. OpenCode provider
124
+ `openrouter`. Per-call routing in config.
125
+
126
+ - id: vercel_ai_gateway
127
+ label: "Vercel AI Gateway (multi-provider)"
128
+ cli: opencode
129
+ auth_kind: api_key
130
+ secret_refs: [AI_GATEWAY_API_KEY]
131
+ notes: |
132
+ Vercel's hosted gateway proxies your traffic across providers
133
+ with usage caps + observability. OpenCode `provider: ai_gateway`.
134
+
135
+ # -- Hyperscalers --
136
+ - id: amazon_bedrock
137
+ label: "Amazon Bedrock (AWS)"
138
+ cli: opencode
139
+ auth_kind: aws
140
+ secret_refs: [AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION]
141
+ notes: |
142
+ AWS Bedrock — Claude, Llama, Mistral, Cohere, Stability through
143
+ AWS auth. OpenCode `provider: bedrock`.
144
+
145
+ # -- Other --
146
+ - id: mistral
147
+ label: "Mistral AI (API key)"
148
+ cli: opencode
149
+ auth_kind: api_key
150
+ secret_refs: [MISTRAL_API_KEY]
151
+ notes: |
152
+ Mistral-Large, Codestral, Pixtral. OpenCode `provider: mistral`.
153
+
154
+ - id: xai
155
+ label: "xAI Grok (Grok-2, Grok-Beta)"
156
+ cli: opencode
157
+ auth_kind: api_key
158
+ secret_refs: [XAI_API_KEY]
159
+ notes: |
160
+ Grok-2 / Grok-Beta via xAI's API. OpenCode `provider: xai`.
161
+
162
+ - id: github_copilot
163
+ label: "GitHub Copilot Chat (via gh extension)"
164
+ cli: gh_copilot
165
+ auth_kind: oauth
166
+ secret_refs: []
167
+ notes: |
168
+ Talk to Copilot from the terminal — `gh copilot suggest "..."` and
169
+ `gh copilot explain "..."`. Uses your GitHub OAuth.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentikos/omega-os",
3
- "version": "0.19.22",
3
+ "version": "0.19.23",
4
4
  "description": "Omega OS — installable agentic operating system with verified-completion orchestration. Event-sourced engine, 8-block rack, autonomous agents, MCP.",
5
5
  "bin": {
6
6
  "omega-os": "bin/omega-os.js"