monomind 1.16.10 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/github/code-review-swarm.md +19 -19
- package/.claude/agents/github/github-modes.md +4 -4
- package/.claude/agents/github/multi-repo-swarm.md +24 -24
- package/.claude/agents/github/project-board-sync.md +28 -28
- package/.claude/agents/github/swarm-issue.md +26 -26
- package/.claude/agents/github/swarm-pr.md +18 -18
- package/.claude/agents/github/workflow-automation.md +27 -27
- package/.claude/agents/reengineer-squad/git-manager.md +2 -2
- package/.claude/commands/mastermind/master.md +9 -3
- package/.claude/commands/mastermind/references/antigravity-tools.md +60 -0
- package/.claude/commands/mastermind/references/claude-code-tools.md +50 -0
- package/.claude/commands/mastermind/references/codex-tools.md +64 -0
- package/.claude/commands/mastermind/references/copilot-tools.md +49 -0
- package/.claude/commands/mastermind/references/gemini-tools.md +63 -0
- package/.claude/commands/mastermind/references/pi-tools.md +28 -0
- package/.claude/helpers/mastermind-activate.cjs +53 -0
- package/.claude/settings.json +4 -0
- package/.claude/skills/mastermind/runorg.md +14 -0
- package/.claude/skills/mastermind/techport.md +5 -5
- package/README.md +1 -1
- package/package.json +5 -4
- package/packages/@monomind/cli/.claude/agents/github/code-review-swarm.md +19 -19
- package/packages/@monomind/cli/.claude/agents/github/github-modes.md +4 -4
- package/packages/@monomind/cli/.claude/agents/github/multi-repo-swarm.md +24 -24
- package/packages/@monomind/cli/.claude/agents/github/project-board-sync.md +28 -28
- package/packages/@monomind/cli/.claude/agents/github/swarm-issue.md +26 -26
- package/packages/@monomind/cli/.claude/agents/github/swarm-pr.md +18 -18
- package/packages/@monomind/cli/.claude/agents/github/workflow-automation.md +27 -27
- package/packages/@monomind/cli/.claude/agents/reengineer-squad/git-manager.md +2 -2
- package/packages/@monomind/cli/.claude/commands/mastermind/master.md +9 -3
- package/packages/@monomind/cli/.claude/commands/mastermind/references/antigravity-tools.md +60 -0
- package/packages/@monomind/cli/.claude/commands/mastermind/references/claude-code-tools.md +50 -0
- package/packages/@monomind/cli/.claude/commands/mastermind/references/codex-tools.md +64 -0
- package/packages/@monomind/cli/.claude/commands/mastermind/references/copilot-tools.md +49 -0
- package/packages/@monomind/cli/.claude/commands/mastermind/references/gemini-tools.md +63 -0
- package/packages/@monomind/cli/.claude/commands/mastermind/references/pi-tools.md +28 -0
- package/packages/@monomind/cli/.claude/helpers/mastermind-activate.cjs +53 -0
- package/packages/@monomind/cli/.claude/skills/mastermind/runorg.md +14 -0
- package/packages/@monomind/cli/.claude/skills/mastermind/techport.md +5 -5
- package/packages/@monomind/cli/README.md +1 -1
- package/packages/@monomind/cli/dist/src/browser/dashboard/ui.html +125 -37
- package/packages/@monomind/cli/dist/src/commands/index.js +0 -2
- package/packages/@monomind/cli/dist/src/init/executor.js +0 -24
- package/packages/@monomind/cli/dist/src/init/statusline-generator.js +0 -45
- package/packages/@monomind/cli/dist/src/init/types.d.ts +0 -2
- package/packages/@monomind/cli/dist/src/init/types.js +0 -2
- package/packages/@monomind/cli/dist/src/ui/dashboard.html +82 -75
- package/packages/@monomind/cli/dist/src/ui/server.mjs +41 -4
- package/packages/@monomind/cli/package.json +1 -1
- package/packages/@monomind/guidance/README.md +0 -1
- package/packages/@monomind/guidance/package.json +2 -14
- package/scripts/verify-appliance.sh +16 -20
- package/.claude-plugin/README.md +0 -704
- package/.claude-plugin/docs/INSTALLATION.md +0 -258
- package/.claude-plugin/docs/PLUGIN_SUMMARY.md +0 -358
- package/.claude-plugin/docs/QUICKSTART.md +0 -357
- package/.claude-plugin/docs/STRUCTURE.md +0 -122
- package/.claude-plugin/hooks/hooks.json +0 -74
- package/.claude-plugin/marketplace.json +0 -98
- package/.claude-plugin/plugin.json +0 -70
- package/.claude-plugin/scripts/install.sh +0 -234
- package/.claude-plugin/scripts/uninstall.sh +0 -36
- package/.claude-plugin/scripts/verify.sh +0 -102
|
@@ -1574,14 +1574,14 @@ select.pb-cfg-inp { padding: 4px 7px; cursor: pointer; }
|
|
|
1574
1574
|
<div class="nav-item" data-view="monograph">
|
|
1575
1575
|
<span class="ico">⬡</span><span class="lbl">Monograph</span>
|
|
1576
1576
|
</div>
|
|
1577
|
-
<div class="nav-item" data-view="playbooks">
|
|
1578
|
-
<span class="ico">⚡</span><span class="lbl">Playbooks</span>
|
|
1579
|
-
<span class="bdg" id="bdg-playbooks">—</span>
|
|
1580
|
-
</div>
|
|
1581
1577
|
</div>
|
|
1582
1578
|
</div>
|
|
1583
1579
|
<div class="nav-no-proj" id="nav-no-proj-hint">Select a project above</div>
|
|
1584
1580
|
<div class="nav-sect" style="margin-top:auto;padding-top:8px;">
|
|
1581
|
+
<div class="nav-item" data-view="monoagent">
|
|
1582
|
+
<span class="ico">🤖</span><span class="lbl">MonoAgent</span>
|
|
1583
|
+
<span class="bdg" id="bdg-monoagent">—</span>
|
|
1584
|
+
</div>
|
|
1585
1585
|
<div class="nav-item" data-view="global">
|
|
1586
1586
|
<span class="ico">⊕</span><span class="lbl">Global Feed</span>
|
|
1587
1587
|
</div>
|
|
@@ -2250,79 +2250,26 @@ select.pb-cfg-inp { padding: 4px 7px; cursor: pointer; }
|
|
|
2250
2250
|
</div>
|
|
2251
2251
|
</div>
|
|
2252
2252
|
|
|
2253
|
-
<!--
|
|
2254
|
-
<div class="view" id="view-
|
|
2253
|
+
<!-- MONOAGENT -->
|
|
2254
|
+
<div class="view" id="view-monoagent">
|
|
2255
2255
|
<div class="vscroll">
|
|
2256
|
-
<div class="pg-title">
|
|
2257
|
-
<div class="pg-sub">
|
|
2258
|
-
<!-- Tab bar -->
|
|
2256
|
+
<div class="pg-title">MonoAgent</div>
|
|
2257
|
+
<div class="pg-sub">Social media automation workflows & run history</div>
|
|
2259
2258
|
<div class="mg-tab-bar" style="margin-top:14px">
|
|
2260
|
-
<button class="odt-btn active" data-
|
|
2261
|
-
<button class="odt-btn" data-
|
|
2262
|
-
<button class="odt-btn" data-wftab="builder" onclick="wfSwitchTab('builder')">Builder</button>
|
|
2263
|
-
<button class="odt-btn" data-wftab="runs" onclick="wfSwitchTab('runs')">Runs</button>
|
|
2259
|
+
<button class="odt-btn active" data-matab="workflows" onclick="maSwitchTab('workflows')">Workflows</button>
|
|
2260
|
+
<button class="odt-btn" data-matab="history" onclick="maSwitchTab('history')">Action History</button>
|
|
2264
2261
|
</div>
|
|
2265
|
-
|
|
2266
|
-
<!-- TAB: SYSTEMS -->
|
|
2267
|
-
<div class="wf-pane active" id="wf-tab-systems">
|
|
2262
|
+
<div class="wf-pane active" id="ma-tab-workflows">
|
|
2268
2263
|
<div style="display:flex;align-items:center;gap:8px;margin-bottom:16px;margin-top:4px">
|
|
2269
|
-
<button class="btn" onclick="
|
|
2264
|
+
<button class="btn" onclick="loadMonoagentData()">↺ Refresh</button>
|
|
2270
2265
|
</div>
|
|
2271
|
-
<div id="
|
|
2266
|
+
<div id="ma-workflows-list"><div class="loading-txt">Loading…</div></div>
|
|
2272
2267
|
</div>
|
|
2273
|
-
|
|
2274
|
-
<!-- TAB: LIBRARY -->
|
|
2275
|
-
<div class="wf-pane" id="wf-tab-library">
|
|
2268
|
+
<div class="wf-pane" id="ma-tab-history">
|
|
2276
2269
|
<div style="display:flex;align-items:center;gap:8px;margin-bottom:16px;margin-top:4px">
|
|
2277
|
-
<button class="btn" onclick="
|
|
2278
|
-
<span style="font-size:11px;color:var(--text-lo)">Saved in .monomind/playbooks/</span>
|
|
2279
|
-
</div>
|
|
2280
|
-
<div id="wf-defs-list"><div class="loading-txt">Loading…</div></div>
|
|
2281
|
-
</div>
|
|
2282
|
-
|
|
2283
|
-
<!-- TAB: RUNS -->
|
|
2284
|
-
<div class="wf-pane" id="wf-tab-runs">
|
|
2285
|
-
<div style="display:flex;gap:8px;margin-bottom:16px;margin-top:4px;align-items:center">
|
|
2286
|
-
<button class="btn" onclick="loadWorkflowRuns()">↺ Refresh</button>
|
|
2287
|
-
<select id="wf-status-filter" onchange="renderWorkflowRuns()" style="background:var(--surface);color:var(--text-hi);border:1px solid var(--border);border-radius:4px;padding:4px 8px;font-size:12px">
|
|
2288
|
-
<option value="">All statuses</option>
|
|
2289
|
-
<option value="running">Running</option>
|
|
2290
|
-
<option value="completed">Completed</option>
|
|
2291
|
-
<option value="failed">Failed</option>
|
|
2292
|
-
<option value="stopped">Stopped</option>
|
|
2293
|
-
</select>
|
|
2294
|
-
<span id="wf-count" style="color:var(--text-lo);font-size:12px"></span>
|
|
2295
|
-
</div>
|
|
2296
|
-
<div id="wf-runs-list"><div class="loading-txt">Loading…</div></div>
|
|
2297
|
-
</div>
|
|
2298
|
-
|
|
2299
|
-
<!-- TAB: BUILDER -->
|
|
2300
|
-
<div id="wf-tab-builder">
|
|
2301
|
-
<div id="pb-toolbar">
|
|
2302
|
-
<button class="btn" onclick="pbNew()" title="New playbook">+ New</button>
|
|
2303
|
-
<input id="pb-name-input" type="text" placeholder="Playbook name…" oninput="pbState.playbook.name=this.value">
|
|
2304
|
-
<button class="btn" onclick="pbLoad()" title="Load a playbook from Library">⬆ Load</button>
|
|
2305
|
-
<button class="btn" onclick="pbSave()" title="Save to .monomind/playbooks/">💾 Save</button>
|
|
2306
|
-
<button class="btn" onclick="pbRun()" title="Run via monobrowse dashboard" style="color:var(--accent);border-color:var(--accent)">▶ Run</button>
|
|
2307
|
-
<button class="btn" onclick="pbImportJSON()" title="Import from JSON">⬇ Import</button>
|
|
2308
|
-
<button class="btn" onclick="pbExportJSON()" title="Export to JSON">⬆ Export</button>
|
|
2309
|
-
<span id="pb-run-status"></span>
|
|
2310
|
-
</div>
|
|
2311
|
-
<div id="pb-editor">
|
|
2312
|
-
<div id="pb-palette">
|
|
2313
|
-
<!-- populated by pbRenderPalette() -->
|
|
2314
|
-
</div>
|
|
2315
|
-
<div id="pb-canvas-wrap">
|
|
2316
|
-
<div id="pb-canvas">
|
|
2317
|
-
<svg id="pb-svg" width="100%" height="100%"><defs><marker id="pb-arrow" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto"><polygon points="0 0,8 3,0 6" fill="var(--text-xs)"/></marker></defs></svg>
|
|
2318
|
-
<div id="pb-empty"><div style="font-size:32px">⚡</div><div>Drag a node from the left panel onto the canvas</div><div style="font-size:11px">or click a node type to add it</div></div>
|
|
2319
|
-
</div>
|
|
2320
|
-
</div>
|
|
2321
|
-
<div id="pb-config">
|
|
2322
|
-
<div id="pb-config-title">Select a node</div>
|
|
2323
|
-
<div id="pb-config-body"></div>
|
|
2324
|
-
</div>
|
|
2270
|
+
<button class="btn" onclick="loadMonoagentData()">↺ Refresh</button>
|
|
2325
2271
|
</div>
|
|
2272
|
+
<div id="ma-history-list"><div class="loading-txt">Loading…</div></div>
|
|
2326
2273
|
</div>
|
|
2327
2274
|
</div>
|
|
2328
2275
|
</div>
|
|
@@ -2518,7 +2465,7 @@ function switchView(v, { updateHash = true } = {}) {
|
|
|
2518
2465
|
el.classList.toggle('active', el.dataset.view === v));
|
|
2519
2466
|
document.querySelectorAll('.view').forEach(el =>
|
|
2520
2467
|
el.classList.toggle('active', el.id === 'view-' + v));
|
|
2521
|
-
const titles = { now:'Now', projects:'Projects', sessions:'Sessions', loops:'Loops', tokens:'Tokens', memory:'Memory', orgs:'Orgs', monograph:'Monograph',
|
|
2468
|
+
const titles = { now:'Now', projects:'Projects', sessions:'Sessions', loops:'Loops', tokens:'Tokens', memory:'Memory', orgs:'Orgs', monograph:'Monograph', monoagent:'MonoAgent', global:'Global Feed', 'global-loops':'Global Loops', 'global-tokens':'Global Tokens', chat:'Global Agent Chat' };
|
|
2522
2469
|
document.getElementById('view-title').textContent = titles[v] || v;
|
|
2523
2470
|
const PROJECT = DIR ? shortPath(DIR) : 'monomind';
|
|
2524
2471
|
const VIEW_LABELS = { now: 'Now', sessions: 'Sessions', projects: 'Projects', loops: 'Loops', tokens: 'Tokens', memory: 'Memory', orgs: 'Orgs', monograph: 'Monograph', global: 'Global Feed', 'global-loops': 'Global Loops', 'global-tokens': 'Global Tokens' };
|
|
@@ -2581,7 +2528,7 @@ function renderView(v) {
|
|
|
2581
2528
|
if (v === 'memory') renderMemory();
|
|
2582
2529
|
if (v === 'orgs') renderOrgs();
|
|
2583
2530
|
if (v === 'monograph') loadMonograph();
|
|
2584
|
-
if (v === '
|
|
2531
|
+
if (v === 'monoagent') { loadMonoagentData(); }
|
|
2585
2532
|
if (v === 'global') renderGlobalFeed();
|
|
2586
2533
|
if (v === 'global-loops') renderGlobalLoops();
|
|
2587
2534
|
if (v === 'global-tokens') renderGlobalTokens();
|
|
@@ -10877,16 +10824,17 @@ async function maDisconnect(pid, connId, type) {
|
|
|
10877
10824
|
|
|
10878
10825
|
let _wfRuns = [];
|
|
10879
10826
|
async function loadWorkflowRuns() {
|
|
10880
|
-
document.getElementById('wf-runs-list')
|
|
10827
|
+
const runsListEl = document.getElementById('wf-runs-list');
|
|
10828
|
+
if (!runsListEl) return;
|
|
10829
|
+
runsListEl.innerHTML = '<div class="loading-txt">Loading…</div>';
|
|
10881
10830
|
try {
|
|
10882
10831
|
const runs = await apiFetch('/api/workflow-runs');
|
|
10883
10832
|
_wfRuns = Array.isArray(runs) ? runs : [];
|
|
10884
10833
|
} catch (e) {
|
|
10885
10834
|
_wfRuns = [];
|
|
10886
10835
|
}
|
|
10887
|
-
const
|
|
10888
|
-
if (
|
|
10889
|
-
document.getElementById('wf-count').textContent = _wfRuns.length + ' run' + (_wfRuns.length !== 1 ? 's' : '');
|
|
10836
|
+
const wfCount = document.getElementById('wf-count');
|
|
10837
|
+
if (wfCount) wfCount.textContent = _wfRuns.length + ' run' + (_wfRuns.length !== 1 ? 's' : '');
|
|
10890
10838
|
renderWorkflowRuns();
|
|
10891
10839
|
}
|
|
10892
10840
|
|
|
@@ -14017,6 +13965,65 @@ async function mmRenderGraph(body) {
|
|
|
14017
13965
|
`;
|
|
14018
13966
|
} catch (e) { body.innerHTML = '<div class="empty">Failed: ' + esc(e.message) + '</div>'; }
|
|
14019
13967
|
}
|
|
13968
|
+
|
|
13969
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
13970
|
+
MONOAGENT TAB
|
|
13971
|
+
═══════════════════════════════════════════════════════════════ */
|
|
13972
|
+
const MA_STATE_COLOR = { completed:'#22c55e', failed:'#ef4444', running:'#3b82f6', pending:'#a3a3a3' };
|
|
13973
|
+
let _maWorkflows = [], _maActions = [];
|
|
13974
|
+
|
|
13975
|
+
function maSwitchTab(tab) {
|
|
13976
|
+
document.querySelectorAll('[data-matab]').forEach(b => b.classList.toggle('active', b.dataset.matab === tab));
|
|
13977
|
+
document.querySelectorAll('#view-monoagent .wf-pane').forEach(p => p.classList.toggle('active', p.id === 'ma-tab-' + tab));
|
|
13978
|
+
}
|
|
13979
|
+
|
|
13980
|
+
async function loadMonoagentData() {
|
|
13981
|
+
document.getElementById('ma-workflows-list').innerHTML = '<div class="loading-txt">Loading…</div>';
|
|
13982
|
+
document.getElementById('ma-history-list').innerHTML = '<div class="loading-txt">Loading…</div>';
|
|
13983
|
+
try {
|
|
13984
|
+
const data = await apiFetch('/api/monoagent/data');
|
|
13985
|
+
_maWorkflows = Array.isArray(data.workflows) ? data.workflows : [];
|
|
13986
|
+
_maActions = Array.isArray(data.actions) ? data.actions : [];
|
|
13987
|
+
} catch (e) {
|
|
13988
|
+
_maWorkflows = []; _maActions = [];
|
|
13989
|
+
}
|
|
13990
|
+
const bdg = document.getElementById('bdg-monoagent');
|
|
13991
|
+
if (bdg) bdg.textContent = _maWorkflows.length || '—';
|
|
13992
|
+
renderMonoagentWorkflows();
|
|
13993
|
+
renderMonoagentHistory();
|
|
13994
|
+
}
|
|
13995
|
+
|
|
13996
|
+
function renderMonoagentWorkflows() {
|
|
13997
|
+
const el = document.getElementById('ma-workflows-list');
|
|
13998
|
+
if (!el) return;
|
|
13999
|
+
if (!_maWorkflows.length) { el.innerHTML = '<div class="empty">No monoagent workflows found. Create one with: <code>monoagent workflow create</code></div>'; return; }
|
|
14000
|
+
el.innerHTML = _maWorkflows.map(w => `<div class="m-card" style="margin-bottom:10px;padding:12px 14px">
|
|
14001
|
+
<div style="display:flex;justify-content:space-between;align-items:center">
|
|
14002
|
+
<span style="font-weight:600;color:var(--text-hi);font-family:var(--mono);font-size:13px">${esc(w.name||w.id||'—')}</span>
|
|
14003
|
+
<span style="font-size:11px;color:var(--text-lo)">${esc(w.id||'')}</span>
|
|
14004
|
+
</div>
|
|
14005
|
+
${w.description ? `<div style="font-size:12px;color:var(--text-lo);margin-top:4px">${esc(w.description)}</div>` : ''}
|
|
14006
|
+
<div style="font-size:11px;color:var(--text-xs);margin-top:6px">${(w.nodes||[]).length} nodes · trigger: ${esc(w.trigger||'manual')}</div>
|
|
14007
|
+
</div>`).join('');
|
|
14008
|
+
}
|
|
14009
|
+
|
|
14010
|
+
function renderMonoagentHistory() {
|
|
14011
|
+
const el = document.getElementById('ma-history-list');
|
|
14012
|
+
if (!el) return;
|
|
14013
|
+
if (!_maActions.length) { el.innerHTML = '<div class="empty">No action history yet.</div>'; return; }
|
|
14014
|
+
el.innerHTML = _maActions.map(a => {
|
|
14015
|
+
const color = MA_STATE_COLOR[a.status] || MA_STATE_COLOR.pending;
|
|
14016
|
+
const ts = a.createdAt ? new Date(a.createdAt).toLocaleString() : '—';
|
|
14017
|
+
return `<div class="m-card" style="margin-bottom:8px;padding:10px 14px;display:flex;justify-content:space-between;align-items:center">
|
|
14018
|
+
<div>
|
|
14019
|
+
<span style="font-weight:600;color:var(--text-hi);font-size:12px;font-family:var(--mono)">${esc(a.type||a.action||'—')}</span>
|
|
14020
|
+
<span style="font-size:11px;color:var(--text-lo);margin-left:8px">${esc(a.platform||'')}</span>
|
|
14021
|
+
<div style="font-size:11px;color:var(--text-xs);margin-top:2px">${ts}</div>
|
|
14022
|
+
</div>
|
|
14023
|
+
<span style="font-size:11px;font-weight:600;color:${color}">${esc(a.status||'—')}</span>
|
|
14024
|
+
</div>`;
|
|
14025
|
+
}).join('');
|
|
14026
|
+
}
|
|
14020
14027
|
</script>
|
|
14021
14028
|
</body>
|
|
14022
14029
|
</html>
|
|
@@ -257,7 +257,11 @@ function _insertRunEvent(ev, source) {
|
|
|
257
257
|
if (!org || !runId) return;
|
|
258
258
|
_runDbInsertStmt.run([org, runId, String(ev.type || ''), JSON.stringify(ev), Number(ev.ts || Date.now()), source || 'http']);
|
|
259
259
|
_persistRunDb();
|
|
260
|
-
} catch (_) {
|
|
260
|
+
} catch (_) {
|
|
261
|
+
// sql.js leaves the prepared statement in a dirty state after any error (step() throws but
|
|
262
|
+
// reset() is never called). Reset it so subsequent inserts aren't permanently broken.
|
|
263
|
+
try { _runDbInsertStmt.reset(); } catch (_2) {}
|
|
264
|
+
}
|
|
261
265
|
}
|
|
262
266
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
263
267
|
|
|
@@ -5560,6 +5564,28 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
5560
5564
|
return;
|
|
5561
5565
|
}
|
|
5562
5566
|
|
|
5567
|
+
// ----------------------------------------------- GET /api/monoagent/data
|
|
5568
|
+
if (req.method === 'GET' && url === '/api/monoagent/data') {
|
|
5569
|
+
try {
|
|
5570
|
+
const { execFile } = await import('child_process');
|
|
5571
|
+
const run = (args) => new Promise(resolve => {
|
|
5572
|
+
execFile('monoagent', args, { timeout: 8000 }, (err, stdout) => resolve(err ? '[]' : stdout));
|
|
5573
|
+
});
|
|
5574
|
+
const [wfOut, actOut] = await Promise.all([
|
|
5575
|
+
run(['workflow', 'list', '--json']),
|
|
5576
|
+
run(['action', 'list', '--json']),
|
|
5577
|
+
]);
|
|
5578
|
+
const workflows = JSON.parse(wfOut.trim() || '[]');
|
|
5579
|
+
const actions = JSON.parse(actOut.trim() || '[]');
|
|
5580
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
5581
|
+
res.end(JSON.stringify({ workflows, actions }));
|
|
5582
|
+
} catch (e) {
|
|
5583
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
5584
|
+
res.end(JSON.stringify({ workflows: [], actions: [], error: e.message }));
|
|
5585
|
+
}
|
|
5586
|
+
return;
|
|
5587
|
+
}
|
|
5588
|
+
|
|
5563
5589
|
// ------------------------------------------------- POST /api/playbooks
|
|
5564
5590
|
// Save a playbook definition to .monomind/playbooks/<id>.json
|
|
5565
5591
|
if (req.method === 'POST' && url === '/api/playbooks') {
|
|
@@ -5706,6 +5732,7 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
5706
5732
|
runStreamClients.get(_stOrgName).add(res);
|
|
5707
5733
|
// Replay events since `since` (SQLite row id cursor; falls back to JSONL line offset)
|
|
5708
5734
|
try {
|
|
5735
|
+
let _stReplayedViaSqlite = false;
|
|
5709
5736
|
if (_runDb) {
|
|
5710
5737
|
// SQLite path: cursor is last row id seen (client sends 0 on first connect)
|
|
5711
5738
|
const _stStmt = _runDb.prepare(
|
|
@@ -5718,9 +5745,15 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
5718
5745
|
try { res.write(`data: ${_stRow.raw}\n\n`); _stLastId = _stRow.id; } catch (_) { break; }
|
|
5719
5746
|
}
|
|
5720
5747
|
_stStmt.free();
|
|
5721
|
-
|
|
5722
|
-
|
|
5723
|
-
|
|
5748
|
+
if (_stLastId > _stSince) {
|
|
5749
|
+
// SQLite had rows — send cursor and skip JSONL fallback
|
|
5750
|
+
res.write(`data: ${JSON.stringify({ type: 'stream:replay-done', count: _stLastId })}\n\n`);
|
|
5751
|
+
_stReplayedViaSqlite = true;
|
|
5752
|
+
}
|
|
5753
|
+
}
|
|
5754
|
+
if (!_stReplayedViaSqlite) {
|
|
5755
|
+
// JSONL fallback: SQLite absent or returned 0 rows — read directly from run file.
|
|
5756
|
+
// `since` is a 0-based line offset in this path.
|
|
5724
5757
|
const _stRoot = projectDir || process.cwd();
|
|
5725
5758
|
const _stRunId = activeOrgRuns.get(_stOrgName) || _getActiveRunId(_stOrgName, _stRoot);
|
|
5726
5759
|
if (_stRunId) {
|
|
@@ -5732,7 +5765,11 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
|
|
|
5732
5765
|
try { res.write(`data: ${_stLines[_i]}\n\n`); } catch (_) { break; }
|
|
5733
5766
|
}
|
|
5734
5767
|
res.write(`data: ${JSON.stringify({ type: 'stream:replay-done', count: _stLines.length })}\n\n`);
|
|
5768
|
+
} else {
|
|
5769
|
+
res.write(`data: ${JSON.stringify({ type: 'stream:replay-done', count: 0 })}\n\n`);
|
|
5735
5770
|
}
|
|
5771
|
+
} else {
|
|
5772
|
+
res.write(`data: ${JSON.stringify({ type: 'stream:replay-done', count: 0 })}\n\n`);
|
|
5736
5773
|
}
|
|
5737
5774
|
}
|
|
5738
5775
|
} catch (_) {}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@monoes/monomindcli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Monomind CLI - Enterprise AI agent orchestration with 60+ specialized agents, swarm coordination, MCP server, self-learning hooks, and vector memory for Claude Code",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -235,7 +235,6 @@ The package ships 31 modules organized in 9 layers, from compilation through enf
|
|
|
235
235
|
| | `CapabilityAlgebra` | Grant, restrict, delegate, expire, revoke permissions as typed objects |
|
|
236
236
|
| | `ManifestValidator` | Fails-closed admission for agent cell manifests |
|
|
237
237
|
| | `ConformanceRunner` | Memory Clerk acceptance test with replay verification |
|
|
238
|
-
| **Bridge** | `RuvBotGuidanceBridge` | Wires ruvbot events to guidance hooks, AIDefence gate, memory adapter |
|
|
239
238
|
| **WASM Kernel** | `guidance-kernel` | Rust→WASM policy kernel: SHA-256, HMAC, secret scanning, shard scoring |
|
|
240
239
|
| | `WasmKernel` bridge | Auto-fallback host bridge with batch API for minimal boundary crossings |
|
|
241
240
|
| **Generate** | `generateClaudeMd` | Scaffold CLAUDE.md from a project profile |
|
|
@@ -78,10 +78,6 @@
|
|
|
78
78
|
"types": "./dist/conformance-kit.d.ts",
|
|
79
79
|
"import": "./dist/conformance-kit.js"
|
|
80
80
|
},
|
|
81
|
-
"./ruvbot-integration": {
|
|
82
|
-
"types": "./dist/ruvbot-integration.d.ts",
|
|
83
|
-
"import": "./dist/ruvbot-integration.js"
|
|
84
|
-
},
|
|
85
81
|
"./trust": {
|
|
86
82
|
"types": "./dist/trust.d.ts",
|
|
87
83
|
"import": "./dist/trust.js"
|
|
@@ -142,14 +138,8 @@
|
|
|
142
138
|
"dependencies": {
|
|
143
139
|
"@monomind/hooks": "workspace:*"
|
|
144
140
|
},
|
|
145
|
-
"peerDependencies": {
|
|
146
|
-
|
|
147
|
-
},
|
|
148
|
-
"peerDependenciesMeta": {
|
|
149
|
-
"ruvbot": {
|
|
150
|
-
"optional": true
|
|
151
|
-
}
|
|
152
|
-
},
|
|
141
|
+
"peerDependencies": {},
|
|
142
|
+
"peerDependenciesMeta": {},
|
|
153
143
|
"devDependencies": {
|
|
154
144
|
"@types/node": "^20.10.0",
|
|
155
145
|
"typescript": "^5.3.0",
|
|
@@ -180,8 +170,6 @@
|
|
|
180
170
|
"adversarial-defense",
|
|
181
171
|
"prompt-injection",
|
|
182
172
|
"wasm",
|
|
183
|
-
"ruvbot",
|
|
184
|
-
"ruv",
|
|
185
173
|
"ai-safety",
|
|
186
174
|
"agent-orchestration",
|
|
187
175
|
"multi-agent",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/bin/sh
|
|
2
2
|
# ═══════════════════════════════════════════════════════════════
|
|
3
|
-
# Monomind
|
|
4
|
-
# ADR-058: Self-Contained Monomind
|
|
3
|
+
# Monomind Appliance — Full Capability Verification Suite
|
|
4
|
+
# ADR-058: Self-Contained Monomind Appliance
|
|
5
5
|
#
|
|
6
6
|
# Tests ALL 35 categories (95+ checks) to verify every capability
|
|
7
7
|
# of the Monomind + Monomind system works correctly.
|
|
@@ -185,7 +185,7 @@ fi
|
|
|
185
185
|
|
|
186
186
|
# ── 4. Memory Operations ─────────────────────────────────────
|
|
187
187
|
if should_run "memory"; then
|
|
188
|
-
section 4 "Memory Operations (LanceDB
|
|
188
|
+
section 4 "Memory Operations (LanceDB )"
|
|
189
189
|
check "memory init" $MONOMIND_CMD memory init --force
|
|
190
190
|
check "memory store key-1" $MONOMIND_CMD memory store --key "verify-1" --value "Capability verification entry one" --namespace verify
|
|
191
191
|
check "memory store key-2" $MONOMIND_CMD memory store --key "verify-2" --value "Vector search verification entry" --namespace verify
|
|
@@ -403,24 +403,20 @@ if should_run "integration"; then
|
|
|
403
403
|
check "integration: cleanup" $MONOMIND_CMD memory delete --key "int-verify" --namespace integration
|
|
404
404
|
fi
|
|
405
405
|
|
|
406
|
-
# ── 26.
|
|
407
|
-
if should_run "
|
|
408
|
-
section 26 "
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
check "
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
check_contains "rvf: list shows entries" "3" $MONOMIND_CMD memory list --namespace rvf-verify
|
|
418
|
-
check "rvf: delete works" $MONOMIND_CMD memory delete --key "rvf-test" --namespace rvf-verify
|
|
419
|
-
check_contains "rvf: list after delete" "2" $MONOMIND_CMD memory list --namespace rvf-verify
|
|
406
|
+
# ── 26. Memory Backend Verification ───────────────────────────
|
|
407
|
+
if should_run "memory-backend"; then
|
|
408
|
+
section 26 "Memory Backend Verification"
|
|
409
|
+
|
|
410
|
+
check "memory-backend: init creates backend" $MONOMIND_CMD memory init --force
|
|
411
|
+
check "memory-backend: store creates data file" $MONOMIND_CMD memory store --key "mem-test" --value "Memory backend verification" --namespace mem-verify
|
|
412
|
+
check_contains "memory-backend: retrieve confirms persistence" "Memory backend" $MONOMIND_CMD memory retrieve --key "mem-test" --namespace mem-verify
|
|
413
|
+
check "memory-backend: multiple entries" sh -c "$MONOMIND_CMD memory store --key 'mem-2' --value 'Second entry' --namespace mem-verify && $MONOMIND_CMD memory store --key 'mem-3' --value 'Third entry' --namespace mem-verify"
|
|
414
|
+
check_contains "memory-backend: list shows entries" "3" $MONOMIND_CMD memory list --namespace mem-verify
|
|
415
|
+
check "memory-backend: delete works" $MONOMIND_CMD memory delete --key "mem-test" --namespace mem-verify
|
|
416
|
+
check_contains "memory-backend: list after delete" "2" $MONOMIND_CMD memory list --namespace mem-verify
|
|
420
417
|
# Cleanup
|
|
421
|
-
$MONOMIND_CMD memory delete --key "
|
|
422
|
-
$MONOMIND_CMD memory delete --key "
|
|
423
|
-
rm -rf "$RVF_DIR"
|
|
418
|
+
$MONOMIND_CMD memory delete --key "mem-2" --namespace mem-verify >/dev/null 2>&1 || true
|
|
419
|
+
$MONOMIND_CMD memory delete --key "mem-3" --namespace mem-verify >/dev/null 2>&1 || true
|
|
424
420
|
fi
|
|
425
421
|
|
|
426
422
|
# Section 27 (local model inference) was removed — native LLM module not in lean build
|