@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.
- package/bootstrap/lib/steps.sh +148 -0
- package/install.sh +7 -1
- package/omega/Agentik_Engine/omega_engine/__init__.py +1 -1
- package/omega/Agentik_Engine/omega_engine/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/pyproject.toml +1 -1
- package/omega/Agentik_SSOT/VERSION +1 -1
- package/omega/Agentik_SSOT/clis/clis-catalog.yaml +151 -0
- package/package.json +1 -1
package/bootstrap/lib/steps.sh
CHANGED
|
@@ -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
|
-
|
|
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
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.19.
|
|
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.
|
|
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"
|