Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
1b39a0c
feat: add AgentOS mission control dashboard
claude Jun 30, 2026
d1da7a4
fix: remove embedded git worktree from index
claude Jun 30, 2026
a9d3efe
feat: complete mission control dashboard with sidebar, agent chats, v…
claude Jun 30, 2026
f7307f9
feat: Goals page, Journal page, Obsidian auto-sync hook
claude Jun 30, 2026
a8ff474
fix: four bugs in dashboard components
claude Jun 30, 2026
7c3df4a
feat: portability config + setup wizard + shareable guide
claude Jun 30, 2026
2c521de
Add real OpenClaw integration via WebSocket gateway
claude Jun 30, 2026
40abc47
feat: AgentOS v2 — agent creator, org chart, crew builder
claude Jun 30, 2026
d3d0f5f
fix: upgrade next to 14.2.25 to patch GHSA-f82v-jwr5-mffw
claude Jun 30, 2026
7666253
feat: unified agent API route with protocol auto-detection
claude Jun 30, 2026
004b7a5
feat: persistent memory layer for agents
claude Jun 30, 2026
28cdc68
feat: mission control — simultaneous multi-agent command center
claude Jun 30, 2026
2eeb793
feat: OS-level mission control — command palette, activity feed, auro…
claude Jun 30, 2026
e7bf627
fix: add netlify.toml to resolve page-not-found on deploy preview
claude Jun 30, 2026
fd66556
feat: Obsidian vault sync for memory layer
claude Jun 30, 2026
b21c3cf
feat: Memory Galaxy, live Vitals, and Boba pet from agent-os-pack
claude Jun 30, 2026
96c009b
fix: replace Map/matchAll iterators to satisfy es2015 target
claude Jun 30, 2026
5d48861
chore: update next-env.d.ts types reference
claude Jun 30, 2026
38689df
feat: add Radar, Fusion Boardroom, Pipeline, and HermesPet
claude Jun 30, 2026
dd341ee
fix: purple → blue, agent grid always 2 columns
claude Jun 30, 2026
eb59f74
fix: initialize agents synchronously and purge remaining violet/purple
claude Jun 30, 2026
349a156
fix: collapse sidebar to off-canvas drawer on narrow screens
claude Jun 30, 2026
8ee1f53
feat: add Software & Model Catalog reference page
claude Jun 30, 2026
2d02e69
fix: commit catalog/data.js (was caught by **/*.js ignore rule)
claude Jun 30, 2026
57b4663
catalog: expand to 16 categories / ~186 ranked entries
claude Jun 30, 2026
479a46b
catalog: serve from dashboard/public so it deploys with the site
claude Jul 1, 2026
9d013cb
Add standalone catalog-site project
claude Jul 7, 2026
f734e7e
Add Polsia to AI Agents category in catalog
claude Jul 19, 2026
3aacf95
Add Mintlify to AI Coding Tools category in catalog
claude Aug 10, 2026
a0ddb0c
Rename projects: AgentOS → Agent Ops, catalog → Stacked Up
claude Aug 10, 2026
5822df1
Add 37 tools across 4 new categories to Stacked Up catalog
claude Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ tsconfig.build.tsbuildinfo
**/*.js
!eslint.config.js
!scripts/*.js
!catalog/*.js
**/*.js.map
**/*.d.ts.map

Expand Down
2 changes: 2 additions & 0 deletions catalog-site/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.DS_Store
*.local
44 changes: 44 additions & 0 deletions catalog-site/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Stacked Up

A searchable, categorized reference for AI models, tools, chat apps, coding assistants, agents, web scrapers, image/video generation, voice tools, vector databases, Docker FOSS apps, and notable GitHub repos.

## Features

- Live search across all entries
- Category filter chips
- Ranked best-first within each category
- Cross-listing for tools that span multiple categories
- Tag badges (open-source, local, cloud, etc.)

## Structure

- `index.html` — self-contained single-page app (no build step)
- `data.js` — all catalog data; edit this to add/update entries
- `netlify.toml` — static site config for Netlify

## Adding Entries

Open `data.js` and add to the relevant category's `items` array:

```js
{
name: "Tool Name",
url: "https://example.com",
desc: "2–4 sentence description of what it does and why it matters.",
tags: ["open-source"], // optional
also: ["Other Category Title"], // optional cross-listing
}
```

Items are ranked by position — put the best/most popular entries first.

## Deploying

### Netlify (recommended)

1. Push to GitHub
2. Connect the repo in Netlify → **New site from Git**
3. Build command: *(leave blank)*
4. Publish directory: `.`

No build step needed — it's pure HTML + JS.
377 changes: 377 additions & 0 deletions catalog-site/data.js

Large diffs are not rendered by default.

233 changes: 233 additions & 0 deletions catalog-site/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,233 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Stacked Up</title>
<style>
:root {
--bg: #15101a;
--bg-soft: #1d1726;
--card: #221b2d;
--card-hover: #2a2236;
--border: rgba(255,255,255,0.08);
--cream: #f3ebda;
--muted: #9a8fa6;
--gold: #d4a574;
--plum: #c4607e;
--rust: #c97c5e;
--green: #5ab896;
--blue: #6aa6e8;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
margin: 0;
background: var(--bg);
color: var(--cream);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
line-height: 1.5;
}
a { color: var(--gold); text-decoration: none; }
a:hover { text-decoration: underline; }

header {
position: sticky; top: 0; z-index: 20;
background: rgba(21,16,26,0.92);
backdrop-filter: blur(12px);
border-bottom: 1px solid var(--border);
padding: 20px 24px 16px;
}
.title-row { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
h1 { font-size: 22px; margin: 0; letter-spacing: 0.5px; }
h1 .accent { color: var(--gold); }
.updated { font-size: 12px; color: var(--muted); }
.sub { font-size: 13px; color: var(--muted); margin: 4px 0 14px; }

.controls { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
#search {
flex: 1; min-width: 220px;
background: var(--bg-soft);
border: 1px solid var(--border);
color: var(--cream);
padding: 10px 14px;
border-radius: 10px;
font-size: 14px;
outline: none;
}
#search:focus { border-color: var(--gold); }
#count { font-size: 12px; color: var(--muted); white-space: nowrap; }

.chips { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }
.chip {
font-size: 12px;
padding: 5px 11px;
border-radius: 999px;
border: 1px solid var(--border);
background: var(--bg-soft);
color: var(--muted);
cursor: pointer;
transition: all .15s;
}
.chip:hover { color: var(--cream); border-color: var(--gold); }

main { max-width: 1100px; margin: 0 auto; padding: 28px 24px 80px; }

section { margin-bottom: 40px; scroll-margin-top: 150px; }
.cat-head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 4px; }
.cat-head h2 { font-size: 18px; margin: 0; color: var(--cream); }
.cat-count { font-size: 12px; color: var(--muted); }
.cat-blurb { font-size: 13px; color: var(--muted); margin: 0 0 16px; }

.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; }

.card {
background: var(--card);
border: 1px solid var(--border);
border-radius: 14px;
padding: 16px 16px 14px;
transition: background .15s, border-color .15s, transform .15s;
position: relative;
}
.card:hover { background: var(--card-hover); border-color: rgba(212,165,116,0.4); transform: translateY(-2px); }
.rank {
position: absolute; top: 14px; right: 14px;
font-size: 11px; color: var(--muted);
background: var(--bg-soft); border: 1px solid var(--border);
width: 22px; height: 22px; border-radius: 6px;
display: flex; align-items: center; justify-content: center;
font-variant-numeric: tabular-nums;
}
.card h3 { margin: 0 30px 6px 0; font-size: 15px; }
.card .desc { font-size: 13px; color: #d8cfc0; margin: 0 0 10px; }
.card .meta { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.card .link { font-size: 12px; }
.card .also { font-size: 11px; color: var(--muted); }
.card .also b { color: var(--plum); font-weight: 600; }
.tag {
font-size: 10px; color: var(--muted);
border: 1px solid var(--border); border-radius: 6px;
padding: 1px 6px;
}

.empty { color: var(--muted); font-size: 14px; padding: 40px 0; text-align: center; }
mark { background: rgba(212,165,116,0.35); color: var(--cream); border-radius: 3px; padding: 0 2px; }

footer { max-width: 1100px; margin: 0 auto; padding: 0 24px 60px; color: var(--muted); font-size: 12px; }
</style>
</head>
<body>
<header>
<div class="title-row">
<h1><span class="accent">⬡</span> Stacked Up</h1>
<span class="updated" id="updated"></span>
</div>
<p class="sub">One-stop reference for modern AI models, apps, agents, and tooling. Ranked best / most-popular first within each category.</p>
<div class="controls">
<input id="search" type="search" placeholder="Search everything — e.g. 'scraper', 'local', 'Claude'…" autocomplete="off" />
<span id="count"></span>
</div>
<div class="chips" id="chips"></div>
</header>

<main id="main"></main>

<footer>
To add or edit entries, open <code>catalog/data.js</code> and append to the relevant category — no build step required.
</footer>

<script src="data.js"></script>
<script>
const main = document.getElementById('main');
const chips = document.getElementById('chips');
const search = document.getElementById('search');
const countEl = document.getElementById('count');
document.getElementById('updated').textContent = 'updated ' + CATALOG.updated;

// Build cross-listing: clone items into categories named in `also`.
const catMap = new Map();
CATALOG.categories.forEach(c => catMap.set(c.title, { ...c, items: [...c.items] }));
CATALOG.categories.forEach(c => {
c.items.forEach(item => {
(item.also || []).forEach(other => {
const target = catMap.get(other);
if (target && !target.items.some(i => i.name === item.name)) {
target.items.push({ ...item, _crossFrom: c.title });
}
});
});
});
const cats = Array.from(catMap.values());

function slug(s){ return s.toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,''); }

// Category jump chips
cats.forEach(c => {
const a = document.createElement('a');
a.className = 'chip';
a.href = '#' + slug(c.title);
a.textContent = c.title;
chips.appendChild(a);
});

function esc(s){ return s.replace(/[&<>]/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;'}[m])); }
function highlight(text, q){
if(!q) return esc(text);
const i = text.toLowerCase().indexOf(q.toLowerCase());
if(i < 0) return esc(text);
return esc(text.slice(0,i)) + '<mark>' + esc(text.slice(i,i+q.length)) + '</mark>' + esc(text.slice(i+q.length));
}

function render(q){
main.innerHTML = '';
q = (q || '').trim();
let total = 0;

cats.forEach(c => {
const matches = c.items.filter(it => {
if(!q) return true;
const hay = (it.name + ' ' + it.desc + ' ' + (it.tags||[]).join(' ') + ' ' + c.title).toLowerCase();
return hay.includes(q.toLowerCase());
});
if(matches.length === 0) return;
total += matches.length;

const sec = document.createElement('section');
sec.id = slug(c.title);
sec.innerHTML =
'<div class="cat-head"><h2>' + esc(c.title) + '</h2>' +
'<span class="cat-count">' + matches.length + (q ? ' match' + (matches.length>1?'es':'') : ' item' + (matches.length>1?'s':'')) + '</span></div>' +
'<p class="cat-blurb">' + esc(c.blurb) + '</p>';

const grid = document.createElement('div');
grid.className = 'grid';
matches.forEach((it, idx) => {
const card = document.createElement('div');
card.className = 'card';
const linkHost = it.url && it.url !== '#'
? '<a class="link" href="' + it.url + '" target="_blank" rel="noopener">' + it.url.replace(/^https?:\/\//,'').replace(/\/$/,'') + ' ↗</a>'
: '<span class="also">internal / private</span>';
const tags = (it.tags||[]).map(t => '<span class="tag">' + esc(t) + '</span>').join('');
const cross = it._crossFrom ? '<span class="also">via <b>' + esc(it._crossFrom) + '</b></span>' : '';
card.innerHTML =
'<div class="rank">' + (idx+1) + '</div>' +
'<h3>' + highlight(it.name, q) + '</h3>' +
'<p class="desc">' + highlight(it.desc, q) + '</p>' +
'<div class="meta">' + linkHost + tags + cross + '</div>';
grid.appendChild(card);
});
sec.appendChild(grid);
main.appendChild(sec);
});

if(total === 0){
main.innerHTML = '<div class="empty">No matches for “' + esc(q) + '”.</div>';
}
countEl.textContent = total + ' result' + (total===1?'':'s');
}

search.addEventListener('input', e => render(e.target.value));
render('');
</script>
</body>
</html>
9 changes: 9 additions & 0 deletions catalog-site/netlify.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[build]
publish = "."

[[headers]]
for = "/*"
[headers.values]
X-Frame-Options = "DENY"
X-Content-Type-Options = "nosniff"
Referrer-Policy = "strict-origin-when-cross-origin"
38 changes: 38 additions & 0 deletions catalog-site/tools-staging.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
Name Category URL / Notes
Warp Developer Tools & Productivity warp.dev — AI-native terminal
Raycast Developer Tools & Productivity raycast.com — macOS AI launcher
BlueVoice Voice — TTS & Speech-to-Text bluevoice.ai — real-time voice AI
FluidVoice Voice — TTS & Speech-to-Text TBD — AI voice processing
Open WebUI Locally-Run LLMs & Runtimes openwebui.com — already in catalog
AbacusAI Enterprise & Business Software abacus.ai — enterprise AI platform
LM Studio Locally-Run LLMs & Runtimes lmstudio.ai — already in catalog
VS Code Developer Tools & Productivity code.visualstudio.com — already in GitHub Notable Repos
1Password Developer Tools & Productivity 1password.com — password / secrets manager
Ghostty Developer Tools & Productivity ghostty.org — fast terminal emulator
Wunderland AI Agents & Agent Frameworks AgentOS internal — autonomous agents w/ personality + memory
Hexaco Personality & Cognitive Memory AI Agents & Agent Frameworks AgentOS internal — HEXACO-based agent personality layer
Agent Job Marketplace AI Agents & Agent Frameworks Concept — marketplace for agent-to-agent task delegation
Compatibility Discovering AI Agents & Agent Frameworks Concept — automated agent interface compatibility probing
RAG Memory Tools AI Agents & Agent Frameworks Pattern — retrieval-augmented long-term memory tooling
OpenTelemetry Observability, Monitoring & Security opentelemetry.io — vendor-neutral observability standard
Provenance and Audit Trails Observability, Monitoring & Security Concept — chain-of-custody for AI data and decisions
Multi-Agent Collectives AI Agents & Agent Frameworks Pattern — self-organizing agent swarms
Tool Registry AI Agents & Agent Frameworks Pattern — runtime agent tool discovery
Framers Developer Tools & Productivity framer.com — AI-powered design-to-code web builder
Emergent Capabilities AI Agents & Agent Frameworks Concept — abilities appearing at scale without explicit training
Progress Software Enterprise & Business Software progress.com — OpenEdge, Telerik, Chef
Odoo Manufacturing Software Enterprise & Business Software odoo.com — open-source ERP suite
Schema.org Data Architecture & Schema schema.org — structured data vocabulary standard
Data-Pilot Data Architecture & Schema TBD — intelligent data navigation and analysis
Schema on Need Data Architecture & Schema Pattern — schema generated per-consumer at query time
Schema On Read Data Architecture & Schema Pattern — schema applied at read time (data lake pattern)
Schema On Demand Data Architecture & Schema Pattern — dynamic schema inferred per access request
Datadog Observability, Monitoring & Security datadoghq.com — cloud-scale monitoring platform
Radar AI Agents & Agent Frameworks AgentOS internal — fleet situational-awareness panel
Fusion AI Agents & Agent Frameworks AgentOS internal — multi-model fusion panel
Composio AI Agents & Agent Frameworks composio.dev — 100+ app integrations for AI agents
ManageEngine Enterprise & Business Software manageengine.com — IT mgmt suite + e-books incl. Agentic AI ITOps
Paracosm AI Agents & Agent Frameworks Concept — counter-factual world / synthetic narrative simulator
NPM Developer Tools & Productivity npmjs.com — Node.js package manager and registry
TypeScript Developer Tools & Productivity typescriptlang.org — typed JavaScript superset
Five-Tier Prompt Injection Defense Observability, Monitoring & Security Framework — layered AI prompt injection security
4 changes: 4 additions & 0 deletions dashboard/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules/
.next/
.env*.local
agentos.config.json
Loading