@askexenow/exe-os 0.9.65 → 0.9.67
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/deploy/stack-manifests/v0.9.json +54 -5
- package/dist/bin/age-ontology-load.js +61 -0
- package/dist/bin/agentic-ontology-backfill.js +4708 -0
- package/dist/bin/agentic-reflection-backfill.js +4144 -0
- package/dist/bin/{exe-link.js → agentic-semantic-label.js} +1532 -2173
- package/dist/bin/backfill-conversations.js +528 -20
- package/dist/bin/backfill-responses.js +528 -20
- package/dist/bin/backfill-vectors.js +255 -20
- package/dist/bin/bulk-sync-postgres.js +4876 -0
- package/dist/bin/cleanup-stale-review-tasks.js +529 -21
- package/dist/bin/cli.js +3471 -1491
- package/dist/bin/exe-agent-config.js +4 -0
- package/dist/bin/exe-agent.js +16 -0
- package/dist/bin/exe-assign.js +528 -20
- package/dist/bin/exe-boot.js +492 -54
- package/dist/bin/exe-call.js +16 -0
- package/dist/bin/exe-cloud.js +7415 -518
- package/dist/bin/exe-dispatch.js +540 -22
- package/dist/bin/exe-doctor.js +3404 -1225
- package/dist/bin/exe-export-behaviors.js +542 -24
- package/dist/bin/exe-forget.js +529 -21
- package/dist/bin/exe-gateway.js +595 -25
- package/dist/bin/exe-heartbeat.js +541 -24
- package/dist/bin/exe-kill.js +529 -21
- package/dist/bin/exe-launch-agent.js +2334 -1067
- package/dist/bin/exe-new-employee.js +324 -166
- package/dist/bin/exe-pending-messages.js +529 -21
- package/dist/bin/exe-pending-notifications.js +529 -21
- package/dist/bin/exe-pending-reviews.js +529 -21
- package/dist/bin/exe-rename.js +529 -21
- package/dist/bin/exe-review.js +529 -21
- package/dist/bin/exe-search.js +542 -24
- package/dist/bin/exe-session-cleanup.js +540 -22
- package/dist/bin/exe-settings.js +14 -0
- package/dist/bin/exe-start-codex.js +817 -144
- package/dist/bin/exe-start-opencode.js +776 -80
- package/dist/bin/exe-status.js +529 -21
- package/dist/bin/exe-team.js +529 -21
- package/dist/bin/git-sweep.js +540 -22
- package/dist/bin/graph-backfill.js +580 -21
- package/dist/bin/graph-export.js +529 -21
- package/dist/bin/graph-layer-benchmark.js +109 -0
- package/dist/bin/install.js +420 -289
- package/dist/bin/intercom-check.js +540 -22
- package/dist/bin/postgres-agentic-reflection-backfill.js +187 -0
- package/dist/bin/postgres-agentic-semantic-backfill.js +237 -0
- package/dist/bin/scan-tasks.js +540 -22
- package/dist/bin/setup.js +790 -206
- package/dist/bin/shard-migrate.js +528 -20
- package/dist/bin/update.js +4 -0
- package/dist/gateway/index.js +593 -23
- package/dist/hooks/bug-report-worker.js +651 -64
- package/dist/hooks/codex-stop-task-finalizer.js +540 -22
- package/dist/hooks/commit-complete.js +540 -22
- package/dist/hooks/error-recall.js +542 -24
- package/dist/hooks/exe-heartbeat-hook.js +4 -0
- package/dist/hooks/ingest-worker.js +4 -0
- package/dist/hooks/ingest.js +539 -22
- package/dist/hooks/instructions-loaded.js +529 -21
- package/dist/hooks/notification.js +529 -21
- package/dist/hooks/post-compact.js +529 -21
- package/dist/hooks/post-tool-combined.js +543 -25
- package/dist/hooks/pre-compact.js +772 -127
- package/dist/hooks/pre-tool-use.js +529 -21
- package/dist/hooks/prompt-submit.js +543 -25
- package/dist/hooks/session-end.js +673 -140
- package/dist/hooks/session-start.js +662 -26
- package/dist/hooks/stop.js +540 -23
- package/dist/hooks/subagent-stop.js +529 -21
- package/dist/hooks/summary-worker.js +571 -126
- package/dist/index.js +593 -23
- package/dist/lib/agent-config.js +4 -0
- package/dist/lib/cloud-sync.js +408 -47
- package/dist/lib/config.js +25 -1
- package/dist/lib/consolidation.js +5 -1
- package/dist/lib/database.js +128 -0
- package/dist/lib/db-daemon-client.js +4 -0
- package/dist/lib/db.js +128 -0
- package/dist/lib/device-registry.js +128 -0
- package/dist/lib/embedder.js +25 -1
- package/dist/lib/employee-templates.js +16 -0
- package/dist/lib/employees.js +4 -0
- package/dist/lib/exe-daemon-client.js +4 -0
- package/dist/lib/exe-daemon.js +3158 -930
- package/dist/lib/hybrid-search.js +542 -24
- package/dist/lib/identity.js +7 -0
- package/dist/lib/keychain.js +178 -22
- package/dist/lib/license.js +4 -0
- package/dist/lib/messaging.js +7 -0
- package/dist/lib/reminders.js +7 -0
- package/dist/lib/schedules.js +255 -20
- package/dist/lib/skill-learning.js +28 -1
- package/dist/lib/status-brief.js +39 -0
- package/dist/lib/store.js +528 -20
- package/dist/lib/task-router.js +4 -0
- package/dist/lib/tasks.js +28 -1
- package/dist/lib/tmux-routing.js +28 -1
- package/dist/lib/token-spend.js +7 -0
- package/dist/mcp/server.js +2739 -813
- package/dist/mcp/tools/complete-reminder.js +7 -0
- package/dist/mcp/tools/create-reminder.js +7 -0
- package/dist/mcp/tools/create-task.js +28 -1
- package/dist/mcp/tools/deactivate-behavior.js +7 -0
- package/dist/mcp/tools/list-reminders.js +7 -0
- package/dist/mcp/tools/list-tasks.js +7 -0
- package/dist/mcp/tools/send-message.js +7 -0
- package/dist/mcp/tools/update-task.js +28 -1
- package/dist/runtime/index.js +540 -22
- package/dist/tui/App.js +618 -29
- package/package.json +9 -5
- package/src/commands/exe/cloud.md +11 -8
- package/stack.release.json +3 -3
- package/src/commands/exe/link.md +0 -17
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/bin/graph-layer-benchmark.ts
|
|
4
|
+
import { Client } from "pg";
|
|
5
|
+
function now() {
|
|
6
|
+
return Date.now();
|
|
7
|
+
}
|
|
8
|
+
function sqlString(value) {
|
|
9
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
10
|
+
}
|
|
11
|
+
async function timed(layer, check, fn) {
|
|
12
|
+
const start = now();
|
|
13
|
+
try {
|
|
14
|
+
const detail = await fn();
|
|
15
|
+
return { layer, check, ok: true, ms: now() - start, detail };
|
|
16
|
+
} catch (err) {
|
|
17
|
+
return { layer, check, ok: false, ms: now() - start, detail: err instanceof Error ? err.message : String(err) };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async function withPg(url, fn) {
|
|
21
|
+
const client = new Client({ connectionString: url });
|
|
22
|
+
await client.connect();
|
|
23
|
+
try {
|
|
24
|
+
return await fn(client);
|
|
25
|
+
} finally {
|
|
26
|
+
await client.end();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function canonicalBench(url) {
|
|
30
|
+
return withPg(url, async (client) => {
|
|
31
|
+
const rows = [];
|
|
32
|
+
rows.push(await timed("postgres-canonical", "ontology-counts", async () => {
|
|
33
|
+
const r = await client.query(`select
|
|
34
|
+
(select count(*) from memory.agent_events) as events,
|
|
35
|
+
(select count(*) from memory.agent_goals) as goals,
|
|
36
|
+
(select count(*) from memory.relationships) as relationships`);
|
|
37
|
+
return JSON.stringify(r.rows[0]);
|
|
38
|
+
}));
|
|
39
|
+
rows.push(await timed("postgres-canonical", "session-timeline", async () => {
|
|
40
|
+
const r = await client.query(`select id, event_type, occurred_at from memory.agent_events order by occurred_at desc limit 50`);
|
|
41
|
+
return `${r.rowCount ?? 0} latest events`;
|
|
42
|
+
}));
|
|
43
|
+
rows.push(await timed("postgres-canonical", "goal-evidence-hop", async () => {
|
|
44
|
+
const r = await client.query(`select g.id, g.statement, count(l.id)::int as links
|
|
45
|
+
from memory.agent_goals g left join memory.agent_goal_links l on l.goal_id = g.id
|
|
46
|
+
group by g.id, g.statement order by links desc limit 20`);
|
|
47
|
+
return `${r.rowCount ?? 0} goals with evidence links`;
|
|
48
|
+
}));
|
|
49
|
+
rows.push(await timed("postgres-canonical", "recursive-relationship-hop", async () => {
|
|
50
|
+
const r = await client.query(`with recursive walk(depth, source_entity_id, target_entity_id, path) as (
|
|
51
|
+
select 1, source_entity_id, target_entity_id, array[source_entity_id, target_entity_id]
|
|
52
|
+
from (select source_entity_id, target_entity_id from memory.relationships limit 25) seed
|
|
53
|
+
union all
|
|
54
|
+
select w.depth + 1, r.source_entity_id, r.target_entity_id, w.path || r.target_entity_id
|
|
55
|
+
from walk w join memory.relationships r on r.source_entity_id = w.target_entity_id
|
|
56
|
+
where w.depth < 3 and not r.target_entity_id = any(w.path)
|
|
57
|
+
) select count(*)::int as paths from walk`);
|
|
58
|
+
return `${r.rows[0]?.paths ?? 0} paths depth<=3`;
|
|
59
|
+
}));
|
|
60
|
+
return rows;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async function ageBench(url) {
|
|
64
|
+
return withPg(url, async (client) => {
|
|
65
|
+
const rows = [];
|
|
66
|
+
const graph = process.env.AGE_GRAPH_NAME || "exe_ontology";
|
|
67
|
+
rows.push(await timed("apache-age", "extension-available", async () => {
|
|
68
|
+
const r = await client.query(`select installed_version from pg_available_extensions where name = 'age'`);
|
|
69
|
+
return r.rows[0]?.installed_version ? `available ${r.rows[0].installed_version}` : "not available";
|
|
70
|
+
}));
|
|
71
|
+
rows.push(await timed("apache-age", "extension-installed", async () => {
|
|
72
|
+
const r = await client.query(`select extversion from pg_extension where extname = 'age'`);
|
|
73
|
+
if (!r.rows[0]) throw new Error("age extension not installed in this database");
|
|
74
|
+
return `installed ${r.rows[0].extversion}`;
|
|
75
|
+
}));
|
|
76
|
+
rows.push(await timed("apache-age", "cypher-smoke", async () => {
|
|
77
|
+
await client.query(`LOAD 'age'`);
|
|
78
|
+
await client.query(`SET search_path = ag_catalog, "$user", public`);
|
|
79
|
+
const r = await client.query(`SELECT * FROM cypher(${sqlString(graph)}, $$ MATCH (n) RETURN count(n) $$) AS (count agtype)`);
|
|
80
|
+
return `${r.rowCount ?? 0} cypher rows`;
|
|
81
|
+
}));
|
|
82
|
+
return rows;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async function main() {
|
|
86
|
+
const url = process.env.DATABASE_URL || process.env.EXED_DATABASE_URL;
|
|
87
|
+
const ageUrl = process.env.AGE_DATABASE_URL || url;
|
|
88
|
+
const agensUrl = process.env.AGENSGRAPH_DATABASE_URL;
|
|
89
|
+
const results = [];
|
|
90
|
+
if (!url) throw new Error("DATABASE_URL or EXED_DATABASE_URL is required");
|
|
91
|
+
results.push(...await canonicalBench(url));
|
|
92
|
+
if (ageUrl) results.push(...await ageBench(ageUrl));
|
|
93
|
+
if (agensUrl) {
|
|
94
|
+
results.push(await timed("agensgraph", "connect-and-count", async () => withPg(agensUrl, async (client) => {
|
|
95
|
+
const r = await client.query(`select count(*)::int as nodes from ag_graph limit 1`);
|
|
96
|
+
return JSON.stringify(r.rows[0] ?? {});
|
|
97
|
+
})));
|
|
98
|
+
} else {
|
|
99
|
+
results.push({ layer: "agensgraph", check: "configured", ok: false, ms: 0, detail: "AGENSGRAPH_DATABASE_URL not set" });
|
|
100
|
+
}
|
|
101
|
+
console.log(JSON.stringify({ generated_at: (/* @__PURE__ */ new Date()).toISOString(), results }, null, 2));
|
|
102
|
+
const failedRequired = results.filter((r) => r.layer === "postgres-canonical" && !r.ok);
|
|
103
|
+
process.exit(failedRequired.length ? 1 : 0);
|
|
104
|
+
}
|
|
105
|
+
main().catch((err) => {
|
|
106
|
+
process.stderr.write(`[graph-layer-benchmark] FATAL: ${err instanceof Error ? err.message : String(err)}
|
|
107
|
+
`);
|
|
108
|
+
process.exit(1);
|
|
109
|
+
});
|