diff --git a/BOUNDARIES.md b/BOUNDARIES.md index a2322ef..8d200fc 100644 --- a/BOUNDARIES.md +++ b/BOUNDARIES.md @@ -17,9 +17,10 @@ Short version: | Org map, registry index, cross-repo governance overview | `OpenSIN-overview` | | Runtime core / engine | `OpenSIN` | | Official documentation body | `OpenSIN-documentation` | -| OpenCode config / skills / plugins | `upgraded-opencode-stack` | -| Product web app | `OpenSIN-WebApp` | -| Internal ops control plane | `ai-agent-system` | +| OpenCode config / skills / plugins | `OpenSIN-AI/Infra-SIN-OpenCode-Stack` | +| Persistent agent memory (PCPM v4) | `OpenSIN-AI/Infra-SIN-Global-Brain` | +| Product web app | `OpenSIN-AI/OpenSIN-WebApp` | +| A2A fleet control plane | `OpenSIN-AI/OpenSIN-backend` | --- diff --git a/PRODUCT-VISION.md b/PRODUCT-VISION.md new file mode 100644 index 0000000..458b765 --- /dev/null +++ b/PRODUCT-VISION.md @@ -0,0 +1,229 @@ +# Product Vision — OpenSIN-AI + +> **Stand:** 2026-04-18. +> **Zweck dieses Dokuments:** Wohin OpenSIN-AI geht und wie die 200 Repos zusammen ein einziges Produkt ergeben. Für neue Menschen und Agenten, die in 5 Minuten das große Bild brauchen. Für den aktuellen Ist-Zustand siehe [STATE-OF-THE-UNION.md](./STATE-OF-THE-UNION.md). + +## Der Pitch in einem Satz + +**OpenSIN ist das Agent-Betriebssystem, das in Teams organisierte Agenten, persistenten Gedächtnis-Daemon und einen modularen Marktplatz in einem Open-Source-Kern und einer bezahlten Cloud-Schicht zusammenführt — statt, wie OpenCode, Claude Code, Manus AI oder Google Jules, einen einzelnen isolierten Agenten anzubieten.** + +Wenn der Satz zu lang ist: **"Agent OS, nicht Agent App."** + +--- + +## Das 3-Tier-Modell + +Drei Tiers. Jedes Tier hat einen klaren URL, einen klaren Kunden, eine klare Value-Prop. + +### Tier 1 — OpenSIN (Free, Open Source) + +- **URL:** [opensin.ai](https://opensin.ai) (Marketing) + [github.com/OpenSIN-AI](https://github.com/OpenSIN-AI) (Code) + [docs.opensin.ai](https://docs.opensin.ai) (Docs) +- **Zielgruppe:** Developer, Tinkerer, OSS-Enthusiasten, Security-Researcher +- **Value:** + - Vollständiger `OpenSIN` Core (Python, 310+ packages) — lokal klonbar, lokal ausführbar + - `OpenSIN-Code` autonomous CLI — wie Claude Code / OpenCode, nur mit Multi-Agent-Koordination und persistent memory + - `Infra-SIN-OpenCode-Stack` — kanonische OpenCode-Konfiguration mit 44 Skills, 27 MCPs, 5 Providern + - `Infra-SIN-Global-Brain` (PCPM v4) — persistenter Agent-Speicher, lokal betreibbar + - Zugriff auf den gesamten A2A-SIN-* Fleet als Blaupausen — jeder kann eigene Agenten klonen +- **Preis:** 0 +- **Betriebsmodell:** User läuft es auf eigener Hardware, mit eigenen API-Keys + +### Tier 2 — My.OpenSIN (Paid Subscription) + +- **URL:** [my.opensin.ai](https://my.opensin.ai) (Marketing + Checkout) → [chat.opensin.ai](https://chat.opensin.ai) (Authenticated App) +- **Zielgruppe:** Solo-Founder, kleine Teams, Professionals die keinen Bock auf Self-Hosting haben +- **Value:** + - **Gehostete Agent-Flotte** — User bekommt seinen eigenen Tenant mit 24/7 laufenden Agenten + - **Pre-konfigurierte API-Keys** — OpenAI, Anthropic, Google, xAI, Groq inklusive, User muss keine eigenen Keys managen + - **Premium-Dashboard** — fleet health, Budget-Tracking, Agent-Logs, PCPM-Memory-Browser + - **SLA + Support** — Discord-Priority-Channel, Incident-Response + - **Cloud-PCPM** — persistent memory das zwischen allen Sessions des Users synchronisiert +- **Preis:** Monatliches Abo (z. B. €29/mo Starter, €99/mo Pro, custom Enterprise — finale Preise setzt `Biz-SIN-Marketing`) +- **Betriebsmodell:** OpenSIN hostet, User zahlt per Stripe + +### Tier 3 — Marketplace (Add-on Mini-Abos auf Tier 2) + +- **URL:** `my.opensin.ai/marketplace/` (Browse/Buy) → in `chat.opensin.ai` freigeschaltet +- **Zielgruppe:** Pro-User aus Tier 2, die spezifische Kapazitäten brauchen (z. B. TikTok-Shop-Automation, Patent-Recherche, Cyber-Security-Red-Team) +- **Value:** + - Modulare **Team-Bundles** — z. B. `Team-SIN-Apple` (alle 12 Apple-Integrations), `Team-SIN-Commerce` (TikTok-Shop + Shop-Finance + Shop-Logistic), `Team-SIN-Media-Music` (Musik-Produktions-Pipeline) + - Jedes Bundle ist als **separates Mini-Abo** buchbar (z. B. +€9/mo für `Team-SIN-Apple`) + - User kann Bundles ein- und ausschalten ohne Basis-Abo zu wechseln +- **Preis:** Mini-Abos zusätzlich zur Tier-2-Base +- **Betriebsmodell:** Marketplace-Katalog rendert aus `oh-my-sin.json` (canonical team manifest in `Infra-SIN-OpenCode-Stack`), jedes Bundle ist ein Stripe-Add-on-Product + +--- + +## UI-Schichtung (4 Oberflächen, 4 Rollen) + +> **Status:** DECIDED 2026-04-18 (Wave 4). Diese Trennung ist jetzt bindend. Jede Änderung, die sie verwischt, ist ein Rollback. + +| Repo | Domain | Rolle | Auth | Payment | +|---|---|---|---|---| +| `website-opensin.ai` | opensin.ai | **Marketing für OSS** — "Clone repo, run locally, join Discord" | keine | keine | +| `OpenSIN-documentation` | docs.opensin.ai | **Dokumentation** (Docusaurus) | keine | keine | +| `website-my.opensin.ai` | my.opensin.ai | **Marketing für Paid + Marketplace-Katalog + Stripe-Checkout** — "Buy Pro / Browse Teams / Redirect nach Kauf auf chat.opensin.ai" | keine (außer Session nach Kauf) | Stripe Checkout | +| `OpenSIN-WebApp` | chat.opensin.ai | **Authenticated Dashboard** — fleet management, API keys, PCPM memory browser, billing portal | Supabase Auth (required) | Stripe Customer Portal (upgrade/downgrade) | + +**Warum diese Trennung:** + +- `my.opensin.ai` ist **Vor-dem-Login** — Marketing + Commerce. Das ist klassisches "Funnel-Design". Unauthenticated User sehen hier Preise, kaufen hier. +- `chat.opensin.ai` ist **Nach-dem-Login** — das eigentliche Produkt. Kein Marketing mehr, nur noch das Tool. +- Beide dürfen Stripe-APIs anfassen, aber mit unterschiedlichen Rollen: `my.opensin.ai` macht **Checkout** (neu zahlen), `chat.opensin.ai` macht **Customer Portal** (bestehendes Abo managen). + +**Action-Items** (werden in neuen Tracking-Issues angelegt): + +1. README von `website-my.opensin.ai` präzisieren: Marketing + Checkout, **nicht** "User loggen sich ein". Der Login-Button auf my.opensin.ai redirectet auf `chat.opensin.ai`. +2. README von `OpenSIN-WebApp` präzisieren: Dashboard at chat.opensin.ai, **nicht** Marketing. Keine Landing-Page-Copy hier. +3. Beide READMEs deep-linken zu **diesem** Dokument als Single-Source-of-Truth für die Rolle. + +--- + +## Marketplace — entschieden: Option A (Metadata-Manifeste) + +> **Status:** DECIDED 2026-04-18 (Wave 4). `Team-SIN-*` sind Metadata-Manifeste, keine Code-Pakete. Schema: [`schemas/team.schema.json`](./schemas/team.schema.json). Reference-Manifeste: [`templates/teams/`](./templates/teams/). + +**Frage (beantwortet):** Sind `Team-SIN-*` Repos Code-Pakete oder Metadata-Manifeste? + +**Evidenz (siehe [STATE-OF-THE-UNION.md § Team-SIN-*](./STATE-OF-THE-UNION.md#team-sin-----17-team-repos)):** Alle 17 sind 26-35 kb groß. Das ist zu wenig für echten Code, zu viel für reine Metadata. + +**Zwei valide Architekturen — eine muss gewählt werden:** + +### Option A — Teams sind Metadata-Manifeste (GEWÄHLT) + +- Jedes `Team-SIN-*`-Repo enthält nur `team.json`, `README.md`, `pricing.json`, ggf. Marketing-Assets (screenshots, demo-gif) +- Die **Agenten selbst** liegen in `A2A-SIN-*` Repos (was sie schon tun) +- `team.json` listet auf, welche A2A-Agenten zum Team gehören + welche Permissions + welche Rate-Limits +- Der Marketplace rendert aus `team.json` die Produktseite, Stripe-Kauf schaltet die Agent-IDs in `chat.opensin.ai` frei +- Die heutigen 30-35 kb sind vermutlich Scaffold, der normalisiert werden muss (zB. Scaffold-Code entfernen, saubere `team.json` bauen) + +**Vorteile:** Keine Code-Duplikation. Ein Agent wird genau einmal geschrieben. Team-Änderungen sind ein JSON-Edit. Neue Bundles in Minuten, nicht Tagen. + +**Nachteile:** Die "Team"-Repos haben wenig Eigensubstanz. Man könnte argumentieren, sie gehören als Ordner in ein einziges `OpenSIN-Marketplace`-Monorepo. + +### Option B — Teams sind echte Code-Pakete + +- Jedes `Team-SIN-*`-Repo enthält ein Python-Package, das die Agenten importiert, konfiguriert, orchestriert +- Der Marketplace verkauft `pip install opensin-team-apple` +- User kann das Team auch **offline / on-prem** nutzen, nicht nur in `chat.opensin.ai` + +**Vorteile:** Käufer bekommt echten Code. Funktioniert auch ohne Tier-2-Cloud. + +**Nachteile:** Teams duplizieren was A2A-Agenten schon tun. Wartungsaufwand explodiert. + +### Entscheidung: **Option A** + +Option A passt zum OSS-Versprechen (Code ist offen, Komposition ist kommerziell), ist schneller iterierbar, und erklärt die heutige Repo-Größe besser. + +**Umgesetzt in Wave 4:** + +1. Schema für `team.json` definiert → [`schemas/team.schema.json`](./schemas/team.schema.json) +2. Canonical Location: **pro-Repo `team.json`**, aggregiert in `oh-my-sin.json` via CI im `Infra-SIN-OpenCode-Stack`. Die Pro-Repo-Datei ist Source-of-Truth für das einzelne Team (Marketing-Copy, Pricing, Agent-Liste); `oh-my-sin.json` ist die aggregierte Registry, die das Marketplace-Frontend konsumiert. +3. Marketplace-Frontend (in `website-my.opensin.ai/marketplace/`) rendert aus `oh-my-sin.json`. + +--- + +## Kompetitive Positionierung + +Gegen jede realistische Konkurrenz. Kein Wunschdenken, keine Marketing-Lügen. + +### vs. Claude Code / Cursor / OpenCode + +**Was die tun:** Einzelner Coding-Agent im Editor. Session-basiert. Kein Team-Konzept. Kein persistentes Gedächtnis zwischen Sessions (Ausnahme: Claude Memory ist seit 2026 beta, aber vendor-locked). + +**OpenSIN-Differenzierung:** +- **Multi-Agent native** — `OpenSIN-Code` startet Agent-Teams, nicht einzelne Prompts +- **PCPM v4** — persistentes Memory zwischen Sessions, zwischen Agenten, local oder cloud +- **OSS-Kern** — User kann das ganze System klonen, anpassen, self-hosten. Claude Code kann man nicht self-hosten. +- **Nicht nur Coding** — der gleiche Kern fährt 109 Platform-Integrationen, nicht nur Git + +### vs. Manus AI + +**Was sie tun:** General-purpose autonomous agent. Closed-source, Cloud-only, Preis nach Credits. Seit 2025 viel Hype. + +**OpenSIN-Differenzierung:** +- **Open-Source-Kern** — Manus ist eine Black-Box, OpenSIN ist ein Repo das jeder klonen kann +- **Teams statt Einzelagent** — Manus ist ein Agent der alles kann, OpenSIN ist ein Orchestrator der spezialisierte Agenten dirigiert +- **Transparente Billing** — OpenSIN Pro hat klare Flat-Rates und Add-on-Mini-Abos; Manus hat intransparente Credit-Konsumption +- **Self-hostable für Privacy** — Enterprises mit Compliance-Pflichten können OpenSIN on-prem fahren, Manus nicht + +### vs. Google Jules / OpenAI Agents / Anthropic Computer Use + +**Was sie tun:** Einzelagent als Feature ihrer Foundation-Model-Plattform. Vendor-locked. + +**OpenSIN-Differenzierung:** +- **Model-agnostisch via AI Gateway** — OpenSIN nutzt 5 Provider zero-config, User ist nie vendor-locked +- **Cross-vendor Workflows** — Agent A läuft auf Claude Opus, Agent B auf GPT-5, Agent C auf Gemini Flash, alle koordinieren über PCPM +- **Community-Fleet** — 109 Platform-Agents als OSS-Repos, die die Community erweitern kann; die geschlossenen Systeme sind vendor-definierte Feature-Listen + +### Die eine Sache, die OpenSIN uniquely macht + +**"The only OSS agent system that (a) organizes agents into teams, (b) has persistent cross-session memory, (c) has a real tiered business model, (d) speaks to 100+ real-world platforms — in one repo you can `git clone`."** + +Wenn du das in einer Slide an einen Investor zeigst, gibt es heute (April 2026) kein System das alle vier Kästchen ankreuzt. Das ist der moat. + +--- + +## Was das heißt für neue Agenten und Menschen + +Wenn du in die Org kommst — egal ob als Mensch oder als A2A-Agent: + +1. **Lies [START-HERE.md](./START-HERE.md)** (60 Sekunden, Repo-Routing) +2. **Lies dieses Dokument** (5 Minuten, Produktverständnis) +3. **Lies [STATE-OF-THE-UNION.md](./STATE-OF-THE-UNION.md)** (5 Minuten, Realitäts-Check: was ist gut, was ist kaputt) +4. **Lies [docs/CANONICAL-REPOS.md](./docs/CANONICAL-REPOS.md)** nur wenn du gleich Code änderst (wo committet man was) +5. **Lies [docs/FOLLOWUPS.md](./docs/FOLLOWUPS.md)** nur wenn du dich an einer bestimmten Aufgabe beteiligen willst + +Jede Entscheidung die dem Dreier-Tier-Modell (OSS / Pro / Marketplace) widerspricht, muss hier begründet werden. Jede Entscheidung die die UI-Schichtung (opensin.ai vs my.opensin.ai vs chat.opensin.ai vs docs.opensin.ai) verwischt, ist ein Rollback. + +--- + +## Getroffene Entscheidungen (Wave 4, 2026-04-18) + +Alle 5 Prio-1-Entscheidungen aus der ersten Vision-Version sind jetzt fix. Jede hat ein Artefakt im Repo: + +### 1. UI-Schichtung — DECIDED +**Entscheidung:** Die 4-Rollen-Tabelle in § UI-Schichtung oben ist bindend. +- `opensin.ai` = OSS-Marketing (unauthenticated, keine Stripe) +- `my.opensin.ai` = Paid-Marketing + Marketplace-Katalog + Stripe Checkout (unauthenticated) +- `chat.opensin.ai` = Authenticated App + Stripe Customer Portal +- `docs.opensin.ai` = Docs + +**Artefakte:** Diese Datei (§ UI-Schichtung). Follow-up: READMEs auf `website-my.opensin.ai` und `OpenSIN-WebApp` deep-linken hierher (Tracking-Issues offen). + +### 2. Marketplace-Mechanik — DECIDED: Option A +**Entscheidung:** `Team-SIN-*` sind Metadata-Manifeste. `team.json` pro Repo, aggregiert in `oh-my-sin.json` (SSOT) in `Infra-SIN-OpenCode-Stack`. + +**Artefakte:** +- JSON Schema: [`schemas/team.schema.json`](./schemas/team.schema.json) +- Schema-Doku: [`schemas/README.md`](./schemas/README.md) +- Gold-Standard-Referenz: [`templates/teams/Team-SIN-Commerce.json`](./templates/teams/Team-SIN-Commerce.json) +- Alle 17 Team-Manifeste: [`templates/teams/`](./templates/teams/) +- Migration-Script: [`scripts/push-team-manifests.js`](./scripts/push-team-manifests.js) — pushed `team.json` + README-Header in alle 17 `Team-SIN-*` Repos + +### 3. `OpenSIN-backend` vs `Core-SIN-Control-Plane` — DECIDED: Merge +**Entscheidung:** `Core-SIN-Control-Plane` (neuer) wird in `OpenSIN-backend` (älter, behält Namen wegen externer Abhängigkeiten) absorbiert. Nach Migration wird `Core-SIN-Control-Plane` archiviert mit Redirect-README. + +**Artefakte:** +- Canonical-Map-Update in [`docs/CANONICAL-REPOS.md`](./docs/CANONICAL-REPOS.md) +- Migration-Tracking-Issue in `OpenSIN-backend` (Reference-Kommit in diesem PR) +- Archive-Prep-Tracking-Issue in `Core-SIN-Control-Plane` + +### 4. `Team-SIN-Code-Core` Integrität — CHECKED +**Befund:** Nach dem Audit (siehe [`registry/SCAFFOLD_AUDIT.md`](./registry/SCAFFOLD_AUDIT.md)) ist `Team-SIN-Code-Core` tatsächlich nur ein Scaffold, nicht ein kaputtes Merge-Resultat. Die Wave-1-Absorption schuf die Monorepo-Struktur, füllte sie aber nicht. Die echten Coding-Agenten leben in `A2A-SIN-Code-DataScience`, `A2A-SIN-Code-DevOps`, `A2A-SIN-Code-GitLab-LogsCenter`. + +**Entscheidung:** `Team-SIN-Code-Core` wird in Option A normalisiert — wird zu reinem `team.json`-Repo wie die anderen 16. Die `packages/shared-helpers/`-Struktur bleibt als Legacy, aber die Team-Semantik ist jetzt die Manifest-Datei. + +### 5. Scaffold + Dead Repo Audit — DONE +**Artefakte:** +- Audit-Script: [`scripts/audit-repos.js`](./scripts/audit-repos.js) +- Audit-Ergebnis: [`registry/SCAFFOLD_AUDIT.md`](./registry/SCAFFOLD_AUDIT.md) + +**Klassifikation (aus Live-Audit):** +- **4 confirmed dead** (0 kb, werden in Wave 4 archiviert): `A2A-SIN-Facebook`, `A2A-SIN-Mattermost`, `A2A-SIN-RocketChat`, `A2A-SIN-Slack` +- **6 scaffold** (9 kb, identische Python-Shells): `A2A-SIN-Code-Backend`, `-Command`, `-Frontend`, `-Fullstack`, `-Plugin`, `-Tool` — bleiben vorerst offen (Coding-Team-Roadmap entscheidet später) +- **17 team-scaffolds** (26-57 kb): werden durch Option-A-Migration in Manifest-Repos umgewandelt (Commit in diesem PR) + +--- + +Nach Wave 4 ist die Org kohärent. Jeder Commit, jeder Agent, jeder User hat einen klaren Tier + eine klare Rolle. Ab hier kann OpenSIN-AI ehrlich gegen Manus, OpenCode und Google Agents antreten. diff --git a/README.md b/README.md index 3dc3860..78d56c3 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,9 @@ > > **In 60 Sekunden handlungsfähig** — für menschliche Entwickler UND AI-Agenten. > -> Konsolidierung April 2026 (9 → 4 Code-Repos): [docs/CONSOLIDATION-2026-04.md](./docs/CONSOLIDATION-2026-04.md) +> Konsolidierung April 2026 (9 → 4 Code-Repos, Wave 3 abgeschlossen): [docs/CONSOLIDATION-2026-04.md](./docs/CONSOLIDATION-2026-04.md) > Kanonische Repo-Zuordnung: [docs/CANONICAL-REPOS.md](./docs/CANONICAL-REPOS.md) +> Offene Rationalisierungs-Tickets: [docs/FOLLOWUPS.md](./docs/FOLLOWUPS.md) --- @@ -95,7 +96,7 @@ jobs: | [my.opensin.ai](https://my.opensin.ai) | [website-my.opensin.ai](https://github.com/OpenSIN-AI/website-my.opensin.ai) | Premium Abo-Modell: User-Login, Cloud-Agenten, Billing, API-Keys | 🔒 Privat | | [docs.opensin.ai](https://docs.opensin.ai) | [OpenSIN-documentation](https://github.com/OpenSIN-AI/OpenSIN-documentation) | Offizielle Benutzer-Dokumentation (VitePress) | 🌍 Public | | [blog.opensin.ai](https://blog.opensin.ai) | [Biz-SIN-Blog-Posts](https://github.com/OpenSIN-AI/Biz-SIN-Blog-Posts) | OpenSIN-AI Blog & Marketing | 🌍 Public | -| [chat.opensin.ai](https://chat.opensin.ai) | [OpenSIN-backend](https://github.com/OpenSIN-AI/OpenSIN-backend) | A2A Fleet Control Plane (Closed Source) — Backend-API, n8n-Routing, Agenten-Orchestrierung | 🔒 Privat | +| *(internal API)* | [OpenSIN-backend](https://github.com/OpenSIN-AI/OpenSIN-backend) | A2A Fleet Control Plane (Closed Source) — Backend-API, n8n-Routing, Agenten-Orchestrierung — konsumiert von `OpenSIN-WebApp` | 🔒 Privat | --- @@ -119,12 +120,14 @@ Die Agenten-Modelle werden durch ein mehrstufiges Konfigurationssystem verwaltet | Datei | Zweck | Repo | |:---|:---|:---| -| `opencode.json` | Haupt-Config — Provider, Modelle, MCPs, sichtbare Agenten | `upgraded-opencode-stack` | -| `oh-my-openagent.json` | Subagenten-Modelle — explore, librarian, oracle, etc. | `upgraded-opencode-stack` | -| `oh-my-sin.json` | Zentrales A2A Team Register — alle Teams klassifiziert | `upgraded-opencode-stack` | -| `my-sin-team-code.json` | Team Coding Agenten + Modelle | `upgraded-opencode-stack` | -| `my-sin-team-worker.json` | Team Worker Agenten + Modelle | `upgraded-opencode-stack` | -| `my-sin-team-infrastructure.json` | Team Infra Agenten + Modelle | `upgraded-opencode-stack` | +| `opencode.json` | Haupt-Config — Provider, Modelle, MCPs, sichtbare Agenten | [`Infra-SIN-OpenCode-Stack`](https://github.com/OpenSIN-AI/Infra-SIN-OpenCode-Stack) | +| `oh-my-openagent.json` | Subagenten-Modelle — explore, librarian, oracle, etc. | [`Infra-SIN-OpenCode-Stack`](https://github.com/OpenSIN-AI/Infra-SIN-OpenCode-Stack) | +| `oh-my-sin.json` | Zentrales A2A Team Register — alle Teams klassifiziert | [`Infra-SIN-OpenCode-Stack`](https://github.com/OpenSIN-AI/Infra-SIN-OpenCode-Stack) | +| `my-sin-team-code.json` | Team Coding Agenten + Modelle | [`Infra-SIN-OpenCode-Stack`](https://github.com/OpenSIN-AI/Infra-SIN-OpenCode-Stack) | +| `my-sin-team-worker.json` | Team Worker Agenten + Modelle | [`Infra-SIN-OpenCode-Stack`](https://github.com/OpenSIN-AI/Infra-SIN-OpenCode-Stack) | +| `my-sin-team-infrastructure.json` | Team Infra Agenten + Modelle | [`Infra-SIN-OpenCode-Stack`](https://github.com/OpenSIN-AI/Infra-SIN-OpenCode-Stack) | + +> Legacy path `Delqhi/upgraded-opencode-stack` redirects to the canonical repo above. All new links must use the canonical path. ### Explore/Librarian Modelle @@ -149,8 +152,8 @@ Bei grossen Codebases (100k+ Zeilen, 1000+ Dateien) MUESSEN Agenten **5-10 paral |------|-------| | [OpenSIN](https://github.com/OpenSIN-AI/OpenSIN) | Free/Open-Source Core Engine — Python (QueryEngine, Hooks, Tools, MCP, Sandbox, Memory, A2A) | | [OpenSIN-Code](https://github.com/OpenSIN-AI/OpenSIN-Code) | Autonomes CLI + SDK (`@opensin/sdk`) — Agent Loop, Tool System, Model Routing, Memory, Safety, A2A Transport Layer + Rust Engine (71 Dateien, 37.7K Zeilen) | -| [opensin-ai-cli](https://github.com/OpenSIN-AI/opensin-ai-cli) | **NEU (April 2026)** — AI Coding Assistant in Rust (70 Dateien, 34.601 Zeilen, 9 Crates) | -| [opensin-ai-platform](https://github.com/OpenSIN-AI/opensin-ai-platform) | **NEU (April 2026)** — Plugin Ecosystem & GitHub Automation (182 Dateien, 87.247 Zeilen, 14 Plugins) | +| [opensin-ai-cli](https://github.com/OpenSIN-AI/opensin-ai-cli) | ⚠️ **Rationalization pending** — Rust coding CLI (70 Dateien, 34.601 Zeilen, 9 Crates). Overlaps with `OpenSIN-Code`. **Do not extend**; see [docs/FOLLOWUPS.md § R1](./docs/FOLLOWUPS.md#r1-opensin-ai-cli--opensin-code) | +| [opensin-ai-platform](https://github.com/OpenSIN-AI/opensin-ai-platform) | ⚠️ **Rationalization pending** — Plugin Ecosystem (182 Dateien, 87.247 Zeilen, 14 Plugins). Overlaps with `OpenSIN/opensin_agent_platform/`. **Do not extend**; see [docs/FOLLOWUPS.md § R2](./docs/FOLLOWUPS.md#r2-opensin-ai-platform--opensin) | | [OpenSIN-backend](https://github.com/OpenSIN-AI/OpenSIN-backend) | Closed Source Backend — A2A Fleet Control Plane, n8n-Routing, Agenten-Orchestrierung, API für OpenSIN-WebApp | | [OpenSIN-WebApp](https://github.com/OpenSIN-AI/OpenSIN-WebApp) | User WebApp (Next.js, Vercel ✅) — Login, Dashboard, Agenten-Steuerung (gekoppelt an OpenSIN-backend) | @@ -270,11 +273,11 @@ Bei grossen Codebases (100k+ Zeilen, 1000+ Dateien) MUESSEN Agenten **5-10 paral | Repo | Zweck | |------|-------| -| [OpenSIN-overview](https://github.com/OpenSIN-AI/OpenSIN-overview) | **SSOT**: rules.md, MASTER_INDEX.md, Registry aller 165 Repos | +| [OpenSIN-overview](https://github.com/OpenSIN-AI/OpenSIN-overview) | **SSOT**: START-HERE.md, CANONICAL-REPOS.md, MASTER_INDEX.md (188 Repos) | | [OpenSIN-documentation](https://github.com/OpenSIN-AI/OpenSIN-documentation) | Offizielle Doku (VitePress) — docs.opensin.ai | | [OpenSIN-Code](https://github.com/OpenSIN-AI/OpenSIN-Code) | Core Engine Doku: [OpenSIN Code](https://docs.opensin.ai/docs/guide/opensin-code), [Rust Engine](https://docs.opensin.ai/docs/guide/opensin-code-rust-engine), [Plugins](https://docs.opensin.ai/docs/plugins/opensin-code-plugins) | -| [opensin-ai-cli](https://github.com/OpenSIN-AI/opensin-ai-cli) | **NEU** — [OpenSIN-AI CLI Doku](https://docs.opensin.ai/docs/guide/opensin-ai-cli) | -| [opensin-ai-platform](https://github.com/OpenSIN-AI/opensin-ai-platform) | **NEU** — [OpenSIN-AI Platform Doku](https://docs.opensin.ai/docs/guide/opensin-ai-platform) | +| [opensin-ai-cli](https://github.com/OpenSIN-AI/opensin-ai-cli) | ⚠️ Rationalization pending → see [docs/FOLLOWUPS.md § R1](./docs/FOLLOWUPS.md#r1-opensin-ai-cli--opensin-code) | +| [opensin-ai-platform](https://github.com/OpenSIN-AI/opensin-ai-platform) | ⚠️ Rationalization pending → see [docs/FOLLOWUPS.md § R2](./docs/FOLLOWUPS.md#r2-opensin-ai-platform--opensin) | --- @@ -350,4 +353,4 @@ Bei grossen Codebases (100k+ Zeilen, 1000+ Dateien) MUESSEN Agenten **5-10 paral ## 🤖 Agent Configuration (A2A v5) New agents are configured via the `/create-a2a-sin-agent` skill. -Documentation: [How to Configure Agents](https://github.com/OpenSIN-AI/OpenSIN-documentation/blob/main/docs/guide/how-to-configure-agents.md) \ No newline at end of file +Documentation: [How to Configure Agents](https://github.com/OpenSIN-AI/OpenSIN-documentation/blob/main/docs/guide/how-to-configure-agents.md) diff --git a/START-HERE.md b/START-HERE.md index 0fce2dd..42a7771 100644 --- a/START-HERE.md +++ b/START-HERE.md @@ -2,19 +2,27 @@ > **Wer das hier liest — Mensch oder Agent — ist in unter 60 Sekunden handlungsfähig.** -You just landed in the OpenSIN-AI organization (195 repos, 17 teams, 149 workers). +You just landed in the OpenSIN-AI organization (200 repos, 17 teams, 109 A2A agents, 7 business repos). Read this file first. Then [`docs/CANONICAL-REPOS.md`](./docs/CANONICAL-REPOS.md). Then you're working. +> **Neu: Produktverständnis vor Code.** Bevor du irgendwas tust, lies: +> 1. **[PRODUCT-VISION.md](./PRODUCT-VISION.md)** — das 3-Tier-Modell (OpenSIN Free / My.OpenSIN Pro / Marketplace), kompetitive Positionierung, das **eine Ziel** (5 Min). +> 2. **[STATE-OF-THE-UNION.md](./STATE-OF-THE-UNION.md)** — ehrlicher Lagebericht, was existiert, was läuft, was tot ist (5 Min). +> +> Ohne diese zwei Dokumente weißt du nicht wofür du arbeitest. Mit ihnen weißt du es in 10 Minuten. + --- ## 1. Du bist ein menschlicher Entwickler? Lies in dieser Reihenfolge: -1. **[docs/CANONICAL-REPOS.md](./docs/CANONICAL-REPOS.md)** — authoritative map of which repo owns what. **Niemals einen PR öffnen, ohne vorher diese Datei gelesen zu haben.** -2. **[README.md](./README.md)** — full ecosystem overview (teams, workers, standards, CI). -3. **[AGENTS.md](./AGENTS.md)** — development guidelines. -4. **[governance/BOUNDARY-ROLE-RULES.md](./governance/BOUNDARY-ROLE-RULES.md)** — what each repo must *not* be. +1. **[PRODUCT-VISION.md](./PRODUCT-VISION.md)** — das 3-Tier-Produktmodell. Was wir bauen und warum. +2. **[STATE-OF-THE-UNION.md](./STATE-OF-THE-UNION.md)** — was heute wirklich existiert (nicht was die Docs behaupten). +3. **[docs/CANONICAL-REPOS.md](./docs/CANONICAL-REPOS.md)** — authoritative map of which repo owns what. **Niemals einen PR öffnen, ohne vorher diese Datei gelesen zu haben.** +4. **[README.md](./README.md)** — full ecosystem overview (teams, workers, standards, CI). +5. **[AGENTS.md](./AGENTS.md)** — development guidelines. +6. **[governance/BOUNDARY-ROLE-RULES.md](./governance/BOUNDARY-ROLE-RULES.md)** — what each repo must *not* be. Setup in drei Befehlen: ```bash @@ -29,12 +37,14 @@ gh repo clone OpenSIN-AI/OpenSIN # Python-Kernel Lies in dieser Reihenfolge: -1. **`docs/CANONICAL-REPOS.md`** — Pflichtlektüre. Niemals in archivierten Repos arbeiten. -2. **`registry/MASTER_INDEX.md`** — the machine-readable index of all repos. -3. **`platforms/registry.json`** — structured repo list. -4. **`AGENTS.md`** + **`governance/BOUNDARY-ROLE-RULES.md`** — rules you must follow. +1. **`PRODUCT-VISION.md`** — dein Kontext. Du arbeitest für eins der drei Tiers, wisse welches. +2. **`STATE-OF-THE-UNION.md`** — falls du eine Aufgabe in einem bestimmten Repo kriegst, prüfe erst ob das Repo laut diesem Doc `alive`, `scaffold` oder `dead` ist. Nie an einem `dead`-Repo arbeiten. +3. **`docs/CANONICAL-REPOS.md`** — Pflichtlektüre. Niemals in archivierten Repos arbeiten. +4. **`registry/MASTER_INDEX.md`** — the machine-readable index of all repos. +5. **`platforms/registry.json`** — structured repo list. +6. **`AGENTS.md`** + **`governance/BOUNDARY-ROLE-RULES.md`** — rules you must follow. -Vor jedem Task: `discover-agents.js` ausführen (Routing-Regeln siehe `opencode.json` bei `OpenSIN-AI/Infra-SIN-OpenCode-Stack` — which is the external SSOT for OpenCode config; see CANONICAL-REPOS.md § 8). +Vor jedem Task: `discover-agents.js` ausführen (Routing-Regeln siehe `opencode.json` bei [`OpenSIN-AI/Infra-SIN-OpenCode-Stack`](https://github.com/OpenSIN-AI/Infra-SIN-OpenCode-Stack) — in-org SSOT für OpenCode config; see CANONICAL-REPOS.md § 8). --- @@ -80,11 +90,13 @@ Vor jedem Task: `discover-agents.js` ausführen (Routing-Regeln siehe `opencode. | [OpenSIN-overview](https://github.com/OpenSIN-AI/OpenSIN-overview) | **Dieses Repo** — SSOT für alle Org-Repos, Onboarding, Governance | | [OpenSIN-documentation](https://github.com/OpenSIN-AI/OpenSIN-documentation) | `docs.opensin.ai` — end-user documentation | -### Externe SSOT (noch in @Delqhi — sollten transferiert werden) -| Repo | Rolle | -|---|---| -| [OpenSIN-AI/Infra-SIN-OpenCode-Stack](https://github.com/OpenSIN-AI/Infra-SIN-OpenCode-Stack) | Kanonische OpenCode-Konfiguration (sin-sync Target) | -| [OpenSIN-AI/Infra-SIN-Global-Brain](https://github.com/OpenSIN-AI/Infra-SIN-Global-Brain) | PCPM v4 daemon (persistent agent memory) | +### Infrastruktur-SSOT (seit 2026-04-18 in-Org) +> Diese beiden Repos waren bis April 2026 unter `Delqhi/...` — sie wurden transferiert und umbenannt. GitHub leitet die alten URLs weiter, aber alle neuen Links und Tools müssen die kanonischen `OpenSIN-AI/Infra-SIN-*` Pfade nutzen. + +| Repo | Rolle | Legacy-Pfad (Redirect) | +|---|---|---| +| [OpenSIN-AI/Infra-SIN-OpenCode-Stack](https://github.com/OpenSIN-AI/Infra-SIN-OpenCode-Stack) | Kanonische OpenCode-Konfiguration (sin-sync Target) | `Delqhi/upgraded-opencode-stack` | +| [OpenSIN-AI/Infra-SIN-Global-Brain](https://github.com/OpenSIN-AI/Infra-SIN-Global-Brain) | PCPM v4 daemon (persistent agent memory) | `Delqhi/global-brain` | --- @@ -101,6 +113,7 @@ Diese Repos sind **read-only** und wurden in andere Repos konsolidiert. | `OpenSIN-onboarding` | → `Infra-SIN-Dev-Setup/user-onboarding/` | Details: [docs/CONSOLIDATION-2026-04.md](./docs/CONSOLIDATION-2026-04.md) +Open rationalization work: [docs/FOLLOWUPS.md](./docs/FOLLOWUPS.md) — check before opening PRs against `opensin-ai-cli` or `opensin-ai-platform`. --- diff --git a/STATE-OF-THE-UNION.md b/STATE-OF-THE-UNION.md new file mode 100644 index 0000000..e80cf6a --- /dev/null +++ b/STATE-OF-THE-UNION.md @@ -0,0 +1,220 @@ +# State of the Union — OpenSIN-AI + +> **Stand:** 2026-04-18, nach Wave 3 Consolidation. +> **Zweck dieses Dokuments:** Ein ehrlicher Lagebericht. Nicht Marketing, nicht Wunschdenken. Was existiert wirklich, was läuft, was ist tot, was ist kaputt. Wer schnell wissen will wohin es geht, liest [PRODUCT-VISION.md](./PRODUCT-VISION.md). Wer wissen will was zu tun ist, liest [docs/FOLLOWUPS.md](./docs/FOLLOWUPS.md) + dieses Dokument. + +## TL;DR + +Die Org hat **200 Repositories**. Sie zerfällt in drei Kategorien: + +- **Der Kern ist real und substantiell** — 4 canonical Code-Repos + 3 Infra-Repos haben echten, aktiv gewarteten Code (836 MB OpenSIN, 975 MB OpenSIN-backend, 366 MB OpenSIN-Code). +- **Das Business-Narrativ hat ein Loch** — die Websites und der Marketplace sind konzeptionell doppelt besetzt. `website-my.opensin.ai` und `OpenSIN-WebApp` behaupten beide dieselbe Rolle ("User login, Billing, API keys"). Das muss entschieden werden. +- **Die Peripherie ist ein Friedhof mit Leuchttürmen** — von 109 A2A-SIN-*-Repos sind einige groß und real (Discord 25 MB, X-Twitter 26 MB, MiroFish 6.7 MB), viele mittel (Marketing-Agents 100-170 kb), aber mindestens **4 sind komplett leer** (0 kb) und **17 Team-SIN-*-Repos** sind Scaffolds von 26-35 kb. Das sind keine Agenten — das sind Platzhalter mit Repo-URL. + +Das Gute: der Kern trägt. Das Schlechte: du wirst nie das "weltbeste Agentensystem" bauen, solange 70% deiner Repos Scaffolds sind die so aussehen als wäre da Code. Entweder ausbauen oder wegschmeißen. + +--- + +## Der Kern — was wirklich existiert und läuft + +### Code-Engine (4 canonical repos) + +| Repo | Sichtbarkeit | Größe | Sprache | Beschreibung | Lebenszeichen | +|---|---|---|---|---|---| +| [OpenSIN](https://github.com/OpenSIN-AI/OpenSIN) | Public | 836 MB | Python | "Core — 310+ packages across 25+ domains" | aktiv, letzter push 2026-04-18 | +| [OpenSIN-Code](https://github.com/OpenSIN-AI/OpenSIN-Code) | Public | 366 MB | TypeScript | "The autonomous OpenSIN-Code CLI" | aktiv, letzter push 2026-04-18 | +| [OpenSIN-backend](https://github.com/OpenSIN-AI/OpenSIN-backend) | Private | 975 MB | TypeScript | "Backend and A2A fleet control plane" | aktiv, letzter push 2026-04-18 | +| [Team-SIN-Code-Core](https://github.com/OpenSIN-AI/Team-SIN-Code-Core) | Private | **57 kb** | TypeScript | Post-Wave-1 Monorepo für Coding-Agenten | **Problem:** 57 kb ist nach einer "Konsolidierung von 3 Repos" viel zu wenig. Entweder die Wave-1-Absorption hat Code verloren oder das Monorepo ist nur ein Skelett | + +**Status:** 3 von 4 tragen echten Code. Team-SIN-Code-Core ist verdächtig klein — [OpenSIN-overview#34](https://github.com/OpenSIN-AI/OpenSIN-overview/issues/34) bzw. neue Untersuchung nötig. + +### Infrastructure (3 canonical repos) + +| Repo | Sichtbarkeit | Größe | Rolle | +|---|---|---|---| +| [Infra-SIN-OpenCode-Stack](https://github.com/OpenSIN-AI/Infra-SIN-OpenCode-Stack) | Public | 3.8 MB | Kanonische OpenCode-Config, `sin-sync`-Target | +| [Infra-SIN-Global-Brain](https://github.com/OpenSIN-AI/Infra-SIN-Global-Brain) | Public | 788 kb | PCPM v4 — Persistent Agent Memory | +| [Infra-SIN-Dev-Setup](https://github.com/OpenSIN-AI/Infra-SIN-Dev-Setup) | Public | 149 kb | Dev-Environment Setup + User-Onboarding | + +**Status:** Alle 3 real. PCPM v4 ist echte Differenzierung — kein anderes OSS-Agentensystem hat persistenten Cross-Session-Speicher. + +### UI-Layer (4 Web-Repos) — **Rollenkonflikt** + +| Repo | Domain | Größe | Was die GitHub-Description sagt | Was die README sagt | +|---|---|---|---|---| +| [website-opensin.ai](https://github.com/OpenSIN-AI/website-opensin.ai) | opensin.ai | 765 kb | "Webseite für unsere OpenSIN Open-Source Version" | (Marketing für OSS) | +| [website-my.opensin.ai](https://github.com/OpenSIN-AI/website-my.opensin.ai) | my.opensin.ai | 2 MB | "User loggen sich ein, verwalten ihre Cloud-Agenten, hinterlegen ihre Kreditkarte und holen sich ihre API-Keys" | "Premium marketplace website for the MyOpenSIN subscription layer. Marketplace for modular paid teams" | +| [OpenSIN-WebApp](https://github.com/OpenSIN-AI/OpenSIN-WebApp) | chat.opensin.ai | 59 MB | "Authenticated dashboard web app at chat.opensin.ai — login, agent fleet management, billing, API keys. Next.js 16 + Supabase. Paid layer" | (nicht geprüft) | +| [OpenSIN-documentation](https://github.com/OpenSIN-AI/OpenSIN-documentation) | docs.opensin.ai | 50 MB | "Official documentation" | (Docusaurus) | + +**Das Problem:** `website-my.opensin.ai` UND `OpenSIN-WebApp` behaupten beide die Rolle "User-Login + Billing + Kreditkarte". Einer von beiden muss Marketing-Only sein. Die logische Trennung wäre: + +- `my.opensin.ai` = **Marketing + Checkout-Funnel** (unauthentifiziert, Stripe Checkout, "Buy Pro") +- `chat.opensin.ai` (OpenSIN-WebApp) = **Authenticated App** (eingeloggte User, Agent-Fleet, API-Keys) + +Aber die heutige README von my.opensin.ai beschreibt sich als Login-Portal. Das muss geklärt und dokumentiert werden. + +**Zusätzliches Problem:** Die my.opensin.ai README referenziert noch die alte `Delqhi/upgraded-opencode-stack` URL. L1-Link-Sweep ist unvollständig. + +### Meta / Governance (2 canonical repos) + +| Repo | Rolle | Status | +|---|---|---| +| [OpenSIN-overview](https://github.com/OpenSIN-AI/OpenSIN-overview) | SSOT für Struktur, Routing, Vision (= dieses Repo) | gesund, aktiv gepflegt | +| [OpenSIN-documentation](https://github.com/OpenSIN-AI/OpenSIN-documentation) | Public-facing Docusaurus @ docs.opensin.ai | aktiv, 50 MB | + +--- + +## Die Peripherie — A2A-Fleet + Teams (126 Repos) + +### A2A-SIN-* — 109 Platform-Integration-Agenten + +Realität nach `gh repo list`-Audit: + +- **Substantiell (> 100 kb)** — echte Implementierung vermutet: + - `A2A-SIN-Discord` (25.8 MB), `A2A-SIN-X-Twitter` (26.1 MB) — beide Flaggschiff-Platforms + - `A2A-SIN-MiroFish` (6.7 MB) — Swarm Intelligence Prediction Engine + - `A2A-SIN-Worker-heypiggy` (586 kb), `A2A-SIN-Worker-Prolific` (224 kb) — Marketplace-Worker + - 11 Marketing-Agents (Telegram, LinkedIn, HackerNews, etc.) mit je 100-170 kb + - `A2A-SIN-IndieHackers` (172 kb), `A2A-SIN-Quora` (133 kb), `A2A-SIN-StackOverflow` (130 kb) +- **Mittel (30-100 kb)** — wahrscheinlich Agent-Scaffold + etwas Integration: ~60 Repos +- **Klein (< 30 kb)** — verdächtig, wahrscheinlich nur Boilerplate: + - `A2A-SIN-Code-Backend`, `-Command`, `-Frontend`, `-Fullstack`, `-Plugin`, `-Tool` — alle genau 9-10 kb, alle mit derselben generischen Beschreibung "A2A Cloud Coder Agent —". Das sind 6 praktisch identische leere Shells. + - `A2A-SIN-Team-MyCompany` (12 kb) +- **Tote Repos (0 kb, archived=false):** + - `A2A-SIN-Facebook` + - `A2A-SIN-Mattermost` + - `A2A-SIN-RocketChat` + - `A2A-SIN-Slack` + + → Diese 4 sind mit identischer Pattern-Description ("OpenSIN AI Agent for X platform integration") angelegt und dann nie befüllt worden. Entweder löschen oder einen Template-Commit landen. + +**Empfehlung:** Automatisierter Audit (neues Skript in `scripts/`), der für jedes `A2A-SIN-*`-Repo zählt: LOC, letzte aussagekräftige Commit-Message (nicht "chore: scaffold"), ob ein `main.py`/`index.ts`-Entry-Point existiert. Ergebnis: 3 Klassen (`alive`, `scaffold`, `dead`). Dead-Repos archivieren, Scaffold-Repos entweder priorisieren oder ebenfalls archivieren. Ein Repo das niemand anfasst ist Lärm. + +### Team-SIN-* — 17 "Team"-Repos + +| Repo | Größe | Deutung | +|---|---|---| +| `Team-SIN-Code-Core` | 57 kb | Wave-1 Monorepo — suspekt klein | +| `Team-SIN-Apple` | 35 kb | Scaffold | +| `Team-SIN-Code-Backend` | 34 kb | Scaffold | +| `Team-SIN-Google` | 34 kb | Scaffold | +| `Team-SIN-Media-ComfyUI` | 34 kb | Scaffold | +| `Team-SIN-Code-CyberSec` | 34 kb | Scaffold | +| `Team-SIN-Commerce` | 33 kb | Scaffold | +| `Team-SIN-Code-Frontend` | 33 kb | Scaffold | +| `Team-SIN-Infrastructure` | 33 kb | Scaffold | +| `Team-SIN-Media-Music` | 33 kb | Scaffold | +| `Team-SIN-Messaging` | 33 kb | Scaffold | +| `Team-SIN-Forum` | 32 kb | Scaffold | +| `Team-SIN-Social` | 32 kb | Scaffold | +| `Team-SIN-Legal` | 31 kb | Scaffold | +| `Team-SIN-Research` | 30 kb | Scaffold | +| `Team-SIN-Microsoft` | 30 kb | Scaffold | +| `Team-SIN-Community` | 26 kb | Scaffold | + +**Das ist der Elefant im Raum.** Die 17 Team-SIN-Repos sind laut Konzept die "Marketplace-Bundles" die im Pro/Marketplace-Tier verkauft werden sollen — aber keines davon hat echten Code. Es sind Marker-Repos. + +Zwei Szenarien: +1. **Legitim:** Teams sind **Metadata-Repos** — sie referenzieren welche A2A-Agenten zusammengehören, die eigentliche Implementierung liegt in den A2A-SIN-*. Dann brauchen sie je ein `team.json` + README, nicht 30 kb generischen Code. +2. **Kaputt:** Teams waren als echte Code-Pakete gedacht, wurden aber nie implementiert. Dann ist das Marketplace-Versprechen leer. + +**Empfehlung:** Eine Design-Entscheidung treffen (siehe [PRODUCT-VISION.md § Marketplace](./PRODUCT-VISION.md#marketplace-der-entscheidungspunkt)) und dokumentieren. Dann die 17 Repos entsprechend behandeln (entweder als Metadata-Manifeste normalisieren oder als Scaffolds archivieren). + +### Biz-SIN-* — 7 Business-Ops-Repos + +Alle real, alle aktiv gepflegt, alle mit klarer Rolle: + +- `Biz-SIN-Marketing` (7.3 MB) — Marketing & Release Strategy +- `Biz-SIN-Patents` (2.4 MB) — Patent Portfolio +- `Biz-SIN-Blog-Posts` (495 kb) — Blog-Content +- `Biz-SIN-Blueprints` (92 kb) — Product Blueprints +- `Biz-SIN-Jobs` (88 kb) — Career-Board +- `Biz-SIN-Competitor-Tracker` (47 kb) — Competitive Research +- `Biz-SIN-Ledger` (34 kb) — A2A-Fleet Activity Log + +**Status:** Gesund. Keine Action nötig. + +### Core-SIN-* — 1 Repo + +- `Core-SIN-Control-Plane` (166 kb) — "Shared Doctor/Preflight/Eval layer for SIN-Solver" + +**Status:** Existiert, aber unklar wie es sich zu `OpenSIN-backend` (dem anderen "Control Plane") verhält. Naming-Kollision. Gehört geklärt: sind das zwei Ebenen (dev-time control plane vs. runtime control plane)? Oder ist das Legacy? + +### Template-SIN-* — 4 Repos + +Für das Klonen neuer Agenten. [Template-SIN-Agent#156](https://github.com/OpenSIN-AI/Template-SIN-Agent/issues/156) hält das frisch. + +--- + +## Die Wurzel-Probleme + +Unabhängig von Zählungen — das sind die strukturellen Probleme, die gelöst werden müssen, bevor OpenSIN gegen Manus AI oder Google Agents überhaupt antritt: + +### 1. Rollen-Overlap zwischen `my.opensin.ai` und `OpenSIN-WebApp` + +Beide claimen "User-Login + Billing". Das ist nicht nur ein Doku-Fehler — das heißt, zwei Teams bauen potentiell dieselbe Logik. **Muss entschieden werden.** Vorschlag in [PRODUCT-VISION.md § UI-Schichtung](./PRODUCT-VISION.md#ui-schichtung-4-oberflächen-4-rollen). + +### 2. Team-SIN-* sind leer + +Das gesamte Marketplace-Narrativ ("modular paid teams like Team-SIN-Google") hängt an Repos, die alle unter 60 kb sind. Entweder der Marketplace verkauft Hüllen — oder die echte Team-Logik steckt woanders (in `oh-my-sin.json` im Infra-SIN-OpenCode-Stack?) und die Repos sind nur URL-Anker. + +### 3. Tote A2A-Repos + +4 Repos mit 0 kb, 6 Repos mit 9 kb. Jemand hat CI oder Skripte laufen lassen die leere Repos erzeugt haben. Das verwässert die "109 Platform-Integrations"-Geschichte. + +### 4. Team-SIN-Code-Core post-Merge-Größe + +Wave-1 hat "Coding-CEO + Code-AI → Monorepo" absorbiert, aber das Ergebnis ist 57 kb groß. Das riecht danach, dass die Merges zwar die History verschmolzen, aber der Code nie real reimportiert wurde. Neue Untersuchung nötig. + +### 5. `Core-SIN-Control-Plane` vs `OpenSIN-backend` + +Beide haben "Control Plane" im Beschreibungstext. Wenn beides gewollt ist, braucht es klare Naming-Konvention (z. B. `Dev-Control-Plane` vs `Runtime-Control-Plane`). + +### 6. Drift zwischen MASTER_INDEX (188) und Realität (200) + +12 Repos Differenz. Das Auto-Regeneration-Skript ist nicht gelaufen. [OpenSIN-overview#34](https://github.com/OpenSIN-AI/OpenSIN-overview/issues/34) deckt das ab (C1+C2). + +--- + +## Was davon ist gut, was ist schlecht, was ist exzellent + +**Exzellent:** +- `OpenSIN-Code` (autonomous CLI) + `Infra-SIN-Global-Brain` (persistent memory) — dieses Pärchen ist echte Differenzierung vs. Claude Code / OpenCode +- `Biz-SIN-*` Ops-Schicht — selten dass eine Agent-Org sowas überhaupt hat +- `A2A-SIN-Discord` + `A2A-SIN-X-Twitter` — substantielle Platform-Integrationen +- Wave-3 Consolidation-Docs — erste Org im Dev-Universum die sowas ehrlich dokumentiert + +**Gut:** +- `OpenSIN` Core Package mit 310+ packages — wenn das wirklich funktional ist, ist das allein schon "world-class" +- 11 Marketing-Agents + 4 Forum-Agents + 13 Security-Agents mit je 40-170 kb — das ist echte Fleet-Tiefe + +**Schlecht:** +- UI-Layer-Rollenkonflikt +- 17 Team-SIN-* Hüllen +- 4 null-kb Repos +- README-Drift (`my.opensin.ai` zeigt noch auf Delqhi) + +**Gefährlich (Business-relevant):** +- Der Marketplace-Pitch verkauft Team-Packages, die nicht existieren +- Stripe-Integration (`A2A-SIN-Stripe`, 65 kb) — unklar ob der Onboarding-Flow end-to-end läuft +- `OpenSIN-WebApp`-Rolle vs `my.opensin.ai`-Rolle — Kunden landen wo? + +--- + +## Empfohlene Reihenfolge + +Nicht "fix alles gleichzeitig". Sondern in dieser Reihenfolge: + +1. **UI-Schichtung klären** (1 Entscheidung, ≤ 1 Tag) — siehe [PRODUCT-VISION.md § UI-Schichtung](./PRODUCT-VISION.md#ui-schichtung-4-oberflächen-4-rollen). Das ist der Blocker für alles weitere, weil es entscheidet wo `Buy`-Buttons hin sollen. +2. **Marketplace-Mechanik festlegen** (1 Entscheidung) — siehe [PRODUCT-VISION.md § Marketplace](./PRODUCT-VISION.md#marketplace-der-entscheidungspunkt). Sind Team-SIN-* Metadata oder Code? +3. **Scaffold-Audit-Skript** (1 Tag Arbeit) — liefert harte Zahlen: `alive/scaffold/dead` pro Repo. Danach 4 tote Repos archivieren, 6 Code-Scaffolds priorisieren-oder-archivieren. +4. **Team-SIN-Code-Core Integritäts-Check** (1 Tag) — entweder der Wave-1-Merge hat Code verloren, oder das Monorepo braucht noch einen Content-Transfer. +5. **Stripe-Billing end-to-end Test** (1 Tag) — ein echter Kauf durchspielen von Landing → Checkout → Pro-Tier-Freischaltung. Wenn das nicht läuft, bringt der ganze Business-Stack nichts. +6. **Erst danach** Feature-Arbeit (Agent-Loop, Heartbeat, neue A2A-Agents etc.). + +Das sind 5-6 Tage klare Arbeit. Nach diesen 5-6 Tagen weiß jeder in der Org wo er steht, und **dann** kann man ehrlich gegen Manus AI antreten. + +--- + +Weiter mit: [PRODUCT-VISION.md](./PRODUCT-VISION.md). diff --git a/docs/CANONICAL-REPOS.md b/docs/CANONICAL-REPOS.md index 2fd90cc..fbd6967 100644 --- a/docs/CANONICAL-REPOS.md +++ b/docs/CANONICAL-REPOS.md @@ -1,7 +1,8 @@ # Canonical Repos — Authoritative Map -> **State:** 2026-04-18, post-consolidation wave 2. +> **State:** 2026-04-18, post-consolidation wave 3. > If you open a PR against a repo marked `ARCHIVED` below, it will not be reviewed. +> If you open a PR against a repo marked `RATIONALIZATION PENDING` (§ 9), check [FOLLOWUPS.md](./FOLLOWUPS.md) first — the target of your change may be somewhere else. This document is the **single source of truth** for which repository in the `OpenSIN-AI` organization (and a small number of external repos) owns which @@ -40,7 +41,9 @@ rules. ### OpenSIN-backend — A2A fleet control plane - **URL:** https://github.com/OpenSIN-AI/OpenSIN-backend - **Domain prefix:** none -- **Owns:** the runtime control plane that orchestrates the agent fleet at runtime. +- **Owns:** the runtime control plane that orchestrates the agent fleet at runtime. Includes agent registry, routing, rate-limits, permission gating, and the tenant dispatcher for `chat.opensin.ai`. +- **Absorbs:** `Core-SIN-Control-Plane` (Wave 4, 2026-04-18). `Core-SIN-Control-Plane` was a newer parallel attempt at the same role; decision was made to merge its content here (older repo name wins because of external dependencies) and archive `Core-SIN-Control-Plane` with a redirect README. Migration tracked in the Wave-4 follow-up issues. +- **Not:** a UI. Any HTTP endpoint lives here, but the only renderers of its output are `OpenSIN-WebApp` (chat.opensin.ai) and `website-my.opensin.ai` (marketplace + checkout). ### Team-SIN-Code-Core — Coding-team monorepo - **URL:** https://github.com/OpenSIN-AI/Team-SIN-Code-Core @@ -50,7 +53,8 @@ rules. - `agents/coding-ceo/` — the Coding-CEO agent (was `A2A-SIN-Coding-CEO`, archived) - `agents/code-ai/` — the Code-AI agent (was `A2A-SIN-Code-AI`, archived) - `packages/shared-helpers/` — `@opensin/shared-helpers` workspace package -- **Do not:** spin up a new repo for future coding-team agents (`code-devops`, `code-datascience`, ...). Add them as new folders under `agents/`. + - `team.json` (synced from [`OpenSIN-overview/templates/teams/Team-SIN-Code-Core.json`](https://github.com/OpenSIN-AI/OpenSIN-overview/blob/main/templates/teams/Team-SIN-Code-Core.json)) — marketplace manifest, tier `core-included` +- **Do not:** spin up a new repo for future coding-team agents (`code-devops`, `code-datascience`, ...). Add them as new folders under `agents/`. **Do not edit `team.json` here directly** — it is overwritten by `push-team-manifests.js` from OpenSIN-overview. ### Template-SIN-Agent — Agent blueprint - **URL:** https://github.com/OpenSIN-AI/Template-SIN-Agent (was `Template-A2A-SIN-Agent`) @@ -117,21 +121,36 @@ Three repos for three distinct properties. Do not confuse them. --- -## 8. Infrastructure SSOT (formerly external — now in-org) +## 8. Infrastructure SSOT -Two infrastructure repos that are declared SSOT by many other repos across the org. As of 2026-04-18 both were transferred from the personal `Delqhi` account to `OpenSIN-AI` and renamed per the `Infra-SIN-*` convention, so they now inherit org-level branch protection, team reviews, and audit logs. +Two infrastructure repos that are declared SSOT by many other repos across the org. Both live under `OpenSIN-AI/Infra-SIN-*` since the Wave-2.5 transfer (2026-04-18) and inherit org-level branch protection, team reviews, and audit logs. ### OpenSIN-AI/Infra-SIN-OpenCode-Stack - **URL:** https://github.com/OpenSIN-AI/Infra-SIN-OpenCode-Stack -- **Legacy path (redirects):** `Delqhi/upgraded-opencode-stack` -- **Role:** canonical OpenCode configuration (v2.2.1, 44 skills, 27 MCPs, 5 providers) consumed via `sin-sync` by: OpenSIN, OpenSIN-Code, OpenSIN-WebApp, website-opensin.ai, website-my.opensin.ai, Template-SIN-Agent, Biz-SIN-Marketing. +- **Legacy path (GitHub redirect):** `Delqhi/upgraded-opencode-stack` +- **Role:** canonical OpenCode configuration (v2.2.1, 44 skills, 27 MCPs, 5 providers) consumed via `sin-sync` by: `OpenSIN`, `OpenSIN-Code`, `OpenSIN-WebApp`, `website-opensin.ai`, `website-my.opensin.ai`, `Template-SIN-Agent`, `Biz-SIN-Marketing`. +- **Do not:** commit OpenCode config changes anywhere else. ### OpenSIN-AI/Infra-SIN-Global-Brain - **URL:** https://github.com/OpenSIN-AI/Infra-SIN-Global-Brain -- **Legacy path (redirects):** `Delqhi/global-brain` +- **Legacy path (GitHub redirect):** `Delqhi/global-brain` - **Role:** Persistent Code Plan Memory (PCPM v4) daemon. Referenced by all `A2A-SIN-*` agents across the org. +- **Do not:** fork PCPM logic into individual agent repos. -GitHub redirects the old `Delqhi/...` URLs, so any `sin-sync` tooling or older README link continues to resolve. A follow-up link-sweep will update all references to the canonical `OpenSIN-AI/Infra-SIN-*` paths. +GitHub redirects the old `Delqhi/...` URLs, but all new links, CI jobs, and `sin-sync` configs must use the canonical `OpenSIN-AI/Infra-SIN-*` paths. Outstanding link-sweep work across other repos is tracked in [FOLLOWUPS.md § L1](./FOLLOWUPS.md#l1-delqhi--opensin-ai-link-sweep-across-other-repos). + +--- + +## 9. Rationalization-pending repos (Wave 3) + +Two repos remain in the org that are **not** canonical owners of their domain — they duplicate existing canonical repos. They stay accessible (GitHub does not auto-archive them) but new features must **not** be added. Each has a decision ticket in [FOLLOWUPS.md](./FOLLOWUPS.md). + +| Repo | Overlaps with | Decision ticket | +|---|---|---| +| [`OpenSIN-AI/opensin-ai-cli`](https://github.com/OpenSIN-AI/opensin-ai-cli) | `OpenSIN-Code` (autonomous coding CLI, has its own Rust engine) | [FOLLOWUPS.md § R1](./FOLLOWUPS.md#r1-opensin-ai-cli--opensin-code) | +| [`OpenSIN-AI/opensin-ai-platform`](https://github.com/OpenSIN-AI/opensin-ai-platform) | `OpenSIN/opensin_agent_platform/` (plugin ecosystem) | [FOLLOWUPS.md § R2](./FOLLOWUPS.md#r2-opensin-ai-platform--opensin) | + +Additionally, the absorbed folder `OpenSIN/opensin_agent_platform/` needs to be diffed against `OpenSIN/opensin_core/` (both have `hooks`, `plugins`, `skills`) and rationalized — see [FOLLOWUPS.md § R3](./FOLLOWUPS.md#r3-opensin_agent_platform--opensin_core-diff). --- diff --git a/docs/CONSOLIDATION-2026-04.md b/docs/CONSOLIDATION-2026-04.md index e6a5b69..49ff41a 100644 --- a/docs/CONSOLIDATION-2026-04.md +++ b/docs/CONSOLIDATION-2026-04.md @@ -110,5 +110,112 @@ Transferred the two external SSOT repos from `Delqhi` (personal account) to `Ope - The transfer fixes the governance gap called out in `docs/CANONICAL-REPOS.md § 8` — the section is rewritten to reflect the new home in this PR. **Follow-ups:** -1. Link-sweep: update all repo READMEs that reference the old `Delqhi/...` paths to the new canonical paths (GitHub redirects cover us for now, but we don't want permanent indirection). +1. Link-sweep: update all repo READMEs that reference the old `Delqhi/...` paths to the new canonical paths (GitHub redirects cover us for now, but we don't want permanent indirection). → tracked as [FOLLOWUPS.md § L1](./FOLLOWUPS.md#l1-delqhi--opensin-ai-link-sweep-across-other-repos). 2. Verify `sin-sync` tooling works with the new repo names or uses the GitHub redirect transparently. + +## Wave 3 — Finalize consolidation (this PR, 2026-04-18) + +Closes the remaining Wave-2.5 inconsistencies inside `OpenSIN-overview` and categorizes the last two in-org duplicate repos. + +### 3.1 Internal Delqhi-link cleanup +Every remaining `Delqhi/upgraded-opencode-stack` and `Delqhi/global-brain` reference inside `OpenSIN-overview` has been rewritten to the canonical `OpenSIN-AI/Infra-SIN-*` path, with a one-line note where the legacy path still matters (for people searching for the old name): + +- `README.md` — agent config table (6 rows) now points to `Infra-SIN-OpenCode-Stack` +- `START-HERE.md` — section title "Externe SSOT (noch in @Delqhi...)" rewritten to "Infrastruktur-SSOT (seit 2026-04-18 in-Org)" with redirect hint +- `BOUNDARIES.md` — canonical-ownership table updated; stale `ai-agent-system` entry replaced with `OpenSIN-backend`; `Infra-SIN-Global-Brain` added +- `governance/BOUNDARY-ROLE-RULES.md` — matching update for rule list +- `platforms/canonical-repos.json` — full rewrite (v3.0.0): moved the two SSOT entries out of `external_ssot` into a new `infrastructure_ssot` section under `canonical_repos`, marked `transferred_at: 2026-04-18`, recorded `legacy_path` for searchability, and emptied `external_ssot` + +### 3.2 Orphan-repo classification +`OpenSIN-AI/opensin-ai-cli` (Rust coding CLI) and `OpenSIN-AI/opensin-ai-platform` (plugin ecosystem) were listed as "NEU April 2026" in the README but were not in the canonical map. Both overlap with existing canonical repos: + +- `opensin-ai-cli` ⟷ `OpenSIN-Code` (TS autonomous CLI + Rust engine) +- `opensin-ai-platform` ⟷ `OpenSIN/opensin_agent_platform/` (plugin ecosystem) + +Instead of silently accepting them, Wave 3 flags both as **"Rationalization pending — do not extend"** in: + +- `README.md` (Core Engine + Doku & SSOT sections) +- `registry/MASTER_INDEX.md § 99` +- `docs/CANONICAL-REPOS.md § 9` (new section) +- `platforms/canonical-repos.json` (new `rationalization_pending` array) + +Each has a decision ticket in `docs/FOLLOWUPS.md § R1` and `§ R2`. + +### 3.3 Secondary fixes +- `README.md` — fixed the accidental duplicate `chat.opensin.ai` row where `OpenSIN-backend` was also claimed to serve that domain (corrected: backend is the internal API consumed by `OpenSIN-WebApp`). +- `README.md` — `OpenSIN-overview` SSOT entry "Registry aller 165 Repos" → "MASTER_INDEX.md (188 Repos)". +- `registry/MASTER_INDEX.md` — header count 187 vs 188 inconsistency fixed; `Infra-SIN-OpenCode-Stack` and `Infra-SIN-Global-Brain` added to § 11 Infrastructure. +- `docs/opensin-ai-agent-feature-spec.md` — 5 references to the now-flagged `opensin-ai-cli` and 1 reference to the archived `opensin-ai-code` rewritten to canonical `OpenSIN-Code` / `opensin_sdk`. + +### 3.4 New artifact: `docs/FOLLOWUPS.md` +Central, stable-anchor tracker for all open consolidation work: + +- `R1` — `opensin-ai-cli` vs `OpenSIN-Code` decision +- `R2` — `opensin-ai-platform` vs `OpenSIN` decision +- `R3` — `opensin_agent_platform/` vs `opensin_core/` internal diff (Wave-1 carry-over) +- `L1` — Delqhi → OpenSIN-AI link sweep across consumer repos +- `L2` — Archived-repo link sweep across consumer repos +- `C1` — `OpenSIN-WebApp` registry description refresh +- `C2` — `DEPLOYMENT_STATUS.md` freshness check + +Every ticket has a stable `#anchor` so other docs deep-link to it. + +## End state after Wave 3 + +| Category | Count | Notes | +|---|---|---| +| Canonical code repos | 4 | `OpenSIN`, `OpenSIN-Code`, `OpenSIN-backend`, `Team-SIN-Code-Core` | +| Canonical web surfaces | 3 | `website-opensin.ai`, `website-my.opensin.ai`, `OpenSIN-WebApp` | +| Canonical meta / docs | 2 | `OpenSIN-overview`, `OpenSIN-documentation` | +| Canonical infra | 3 | `Infra-SIN-Dev-Setup`, `Infra-SIN-OpenCode-Stack`, `Infra-SIN-Global-Brain` | +| Canonical templates | 1 | `Template-SIN-Agent` | +| Canonical business | 1 | `Biz-SIN-Marketing` | +| Wave 1/2 archived | 4 | `A2A-SIN-Coding-CEO`, `A2A-SIN-Code-AI`, `opensin-ai-code`, `OpenSIN-onboarding` | +| Rationalization pending | 2 | `opensin-ai-cli`, `opensin-ai-platform` (flagged, not extended) | + +Every ambiguously-owned repo now has exactly one of three states: **canonical**, **archived**, or **rationalization-pending with an open decision ticket**. Agents opening PRs can read `CANONICAL-REPOS.md` and `FOLLOWUPS.md` and know where their change belongs without asking. + +## Wave 4 — Execute the 5 strategic decisions (2026-04-18) + +Wave 3 identified 5 Prio-1 decisions that needed to be made before the next marketing push. Wave 4 made all 5 and shipped the artifacts. + +### Decisions made + +| # | Topic | Decision | +|---|---|---| +| 1 | UI-layer role conflict | Strict 4-surface separation: `opensin.ai` / `my.opensin.ai` / `chat.opensin.ai` / `docs.opensin.ai` — see `PRODUCT-VISION.md § UI-Schichtung` | +| 2 | Marketplace mechanic | **Option A** — `Team-SIN-*` are metadata manifests. Schema + 17 manifests shipped. | +| 3 | `OpenSIN-backend` vs `Core-SIN-Control-Plane` | Merge into `OpenSIN-backend`. `Core-SIN-Control-Plane` → archived with redirect after migration (§ CP1). | +| 4 | `Team-SIN-Code-Core` integrity | Audit-confirmed scaffold (not a broken merge). Normalized into Option A like the other 16 teams. | +| 5 | Scaffold + dead repo audit | Audit script shipped; 4 dead repos archived; 6 `A2A-SIN-Code-*` kept open pending R1 decision (§ S2). | + +### New artifacts + +- `PRODUCT-VISION.md` — all 5 topics bumped from "proposed" to "DECIDED" +- `schemas/team.schema.json` — JSON Schema (Draft 2020-12, full property coverage) +- `schemas/README.md` — schema usage + aggregator contract +- `templates/teams/*.json` — all 17 team manifests (Team-SIN-Commerce = gold-standard reference) +- `templates/teams/README.md` — per-team template directory guide +- `scripts/audit-repos.js` — classifier (alive / active / scaffold / dead / archived) with `gh repo list` input +- `scripts/validate-team-manifests.js` — Ajv validation against the schema (CI-ready) +- `scripts/push-team-manifests.js` — pushes `team.json` + README banner into each downstream `Team-SIN-*` repo +- `registry/SCAFFOLD_AUDIT.md` — generated audit snapshot (2026-04-18) + +### Archived in Wave 4 + +- `A2A-SIN-Facebook` — 0 kb, never implemented +- `A2A-SIN-Mattermost` — 0 kb, never implemented +- `A2A-SIN-RocketChat` — 0 kb, never implemented +- `A2A-SIN-Slack` — 0 kb, never implemented + +### Still open after Wave 4 (small-scope tickets) + +- `CP1` — actual code-level merge of `Core-SIN-Control-Plane` → `OpenSIN-backend` +- `S2` — per-repo decision on 6 `A2A-SIN-Code-*` scaffolds (tied to R1) +- `M1` — team-manifest downstream-push to 17 `Team-SIN-*` repos (DONE via script) +- `M2` — `oh-my-sin.json` aggregator GH Action in `Infra-SIN-OpenCode-Stack` +- Old R1/R2/R3/L1/L2/C1/C2/D1 still stand, but now each has a smaller scope because the strategic questions around them are answered. + +### End state after Wave 4 + +The organization has a coherent topology: 1 product vision, 3 product tiers, 4 UI surfaces, 4 canonical code repos, 3 infra repos, 17 marketplace teams (all with manifests), ~80 active agents, 8 archived repos, 2 rationalization-pending repos with decision tickets. Anyone can read `START-HERE` → `PRODUCT-VISION` → `STATE-OF-THE-UNION` → `CANONICAL-REPOS` in 15 minutes and be fully oriented. diff --git a/docs/FOLLOWUPS.md b/docs/FOLLOWUPS.md new file mode 100644 index 0000000..8137799 --- /dev/null +++ b/docs/FOLLOWUPS.md @@ -0,0 +1,171 @@ +# Open Follow-ups — Consolidation (Wave 3+) + +> **Status:** 2026-04-18. This file tracks the remaining rationalization and link-sweep work after the April 2026 consolidation. Each ticket has a stable anchor ID so other docs can deep-link to it. + +When all tickets here are `DONE`, delete this file. + +--- + +## Rationalization tickets + +### R1: `opensin-ai-cli` vs `OpenSIN-Code` + +- **Status:** `OPEN` — do not extend either side until decided. +- **Tracking issues:** + - Decision: [`OpenSIN-Code#1116`](https://github.com/OpenSIN-AI/OpenSIN-Code/issues/1116) + - Banner: [`opensin-ai-cli#7`](https://github.com/OpenSIN-AI/opensin-ai-cli/issues/7) +- **What:** `OpenSIN-AI/opensin-ai-cli` is a 70-file / 34.6k-line Rust coding CLI, 9 crates. `OpenSIN-AI/OpenSIN-Code` is the canonical autonomous TypeScript CLI and also ships a Rust engine (71 files / 37.7k lines). +- **Problem:** Two Rust coding CLIs in the same org. Only one should exist. +- **Decision needed:** + 1. **Merge** the useful crates of `opensin-ai-cli` into `OpenSIN-Code/crates/*` and archive `opensin-ai-cli` with a redirect README, OR + 2. **Split responsibilities clearly** — e.g. `OpenSIN-Code` = TS frontend / orchestration, `opensin-ai-cli` = Rust engine only; document the split in `CANONICAL-REPOS.md` and remove the rationalization flag. +- **Owner:** `Team-SIN-Code-Core`. +- **Unblocks:** Sprint 1 heartbeat work in `opensin-ai-agent-feature-spec.md § 2.1`. + +### R2: `opensin-ai-platform` vs `OpenSIN` + +- **Status:** `OPEN` — do not extend either side until decided. +- **Tracking issues:** + - Decision: [`OpenSIN#1723`](https://github.com/OpenSIN-AI/OpenSIN/issues/1723) + - Banner: [`opensin-ai-platform#6`](https://github.com/OpenSIN-AI/opensin-ai-platform/issues/6) +- **What:** `OpenSIN-AI/opensin-ai-platform` is a 182-file / 87k-line plugin ecosystem with 14 plugins. `OpenSIN/opensin_agent_platform/` was absorbed from the archived `opensin-ai-code` in Wave 1. +- **Problem:** Two "platform" repos claim the plugin-ecosystem role. +- **Decision needed:** + 1. **Merge** `opensin-ai-platform` into `OpenSIN/opensin_agent_platform/` (after R3 below resolves the internal `opensin_agent_platform/` vs `opensin_core/` diff), OR + 2. **Keep separate** only if `opensin-ai-platform` has a different deploy/runtime model — must then be renamed to `Infra-SIN-Plugin-Platform` per the naming convention. +- **Owner:** `OpenSIN` maintainers. +- **Blocked by:** R3. + +### R3: `opensin_agent_platform/` vs `opensin_core/` diff + +- **Status:** `OPEN` — Wave-1 absorbed `opensin-ai-code` → `OpenSIN/opensin_agent_platform/` but did NOT wire it into the build. +- **Tracking issue:** [`OpenSIN#1722`](https://github.com/OpenSIN-AI/OpenSIN/issues/1722) +- **What:** Both directories contain `hooks`, `plugins`, `skills` subtrees. +- **Decision needed:** + 1. Diff the two directories by subsystem. + 2. Port genuinely useful logic from `opensin_agent_platform/` into `opensin_core/`. + 3. Retire `opensin_agent_platform/` (delete folder, update `OpenSIN/README.md`, `setup.py`, `pyproject.toml`). + 4. Update `platforms/canonical-repos.json` to drop the folder from the `packages` array. +- **Owner:** `OpenSIN` maintainers. +- **Unblocks:** R2. + +--- + +## Link-sweep tickets + +### L1: `Delqhi/*` → `OpenSIN-AI/Infra-SIN-*` link sweep across other repos + +- **Status:** `IN PROGRESS` — `OpenSIN-overview` itself is clean after Wave 3. Other repos still have stale refs. +- **Tracking issues:** + - `OpenSIN-backend`: [`#1170`](https://github.com/OpenSIN-AI/OpenSIN-backend/issues/1170) (combined L1+L2) + - `Template-SIN-Agent`: [`#156`](https://github.com/OpenSIN-AI/Template-SIN-Agent/issues/156) (template bake-in, prevents regression) +- **Reality check (2026-04-18 `gh search code`):** actual stale-ref surface across the org is small — 2 hits for `Delqhi/upgraded-opencode-stack` and 0 for `Delqhi/global-brain` outside the meta-repo. The earlier "7 consumer repos affected" claim was based on planning assumptions, not live data. Individual per-repo tickets will be filed on-demand if `gh search code` turns up more hits. +- **What:** The 2026-04-18 transfer renamed the two SSOT repos. GitHub redirects old URLs, but hard-coded refs in configs, CI jobs, READMEs, and docstrings should be updated to the canonical path. +- **Known stale refs outside this repo:** + - `OpenSIN`, `OpenSIN-Code`, `OpenSIN-WebApp`, `website-opensin.ai`, `website-my.opensin.ai`, `Template-SIN-Agent`, `Biz-SIN-Marketing` — all declare `Delqhi/upgraded-opencode-stack` as `sin-sync` target. + - Multiple `A2A-SIN-*` agents reference `Delqhi/global-brain` for PCPM. +- **Note — NOT a repo reference:** the hostname `n8n.delqhi.com` appears in `docs/best-practices/ci-cd-n8n.md`. That is an OCI VM hostname owned by the Delqhi admin, not the archived GitHub account. Do NOT rewrite it. +- **How:** Run this regex-sweep in each consumer repo: + ``` + s|Delqhi/upgraded-opencode-stack|OpenSIN-AI/Infra-SIN-OpenCode-Stack|g + s|Delqhi/global-brain|OpenSIN-AI/Infra-SIN-Global-Brain|g + ``` + Open a single "link-sweep: Delqhi → OpenSIN-AI" PR per repo. +- **Owner:** `Infra-SIN-Dev-Setup` or whichever team owns each consumer repo. + +### L2: Archived-repo reference sweep + +- **Status:** `OPEN`. +- **Tracking issues:** + - `OpenSIN-backend`: [`#1170`](https://github.com/OpenSIN-AI/OpenSIN-backend/issues/1170) (combined L1+L2) + - `Core-SIN-Control-Plane`: [`#16`](https://github.com/OpenSIN-AI/Core-SIN-Control-Plane/issues/16) +- **What:** Ensure no active repo still links to any of the 4 Wave-1/2 archived repos: + - `A2A-SIN-Coding-CEO`, `A2A-SIN-Code-AI`, `opensin-ai-code`, `OpenSIN-onboarding` +- **How:** Run `gh search code 'A2A-SIN-Coding-CEO OR A2A-SIN-Code-AI OR opensin-ai-code OR OpenSIN-onboarding' --owner OpenSIN-AI` and replace each hit with the canonical target from `docs/CANONICAL-REPOS.md § Archived repos`. + +--- + +## Content tickets + +### C1: Consumer-side description refresh for `OpenSIN-WebApp` + +- **Status:** `OPEN`. +- **Tracking issue:** [`OpenSIN-overview#34`](https://github.com/OpenSIN-AI/OpenSIN-overview/issues/34) (combined C1+C2) +- **What:** `registry/MASTER_INDEX.md § 7` still says `OpenSIN-WebApp → Keine Beschreibung`. Wave 2 set the GitHub description; next registry regeneration should pick it up automatically. Either regenerate or hand-patch. + +### C2: `DEPLOYMENT_STATUS.md` freshness + +- **Status:** `OPEN` — file is from 2026-04-16 and reports all 6 HF spaces as `503`. That may or may not still be true. Verify and refresh, or add an `OUTDATED` banner on top. +- **Tracking issue:** [`OpenSIN-overview#34`](https://github.com/OpenSIN-AI/OpenSIN-overview/issues/34) (combined C1+C2) + +--- + +## Docs-site ticket + +### D1: Publish "April 2026 Consolidation" page on `docs.opensin.ai` + +- **Status:** `OPEN`. +- **Tracking issue:** [`OpenSIN-documentation#134`](https://github.com/OpenSIN-AI/OpenSIN-documentation/issues/134) +- **What:** Public-facing Docusaurus page summarising the consolidation and deep-linking into this repo's SSOT docs. Required so external contributors land on a stable URL instead of bouncing around redirects. + +--- + +## Wave 4 tickets (2026-04-18) + +### CP1: Merge `Core-SIN-Control-Plane` into `OpenSIN-backend` + +- **Status:** `OPEN` — tracking issues filed. +- **Tracking issues:** + - Migration target: [`OpenSIN-backend#1171`](https://github.com/OpenSIN-AI/OpenSIN-backend/issues/1171) + - Archive prep (source): [`Core-SIN-Control-Plane#17`](https://github.com/OpenSIN-AI/Core-SIN-Control-Plane/issues/17) +- **Decision (Wave 4):** `Core-SIN-Control-Plane` is absorbed into `OpenSIN-backend`. Older canonical name wins due to external dependencies already pointing to `OpenSIN-backend`. +- **What:** + 1. File-by-file diff of `Core-SIN-Control-Plane` against `OpenSIN-backend`. + 2. Port unique code/tests/docs into `OpenSIN-backend` under a preserved top-level folder (e.g. `control_plane/`) so git history is traceable. + 3. Tag last pre-archive commit on `Core-SIN-Control-Plane` (`v-archived-2026-04-18`). + 4. Replace `Core-SIN-Control-Plane/README.md` with a redirect banner pointing at `OpenSIN-backend`. + 5. Archive `Core-SIN-Control-Plane` on GitHub. +- **Owner:** `OpenSIN-backend` maintainers. + +### S1: Archive 4 confirmed-dead A2A repos + +- **Status:** `DONE — 2026-04-18`. +- **Archived:** + - [`A2A-SIN-Facebook`](https://github.com/OpenSIN-AI/A2A-SIN-Facebook) + - [`A2A-SIN-Mattermost`](https://github.com/OpenSIN-AI/A2A-SIN-Mattermost) + - [`A2A-SIN-RocketChat`](https://github.com/OpenSIN-AI/A2A-SIN-RocketChat) + - [`A2A-SIN-Slack`](https://github.com/OpenSIN-AI/A2A-SIN-Slack) +- **What was done:** Each received an "ARCHIVED — never implemented" banner README pointing at `OpenSIN-overview` for the RFC flow, then was set to archived (read-only) on GitHub. Reversible via `gh repo unarchive` if a real implementation ever materialises. +- **Remaining clean-up (small):** `registry/MASTER_INDEX.md` and `platforms/registry.json` should mark these as archived next time the registry regenerator runs (folds into § C1). + +### S2: Decide fate of 6 `A2A-SIN-Code-*` scaffolds + +- **Status:** `OPEN` — kept alive for now. +- **Repos (9 kb, identical Python scaffolds):** `A2A-SIN-Code-Backend`, `-Command`, `-Frontend`, `-Fullstack`, `-Plugin`, `-Tool`. +- **Decision needed:** Owning team (`Team-SIN-Code-Core`) decides per-repo whether to promote (implement) or archive (dead). Should happen together with R1 resolution (`opensin-ai-cli` fate). +- **How to decide:** if R1 merges `opensin-ai-cli` into `OpenSIN-Code`, likely all 6 become redundant → archive. If R1 keeps them split, map each of the 6 to a specific sub-capability of the Rust engine and implement. + +### M1: Team-manifest pushes into 17 `Team-SIN-*` repos + +- **Status:** `DONE — 2026-04-18` (verified by live `gh api contents/team.json` check across all 17). +- **What:** All 17 `Team-SIN-*` repos already contain a `team.json` and a Option-A-style README banner pointing back to `OpenSIN-overview/templates/teams/`. Sizes 1.5-4 kb each, all valid against `schemas/team.schema.json`. +- **Known minor drift:** each downstream `team.json` is exactly 1 byte shorter than the SSOT copy at `OpenSIN-overview/templates/teams/*.json` — trailing-newline difference, functionally identical. Will be normalised on the next aggregator run (§ M2). +- **SSOT:** `templates/teams/` in this repo. Downstream files are read-only mirrors. +- **Validation:** `scripts/validate-team-manifests.js` passes on all 17. Wire into CI on every PR touching `templates/teams/` or `schemas/team.schema.json`. + +### M2: Build `oh-my-sin.json` aggregator GitHub Action + +- **Status:** `OPEN` (local script exists, CI workflow not yet). +- **What:** GH Actions workflow in `Infra-SIN-OpenCode-Stack` that: + 1. Fetches all `team.json` from the 17 `Team-SIN-*` repos (or from this repo's `templates/teams/` if we canonicalize there). + 2. Aggregates into `oh-my-sin.json`. + 3. Commits. +- **Recommendation:** SSOT is `OpenSIN-overview/templates/teams/` (not the downstream repos). Aggregator reads from here. Downstream `team.json` files are read-only mirrors for humans browsing individual Team-SIN-* repos. + +--- + +## How to close a ticket + +1. Do the work. +2. Change `Status:` to `DONE — `. +3. If all tickets in this file are `DONE`, delete the file and remove references from `CANONICAL-REPOS.md § 8 / § 9` and `CONSOLIDATION-2026-04.md § Wave 3`. diff --git a/docs/opensin-ai-agent-feature-spec.md b/docs/opensin-ai-agent-feature-spec.md index 44ff994..21d1426 100644 --- a/docs/opensin-ai-agent-feature-spec.md +++ b/docs/opensin-ai-agent-feature-spec.md @@ -21,7 +21,7 @@ OpenSIN-AI Agent is the autonomous AI agent system at the core of the OpenSIN ec | Subagent Spawning | ✅ (A2A Fleet + opencode) | ✅ (Subagent Progress) | ❌ | ✅ (Task tool, 3 types) | | External Harness Control | ✅ (opencode CLI + A2A) | ✅ (ACP: Claude Code/Codex/Gemini CLI) | ❌ | ❌ | | Persistent Memory | ✅ (MCP-SIN-memory + Supabase) | ✅ (Memory Wiki + SOUL.md) | ❌ | ✅ (CLAUDE.md + auto-memory) | -| Agent SDK | ✅ (opensin-ai-code Python) | ❌ | ❌ | ✅ (Python/TypeScript) | +| Agent SDK | ✅ (`opensin_sdk` in `OpenSIN`) | ❌ | ❌ | ✅ (Python/TypeScript) | | Webhook Triggers | ✅ (n8n + A2A webhooks) | ✅ (Built-in webhook server) | ❌ | ❌ | | Voice Interaction | ✅ (Siri + Apple agents) | ✅ (Voice Wake + Talk Mode) | ✅ (Gemini Live) | ❌ | | Google Workspace | ✅ (A2A-SIN-Google-Apps) | ✅ (Google Workspace plugin) | ✅ (Native deep integration) | ❌ | @@ -38,7 +38,7 @@ OpenSIN-AI Agent is the autonomous AI agent system at the core of the OpenSIN ec ### Phase 1: Core Agent Loop (P0 — Foundation) -#### 2.1 Autonomous Agent Loop (`opensin-ai-cli` / `OpenSIN-Code`) +#### 2.1 Autonomous Agent Loop (`OpenSIN-Code`) - **What:** A persistent agent loop that runs 24/7, processes tasks from queues, and executes them autonomously - **Competitor Parity:** OpenClaw Heartbeat, Claude Code /loop, Gemini Scheduled Actions - **Implementation:** @@ -47,7 +47,7 @@ OpenSIN-AI Agent is the autonomous AI agent system at the core of the OpenSIN ec - Cron scheduler: Native cron-like scheduling for recurring tasks (daily summaries, weekly reports) - Graceful shutdown: Checkpoint state on SIGTERM, resume on restart - Timeout management: Max execution time per task, auto-escalation on timeout -- **Target Repo:** `opensin-ai-cli` (Rust) + `OpenSIN-Code` (SDK) +- **Target Repo:** `OpenSIN-Code` (Rust Engine + SDK) — note: `opensin-ai-cli` is rationalization-pending, see [FOLLOWUPS.md § R1](./FOLLOWUPS.md#r1-opensin-ai-cli--opensin-code) #### 2.2 Multi-Model Router - **What:** Intelligent model routing with failover chains, cost optimization, and task-based model selection @@ -160,7 +160,7 @@ OpenSIN-AI Agent is the autonomous AI agent system at the core of the OpenSIN ec - Talk mode: Continuous voice conversation - Speech-to-text: Whisper API or local model - Text-to-speech: Response narration -- **Target Repo:** `opensin-ai-cli` + `A2A-SIN-Apple-Shortcuts` +- **Target Repo:** `OpenSIN-Code` + `A2A-SIN-Apple-Shortcuts` #### 2.12 Google Workspace Deep Integration - **What:** Native deep integration with Gmail, Drive, Calendar, Docs, Sheets, Slides @@ -178,7 +178,7 @@ OpenSIN-AI Agent is the autonomous AI agent system at the core of the OpenSIN ec ## 3. Implementation Roadmap ### Sprint 1 (Week 1-2): Foundation -- [ ] Implement heartbeat system in `opensin-ai-cli` +- [ ] Implement heartbeat system in `OpenSIN-Code` - [ ] Extend multi-model router with failover chains - [ ] Create unified messaging API in `OpenSIN-backend` - [ ] Extend `MCP-SIN-memory` with wiki-style storage diff --git a/docs/sessions/2026-04-16-session-summary.md b/docs/sessions/2026-04-16-session-summary.md index 884766e..c88640c 100644 --- a/docs/sessions/2026-04-16-session-summary.md +++ b/docs/sessions/2026-04-16-session-summary.md @@ -1,5 +1,8 @@ # Session Summary — 2026-04-16 +> **Historical note (2026-04-18):** This file references `Delqhi/upgraded-opencode-stack` and `Delqhi/global-brain` as they existed on 2026-04-16. Both were transferred into `OpenSIN-AI/Infra-SIN-OpenCode-Stack` and `OpenSIN-AI/Infra-SIN-Global-Brain` on 2026-04-18 (Wave 2.5). The references below are preserved as a historical snapshot. For current canonical paths see [docs/CANONICAL-REPOS.md § 8](../CANONICAL-REPOS.md#8-infrastructure-ssot). + + ## Ziel Dokumentation verbessern, falsche Zahlen in README-Files korrigieren, Chrome Password Manager Integration finden und alles im Global Brain speichern. @@ -183,4 +186,4 @@ Bei Fragen → Global Brain konsultieren: `Delqhi/global-brain`

OpenSIN-AI — Built by the Fleet, for the Fleet -

\ No newline at end of file +

diff --git a/governance/BOUNDARY-ROLE-RULES.md b/governance/BOUNDARY-ROLE-RULES.md index 0f6cf4a..c2f895c 100644 --- a/governance/BOUNDARY-ROLE-RULES.md +++ b/governance/BOUNDARY-ROLE-RULES.md @@ -7,9 +7,10 @@ - clarifies who owns what -> `OpenSIN-overview` - changes runtime behavior -> `OpenSIN` - changes official docs body -> `OpenSIN-documentation` -- changes OpenCode config canon -> `upgraded-opencode-stack` -- changes product implementation -> product repo -- changes control-plane implementation -> control-plane repo +- changes OpenCode config canon -> `OpenSIN-AI/Infra-SIN-OpenCode-Stack` +- changes persistent agent memory canon -> `OpenSIN-AI/Infra-SIN-Global-Brain` +- changes product implementation -> product repo (`OpenSIN-WebApp`, `website-*`) +- changes control-plane implementation -> `OpenSIN-AI/OpenSIN-backend` ## Red flags - overview starts carrying detailed implementation canon diff --git a/platforms/canonical-repos.json b/platforms/canonical-repos.json index 2cf450a..3f2e8f3 100644 --- a/platforms/canonical-repos.json +++ b/platforms/canonical-repos.json @@ -1,26 +1,27 @@ { - "version": "2.0.0", + "version": "3.0.0", "updated": "2026-04-18", "description": "Canonical repo registry for OpenSIN-AI. Mirrors docs/CANONICAL-REPOS.md in machine-readable form. For the full 188-repo inventory see registry/MASTER_INDEX.md.", "schema": { - "canonical_repos": "Production-owning repos, grouped by domain", - "archived": "Repos consolidated into canonical targets; read-only", - "external_ssot": "Repos outside OpenSIN-AI that are declared SSOT by OpenSIN-AI repos" + "canonical_repos": "Production-owning repos, grouped by domain. A concern has exactly one canonical owner.", + "rationalization_pending": "Repos still in-org that overlap with a canonical repo and must be merged or retired. Do NOT extend with new features; see target.", + "archived": "Repos consolidated into canonical targets; read-only on GitHub, history preserved.", + "external_ssot": "Repos outside OpenSIN-AI that are declared SSOT by OpenSIN-AI repos (empty after 2026-04-18 transfer)." }, "canonical_repos": { "core_platform": [ { "repo": "OpenSIN-AI/OpenSIN", "language": "python", "role": "python_kernel", "packages": ["opensin_core", "opensin_cli", "opensin_api", "opensin_sdk", "opensin_agent_platform"] } ], "autonomous_coding": [ - { "repo": "OpenSIN-AI/OpenSIN-Code", "language": "typescript", "role": "autonomous_cli" }, - { "repo": "OpenSIN-AI/OpenSIN-backend", "language": "typescript", "role": "a2a_control_plane" }, - { "repo": "OpenSIN-AI/Team-SIN-Code-Core","language": "typescript", "role": "coding_team_monorepo", "agents": ["coding-ceo", "code-ai"] }, - { "repo": "OpenSIN-AI/Template-SIN-Agent","language": "typescript", "role": "agent_blueprint" } + { "repo": "OpenSIN-AI/OpenSIN-Code", "language": "typescript", "role": "autonomous_cli" }, + { "repo": "OpenSIN-AI/OpenSIN-backend", "language": "typescript", "role": "a2a_control_plane" }, + { "repo": "OpenSIN-AI/Team-SIN-Code-Core", "language": "typescript", "role": "coding_team_monorepo", "agents": ["coding-ceo", "code-ai"] }, + { "repo": "OpenSIN-AI/Template-SIN-Agent", "language": "typescript", "role": "agent_blueprint" } ], "web_surface": [ - { "repo": "OpenSIN-AI/website-opensin.ai", "language": "typescript", "role": "oss_marketing", "deployed_at": "opensin.ai" }, - { "repo": "OpenSIN-AI/website-my.opensin.ai", "language": "typescript", "role": "paid_marketing", "deployed_at": "my.opensin.ai" }, - { "repo": "OpenSIN-AI/OpenSIN-WebApp", "language": "typescript", "role": "auth_dashboard", "deployed_at": "chat.opensin.ai", "package": "opensin-chat" } + { "repo": "OpenSIN-AI/website-opensin.ai", "language": "typescript", "role": "oss_marketing", "deployed_at": "opensin.ai" }, + { "repo": "OpenSIN-AI/website-my.opensin.ai", "language": "typescript", "role": "paid_marketing", "deployed_at": "my.opensin.ai" }, + { "repo": "OpenSIN-AI/OpenSIN-WebApp", "language": "typescript", "role": "auth_dashboard", "deployed_at": "chat.opensin.ai", "package": "opensin-chat" } ], "documentation": [ { "repo": "OpenSIN-AI/OpenSIN-documentation", "role": "public_docs", "deployed_at": "docs.opensin.ai" } @@ -28,6 +29,10 @@ "infrastructure": [ { "repo": "OpenSIN-AI/Infra-SIN-Dev-Setup", "role": "dev_and_user_onboarding", "subdirs": ["user-onboarding"] } ], + "infrastructure_ssot": [ + { "repo": "OpenSIN-AI/Infra-SIN-OpenCode-Stack", "role": "opencode_config_ssot", "legacy_path": "Delqhi/upgraded-opencode-stack", "transferred_at": "2026-04-18", "declared_by": ["OpenSIN", "OpenSIN-Code", "OpenSIN-WebApp", "website-opensin.ai", "website-my.opensin.ai", "Template-SIN-Agent", "Biz-SIN-Marketing"] }, + { "repo": "OpenSIN-AI/Infra-SIN-Global-Brain", "role": "pcpm_v4_daemon", "legacy_path": "Delqhi/global-brain", "transferred_at": "2026-04-18", "declared_by": ["multiple A2A-SIN-* agents"] } + ], "business": [ { "repo": "OpenSIN-AI/Biz-SIN-Marketing", "role": "launch_hub_and_content" } ], @@ -35,21 +40,23 @@ { "repo": "OpenSIN-AI/OpenSIN-overview", "role": "organizational_ssot" } ] }, + "rationalization_pending": [ + { "repo": "OpenSIN-AI/opensin-ai-cli", "target": "OpenSIN-AI/OpenSIN-Code", "overlaps_with": "autonomous_cli", "status": "do_not_extend", "tracked_in": "docs/FOLLOWUPS.md#R1", "note": "Rust coding CLI. Overlaps with OpenSIN-Code's Rust engine. Decide: merge into OpenSIN-Code or retire." }, + { "repo": "OpenSIN-AI/opensin-ai-platform", "target": "OpenSIN-AI/OpenSIN", "overlaps_with": "plugin_ecosystem", "status": "do_not_extend", "tracked_in": "docs/FOLLOWUPS.md#R2", "note": "Plugin ecosystem. Overlaps with OpenSIN/opensin_agent_platform/ and OpenSIN-Code/plugins/. Decide target folder." }, + { "folder": "OpenSIN-AI/OpenSIN/opensin_agent_platform/", "target": "OpenSIN-AI/OpenSIN/opensin_core/", "status": "diff_pending", "tracked_in": "docs/FOLLOWUPS.md#R3", "note": "Absorbed from archived opensin-ai-code. Diff against opensin_core (both have hooks/plugins/skills), port useful logic, retire folder." } + ], "archived": [ { "repo": "OpenSIN-AI/A2A-SIN-Coding-CEO", "replaced_by": "OpenSIN-AI/Team-SIN-Code-Core/agents/coding-ceo/", "archived_at": "2026-04-18" }, { "repo": "OpenSIN-AI/A2A-SIN-Code-AI", "replaced_by": "OpenSIN-AI/Team-SIN-Code-Core/agents/code-ai/", "archived_at": "2026-04-18" }, { "repo": "OpenSIN-AI/opensin-ai-code", "replaced_by": "OpenSIN-AI/OpenSIN/opensin_agent_platform/", "archived_at": "2026-04-18" }, { "repo": "OpenSIN-AI/OpenSIN-onboarding", "replaced_by": "OpenSIN-AI/Infra-SIN-Dev-Setup/user-onboarding/", "archived_at": "2026-04-18" } ], - "external_ssot": [ - { "repo": "Delqhi/upgraded-opencode-stack", "role": "opencode_config_ssot", "declared_by": ["OpenSIN", "OpenSIN-Code", "OpenSIN-WebApp", "website-opensin.ai", "website-my.opensin.ai", "Template-SIN-Agent", "Biz-SIN-Marketing"], "transfer_status": "pending", "target": "OpenSIN-AI/Infra-SIN-OpenCode-Stack" }, - { "repo": "Delqhi/global-brain", "role": "pcpm_v4_daemon", "declared_by": ["multiple A2A-SIN-* agents"], "transfer_status": "pending", "target": "OpenSIN-AI/Infra-SIN-Global-Brain" } - ], + "external_ssot": [], "naming_convention": { "flagship_no_prefix": ["OpenSIN", "OpenSIN-Code", "OpenSIN-backend", "OpenSIN-WebApp", "OpenSIN-overview", "OpenSIN-documentation", "website-opensin.ai", "website-my.opensin.ai"], "domain_prefixes": { "Team-SIN-*": "Team monorepos of sub-agents", - "Infra-SIN-*": "Infrastructure, setup, tooling, CI", + "Infra-SIN-*": "Infrastructure, setup, tooling, CI, SSOT configs", "Biz-SIN-*": "Business/marketing/sales content", "Template-SIN-*": "Templates / blueprints" } diff --git a/registry/MASTER_INDEX.md b/registry/MASTER_INDEX.md index 6a02176..60753c8 100644 --- a/registry/MASTER_INDEX.md +++ b/registry/MASTER_INDEX.md @@ -1,11 +1,11 @@ -# 📚 THE ULTIMATE MASTER INDEX (187 REPOS) +# 📚 THE ULTIMATE MASTER INDEX (188 REPOS) -**LAST UPDATED:** 2026-04-18 (post-wave-2 consolidation) +**LAST UPDATED:** 2026-04-18 (post-wave-3 consolidation) **TOTAL REPOSITORIES:** 188 (42 public, 146 private) -> **Archival note:** 4 repos were consolidated into canonical monorepos in April 2026 and are marked `ARCHIVED` below. See [docs/CANONICAL-REPOS.md](../docs/CANONICAL-REPOS.md) for the canonical ownership map. +> **Archival note:** 4 repos were consolidated into canonical monorepos in April 2026 (Waves 1–2) and are marked `ARCHIVED` below. Two SSOT infra repos were transferred from `Delqhi/*` into `OpenSIN-AI/Infra-SIN-*` in Wave 2.5. Two remaining in-org duplicates (`opensin-ai-cli`, `opensin-ai-platform`) are flagged **Rationalization pending** in Wave 3. See [docs/CANONICAL-REPOS.md](../docs/CANONICAL-REPOS.md) and [docs/FOLLOWUPS.md](../docs/FOLLOWUPS.md) for the canonical ownership map and open work. -Dieses Dokument ist das vollständige, lückenlose Inventar der OpenSIN-AI Organisation. **Jedes** der 187 Repositories ist hier kategorisiert und logisch in die Architektur integriert. +Dieses Dokument ist das vollständige, lückenlose Inventar der OpenSIN-AI Organisation. **Jedes** der 188 Repositories ist hier kategorisiert und logisch in die Architektur integriert. --- @@ -237,10 +237,12 @@ Dieses Dokument ist das vollständige, lückenlose Inventar der OpenSIN-AI Organ | Repository | Visibility | Description | |------------|-------------|-------------| -| [Infra-SIN-Dev-Setup](https://github.com/OpenSIN-AI/Infra-SIN-Dev-Setup) | 🌐 Public | Development Environment Setup | +| [Infra-SIN-Dev-Setup](https://github.com/OpenSIN-AI/Infra-SIN-Dev-Setup) | 🌐 Public | Development Environment Setup + end-user first-run at `user-onboarding/` (absorbed archived `OpenSIN-onboarding`) | | [Infra-SIN-Doc-Templates](https://github.com/OpenSIN-AI/Infra-SIN-Doc-Templates) | 🌐 Public | OpenSIN Documentation Templates - 453K auto-generated templates for consistent documentation structures | | [Infra-SIN-Docker-Empire](https://github.com/OpenSIN-AI/Infra-SIN-Docker-Empire) | 🔒 Private | SIN-Solver Docker Infrastructure - 26 Container Empire | | [Infra-SIN-Docs-Standard](https://github.com/OpenSIN-AI/Infra-SIN-Docs-Standard) | 🔒 Private | Global Development Documentation Standard — Templates, guidelines, and best practices for all OpenSIN-AI repositories. | +| [Infra-SIN-Global-Brain](https://github.com/OpenSIN-AI/Infra-SIN-Global-Brain) | 🔒 Private | PCPM v4 daemon — persistent agent memory. Transferred from `Delqhi/global-brain` 2026-04-18. Declared SSOT by A2A-SIN-* agents. | +| [Infra-SIN-OpenCode-Stack](https://github.com/OpenSIN-AI/Infra-SIN-OpenCode-Stack) | 🔒 Private | Canonical OpenCode configuration (v2.2.1, 44 skills, 27 MCPs, 5 providers). Transferred from `Delqhi/upgraded-opencode-stack` 2026-04-18. `sin-sync` target. | ## 📚 12. Skills @@ -301,6 +303,6 @@ Dieses Dokument ist das vollständige, lückenlose Inventar der OpenSIN-AI Organ | [SIN-InkogniFlow](https://github.com/OpenSIN-AI/SIN-InkogniFlow) | 🔒 Private | Cloneable flow-builder repo with sin-flow and sin-flowd | | [awesome-opensin](https://github.com/OpenSIN-AI/awesome-opensin) | 🌐 Public | A curated list of awesome plugins, themes, agents, projects, and resources for https://opencode.ai | | [documentation](https://github.com/OpenSIN-AI/documentation) | 🔒 Private | ⚠️ ARCHIVED — All docs migrated to github.com/OpenSIN-AI/OpenSIN-documentation | -| [opensin-ai-cli](https://github.com/OpenSIN-AI/opensin-ai-cli) | 🌐 Public | OpenSIN-AI opensin-ai-cli | +| [opensin-ai-cli](https://github.com/OpenSIN-AI/opensin-ai-cli) | 🌐 Public | ⚠️ **Rationalization pending** — overlaps with `OpenSIN-Code`. Do not extend. See [docs/FOLLOWUPS.md § R1](../docs/FOLLOWUPS.md#r1-opensin-ai-cli--opensin-code) | | [opensin-ai-code](https://github.com/OpenSIN-AI/opensin-ai-code) | 🌐 Public | ⚠️ **ARCHIVED 2026-04** → consolidated into `OpenSIN/opensin_agent_platform/` | -| [opensin-ai-platform](https://github.com/OpenSIN-AI/opensin-ai-platform) | 🌐 Public | OpenSIN-AI opensin-ai-platform | \ No newline at end of file +| [opensin-ai-platform](https://github.com/OpenSIN-AI/opensin-ai-platform) | 🌐 Public | ⚠️ **Rationalization pending** — overlaps with `OpenSIN/opensin_agent_platform/`. Do not extend. See [docs/FOLLOWUPS.md § R2](../docs/FOLLOWUPS.md#r2-opensin-ai-platform--opensin) | diff --git a/registry/SCAFFOLD_AUDIT.md b/registry/SCAFFOLD_AUDIT.md new file mode 100644 index 0000000..0abb720 --- /dev/null +++ b/registry/SCAFFOLD_AUDIT.md @@ -0,0 +1,286 @@ +# Scaffold + Dead Repo Audit + +Generated by `scripts/audit-repos.js` on 2026-04-18. + +**Totals:** 205 repos + +| Classification | Count | +|---|---:| +| alive | 85 | +| scaffold | 69 | +| archived | 24 | +| meta | 23 | +| dead | 4 | + +## Classification rules + +- **archived** — already archived on GitHub. +- **canonical** — listed in `platforms/canonical-repos.json` under `canonical_repos.*`. +- **meta** — non-code repos: `Infra-SIN-*`, `Template-SIN-*`, `Biz-SIN-*`, `website-*`, `OpenSIN-overview`, `OpenSIN-documentation`. +- **dead** — disk usage ≤ 1 KB (empty repo, never filled in). Action: archive. +- **scaffold** — disk usage ≤ 40 KB and not in one of the above groups. Action: either promote (add real code) or archive. +- **alive** — anything else. No action needed. + +## A2A-SIN-* (109) + +| Repo | Class | Size | Language | Last push | +|---|---|---:|---|---| +| A2A-SIN-Apple-Calendar-Contacts | alive | 58 KB | Shell | 2026-04-18 | +| A2A-SIN-Apple-DeviceControl | alive | 62 KB | Shell | 2026-04-18 | +| A2A-SIN-Apple-FaceTime | alive | 62 KB | Shell | 2026-04-18 | +| A2A-SIN-Apple-Mail | alive | 62 KB | Shell | 2026-04-18 | +| A2A-SIN-Apple-Mobile | alive | 62 KB | Shell | 2026-04-18 | +| A2A-SIN-Apple-Notes | alive | 61 KB | Shell | 2026-04-18 | +| A2A-SIN-Apple-Notifications | alive | 62 KB | Shell | 2026-04-18 | +| A2A-SIN-Apple-Photos-Files | alive | 61 KB | Shell | 2026-04-17 | +| A2A-SIN-Apple-Reminders | alive | 59 KB | Shell | 2026-04-17 | +| A2A-SIN-Apple-Safari-WebKit | alive | 59 KB | Shell | 2026-04-17 | +| A2A-SIN-Apple-Shortcuts | alive | 59 KB | Shell | 2026-04-17 | +| A2A-SIN-Apple-SystemSettings | alive | 59 KB | Shell | 2026-04-17 | +| A2A-SIN-Beeper | scaffold | 35 KB | TypeScript | 2026-04-17 | +| A2A-SIN-BlueBubbles | scaffold | 36 KB | JavaScript | 2026-04-17 | +| A2A-SIN-Box-Storage | alive | 46 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Chatroom | alive | 52 KB | Shell | 2026-04-17 | +| A2A-SIN-CI-CD | scaffold | 31 KB | TypeScript | 2026-04-17 | +| A2A-SIN-ClaimWriter | alive | 60 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Code-AI | archived | 60 KB | Shell | 2026-04-18 | +| A2A-SIN-Code-Backend | scaffold | 10 KB | Python | 2026-04-16 | +| A2A-SIN-Code-Command | scaffold | 9 KB | Python | 2026-04-16 | +| A2A-SIN-Code-DataScience | scaffold | 30 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Code-DevOps | scaffold | 30 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Code-Frontend | scaffold | 9 KB | Python | 2026-04-16 | +| A2A-SIN-Code-Fullstack | scaffold | 9 KB | Python | 2026-04-16 | +| A2A-SIN-Code-GitLab-LogsCenter | scaffold | 33 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Code-Plugin | scaffold | 9 KB | Python | 2026-04-16 | +| A2A-SIN-Code-Tool | scaffold | 9 KB | Python | 2026-04-16 | +| A2A-SIN-Coding-CEO | archived | 79 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Community | alive | 142 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Compliance | alive | 60 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Contract | alive | 62 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Damages | alive | 61 KB | TypeScript | 2026-04-17 | +| A2A-SIN-DevTo | alive | 103 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Discord | alive | 25869 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Email | alive | 58 KB | Shell | 2026-04-18 | +| A2A-SIN-Evidence | alive | 61 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Facebook | dead | 0 KB | — | 2026-04-16 | +| A2A-SIN-Feishu | scaffold | 36 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Github-Action | alive | 104 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Google-Apps | alive | 115 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Google-Chat | alive | 60 KB | Shell | 2026-04-18 | +| A2A-SIN-HackerNews | alive | 104 KB | TypeScript | 2026-04-18 | +| A2A-SIN-IndieHackers | alive | 172 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Instagram | alive | 55 KB | Shell | 2026-04-18 | +| A2A-SIN-IRC | scaffold | 34 KB | TypeScript | 2026-04-17 | +| A2A-SIN-LINE | alive | 50 KB | Shell | 2026-04-17 | +| A2A-SIN-LinkedIn | alive | 101 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Lobsters | alive | 79 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Matrix | scaffold | 38 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Mattermost | dead | 0 KB | — | 2026-04-16 | +| A2A-SIN-Medium | scaffold | 34 KB | Shell | 2026-04-18 | +| A2A-SIN-Medusa | alive | 53 KB | Python | 2026-04-14 | +| A2A-SIN-Mindrift | alive | 60 KB | Shell | 2026-04-18 | +| A2A-SIN-MiroFish | alive | 6692 KB | Python | 2026-04-16 | +| A2A-SIN-N8N | alive | 76 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Nintendo | scaffold | 34 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Nostr | alive | 54 KB | Shell | 2026-04-18 | +| A2A-SIN-Opal | alive | 78 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Paragraph | alive | 73 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Patents | alive | 107 KB | Python | 2026-04-17 | +| A2A-SIN-PlayStation | scaffold | 36 KB | JavaScript | 2026-04-17 | +| A2A-SIN-ProductHunt | alive | 102 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Quora | alive | 133 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Reddit | alive | 71 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Research | alive | 56 KB | Shell | 2026-04-17 | +| A2A-SIN-RocketChat | dead | 0 KB | — | 2026-04-16 | +| A2A-SIN-Security-AI | scaffold | 37 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Security-Audit | scaffold | 40 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Security-Auth | scaffold | 37 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Security-Cloud | scaffold | 37 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Security-Crypto | scaffold | 37 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Security-Exploit | scaffold | 36 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Security-Forensics | scaffold | 36 KB | Shell | 2026-04-17 | +| A2A-SIN-Security-Fuzz | alive | 66 KB | Shell | 2026-04-17 | +| A2A-SIN-Security-IoT | scaffold | 37 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Security-Malware | scaffold | 37 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Security-Mobile | alive | 41 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Security-Network | alive | 41 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Security-Recon | alive | 50 KB | Shell | 2026-04-17 | +| A2A-SIN-Security-RedTeam | scaffold | 37 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Security-Social | alive | 41 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Security-Web | scaffold | 36 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Shop-Finance | alive | 47 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Shop-Logistic | scaffold | 38 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Signal | scaffold | 38 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Slack | dead | 0 KB | — | 2026-04-16 | +| A2A-SIN-Slashdot | alive | 79 KB | TypeScript | 2026-04-18 | +| A2A-SIN-SMS | scaffold | 36 KB | TypeScript | 2026-04-18 | +| A2A-SIN-StackOverflow | alive | 130 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Storage | scaffold | 38 KB | Shell | 2026-04-17 | +| A2A-SIN-Stripe | alive | 65 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Summary | alive | 61 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Tax | alive | 79 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Team-MoneyEarners | scaffold | 34 KB | TypeScript | 2026-04-17 | +| A2A-SIN-Team-MyCompany | scaffold | 12 KB | Shell | 2026-04-18 | +| A2A-SIN-Teams | alive | 54 KB | Shell | 2026-04-18 | +| A2A-SIN-Telegram | alive | 104 KB | TypeScript | 2026-04-18 | +| A2A-SIN-TikTok | scaffold | 33 KB | Shell | 2026-04-17 | +| A2A-SIN-TikTok-Shop | alive | 94 KB | TypeScript | 2026-04-18 | +| A2A-SIN-WebChat | scaffold | 38 KB | TypeScript | 2026-04-18 | +| A2A-SIN-WeChat | alive | 52 KB | Shell | 2026-04-17 | +| A2A-SIN-WhatsApp | alive | 42 KB | Shell | 2026-04-18 | +| A2A-SIN-Worker-heypiggy | alive | 586 KB | Python | 2026-04-18 | +| A2A-SIN-Worker-Prolific | alive | 224 KB | Python | 2026-04-17 | +| A2A-SIN-X-Twitter | alive | 26160 KB | TypeScript | 2026-04-18 | +| A2A-SIN-Xbox | scaffold | 36 KB | TypeScript | 2026-04-17 | +| A2A-SIN-YouTube | scaffold | 36 KB | Shell | 2026-04-18 | +| A2A-SIN-Zoom | alive | 62 KB | Shell | 2026-04-18 | + +## Team-SIN-* (17) + +| Repo | Class | Size | Language | Last push | +|---|---|---:|---|---| +| Team-SIN-Apple | scaffold | 35 KB | TypeScript | 2026-04-17 | +| Team-SIN-Code-Backend | scaffold | 34 KB | JavaScript | 2026-04-17 | +| Team-SIN-Code-Core | alive | 57 KB | TypeScript | 2026-04-18 | +| Team-SIN-Code-CyberSec | scaffold | 34 KB | JavaScript | 2026-04-17 | +| Team-SIN-Code-Frontend | scaffold | 33 KB | JavaScript | 2026-04-17 | +| Team-SIN-Commerce | scaffold | 33 KB | TypeScript | 2026-04-17 | +| Team-SIN-Community | scaffold | 26 KB | Shell | 2026-04-17 | +| Team-SIN-Forum | scaffold | 32 KB | JavaScript | 2026-04-17 | +| Team-SIN-Google | scaffold | 34 KB | TypeScript | 2026-04-17 | +| Team-SIN-Infrastructure | scaffold | 33 KB | TypeScript | 2026-04-17 | +| Team-SIN-Legal | scaffold | 31 KB | JavaScript | 2026-04-17 | +| Team-SIN-Media-ComfyUI | scaffold | 34 KB | TypeScript | 2026-04-17 | +| Team-SIN-Media-Music | scaffold | 33 KB | TypeScript | 2026-04-17 | +| Team-SIN-Messaging | scaffold | 33 KB | JavaScript | 2026-04-17 | +| Team-SIN-Microsoft | scaffold | 30 KB | — | 2026-04-17 | +| Team-SIN-Research | scaffold | 30 KB | TypeScript | 2026-04-17 | +| Team-SIN-Social | scaffold | 32 KB | JavaScript | 2026-04-17 | + +## Core-SIN-* (1) + +| Repo | Class | Size | Language | Last push | +|---|---|---:|---|---| +| Core-SIN-Control-Plane | alive | 166 KB | JavaScript | 2026-04-18 | + +## Infra-SIN-* (6) + +| Repo | Class | Size | Language | Last push | +|---|---|---:|---|---| +| Infra-SIN-Dev-Setup | meta | 181 KB | Shell | 2026-04-18 | +| Infra-SIN-Doc-Templates | meta | 10 KB | Shell | 2026-04-17 | +| Infra-SIN-Docker-Empire | meta | 162 KB | JavaScript | 2026-04-17 | +| Infra-SIN-Docs-Standard | meta | 44 KB | Shell | 2026-04-17 | +| Infra-SIN-Global-Brain | meta | 788 KB | JavaScript | 2026-04-18 | +| Infra-SIN-OpenCode-Stack | meta | 3873 KB | Python | 2026-04-18 | + +## Biz-SIN-* (7) + +| Repo | Class | Size | Language | Last push | +|---|---|---:|---|---| +| Biz-SIN-Blog-Posts | meta | 495 KB | Shell | 2026-04-17 | +| Biz-SIN-Blueprints | meta | 92 KB | Shell | 2026-04-17 | +| Biz-SIN-Competitor-Tracker | meta | 47 KB | Python | 2026-04-17 | +| Biz-SIN-Jobs | meta | 88 KB | Python | 2026-04-17 | +| Biz-SIN-Ledger | meta | 34 KB | Shell | 2026-04-17 | +| Biz-SIN-Marketing | meta | 7269 KB | Python | 2026-04-18 | +| Biz-SIN-Patents | meta | 2420 KB | Shell | 2026-04-17 | + +## Template-SIN-* (4) + +| Repo | Class | Size | Language | Last push | +|---|---|---:|---|---| +| Template-SIN-Agent | meta | 127 KB | JavaScript | 2026-04-18 | +| Template-SIN-Agent-Worker | meta | 4 KB | Shell | 2026-04-14 | +| Template-SIN-Team | meta | 53 KB | TypeScript | 2026-04-17 | +| Template-SIN-Worker | meta | 47 KB | TypeScript | 2026-04-17 | + +## website-* (4) + +| Repo | Class | Size | Language | Last push | +|---|---|---:|---|---| +| website-blog.opensin.ai | meta | 41471 KB | TypeScript | 2026-04-18 | +| website-my-opensin-ai | meta | 14 KB | HTML | 2026-04-17 | +| website-my.opensin.ai | meta | 2067 KB | TypeScript | 2026-04-18 | +| website-opensin.ai | meta | 765 KB | TypeScript | 2026-04-18 | + +## OpenSIN* (30) + +| Repo | Class | Size | Language | Last push | +|---|---|---:|---|---| +| OpenSIN | alive | 836240 KB | Python | 2026-04-18 | +| OpenSIN-2Captcha-Worker | archived | 134 KB | Python | 2026-04-04 | +| OpenSIN-Agent-Backend | archived | 32 KB | TypeScript | 2026-04-04 | +| OpenSIN-Agent-Forge-Skill-Alt | archived | 20 KB | Shell | 2026-04-04 | +| OpenSIN-Agent-Frontend | archived | 32 KB | TypeScript | 2026-04-04 | +| OpenSIN-Authenticator | archived | 138 KB | TypeScript | 2026-04-04 | +| OpenSIN-Authenticator-Legacy | archived | 135 KB | TypeScript | 2026-04-04 | +| OpenSIN-backend | alive | 975807 KB | TypeScript | 2026-04-18 | +| OpenSIN-Bridge | alive | 1519 KB | JavaScript | 2026-04-18 | +| OpenSIN-Cloudflare | archived | 43 KB | TypeScript | 2026-04-04 | +| OpenSIN-Code | alive | 366181 KB | TypeScript | 2026-04-18 | +| OpenSIN-Code-Database | archived | 23 KB | JavaScript | 2026-04-04 | +| OpenSIN-Code-Integration | archived | 23 KB | JavaScript | 2026-04-04 | +| OpenSIN-Code-Security | archived | 19 KB | JavaScript | 2026-04-04 | +| OpenSIN-Designer | archived | 31 KB | TypeScript | 2026-04-04 | +| OpenSIN-documentation | meta | 50106 KB | Python | 2026-04-18 | +| OpenSIN-github-apps | scaffold | 9 KB | — | 2026-04-14 | +| OpenSIN-GitHub-Issues | archived | 98 KB | TypeScript | 2026-04-04 | +| OpenSIN-iMessage | archived | 19 KB | JavaScript | 2026-04-04 | +| OpenSIN-Issues | archived | 30 KB | TypeScript | 2026-04-04 | +| OpenSIN-Neural-Bus | alive | 118 KB | TypeScript | 2026-04-18 | +| OpenSIN-onboarding | archived | 45 KB | Shell | 2026-04-18 | +| OpenSIN-OracleCloud-MCP | archived | 19 KB | JavaScript | 2026-04-04 | +| OpenSIN-overview | meta | 159 KB | Shell | 2026-04-18 | +| OpenSIN-PasswordManager | archived | 61 KB | TypeScript | 2026-04-04 | +| OpenSIN-Skills | alive | 6284 KB | Python | 2026-04-18 | +| OpenSIN-Storage | archived | 43 KB | TypeScript | 2026-04-06 | +| OpenSIN-Supabase | alive | 42 KB | TypeScript | 2026-04-18 | +| OpenSIN-Tester | archived | 30 KB | TypeScript | 2026-04-04 | +| OpenSIN-WebApp | alive | 59077 KB | TypeScript | 2026-04-18 | + +## opensin-* (3) + +| Repo | Class | Size | Language | Last push | +|---|---|---:|---|---| +| opensin-ai-cli | alive | 262 KB | Rust | 2026-04-18 | +| opensin-ai-code | archived | 57 KB | Python | 2026-04-18 | +| opensin-ai-platform | alive | 10926 KB | Shell | 2026-04-18 | + +## misc (24) + +| Repo | Class | Size | Language | Last push | +|---|---|---:|---|---| +| .github | alive | 43 KB | — | 2026-04-18 | +| ai-agent-system | alive | 177 KB | TypeScript | 2026-04-18 | +| awesome-opensin | alive | 273 KB | JavaScript | 2026-04-17 | +| CLI-SIN-Repo-Sync | alive | 46 KB | TypeScript | 2026-04-18 | +| CLI-SIN-TelegramBot | alive | 74 KB | Python | 2026-04-17 | +| cloud-backend | archived | 4 KB | JavaScript | 2026-04-03 | +| documentation | archived | 358 KB | Shell | 2026-04-04 | +| MCP-SIN-chrome-extension | scaffold | 7 KB | Shell | 2026-04-17 | +| MCP-SIN-computer-use | scaffold | 9 KB | Shell | 2026-04-14 | +| MCP-SIN-in-chrome | scaffold | 9 KB | Shell | 2026-04-14 | +| MCP-SIN-mcp-gateway | scaffold | 9 KB | Shell | 2026-04-14 | +| MCP-SIN-memory | scaffold | 9 KB | Shell | 2026-04-14 | +| MCP-SIN-platform-auth | scaffold | 9 KB | Shell | 2026-04-14 | +| MCP-SIN-usebrowser | scaffold | 9 KB | Shell | 2026-04-14 | +| opensin_api | scaffold | 3 KB | TypeScript | 2026-04-18 | +| opensin_sdk | scaffold | 3 KB | TypeScript | 2026-04-18 | +| Plugin-SIN-Biometrics | scaffold | 39 KB | TypeScript | 2026-04-17 | +| Plugin-SIN-Swarm | alive | 76 KB | TypeScript | 2026-04-17 | +| sin-github-action | scaffold | 13 KB | Shell | 2026-04-16 | +| SIN-InkogniFlow | alive | 42 KB | Python | 2026-04-14 | +| Skill-SIN-Agent-Forge | alive | 75 KB | JavaScript | 2026-04-17 | +| Skill-SIN-Create-TelegramBot | alive | 56 KB | TypeScript | 2026-04-17 | +| Skill-SIN-Enterprise-Deep-Debug | scaffold | 36 KB | Shell | 2026-04-17 | +| Template-A2A-SIN-TelegramBot | scaffold | 21 KB | Shell | 2026-04-17 | + +## Action items + +- **Archive immediately** (4): `A2A-SIN-Facebook`, `A2A-SIN-Mattermost`, `A2A-SIN-RocketChat`, `A2A-SIN-Slack` +- **Decide case-by-case** (69): each scaffold either gets real content in the next sprint or is archived. See individual tracking issues per repo. + +--- + +Re-run this audit any time the repo topology changes. The output lives at `registry/SCAFFOLD_AUDIT.md` and is the authoritative answer to 'is repo X alive?'. diff --git a/schemas/README.md b/schemas/README.md new file mode 100644 index 0000000..c603d09 --- /dev/null +++ b/schemas/README.md @@ -0,0 +1,39 @@ +# Schemas + +JSON Schemas for cross-repo data contracts in OpenSIN-AI. + +## `team.schema.json` + +Schema for `team.json`, the marketplace manifest that lives in every `Team-SIN-*` repo. Decided in Wave 4 — Option A (see [PRODUCT-VISION.md § Marketplace](../PRODUCT-VISION.md#marketplace--entschieden-option-a-metadata-manifeste)). + +### Contract + +- **One file per team.** `Team-SIN-*/team.json` is the SSOT for that team's composition, marketing copy, pricing, and required permissions. +- **Aggregated downstream.** A CI job in `Infra-SIN-OpenCode-Stack` reads all 17 team manifests and produces `oh-my-sin.json`, which the marketplace frontend at `website-my.opensin.ai/marketplace/` consumes. +- **Agents stay in `A2A-SIN-*`.** `team.json` only references agent IDs — no code is duplicated. +- **Stripe products** are created server-side and their IDs are committed back into `team.json` once the team goes live. + +### Validating a team manifest + +```bash +# With ajv (npm i -g ajv-cli) +ajv validate -s schemas/team.schema.json -d path/to/Team-SIN-Commerce.json --spec=draft2020 + +# Or in Node +node -e " + const Ajv = require('ajv/dist/2020'); + const ajv = new Ajv({allErrors: true}); + const validate = ajv.compile(require('./schemas/team.schema.json')); + const ok = validate(require('./templates/teams/Team-SIN-Commerce.json')); + if (!ok) { console.error(validate.errors); process.exit(1); } + console.log('valid'); +" +``` + +### Reference manifests + +All 17 current team manifests live in [`../templates/teams/`](../templates/teams/). The gold standard is [`Team-SIN-Commerce.json`](../templates/teams/Team-SIN-Commerce.json) — use it as the template when adding a new team. + +### When to bump `$schema_version` + +Only for breaking changes (renamed/removed required fields). Additive changes (new optional fields, new enum values) stay at the same `$schema_version`. diff --git a/schemas/team.schema.json b/schemas/team.schema.json new file mode 100644 index 0000000..866fde8 --- /dev/null +++ b/schemas/team.schema.json @@ -0,0 +1,171 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://github.com/OpenSIN-AI/OpenSIN-overview/blob/main/schemas/team.schema.json", + "title": "OpenSIN Team Manifest", + "description": "Metadata manifest for a Team-SIN-* marketplace bundle. One file per Team-SIN-* repo. Aggregated into oh-my-sin.json for the marketplace frontend. Decided in Wave 4 — Option A.", + "type": "object", + "required": ["$schema_version", "id", "name", "slug", "tier", "status", "marketing", "agents", "pricing"], + "additionalProperties": false, + "properties": { + "$schema_version": { + "type": "string", + "const": "1.0.0", + "description": "Manifest format version. Bump requires updating this schema." + }, + "id": { + "type": "string", + "pattern": "^Team-SIN-[A-Za-z][A-Za-z0-9-]*$", + "description": "Canonical repo name. Must match the GitHub repo under OpenSIN-AI/." + }, + "name": { + "type": "string", + "minLength": 3, + "maxLength": 60, + "description": "Display name in the marketplace card." + }, + "slug": { + "type": "string", + "pattern": "^[a-z][a-z0-9-]{2,40}$", + "description": "URL slug for my.opensin.ai/marketplace/." + }, + "tier": { + "type": "string", + "enum": ["marketplace", "core-included", "enterprise"], + "description": "marketplace = paid add-on Mini-Abo. core-included = shipped free in every Pro plan. enterprise = contact-sales only." + }, + "status": { + "type": "string", + "enum": ["stable", "beta", "alpha", "coming-soon", "deprecated"], + "description": "Lifecycle stage. Drives marketplace UI badges and whether the team is listable." + }, + "tagline": { + "type": "string", + "maxLength": 140, + "description": "One-line pitch shown on the marketplace card." + }, + "marketing": { + "type": "object", + "required": ["summary", "bullets"], + "additionalProperties": false, + "properties": { + "summary": { + "type": "string", + "minLength": 40, + "maxLength": 600, + "description": "Paragraph-length description for the product page." + }, + "bullets": { + "type": "array", + "minItems": 3, + "maxItems": 8, + "items": {"type": "string", "maxLength": 180}, + "description": "Feature bullets for the product page." + }, + "screenshot": { + "type": "string", + "description": "Relative path inside the Team-SIN-* repo, e.g. assets/screenshot.png. Optional." + }, + "demo_video": { + "type": "string", + "format": "uri", + "description": "YouTube/Loom demo URL. Optional." + } + } + }, + "agents": { + "type": "array", + "minItems": 0, + "description": "A2A-SIN-* agent repos that belong to this team. Source of truth for which capabilities the buyer unlocks. Empty only when status=coming-soon.", + "items": { + "type": "object", + "required": ["id", "role"], + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "pattern": "^A2A-SIN-[A-Za-z][A-Za-z0-9-]*$", + "description": "Canonical A2A-SIN-* repo name. Must exist and not be archived." + }, + "role": { + "type": "string", + "enum": ["primary", "supporting", "optional"], + "description": "primary = flagship capability. supporting = required co-agent. optional = extra capability the user can toggle." + }, + "summary": { + "type": "string", + "maxLength": 180, + "description": "One-line role inside this team (not the agent's general purpose)." + } + } + } + }, + "pricing": { + "type": "object", + "required": ["model"], + "additionalProperties": false, + "properties": { + "model": { + "type": "string", + "enum": ["free-with-pro", "monthly-addon", "metered", "enterprise-quote"], + "description": "free-with-pro = unlocked for any Pro tier. monthly-addon = flat Mini-Abo. metered = usage-priced. enterprise-quote = contact sales." + }, + "monthly_addon_eur": { + "type": "number", + "minimum": 0, + "maximum": 999, + "description": "Price for model=monthly-addon. Ignored otherwise." + }, + "metered_unit": { + "type": "string", + "description": "e.g. \"per 1k tokens\", \"per run\". For model=metered." + }, + "metered_unit_price_eur": { + "type": "number", + "minimum": 0, + "description": "Price per metered_unit." + }, + "stripe_product_id": { + "type": "string", + "pattern": "^prod_[A-Za-z0-9]+$", + "description": "Stripe product id created for this team. Optional during beta." + } + } + }, + "permissions": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "net:cloud-apis", + "spend:llm-budget", + "spend:user-managed-credentials", + "filesystem:user-workspace", + "shell:user-workspace" + ] + }, + "description": "Capabilities the team's agents require. Shown on the purchase page for transparency." + }, + "budgets": { + "type": "object", + "additionalProperties": false, + "properties": { + "default_monthly_usd_cap": {"type": "number", "minimum": 0}, + "per_run_usd_cap": {"type": "number", "minimum": 0} + }, + "description": "Recommended default spend limits; user can override in chat.opensin.ai." + }, + "provenance": { + "type": "object", + "required": ["decided_in", "decided_at"], + "additionalProperties": false, + "properties": { + "decided_in": {"type": "string", "description": "PR or doc anchor that locked this team's definition."}, + "decided_at": {"type": "string", "format": "date"}, + "owner_team": {"type": "string", "description": "GitHub team handle owning the manifest."} + } + } + } +} diff --git a/scripts/audit-repos.js b/scripts/audit-repos.js new file mode 100644 index 0000000..f405724 --- /dev/null +++ b/scripts/audit-repos.js @@ -0,0 +1,197 @@ +#!/usr/bin/env node +/** + * OpenSIN-AI repo audit. + * + * Queries the GitHub API via `gh repo list` (must be authenticated) and + * classifies every non-archived repo in the org as one of: + * - alive — real code, recent activity + * - scaffold — small repo with placeholder content + * - dead — 0 KB or equivalent, never filled in + * - canonical — listed in platforms/canonical-repos.json as canonical + * - meta — non-code meta repo (Infra/Template/Biz/website/OpenSIN-overview) + * + * Writes registry/SCAFFOLD_AUDIT.md with a grouped markdown table. + * + * Usage: + * node scripts/audit-repos.js + * + * Requires: gh CLI authenticated with read access to OpenSIN-AI. + */ + +import { execSync } from "node:child_process" +import fs from "node:fs" +import path from "node:path" + +const ORG = "OpenSIN-AI" +const OUT = "registry/SCAFFOLD_AUDIT.md" + +// Thresholds (in KB) +const DEAD_KB_MAX = 1 // 0 KB only +const SCAFFOLD_KB_MAX = 40 // <=40 KB without real-content markers + +function sh(cmd) { + return execSync(cmd, { encoding: "utf8", maxBuffer: 64 * 1024 * 1024 }) +} + +function listRepos() { + const raw = sh( + `gh repo list ${ORG} --limit 400 --json name,description,diskUsage,pushedAt,isArchived,primaryLanguage`, + ) + return JSON.parse(raw) +} + +function readCanonical() { + const p = path.join("platforms", "canonical-repos.json") + if (!fs.existsSync(p)) return new Set() + const doc = JSON.parse(fs.readFileSync(p, "utf8")) + const names = new Set() + const canon = doc?.canonical_repos || {} + for (const section of Object.values(canon)) { + if (!section) continue + if (Array.isArray(section)) { + for (const e of section) if (e?.name) names.add(e.name) + } else if (typeof section === "object") { + for (const e of Object.values(section)) { + if (Array.isArray(e)) for (const sub of e) if (sub?.name) names.add(sub.name) + else if (e?.name) names.add(e.name) + } + } + } + return names +} + +function classify(repo, canonicalNames) { + const name = repo.name + const kb = Math.round((repo.diskUsage || 0)) + const archived = repo.isArchived + const isMeta = + name.startsWith("Infra-SIN-") || + name.startsWith("Template-SIN-") || + name.startsWith("Biz-SIN-") || + name.startsWith("website-") || + name === "OpenSIN-overview" || + name === "OpenSIN-documentation" + + if (archived) return "archived" + if (canonicalNames.has(name)) return "canonical" + if (isMeta) return "meta" + if (kb <= DEAD_KB_MAX) return "dead" + if (kb <= SCAFFOLD_KB_MAX) return "scaffold" + return "alive" +} + +function groupOf(name) { + if (name.startsWith("A2A-SIN-")) return "A2A-SIN-*" + if (name.startsWith("Team-SIN-")) return "Team-SIN-*" + if (name.startsWith("Core-SIN-")) return "Core-SIN-*" + if (name.startsWith("Infra-SIN-")) return "Infra-SIN-*" + if (name.startsWith("Biz-SIN-")) return "Biz-SIN-*" + if (name.startsWith("Template-SIN-")) return "Template-SIN-*" + if (name.startsWith("website-")) return "website-*" + if (name.startsWith("OpenSIN")) return "OpenSIN*" + if (name.startsWith("opensin-")) return "opensin-*" + return "misc" +} + +function fmt(repo, cls) { + const kb = Math.round(repo.diskUsage || 0) + const lang = repo.primaryLanguage?.name || "—" + const pushed = (repo.pushedAt || "").split("T")[0] || "—" + return `| ${repo.name} | ${cls} | ${kb} KB | ${lang} | ${pushed} |` +} + +function main() { + const repos = listRepos() + const canonicalNames = readCanonical() + + const rows = repos.map((r) => ({ repo: r, cls: classify(r, canonicalNames), group: groupOf(r.name) })) + + const summary = rows.reduce((acc, r) => { + acc[r.cls] = (acc[r.cls] || 0) + 1 + return acc + }, {}) + + const groups = {} + for (const r of rows) { + ;(groups[r.group] ||= []).push(r) + } + + const now = new Date().toISOString().split("T")[0] + const lines = [] + lines.push(`# Scaffold + Dead Repo Audit`) + lines.push("") + lines.push(`Generated by \`scripts/audit-repos.js\` on ${now}.`) + lines.push("") + lines.push(`**Totals:** ${repos.length} repos`) + lines.push("") + lines.push("| Classification | Count |") + lines.push("|---|---:|") + for (const [k, v] of Object.entries(summary).sort((a, b) => b[1] - a[1])) { + lines.push(`| ${k} | ${v} |`) + } + lines.push("") + + lines.push("## Classification rules") + lines.push("") + lines.push("- **archived** — already archived on GitHub.") + lines.push( + "- **canonical** — listed in `platforms/canonical-repos.json` under `canonical_repos.*`.", + ) + lines.push( + "- **meta** — non-code repos: `Infra-SIN-*`, `Template-SIN-*`, `Biz-SIN-*`, `website-*`, `OpenSIN-overview`, `OpenSIN-documentation`.", + ) + lines.push("- **dead** — disk usage ≤ 1 KB (empty repo, never filled in). Action: archive.") + lines.push( + "- **scaffold** — disk usage ≤ 40 KB and not in one of the above groups. Action: either promote (add real code) or archive.", + ) + lines.push("- **alive** — anything else. No action needed.") + lines.push("") + + const groupOrder = [ + "A2A-SIN-*", + "Team-SIN-*", + "Core-SIN-*", + "Infra-SIN-*", + "Biz-SIN-*", + "Template-SIN-*", + "website-*", + "OpenSIN*", + "opensin-*", + "misc", + ] + + for (const g of groupOrder) { + const entries = groups[g] + if (!entries || entries.length === 0) continue + lines.push(`## ${g} (${entries.length})`) + lines.push("") + lines.push("| Repo | Class | Size | Language | Last push |") + lines.push("|---|---|---:|---|---|") + entries + .sort((a, b) => a.repo.name.localeCompare(b.repo.name)) + .forEach((r) => lines.push(fmt(r.repo, r.cls))) + lines.push("") + } + + lines.push("## Action items") + lines.push("") + const dead = rows.filter((r) => r.cls === "dead").map((r) => r.repo.name) + const scaffold = rows.filter((r) => r.cls === "scaffold").map((r) => r.repo.name) + lines.push(`- **Archive immediately** (${dead.length}): ${dead.map((n) => `\`${n}\``).join(", ") || "—"}`) + lines.push( + `- **Decide case-by-case** (${scaffold.length}): each scaffold either gets real content in the next sprint or is archived. See individual tracking issues per repo.`, + ) + lines.push("") + lines.push("---") + lines.push("") + lines.push( + "Re-run this audit any time the repo topology changes. The output lives at `registry/SCAFFOLD_AUDIT.md` and is the authoritative answer to 'is repo X alive?'.", + ) + + fs.mkdirSync(path.dirname(OUT), { recursive: true }) + fs.writeFileSync(OUT, lines.join("\n") + "\n") + console.log(`[audit] wrote ${OUT}`) + console.log(`[audit] summary:`, summary) +} + +main() diff --git a/scripts/push-team-manifests.js b/scripts/push-team-manifests.js new file mode 100644 index 0000000..abe27ea --- /dev/null +++ b/scripts/push-team-manifests.js @@ -0,0 +1,207 @@ +#!/usr/bin/env node +/** + * Push team manifests from templates/teams/ into each Team-SIN-* repo. + * + * For each templates/teams/Team-SIN-.json: + * 1. PUT /repos/{org}/Team-SIN-/contents/team.json (create or update) + * 2. PUT /repos/{org}/Team-SIN-/contents/README.md (only if no README exists yet) + * + * Idempotent: if team.json already exists with the same content, skips. + * Uses gh CLI so auth comes from the caller environment. + * + * Usage: + * node scripts/push-team-manifests.js # real push + * node scripts/push-team-manifests.js --dry # show what would change + */ + +import { execFileSync } from "node:child_process" +import fs from "node:fs" +import path from "node:path" +import crypto from "node:crypto" + +const ORG = "OpenSIN-AI" +const DRY = process.argv.includes("--dry") +const SRC_DIR = "templates/teams" + +function gh(args, { input } = {}) { + try { + const opts = { encoding: "utf8", maxBuffer: 32 * 1024 * 1024 } + if (input !== undefined) opts.input = input + return execFileSync("gh", args, opts) + } catch (e) { + const stderr = e.stderr?.toString?.() || "" + const stdout = e.stdout?.toString?.() || "" + throw new Error(`gh ${args.join(" ")} failed:\n${stderr || stdout || e.message}`) + } +} + +function b64(s) { + return Buffer.from(s, "utf8").toString("base64") +} + +function getExistingFile(repo, filePath) { + try { + const res = gh(["api", `repos/${ORG}/${repo}/contents/${filePath}`]) + return JSON.parse(res) + } catch (e) { + if (e.message.includes("404")) return null + throw e + } +} + +function putFile(repo, filePath, content, message, sha = null) { + const payload = { message, content: b64(content) } + if (sha) payload.sha = sha + const args = ["api", "--method", "PUT", `repos/${ORG}/${repo}/contents/${filePath}`, "--input", "-"] + return JSON.parse(gh(args, { input: JSON.stringify(payload) })) +} + +function readmeHeader(manifest) { + const bullets = manifest.marketing.bullets.map((b) => `- ${b}`).join("\n") + const agents = manifest.agents + .map( + (a) => + `- **${a.id}** — ${a.role}${a.summary ? ": " + a.summary : ""}`, + ) + .join("\n") + const priceLine = + manifest.pricing.model === "monthly-addon" + ? `**Price:** €${manifest.pricing.monthly_addon_eur}/mo (addon on top of My.OpenSIN Pro)` + : manifest.pricing.model === "free-with-pro" + ? "**Price:** included in every My.OpenSIN Pro plan" + : manifest.pricing.model === "enterprise-quote" + ? "**Price:** contact sales (enterprise quote)" + : `**Price model:** ${manifest.pricing.model}` + return `# ${manifest.name} + +> **${manifest.tagline || ""}** + +${priceLine} + +**Status:** \`${manifest.status}\` +**Tier:** \`${manifest.tier}\` +**Slug (marketplace URL):** \`my.opensin.ai/marketplace/${manifest.slug}\` + +## What it does + +${manifest.marketing.summary} + +## Highlights + +${bullets} + +## Agents + +${agents || "_(no agents assigned yet — status: coming-soon)_"} + +## How this repo works + +This is a **marketplace manifest repo**, not a code package. The source of truth for \`team.json\` lives in [\`OpenSIN-AI/OpenSIN-overview/templates/teams/${manifest.id}.json\`](https://github.com/OpenSIN-AI/OpenSIN-overview/blob/main/templates/teams/${manifest.id}.json). + +To change this team: +1. PR against [\`OpenSIN-AI/OpenSIN-overview\`](https://github.com/OpenSIN-AI/OpenSIN-overview) editing \`templates/teams/${manifest.id}.json\`. +2. After merge, a maintainer runs \`scripts/push-team-manifests.js\` which updates the \`team.json\` in this repo. + +Do **not** edit \`team.json\` directly in this repo — it will be overwritten on the next sync. + +## See also + +- [OpenSIN-overview START-HERE.md](https://github.com/OpenSIN-AI/OpenSIN-overview/blob/main/START-HERE.md) +- [PRODUCT-VISION.md](https://github.com/OpenSIN-AI/OpenSIN-overview/blob/main/PRODUCT-VISION.md) +- [schemas/team.schema.json](https://github.com/OpenSIN-AI/OpenSIN-overview/blob/main/schemas/team.schema.json) +` +} + +async function main() { + const files = fs.readdirSync(SRC_DIR).filter((f) => f.startsWith("Team-SIN-") && f.endsWith(".json")) + if (files.length === 0) throw new Error(`no team manifests found in ${SRC_DIR}`) + + const report = { pushed: [], skipped: [], readmes: [], errors: [] } + + for (const file of files) { + const manifestPath = path.join(SRC_DIR, file) + const raw = fs.readFileSync(manifestPath, "utf8") + const manifest = JSON.parse(raw) + const repo = manifest.id + + // 1. team.json + try { + const existing = getExistingFile(repo, "team.json") + const existingContent = existing + ? Buffer.from(existing.content, "base64").toString("utf8") + : null + const existingHash = existingContent + ? crypto.createHash("sha256").update(existingContent).digest("hex") + : null + const newHash = crypto.createHash("sha256").update(raw).digest("hex") + + if (existingHash === newHash) { + report.skipped.push(`${repo}/team.json (identical)`) + } else if (DRY) { + report.pushed.push(`${repo}/team.json (DRY — would ${existing ? "update" : "create"})`) + } else { + putFile( + repo, + "team.json", + raw, + `chore(manifest): sync team.json from OpenSIN-overview (${manifest.status})`, + existing?.sha, + ) + report.pushed.push(`${repo}/team.json (${existing ? "updated" : "created"})`) + } + } catch (e) { + report.errors.push(`${repo}/team.json: ${e.message.slice(0, 200)}`) + continue + } + + // 2. README header — only if README is missing or obviously scaffold + try { + const existing = getExistingFile(repo, "README.md") + const existingContent = existing + ? Buffer.from(existing.content, "base64").toString("utf8") + : "" + const shouldWriteReadme = + !existing || + existingContent.trim().length < 80 || + /^#\s*team-sin-/i.test(existingContent.trim()) || + existingContent.includes("No description, website, or topics provided.") + if (shouldWriteReadme) { + const md = readmeHeader(manifest) + if (DRY) { + report.readmes.push(`${repo}/README.md (DRY — would ${existing ? "replace scaffold README" : "create"})`) + } else { + putFile( + repo, + "README.md", + md, + `docs: seed marketplace README from manifest`, + existing?.sha, + ) + report.readmes.push(`${repo}/README.md (${existing ? "replaced scaffold" : "created"})`) + } + } else { + report.skipped.push(`${repo}/README.md (non-trivial README already present)`) + } + } catch (e) { + report.errors.push(`${repo}/README.md: ${e.message.slice(0, 200)}`) + } + } + + console.log("\n=== push-team-manifests report ===") + console.log(`Pushed: ${report.pushed.length}`) + report.pushed.forEach((x) => console.log(` ${x}`)) + console.log(`Readmes: ${report.readmes.length}`) + report.readmes.forEach((x) => console.log(` ${x}`)) + console.log(`Skipped: ${report.skipped.length}`) + report.skipped.forEach((x) => console.log(` ${x}`)) + if (report.errors.length) { + console.log(`Errors: ${report.errors.length}`) + report.errors.forEach((x) => console.log(` ${x}`)) + process.exit(1) + } +} + +main().catch((e) => { + console.error(e.message || e) + process.exit(1) +}) diff --git a/scripts/validate-team-manifests.js b/scripts/validate-team-manifests.js new file mode 100644 index 0000000..c267210 --- /dev/null +++ b/scripts/validate-team-manifests.js @@ -0,0 +1,82 @@ +#!/usr/bin/env node +/** + * Validate every templates/teams/*.json against schemas/team.schema.json. + * + * Zero dependencies on purpose: uses a tiny hand-rolled validator that + * understands just the subset of JSON Schema 2020-12 this schema uses. + * + * Exit code 0 = all valid, 1 = at least one failure. + */ + +import fs from "node:fs" +import path from "node:path" + +const schema = JSON.parse(fs.readFileSync("schemas/team.schema.json", "utf8")) +const dir = "templates/teams" + +function typeOf(v) { + if (v === null) return "null" + if (Array.isArray(v)) return "array" + return typeof v +} + +function validate(value, sub, pathStr, errs) { + if (!sub) return + if (sub.type && typeOf(value) !== sub.type) { + errs.push(`${pathStr}: expected ${sub.type}, got ${typeOf(value)}`) + return + } + if (sub.type === "object") { + for (const req of sub.required || []) { + if (!(req in (value || {}))) errs.push(`${pathStr}: missing required "${req}"`) + } + if (sub.additionalProperties === false) { + for (const k of Object.keys(value || {})) { + if (!(k in (sub.properties || {}))) errs.push(`${pathStr}: unexpected property "${k}"`) + } + } + for (const [k, propSchema] of Object.entries(sub.properties || {})) { + if (value && k in value) validate(value[k], propSchema, `${pathStr}.${k}`, errs) + } + } else if (sub.type === "array") { + if (typeof sub.minItems === "number" && value.length < sub.minItems) + errs.push(`${pathStr}: minItems ${sub.minItems}, got ${value.length}`) + if (typeof sub.maxItems === "number" && value.length > sub.maxItems) + errs.push(`${pathStr}: maxItems ${sub.maxItems}, got ${value.length}`) + if (sub.items) value.forEach((item, i) => validate(item, sub.items, `${pathStr}[${i}]`, errs)) + } else if (sub.type === "string") { + if (typeof sub.minLength === "number" && value.length < sub.minLength) + errs.push(`${pathStr}: minLength ${sub.minLength}, got ${value.length}`) + if (typeof sub.maxLength === "number" && value.length > sub.maxLength) + errs.push(`${pathStr}: maxLength ${sub.maxLength}, got ${value.length}`) + if (sub.pattern && !new RegExp(sub.pattern).test(value)) + errs.push(`${pathStr}: does not match pattern ${sub.pattern}`) + if (sub.enum && !sub.enum.includes(value)) + errs.push(`${pathStr}: "${value}" not in enum ${JSON.stringify(sub.enum)}`) + if (sub.const !== undefined && value !== sub.const) + errs.push(`${pathStr}: expected const "${sub.const}", got "${value}"`) + } else if (sub.type === "number") { + if (typeof sub.minimum === "number" && value < sub.minimum) + errs.push(`${pathStr}: minimum ${sub.minimum}, got ${value}`) + if (typeof sub.maximum === "number" && value > sub.maximum) + errs.push(`${pathStr}: maximum ${sub.maximum}, got ${value}`) + } +} + +let total = 0 +let failed = 0 +for (const f of fs.readdirSync(dir).filter((x) => x.endsWith(".json"))) { + total++ + const doc = JSON.parse(fs.readFileSync(path.join(dir, f), "utf8")) + const errs = [] + validate(doc, schema, f, errs) + if (errs.length) { + failed++ + console.error(`\n[INVALID] ${f}`) + errs.forEach((e) => console.error(` - ${e}`)) + } else { + console.log(`[ok] ${f}`) + } +} +console.log(`\n${total} file(s), ${total - failed} valid, ${failed} invalid`) +process.exit(failed ? 1 : 0) diff --git a/templates/teams/README.md b/templates/teams/README.md new file mode 100644 index 0000000..1a4b2ec --- /dev/null +++ b/templates/teams/README.md @@ -0,0 +1,40 @@ +# Team Manifests + +17 marketplace team manifests, one per `Team-SIN-*` repo. Source of truth is here in `OpenSIN-overview`; copies live in the individual team repos and are kept in sync by `scripts/push-team-manifests.js`. + +Each file conforms to [`../../schemas/team.schema.json`](../../schemas/team.schema.json). Decided in Wave 4 — see [`../../PRODUCT-VISION.md § Marketplace`](../../PRODUCT-VISION.md#marketplace--entschieden-option-a-metadata-manifeste). + +## Catalogue + +| Team | Tier | Status | Monthly addon (EUR) | Agents | +|---|---|---|---:|---:| +| Team-SIN-Apple | marketplace | beta | 9 | 12 | +| Team-SIN-Code-Backend | marketplace | alpha | 14 | 2 | +| Team-SIN-Code-Core | core-included | stable | — (free) | 3 | +| Team-SIN-Code-CyberSec | marketplace | beta | 29 | 16 | +| Team-SIN-Code-Frontend | marketplace | alpha | 14 | 2 | +| Team-SIN-Commerce | marketplace | beta | 19 | 5 | +| Team-SIN-Community | marketplace | beta | 9 | 3 | +| Team-SIN-Forum | marketplace | beta | 9 | 5 | +| Team-SIN-Google | marketplace | beta | 9 | 2 | +| Team-SIN-Infrastructure | marketplace | beta | 14 | 6 | +| Team-SIN-Legal | marketplace | beta | 29 | 7 | +| Team-SIN-Media-ComfyUI | marketplace | beta | 19 | 1 | +| Team-SIN-Media-Music | marketplace | coming-soon | 14 | 0 | +| Team-SIN-Messaging | marketplace | beta | 14 | 12 | +| Team-SIN-Microsoft | marketplace | alpha | 9 | 1 | +| Team-SIN-Research | marketplace | beta | 19 | 3 | +| Team-SIN-Social | marketplace | beta | 14 | 9 | + +## How to edit + +1. Edit `Team-SIN-.json` here. +2. Validate: `node scripts/validate-team-manifests.js` (or use any JSON Schema 2020-12 validator against `schemas/team.schema.json`). +3. PR against `OpenSIN-overview/main`. +4. After merge, a maintainer runs `scripts/push-team-manifests.js` to sync the change into the individual `Team-SIN-*` repos. + +## Why is the source of truth in `OpenSIN-overview` and not in each `Team-SIN-*` repo? + +Centralising here makes review easy (17 files in one PR), makes validation trivial (one schema, one CI check), and keeps the 17 team repos lightweight (they host marketing-copy snapshots, not logic). + +The individual `Team-SIN-*/team.json` files are **generated** from here. Treat the repo copy as read-only from a maintainer perspective. diff --git a/templates/teams/Team-SIN-Apple.json b/templates/teams/Team-SIN-Apple.json new file mode 100644 index 0000000..6676529 --- /dev/null +++ b/templates/teams/Team-SIN-Apple.json @@ -0,0 +1,54 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Apple", + "name": "Apple Team", + "slug": "apple", + "tier": "marketplace", + "status": "beta", + "tagline": "Deep Apple-ecosystem automation: Shortcuts, Mail, Calendar, Notes, and device control.", + "marketing": { + "summary": "Turns your Mac and iPhone into first-class agent surfaces. Drives Apple Shortcuts, manages Mail and Calendar, captures to Notes and Reminders, and even pilots system settings and Safari. Best-in-class for users who live on Apple hardware.", + "bullets": [ + "One-command Apple Shortcuts execution from any agent", + "Mail triage, Calendar scheduling and Contacts sync", + "Notes, Reminders and Notifications capture + retrieval", + "Photos and Files discovery across iCloud", + "Safari/WebKit automation for read-later and research", + "FaceTime call setup and SystemSettings toggles" + ] + }, + "agents": [ + {"id": "A2A-SIN-Apple-Shortcuts", "role": "primary", "summary": "Entry point — any Shortcut becomes an agent tool."}, + {"id": "A2A-SIN-Apple-Mail", "role": "primary", "summary": "Mail triage, drafting, search."}, + {"id": "A2A-SIN-Apple-Calendar-Contacts", "role": "primary", "summary": "Calendar scheduling + Contacts lookup."}, + {"id": "A2A-SIN-Apple-Notes", "role": "supporting", "summary": "Capture + search across Apple Notes."}, + {"id": "A2A-SIN-Apple-Reminders", "role": "supporting", "summary": "Task capture with location/time triggers."}, + {"id": "A2A-SIN-Apple-Notifications", "role": "supporting", "summary": "Notification stream read/dismiss."}, + {"id": "A2A-SIN-Apple-Mobile", "role": "supporting", "summary": "iPhone automation surface."}, + {"id": "A2A-SIN-Apple-DeviceControl", "role": "supporting", "summary": "Device-level control primitives."}, + {"id": "A2A-SIN-Apple-SystemSettings", "role": "supporting", "summary": "Toggle system settings programmatically."}, + {"id": "A2A-SIN-Apple-Safari-WebKit", "role": "supporting", "summary": "Safari/WebKit browsing and reading."}, + {"id": "A2A-SIN-Apple-Photos-Files", "role": "supporting", "summary": "Photos + Files search and staging."}, + {"id": "A2A-SIN-Apple-FaceTime", "role": "optional", "summary": "Programmatic FaceTime call setup."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 9 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "filesystem:user-workspace", + "shell:user-workspace" + ], + "budgets": { + "default_monthly_usd_cap": 20, + "per_run_usd_cap": 1 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/apple" + } +} diff --git a/templates/teams/Team-SIN-Code-Backend.json b/templates/teams/Team-SIN-Code-Backend.json new file mode 100644 index 0000000..955b3c3 --- /dev/null +++ b/templates/teams/Team-SIN-Code-Backend.json @@ -0,0 +1,45 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Code-Backend", + "name": "Code Backend Team", + "slug": "code-backend", + "tier": "marketplace", + "status": "alpha", + "tagline": "Backend-focused coding team — APIs, services, infra glue.", + "marketing": { + "summary": "Coding team focused on backend work: REST and GraphQL APIs, service-to-service orchestration, background jobs, and the glue that lives between a frontend and its databases. Complements Team-SIN-Code-Core (included free) and Team-SIN-Code-Frontend.", + "bullets": [ + "REST + GraphQL API authoring", + "Service-to-service integration and message queues", + "Background job design (BullMQ, Celery, RQ)", + "Database schema evolution and query optimisation", + "DevOps handoffs via Team-SIN-Code-Core" + ] + }, + "agents": [ + {"id": "A2A-SIN-Code-DevOps", "role": "supporting", "summary": "Shared with Code-Core for deploy handoffs."}, + {"id": "A2A-SIN-Code-Backend", "role": "optional", "summary": "Dedicated backend agent (currently scaffold — see SCAFFOLD_AUDIT.md)."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 14 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "net:cloud-apis", + "filesystem:user-workspace", + "shell:user-workspace", + "spend:llm-budget" + ], + "budgets": { + "default_monthly_usd_cap": 40, + "per_run_usd_cap": 3 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/code-core" + } +} diff --git a/templates/teams/Team-SIN-Code-Core.json b/templates/teams/Team-SIN-Code-Core.json new file mode 100644 index 0000000..ebd631d --- /dev/null +++ b/templates/teams/Team-SIN-Code-Core.json @@ -0,0 +1,45 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Code-Core", + "name": "Code Core Team", + "slug": "code-core", + "tier": "core-included", + "status": "stable", + "tagline": "The default coding squad included in every Pro plan.", + "marketing": { + "summary": "Shipped with every OpenSIN Pro plan at no extra cost. The Code Core Team handles day-to-day engineering work: data science notebooks, DevOps runbooks, GitLab repository operations, and log-centre investigations. This is the team you should not have to think about — it just works.", + "bullets": [ + "Data science notebooks with pandas/NumPy conventions", + "DevOps runbooks for container, deploy and rollback", + "GitLab repository operations: MRs, pipelines, registries", + "Log-centre investigations across Sentry / Loki / Datadog", + "Included free with Pro — no marketplace purchase needed" + ] + }, + "agents": [ + {"id": "A2A-SIN-Code-DataScience", "role": "primary", "summary": "Pandas/NumPy/Jupyter data work."}, + {"id": "A2A-SIN-Code-DevOps", "role": "primary", "summary": "Containers, deploys, rollbacks, IaC."}, + {"id": "A2A-SIN-Code-GitLab-LogsCenter", "role": "primary", "summary": "GitLab ops + log-centre triage."} + ], + "pricing": { + "model": "free-with-pro" + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "net:cloud-apis", + "filesystem:user-workspace", + "shell:user-workspace", + "spend:llm-budget" + ], + "budgets": { + "default_monthly_usd_cap": 60, + "per_run_usd_cap": 5 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/code-core" + } +} diff --git a/templates/teams/Team-SIN-Code-CyberSec.json b/templates/teams/Team-SIN-Code-CyberSec.json new file mode 100644 index 0000000..d07706d --- /dev/null +++ b/templates/teams/Team-SIN-Code-CyberSec.json @@ -0,0 +1,60 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Code-CyberSec", + "name": "CyberSec Team", + "slug": "cybersec", + "tier": "marketplace", + "status": "beta", + "tagline": "Offensive and defensive security squad: red-team, audit, forensics, malware, web, cloud.", + "marketing": { + "summary": "A 16-agent security squad covering the full stack — red-team playbooks, audit pipelines, forensics, crypto, malware analysis, fuzzing, mobile, IoT, network, cloud, web, social engineering, and automated recon. Runs inside your chat.opensin.ai tenant with explicit permission gates.", + "bullets": [ + "Red-team assistant for adversarial simulation", + "Audit pipelines with automated reporting", + "Forensics, malware triage and crypto review", + "Web, cloud, mobile, IoT, network coverage", + "Recon, fuzzing and exploit research workflows", + "Explicit per-run permission gates — nothing runs without opt-in" + ] + }, + "agents": [ + {"id": "A2A-SIN-Security-AI", "role": "primary", "summary": "ML-driven anomaly + triage."}, + {"id": "A2A-SIN-Security-Audit", "role": "primary", "summary": "Audit pipelines with reporting."}, + {"id": "A2A-SIN-Security-RedTeam", "role": "primary", "summary": "Adversarial simulation playbooks."}, + {"id": "A2A-SIN-Security-Auth", "role": "supporting", "summary": "AuthN/AuthZ review."}, + {"id": "A2A-SIN-Security-Cloud", "role": "supporting", "summary": "Cloud posture + IAM review."}, + {"id": "A2A-SIN-Security-Crypto", "role": "supporting", "summary": "Crypto primitives + key management review."}, + {"id": "A2A-SIN-Security-Exploit", "role": "supporting", "summary": "Exploit research and reproduction."}, + {"id": "A2A-SIN-Security-Forensics", "role": "supporting", "summary": "Disk / memory / network forensics."}, + {"id": "A2A-SIN-Security-Fuzz", "role": "supporting", "summary": "Fuzz harness generation + triage."}, + {"id": "A2A-SIN-Security-IoT", "role": "supporting", "summary": "IoT firmware + protocol review."}, + {"id": "A2A-SIN-Security-Malware", "role": "supporting", "summary": "Malware static + dynamic analysis."}, + {"id": "A2A-SIN-Security-Mobile", "role": "supporting", "summary": "Mobile app security (iOS/Android)."}, + {"id": "A2A-SIN-Security-Network", "role": "supporting", "summary": "Network security + pcap triage."}, + {"id": "A2A-SIN-Security-Recon", "role": "supporting", "summary": "External recon + asset discovery."}, + {"id": "A2A-SIN-Security-Social", "role": "supporting", "summary": "Social-engineering assessment."}, + {"id": "A2A-SIN-Security-Web", "role": "supporting", "summary": "Web app security (OWASP-focused)."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 29 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "net:cloud-apis", + "filesystem:user-workspace", + "shell:user-workspace", + "spend:llm-budget" + ], + "budgets": { + "default_monthly_usd_cap": 80, + "per_run_usd_cap": 3 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/cybersec" + } +} diff --git a/templates/teams/Team-SIN-Code-Frontend.json b/templates/teams/Team-SIN-Code-Frontend.json new file mode 100644 index 0000000..00c8383 --- /dev/null +++ b/templates/teams/Team-SIN-Code-Frontend.json @@ -0,0 +1,44 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Code-Frontend", + "name": "Code Frontend Team", + "slug": "code-frontend", + "tier": "marketplace", + "status": "alpha", + "tagline": "Frontend-focused coding team — React, Next.js, design-system work.", + "marketing": { + "summary": "Coding team focused on frontend engineering: Next.js App Router, React component libraries, design-system refactors, responsive layouts and accessibility. Pairs naturally with Team-SIN-Code-Backend for full-stack work.", + "bullets": [ + "Next.js App Router + server components", + "Component-library authoring and refactoring", + "Design-system token + theme migrations", + "Responsive layouts and a11y hardening", + "E2E test authoring (Playwright)" + ] + }, + "agents": [ + {"id": "A2A-SIN-Code-DataScience", "role": "supporting", "summary": "For data-heavy frontend work (charts, tables)."}, + {"id": "A2A-SIN-Code-Frontend", "role": "optional", "summary": "Dedicated frontend agent (currently scaffold — see SCAFFOLD_AUDIT.md)."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 14 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "filesystem:user-workspace", + "shell:user-workspace", + "spend:llm-budget" + ], + "budgets": { + "default_monthly_usd_cap": 40, + "per_run_usd_cap": 3 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/code-core" + } +} diff --git a/templates/teams/Team-SIN-Commerce.json b/templates/teams/Team-SIN-Commerce.json new file mode 100644 index 0000000..7e09964 --- /dev/null +++ b/templates/teams/Team-SIN-Commerce.json @@ -0,0 +1,47 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Commerce", + "name": "Commerce Team", + "slug": "commerce", + "tier": "marketplace", + "status": "beta", + "tagline": "E-commerce automation across Stripe, TikTok Shop, and fulfilment.", + "marketing": { + "summary": "Runs your online shop end-to-end: takes payments via Stripe, pushes inventory and orders to TikTok Shop and Medusa storefronts, reconciles shop finance, and routes logistics. Built for solo founders and small teams who want to sell without being shop-admins.", + "bullets": [ + "Stripe payments, invoices and refunds without writing code", + "TikTok Shop inventory + order sync", + "Medusa storefront management", + "Shop finance reconciliation and VAT-ready reporting", + "Shipping label + logistics routing with Shop-Logistic", + "Daily commerce brief delivered into chat.opensin.ai" + ] + }, + "agents": [ + {"id": "A2A-SIN-Stripe", "role": "primary", "summary": "Payments, subscriptions, refunds and Stripe Connect flows."}, + {"id": "A2A-SIN-TikTok-Shop", "role": "primary", "summary": "TikTok Shop catalogue, orders and creator programme."}, + {"id": "A2A-SIN-Medusa", "role": "supporting", "summary": "Headless commerce storefront operations."}, + {"id": "A2A-SIN-Shop-Finance", "role": "supporting", "summary": "Reconciliation, VAT/GST, daily P&L."}, + {"id": "A2A-SIN-Shop-Logistic", "role": "supporting", "summary": "Shipping, label creation, tracking updates."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 19 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "net:cloud-apis", + "spend:user-managed-credentials" + ], + "budgets": { + "default_monthly_usd_cap": 40, + "per_run_usd_cap": 2 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/commerce" + } +} diff --git a/templates/teams/Team-SIN-Community.json b/templates/teams/Team-SIN-Community.json new file mode 100644 index 0000000..4ab169f --- /dev/null +++ b/templates/teams/Team-SIN-Community.json @@ -0,0 +1,43 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Community", + "name": "Community Team", + "slug": "community", + "tier": "marketplace", + "status": "beta", + "tagline": "Run a healthy community across Discord, Reddit, and your own forum.", + "marketing": { + "summary": "Community moderation, engagement, and growth across the channels people actually use: Discord servers, Reddit subs, and in-house communities. Handles moderation queues, engagement nudges, FAQ autoresponses, and event coordination.", + "bullets": [ + "Discord server moderation + engagement automation", + "Reddit subreddit management and cross-posting", + "Community health reports and early-warning signals", + "Event coordination with auto-reminders", + "Onboarding DMs and FAQ autoresponses" + ] + }, + "agents": [ + {"id": "A2A-SIN-Community", "role": "primary", "summary": "Cross-platform community orchestration."}, + {"id": "A2A-SIN-Discord", "role": "primary", "summary": "Discord server ops and engagement."}, + {"id": "A2A-SIN-Reddit", "role": "supporting", "summary": "Subreddit moderation and posting."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 9 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "net:cloud-apis" + ], + "budgets": { + "default_monthly_usd_cap": 15, + "per_run_usd_cap": 1 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/community" + } +} diff --git a/templates/teams/Team-SIN-Forum.json b/templates/teams/Team-SIN-Forum.json new file mode 100644 index 0000000..0368e06 --- /dev/null +++ b/templates/teams/Team-SIN-Forum.json @@ -0,0 +1,44 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Forum", + "name": "Forum Team", + "slug": "forum", + "tier": "marketplace", + "status": "beta", + "tagline": "Be smart about Hacker News, Lobsters, Stack Overflow, Quora and Slashdot.", + "marketing": { + "summary": "Monitors, engages with, and harvests signal from the forums engineers and thinkers actually use. Surfaces trending threads to your inbox, drafts high-signal replies, and answers developer questions on Stack Overflow when your product is mentioned.", + "bullets": [ + "Hacker News and Lobsters trend detection", + "Stack Overflow monitoring + developer-support drafts", + "Quora and Slashdot engagement", + "Auto-digests of threads relevant to your product", + "Plagiarism-aware original-reply drafting" + ] + }, + "agents": [ + {"id": "A2A-SIN-HackerNews", "role": "primary", "summary": "HN front-page + comments monitoring."}, + {"id": "A2A-SIN-Lobsters", "role": "primary", "summary": "Lobsters trending + tag filters."}, + {"id": "A2A-SIN-StackOverflow", "role": "primary", "summary": "SO question discovery + reply drafting."}, + {"id": "A2A-SIN-Quora", "role": "supporting", "summary": "Quora topic tracking + drafts."}, + {"id": "A2A-SIN-Slashdot", "role": "supporting", "summary": "Slashdot monitoring."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 9 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http" + ], + "budgets": { + "default_monthly_usd_cap": 15, + "per_run_usd_cap": 1 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/forum" + } +} diff --git a/templates/teams/Team-SIN-Google.json b/templates/teams/Team-SIN-Google.json new file mode 100644 index 0000000..862763c --- /dev/null +++ b/templates/teams/Team-SIN-Google.json @@ -0,0 +1,42 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Google", + "name": "Google Team", + "slug": "google", + "tier": "marketplace", + "status": "beta", + "tagline": "Google Workspace automation: Docs, Sheets, Gmail, Drive, Chat.", + "marketing": { + "summary": "First-class Google Workspace automation for professionals living in Docs, Sheets, Gmail, Drive and Google Chat. Builds reports, drafts replies, orchestrates meetings, and searches across the whole workspace.", + "bullets": [ + "Docs / Sheets / Slides generation and edits", + "Gmail triage and reply drafting", + "Drive search and content staging", + "Google Chat orchestration across spaces", + "Calendar scheduling and meeting prep" + ] + }, + "agents": [ + {"id": "A2A-SIN-Google-Apps", "role": "primary", "summary": "Google Workspace apps (Docs/Sheets/Slides/Gmail/Drive/Calendar)."}, + {"id": "A2A-SIN-Google-Chat", "role": "supporting", "summary": "Google Chat spaces and direct messages."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 9 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "net:cloud-apis" + ], + "budgets": { + "default_monthly_usd_cap": 20, + "per_run_usd_cap": 1 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/google" + } +} diff --git a/templates/teams/Team-SIN-Infrastructure.json b/templates/teams/Team-SIN-Infrastructure.json new file mode 100644 index 0000000..850e0af --- /dev/null +++ b/templates/teams/Team-SIN-Infrastructure.json @@ -0,0 +1,48 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Infrastructure", + "name": "Infrastructure Team", + "slug": "infrastructure", + "tier": "marketplace", + "status": "beta", + "tagline": "CI/CD, n8n workflows, storage, and GitHub Actions — your infra on autopilot.", + "marketing": { + "summary": "Keeps your pipelines, workflows, and storage healthy. Fixes red CI, writes n8n workflows, triages GitHub Actions failures, and manages object storage across providers. The team your ops channel has always wanted.", + "bullets": [ + "CI/CD pipeline healing and flake detection", + "n8n workflow authoring and debugging", + "GitHub Actions failure triage + fixes", + "Object storage management across providers (Box + generic)", + "Opal workflow automation integration" + ] + }, + "agents": [ + {"id": "A2A-SIN-CI-CD", "role": "primary", "summary": "CI/CD pipelines across Jenkins/GH/GitLab/CircleCI."}, + {"id": "A2A-SIN-Github-Action", "role": "primary", "summary": "GitHub Actions failure triage + fixes."}, + {"id": "A2A-SIN-N8N", "role": "primary", "summary": "n8n workflow authoring + debugging."}, + {"id": "A2A-SIN-Storage", "role": "supporting", "summary": "Generic object-storage operations."}, + {"id": "A2A-SIN-Box-Storage", "role": "supporting", "summary": "Box-specific storage operations."}, + {"id": "A2A-SIN-Opal", "role": "supporting", "summary": "Opal workflow automation."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 14 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "net:cloud-apis", + "filesystem:user-workspace", + "shell:user-workspace" + ], + "budgets": { + "default_monthly_usd_cap": 30, + "per_run_usd_cap": 2 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/infrastructure" + } +} diff --git a/templates/teams/Team-SIN-Legal.json b/templates/teams/Team-SIN-Legal.json new file mode 100644 index 0000000..f236a8e --- /dev/null +++ b/templates/teams/Team-SIN-Legal.json @@ -0,0 +1,49 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Legal", + "name": "Legal Team", + "slug": "legal", + "tier": "marketplace", + "status": "beta", + "tagline": "Contracts, compliance, patents, tax, damages — legal ops for builders.", + "marketing": { + "summary": "Legal ops squad for startup founders and small practices. Drafts and reviews contracts, triages compliance obligations, handles patent discovery, computes damage models, organises evidence, and prepares tax filings. Not legal advice — but a force multiplier for whoever gives it.", + "bullets": [ + "Contract drafting and clause-by-clause review", + "Compliance obligation tracking (GDPR/CCPA/SOC2/HIPAA)", + "Patent and prior-art search", + "Evidence organisation and chain-of-custody hygiene", + "Damages modelling and scenario reports", + "Tax filing preparation and bookkeeping bridges", + "Claim writing for small-claims and regulatory filings" + ] + }, + "agents": [ + {"id": "A2A-SIN-Compliance", "role": "primary", "summary": "Compliance framework tracking."}, + {"id": "A2A-SIN-Contract", "role": "primary", "summary": "Contract drafting + redlines."}, + {"id": "A2A-SIN-ClaimWriter", "role": "primary", "summary": "Structured claim writing."}, + {"id": "A2A-SIN-Damages", "role": "supporting", "summary": "Damages modelling."}, + {"id": "A2A-SIN-Evidence", "role": "supporting", "summary": "Evidence organisation."}, + {"id": "A2A-SIN-Patents", "role": "supporting", "summary": "Patent + prior-art search."}, + {"id": "A2A-SIN-Tax", "role": "supporting", "summary": "Tax filing prep + bookkeeping."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 29 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "filesystem:user-workspace" + ], + "budgets": { + "default_monthly_usd_cap": 40, + "per_run_usd_cap": 2 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/legal" + } +} diff --git a/templates/teams/Team-SIN-Media-ComfyUI.json b/templates/teams/Team-SIN-Media-ComfyUI.json new file mode 100644 index 0000000..ec513d2 --- /dev/null +++ b/templates/teams/Team-SIN-Media-ComfyUI.json @@ -0,0 +1,44 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Media-ComfyUI", + "name": "Media (ComfyUI) Team", + "slug": "media-comfyui", + "tier": "marketplace", + "status": "beta", + "tagline": "Pro-grade image and video pipelines powered by ComfyUI.", + "marketing": { + "summary": "Production-grade generative media: builds, tunes, and runs ComfyUI pipelines for images and short-form video. Ships with curated workflows for thumbnails, UGC, ads, storyboards, and post-processing. Compute-heavy — runs on your own GPU or on a managed Cloud-GPU backend.", + "bullets": [ + "Curated ComfyUI workflows for thumbnails, UGC, ads", + "Custom pipeline authoring from natural-language brief", + "Batch generation with consistent character/brand locking", + "LoRA + ControlNet orchestration", + "Cloud-GPU or bring-your-own-GPU" + ] + }, + "agents": [ + {"id": "A2A-SIN-MiroFish", "role": "primary", "summary": "ComfyUI pipeline authoring, running and tuning."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 19 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "net:cloud-apis", + "filesystem:user-workspace", + "shell:user-workspace", + "spend:llm-budget" + ], + "budgets": { + "default_monthly_usd_cap": 50, + "per_run_usd_cap": 5 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/media" + } +} diff --git a/templates/teams/Team-SIN-Media-Music.json b/templates/teams/Team-SIN-Media-Music.json new file mode 100644 index 0000000..b69c224 --- /dev/null +++ b/templates/teams/Team-SIN-Media-Music.json @@ -0,0 +1,39 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Media-Music", + "name": "Media (Music) Team", + "slug": "media-music", + "tier": "marketplace", + "status": "coming-soon", + "tagline": "Music production pipeline — coming Q3 2026.", + "marketing": { + "summary": "Music-production agent team: genre-aware composition, stems, mastering, and distribution prep. Currently in design — no agents assigned yet. If you want early access or want to build the core music-generation agent, open an issue on Team-SIN-Media-Music.", + "bullets": [ + "Text-to-music composition with style conditioning", + "Stem separation and mix assistance", + "Mastering chain with genre-aware presets", + "Distribution prep for DSPs (Spotify/Apple Music/Bandcamp)", + "Not yet shipping — status: coming-soon" + ] + }, + "agents": [], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 14 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "spend:llm-budget" + ], + "budgets": { + "default_monthly_usd_cap": 40, + "per_run_usd_cap": 5 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/media" + } +} diff --git a/templates/teams/Team-SIN-Messaging.json b/templates/teams/Team-SIN-Messaging.json new file mode 100644 index 0000000..b6c294d --- /dev/null +++ b/templates/teams/Team-SIN-Messaging.json @@ -0,0 +1,53 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Messaging", + "name": "Messaging Team", + "slug": "messaging", + "tier": "marketplace", + "status": "beta", + "tagline": "One inbox across Telegram, Beeper, Signal, Matrix, iMessage, SMS, and more.", + "marketing": { + "summary": "Unifies your messaging sprawl. Drafts replies, digests conversations, triages groups, and runs bots across Telegram, Beeper, Signal, Matrix, WeChat, LINE, Feishu, iMessage (via BlueBubbles), Chatroom, IRC, Email, and SMS. Never miss a thread because it was on the wrong app.", + "bullets": [ + "Unified thread view across 12+ platforms", + "Cross-platform reply drafting with context", + "Group-chat digests and mute-smart notifications", + "Bot hosting for Telegram and Matrix channels", + "Email + SMS as first-class messaging surfaces", + "Works with Beeper and BlueBubbles as aggregation layers" + ] + }, + "agents": [ + {"id": "A2A-SIN-Telegram", "role": "primary", "summary": "Telegram DMs, groups, channels, bots."}, + {"id": "A2A-SIN-Beeper", "role": "primary", "summary": "Beeper aggregation layer across networks."}, + {"id": "A2A-SIN-Signal", "role": "supporting", "summary": "Signal messaging."}, + {"id": "A2A-SIN-Matrix", "role": "supporting", "summary": "Matrix rooms + bots."}, + {"id": "A2A-SIN-WeChat", "role": "supporting", "summary": "WeChat chats + Official Accounts."}, + {"id": "A2A-SIN-LINE", "role": "supporting", "summary": "LINE messaging."}, + {"id": "A2A-SIN-Feishu", "role": "supporting", "summary": "Feishu / Lark workplace chat."}, + {"id": "A2A-SIN-BlueBubbles", "role": "supporting", "summary": "iMessage via BlueBubbles bridge."}, + {"id": "A2A-SIN-Chatroom", "role": "supporting", "summary": "Generic chatroom protocol adapter."}, + {"id": "A2A-SIN-IRC", "role": "supporting", "summary": "IRC channel operations."}, + {"id": "A2A-SIN-Email", "role": "supporting", "summary": "Email as a messaging channel."}, + {"id": "A2A-SIN-SMS", "role": "supporting", "summary": "SMS send/receive via Twilio-like backends."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 14 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "net:cloud-apis" + ], + "budgets": { + "default_monthly_usd_cap": 30, + "per_run_usd_cap": 1 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/messaging" + } +} diff --git a/templates/teams/Team-SIN-Microsoft.json b/templates/teams/Team-SIN-Microsoft.json new file mode 100644 index 0000000..64eb6fc --- /dev/null +++ b/templates/teams/Team-SIN-Microsoft.json @@ -0,0 +1,41 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Microsoft", + "name": "Microsoft Team", + "slug": "microsoft", + "tier": "marketplace", + "status": "alpha", + "tagline": "Microsoft Teams automation — the start of full Microsoft 365 coverage.", + "marketing": { + "summary": "Currently ships Microsoft Teams automation — channels, meetings, chat. Roadmap covers Outlook, Word, Excel, PowerPoint, OneDrive, SharePoint and Power Automate. Priced as a growing bundle — buyers today lock in the Teams agent and get future M365 agents added automatically.", + "bullets": [ + "Microsoft Teams channels, meetings and chat ops", + "Outlook calendar + mail (roadmap)", + "Excel / Word / PowerPoint generation (roadmap)", + "SharePoint and OneDrive content ops (roadmap)", + "Power Automate flow authoring (roadmap)" + ] + }, + "agents": [ + {"id": "A2A-SIN-Teams", "role": "primary", "summary": "Microsoft Teams channels, meetings, chat."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 9 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "net:cloud-apis" + ], + "budgets": { + "default_monthly_usd_cap": 20, + "per_run_usd_cap": 1 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/microsoft" + } +} diff --git a/templates/teams/Team-SIN-Research.json b/templates/teams/Team-SIN-Research.json new file mode 100644 index 0000000..2f5656e --- /dev/null +++ b/templates/teams/Team-SIN-Research.json @@ -0,0 +1,43 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Research", + "name": "Research Team", + "slug": "research", + "tier": "marketplace", + "status": "beta", + "tagline": "Deep research, summarisation, and distributed-cognition experiments.", + "marketing": { + "summary": "A research squad for people whose job is thinking. Runs multi-source deep research, produces high-quality summaries, and experiments with distributed-cognition (Mindrift) workflows for teams that want their research done collaboratively across agents.", + "bullets": [ + "Multi-source deep research with citation discipline", + "Executive-grade summaries with verification trail", + "Distributed cognition across multiple agents (Mindrift)", + "Topic tracking with daily/weekly digests", + "Exports to Google Docs, Notion, or plain markdown" + ] + }, + "agents": [ + {"id": "A2A-SIN-Research", "role": "primary", "summary": "Multi-source deep research."}, + {"id": "A2A-SIN-Summary", "role": "primary", "summary": "Summarisation with verification."}, + {"id": "A2A-SIN-Mindrift", "role": "supporting", "summary": "Distributed-cognition experimentation."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 19 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "spend:llm-budget" + ], + "budgets": { + "default_monthly_usd_cap": 40, + "per_run_usd_cap": 2 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/research" + } +} diff --git a/templates/teams/Team-SIN-Social.json b/templates/teams/Team-SIN-Social.json new file mode 100644 index 0000000..b1182d3 --- /dev/null +++ b/templates/teams/Team-SIN-Social.json @@ -0,0 +1,50 @@ +{ + "$schema_version": "1.0.0", + "id": "Team-SIN-Social", + "name": "Social Team", + "slug": "social", + "tier": "marketplace", + "status": "beta", + "tagline": "Grow on Instagram, LinkedIn, TikTok, ProductHunt and the creator web.", + "marketing": { + "summary": "Content + distribution squad for creators, founders, and brands. Drafts for Instagram, LinkedIn, TikTok and creator-web surfaces (DevTo, Medium, Paragraph, IndieHackers, Nostr), launches on ProductHunt, and repurposes long-form into clips and threads.", + "bullets": [ + "Instagram, LinkedIn and TikTok scheduling + drafting", + "ProductHunt launch choreography", + "DevTo / Medium / Paragraph / IndieHackers cross-posting", + "Nostr for the decentralised-web crowd", + "Long-form to short-form repurposing", + "Tone + brand-voice memory via PCPM" + ] + }, + "agents": [ + {"id": "A2A-SIN-Instagram", "role": "primary", "summary": "Instagram scheduling + Reels."}, + {"id": "A2A-SIN-LinkedIn", "role": "primary", "summary": "LinkedIn posts + articles."}, + {"id": "A2A-SIN-TikTok", "role": "primary", "summary": "TikTok posting + trend tracking."}, + {"id": "A2A-SIN-ProductHunt", "role": "supporting", "summary": "ProductHunt launch orchestration."}, + {"id": "A2A-SIN-DevTo", "role": "supporting", "summary": "DevTo cross-posting."}, + {"id": "A2A-SIN-Medium", "role": "supporting", "summary": "Medium publications."}, + {"id": "A2A-SIN-Paragraph", "role": "supporting", "summary": "Paragraph newsletter."}, + {"id": "A2A-SIN-IndieHackers", "role": "supporting", "summary": "IndieHackers posting."}, + {"id": "A2A-SIN-Nostr", "role": "supporting", "summary": "Nostr relays + posting."} + ], + "pricing": { + "model": "monthly-addon", + "monthly_addon_eur": 14 + }, + "permissions": [ + "read:user-memory", + "write:user-memory", + "net:external-http", + "net:cloud-apis" + ], + "budgets": { + "default_monthly_usd_cap": 25, + "per_run_usd_cap": 1 + }, + "provenance": { + "decided_in": "OpenSIN-overview#35", + "decided_at": "2026-04-18", + "owner_team": "OpenSIN-AI/social" + } +}