@agentikos/omega-os 0.19.20 → 0.19.21

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.
@@ -463,6 +463,154 @@ PY
463
463
 
464
464
  # --- 40 -----------------------------------------------------------------------
465
465
  #
466
+ # step_clis — install system CLIs + Printing Press CLI library.
467
+ #
468
+ # Replaces step_mcp as the default integration story (v0.19.21+). The
469
+ # rationale per the operator: MCP servers are token-expensive (each
470
+ # call pays protocol round-trip + server system prompt overhead). System
471
+ # CLIs that Claude Code shells out to via `Bash` are predictable, cheap,
472
+ # and survive without a long-lived server process. Printing Press
473
+ # (https://printingpress.dev) extends that model with agent-native CLIs
474
+ # that ship local SQLite mirrors — even cheaper than remote API calls.
475
+ #
476
+ # Three phases:
477
+ # 1. AUDIT — detect what's already installed; render a status table.
478
+ # 2. NATIVE — install missing recommended native binaries via the
479
+ # OS package manager (or npm-global / curl fallback).
480
+ # 3. PRINTING PRESS — install the PP factory + the recommended CLIs
481
+ # from the library catalog.
482
+ #
483
+ # Idempotent — re-running only acts on what's still missing.
484
+ step_clis() {
485
+ local catalog="$OMEGA_HOME/Agentik_SSOT/clis/clis-catalog.yaml"
486
+ [ -f "$catalog" ] || { err "CLI catalog missing: $catalog"; return 1; }
487
+ PYTHONPATH="$OMEGA_HOME/Agentik_Engine" python3 - "$catalog" "$OMEGA_PKG" <<'PY' 2>>"$LOG_FILE"
488
+ import os
489
+ import shutil
490
+ import subprocess
491
+ import sys
492
+ import yaml
493
+
494
+ catalog_path = sys.argv[1]
495
+ pkg = sys.argv[2] # apt | dnf | brew | unknown
496
+
497
+ with open(catalog_path) as f:
498
+ catalog = yaml.safe_load(f) or {}
499
+
500
+ # ─── Phase 1: audit ───────────────────────────────────────────
501
+ print("\n ──── CLI audit ────")
502
+ ok_count = 0
503
+ missing = []
504
+ for entry in catalog.get("native", []):
505
+ cli_id = entry["id"]
506
+ binary = entry.get("binary", cli_id)
507
+ if shutil.which(binary):
508
+ print(f" ok {cli_id:<14} ({binary} present)")
509
+ ok_count += 1
510
+ else:
511
+ rec = entry.get("recommended", False)
512
+ tag = "MISSING (recommended)" if rec else "missing (optional)"
513
+ print(f" -- {cli_id:<14} {tag}")
514
+ missing.append(entry)
515
+ print(f" → {ok_count}/{len(catalog.get('native', []))} native CLIs present\n")
516
+
517
+ # ─── Phase 2: install missing recommended native CLIs ─────────
518
+ def _run(cmd, env=None, timeout=600):
519
+ try:
520
+ proc = subprocess.run(cmd, capture_output=True, text=True,
521
+ timeout=timeout, env=env)
522
+ return proc.returncode, proc.stdout + proc.stderr
523
+ except (subprocess.SubprocessError, FileNotFoundError) as e:
524
+ return 1, str(e)
525
+
526
+ installed_now = []
527
+ failed_now = []
528
+ for entry in missing:
529
+ if not entry.get("recommended", False):
530
+ continue
531
+ cli_id = entry["id"]
532
+ install = entry.get("install", {})
533
+ rc, out, attempt = 1, "", ""
534
+
535
+ if pkg in install: # platform-specific package name
536
+ if pkg == "brew":
537
+ rc, out = _run(["brew", "install", install[pkg]])
538
+ attempt = f"brew install {install[pkg]}"
539
+ elif pkg == "apt":
540
+ rc, out = _run(["sudo", "apt-get", "install", "-y", "-qq", install[pkg]])
541
+ attempt = f"apt-get install {install[pkg]}"
542
+ elif pkg == "dnf":
543
+ rc, out = _run(["sudo", "dnf", "install", "-y", "-q", install[pkg]])
544
+ attempt = f"dnf install {install[pkg]}"
545
+ elif "npm_global" in install and shutil.which("npm"):
546
+ rc, out = _run(["npm", "install", "-g", "--silent", install["npm_global"]])
547
+ attempt = f"npm install -g {install['npm_global']}"
548
+ elif "curl" in install:
549
+ # curl|bash installer — last resort
550
+ rc, out = _run(["bash", "-c", f"curl -fsSL {install['curl']} | bash"])
551
+ attempt = f"curl {install['curl']} | bash"
552
+ else:
553
+ print(f" skip {cli_id}: no install method for pkg={pkg}")
554
+ continue
555
+
556
+ binary = entry.get("binary", cli_id)
557
+ if shutil.which(binary):
558
+ print(f" ok {cli_id:<14} (installed via {attempt})")
559
+ installed_now.append(cli_id)
560
+ else:
561
+ print(f" fail {cli_id}: {attempt} returned rc={rc}")
562
+ failed_now.append(cli_id)
563
+
564
+ # ─── Phase 3: Printing Press ──────────────────────────────────
565
+ pp_core = catalog.get("printing_press_core", {})
566
+ pp_clis = catalog.get("printing_press_clis", [])
567
+
568
+ print(f"\n ──── Printing Press ({len(pp_clis)} library CLIs available) ────")
569
+
570
+ # Install PP core (printer + library client) if not present
571
+ if not shutil.which("ppi-update") and not shutil.which("npx"):
572
+ print(" skip: neither ppi-update nor npx on PATH — install Node first")
573
+ elif not shutil.which("ppi-update"):
574
+ install_cmd = pp_core.get("install_method", "")
575
+ if install_cmd:
576
+ print(f" installing Printing Press core: {install_cmd}")
577
+ rc, out = _run(["bash", "-c", install_cmd], timeout=300)
578
+ if rc == 0:
579
+ print(" ok Printing Press core installed")
580
+ else:
581
+ print(f" warn Printing Press core install rc={rc} — library CLIs may still work via npx")
582
+ else:
583
+ print(" ok Printing Press core already installed")
584
+
585
+ # Install recommended PP library CLIs (one npx call per recommended entry)
586
+ pp_lib_cmd = ["npx", "-y", "@mvanhorn/printing-press-library"]
587
+ pp_ok = 0
588
+ pp_failed = []
589
+ for entry in pp_clis:
590
+ if not entry.get("recommended", False):
591
+ continue
592
+ cli_id = entry["id"]
593
+ print(f" installing pp-cli: {cli_id}…")
594
+ rc, out = _run([*pp_lib_cmd, "install", cli_id], timeout=300)
595
+ if rc == 0:
596
+ print(f" ok {cli_id}")
597
+ pp_ok += 1
598
+ else:
599
+ print(f" fail {cli_id}: rc={rc}")
600
+ pp_failed.append(cli_id)
601
+
602
+ print(f"\n ──── Summary ────")
603
+ print(f" Native CLIs installed this run: {installed_now or '(none missing)'}")
604
+ print(f" Native CLIs that failed: {failed_now or '(none)'}")
605
+ print(f" Printing Press CLIs installed: {pp_ok} (of {sum(1 for e in pp_clis if e.get('recommended'))} recommended)")
606
+ print(f" Printing Press CLIs that failed: {pp_failed or '(none)'}")
607
+ print(f" Non-recommended CLIs available via: omega cli install <id>")
608
+ PY
609
+ return 0
610
+ }
611
+
612
+ # --- 40-legacy ----------------------------------------------------------------
613
+ #
466
614
  # step_mcp — present the MCP/plugin catalog as a checklist (interactive) or
467
615
  # apply the manifest's `mcp:` list (headless). For each selected entry:
468
616
  # 1. install the server binary into Agentik_Tools/<id>/
package/install.sh CHANGED
@@ -147,7 +147,13 @@ STEPS=(
147
147
  "35-providers:step_providers"
148
148
  "36-tmux-config:step_tmux_config"
149
149
  "37-hermes-brief:step_hermes_brief"
150
- "40-mcp:step_mcp"
150
+ # v0.19.21 — MCP install dropped from the default sequence. MCPs are
151
+ # token-expensive (each call pays the protocol round-trip + the
152
+ # server's system prompt overhead). We replace with system CLIs +
153
+ # Printing Press (https://printingpress.dev) — agent-native CLIs
154
+ # with local SQLite mirrors. Re-enable opt-in via:
155
+ # omega tool install <id> (still wired for one-offs)
156
+ "40-clis:step_clis"
151
157
  "45-claude-plugins:step_claude_plugins"
152
158
  )
153
159
  if [ "$PROFILE" != "minimal" ]; then
@@ -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.20"
191
+ __version__ = "0.19.21"
192
192
 
193
193
  __all__ = [
194
194
  "__version__",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "omega-engine"
3
- version = "0.19.20"
3
+ version = "0.19.21"
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.20
1
+ 0.19.21
@@ -0,0 +1,151 @@
1
+ # Omega OS — system CLI catalog (v0.19.21+)
2
+ #
3
+ # Replaces the v0.19.20 MCP catalog. Rationale: MCP servers are
4
+ # token-expensive (each call pays the protocol round-trip + the server's
5
+ # system prompt overhead). System CLIs that Claude Code calls via `Bash`
6
+ # are cheap, predictable, and survive without a running server.
7
+ #
8
+ # Printing Press (https://printingpress.dev) ships ~50 agent-native CLIs
9
+ # with local SQLite mirrors for offline queries — even cheaper than
10
+ # remote API calls. We pull a curated subset by default.
11
+ #
12
+ # Maintained by the connection-educator (Agentik_Orchestration/educators/).
13
+ # Secrets are referenced by name only — operator wires them at install
14
+ # time or later via `omega vault write <REF> <value>`.
15
+
16
+ version: 1
17
+
18
+ # --- 1. Native binaries — install via system package manager -----------
19
+ # These are the bedrock — `omega audit` and most workflows assume
20
+ # they're on PATH.
21
+ native:
22
+ - id: gh
23
+ name: GitHub CLI
24
+ install: { brew: "gh", apt: "gh", dnf: "gh" }
25
+ recommended: true
26
+ - id: vercel
27
+ name: Vercel CLI
28
+ install: { npm_global: "vercel" }
29
+ recommended: true
30
+ - id: wrangler
31
+ name: Cloudflare Wrangler
32
+ install: { npm_global: "wrangler" }
33
+ recommended: false
34
+ - id: pnpm
35
+ name: pnpm package manager
36
+ install: { brew: "pnpm", npm_global: "pnpm" }
37
+ recommended: true
38
+ - id: bun
39
+ name: Bun runtime + package manager
40
+ install: { brew: "oven-sh/bun/bun", curl: "https://bun.sh/install" }
41
+ recommended: true
42
+ - id: ripgrep
43
+ name: ripgrep (rg) — fast code search
44
+ install: { brew: "ripgrep", apt: "ripgrep", dnf: "ripgrep" }
45
+ binary: rg
46
+ recommended: true
47
+ - id: bat
48
+ name: bat — better cat with syntax highlight
49
+ install: { brew: "bat", apt: "bat", dnf: "bat" }
50
+ recommended: false
51
+ - id: jq
52
+ name: jq — JSON processor
53
+ install: { brew: "jq", apt: "jq", dnf: "jq" }
54
+ recommended: true
55
+ - id: stripe-cli
56
+ name: Stripe CLI
57
+ install: { brew: "stripe/stripe-cli/stripe" }
58
+ binary: stripe
59
+ secrets: [STRIPE_API_KEY]
60
+ recommended: false
61
+ - id: playwright
62
+ name: Playwright (browser automation for E2E + audits)
63
+ install: { npm_global: "@playwright/test" }
64
+ secrets: []
65
+ recommended: true
66
+
67
+ # --- 2. Printing Press CLIs --------------------------------------------
68
+ # Installed via `npx -y @mvanhorn/printing-press-library install <name>`.
69
+ # Each ships with a local SQLite mirror + Claude Code skill.
70
+ #
71
+ # Catalog source: github.com/mvanhorn/printing-press-library/library
72
+ printing_press_core:
73
+ install_method: "curl -fsSL https://raw.githubusercontent.com/mvanhorn/cli-printing-press/main/scripts/install.sh | bash"
74
+ description: "Printing Press generator + library client (ppi-* CLIs)"
75
+
76
+ printing_press_clis:
77
+ - id: stripe
78
+ category: payments
79
+ description: "Every Stripe entity + local SQLite mirror, cross-entity SQL"
80
+ secrets: [STRIPE_API_KEY]
81
+ recommended: true
82
+ - id: linear
83
+ category: project-management
84
+ description: "Linear issues + projects, local SQLite mirror, compound queries"
85
+ secrets: [LINEAR_API_KEY]
86
+ recommended: true
87
+ - id: jira
88
+ category: project-management
89
+ description: "Jira issues + sprints"
90
+ secrets: [JIRA_API_TOKEN, JIRA_HOST]
91
+ recommended: false
92
+ - id: clickup
93
+ category: project-management
94
+ description: "ClickUp tasks + spaces"
95
+ secrets: [CLICKUP_API_KEY]
96
+ recommended: false
97
+ - id: cal-com
98
+ category: productivity
99
+ description: "Cal.com bookings + availability"
100
+ secrets: [CAL_COM_API_KEY]
101
+ recommended: false
102
+ - id: figma
103
+ category: productivity
104
+ description: "Figma files + comments (read-only)"
105
+ secrets: [FIGMA_TOKEN]
106
+ recommended: false
107
+ - id: fireflies
108
+ category: productivity
109
+ description: "Fireflies meeting transcripts + summaries"
110
+ secrets: [FIREFLIES_API_KEY]
111
+ recommended: false
112
+ - id: granola
113
+ category: productivity
114
+ description: "Granola notes export"
115
+ secrets: [GRANOLA_API_KEY]
116
+ recommended: false
117
+ - id: apify
118
+ category: developer-tools
119
+ description: "Apify scraping actors + dataset access"
120
+ secrets: [APIFY_TOKEN]
121
+ recommended: false
122
+ - id: firecrawl
123
+ category: developer-tools
124
+ description: "Firecrawl web scraping with local mirror"
125
+ secrets: [FIRECRAWL_API_KEY]
126
+ recommended: false
127
+ - id: docker-hub
128
+ category: developer-tools
129
+ description: "Docker Hub repos + tags inspection"
130
+ secrets: []
131
+ recommended: false
132
+ - id: twilio
133
+ category: social-and-messaging
134
+ description: "Twilio SMS + voice + WhatsApp"
135
+ secrets: [TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN]
136
+ recommended: false
137
+ - id: ahrefs
138
+ category: marketing
139
+ description: "Ahrefs SEO data with local SQLite mirror"
140
+ secrets: [AHREFS_API_KEY]
141
+ recommended: false
142
+ - id: google-search-console
143
+ category: marketing
144
+ description: "GSC properties + queries + pages"
145
+ secrets: [GSC_CREDENTIALS_JSON]
146
+ recommended: false
147
+ - id: google-ads
148
+ category: marketing
149
+ description: "Google Ads campaigns + spend"
150
+ secrets: [GOOGLE_ADS_DEVELOPER_TOKEN, GOOGLE_ADS_CLIENT_ID, GOOGLE_ADS_CLIENT_SECRET]
151
+ recommended: false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentikos/omega-os",
3
- "version": "0.19.20",
3
+ "version": "0.19.21",
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"