@askexenow/exe-os 0.9.60 → 0.9.62

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.
Files changed (106) hide show
  1. package/deploy/stack-manifests/v0.9.json +62 -13
  2. package/dist/bin/backfill-conversations.js +282 -7
  3. package/dist/bin/backfill-responses.js +282 -7
  4. package/dist/bin/backfill-vectors.js +119 -7
  5. package/dist/bin/cc-doctor.js +376 -0
  6. package/dist/bin/cleanup-stale-review-tasks.js +282 -7
  7. package/dist/bin/cli.js +455 -77
  8. package/dist/bin/customer-readiness.js +33 -0
  9. package/dist/bin/exe-agent-config.js +2 -2
  10. package/dist/bin/exe-agent.js +3 -3
  11. package/dist/bin/exe-assign.js +282 -7
  12. package/dist/bin/exe-boot.js +125 -13
  13. package/dist/bin/exe-call.js +3 -3
  14. package/dist/bin/exe-cloud.js +2 -2
  15. package/dist/bin/exe-dispatch.js +282 -7
  16. package/dist/bin/exe-doctor.js +119 -7
  17. package/dist/bin/exe-export-behaviors.js +282 -7
  18. package/dist/bin/exe-forget.js +336 -7
  19. package/dist/bin/exe-gateway.js +282 -7
  20. package/dist/bin/exe-heartbeat.js +284 -9
  21. package/dist/bin/exe-kill.js +282 -7
  22. package/dist/bin/exe-launch-agent.js +282 -7
  23. package/dist/bin/exe-link.js +121 -9
  24. package/dist/bin/exe-new-employee.js +50 -21
  25. package/dist/bin/exe-pending-messages.js +282 -7
  26. package/dist/bin/exe-pending-notifications.js +282 -7
  27. package/dist/bin/exe-pending-reviews.js +282 -7
  28. package/dist/bin/exe-rename.js +282 -7
  29. package/dist/bin/exe-review.js +282 -7
  30. package/dist/bin/exe-search.js +306 -8
  31. package/dist/bin/exe-session-cleanup.js +282 -7
  32. package/dist/bin/exe-settings.js +2 -2
  33. package/dist/bin/exe-start-codex.js +326 -21
  34. package/dist/bin/exe-start-opencode.js +304 -10
  35. package/dist/bin/exe-status.js +282 -7
  36. package/dist/bin/exe-team.js +282 -7
  37. package/dist/bin/git-sweep.js +282 -7
  38. package/dist/bin/graph-backfill.js +282 -7
  39. package/dist/bin/graph-export.js +282 -7
  40. package/dist/bin/install.js +58 -33
  41. package/dist/bin/intercom-check.js +282 -7
  42. package/dist/bin/pre-build-guard.js +98 -0
  43. package/dist/bin/scan-tasks.js +282 -7
  44. package/dist/bin/setup.js +122 -10
  45. package/dist/bin/shard-migrate.js +282 -7
  46. package/dist/bin/stack-update.js +79 -11
  47. package/dist/bin/update.js +2 -2
  48. package/dist/gateway/index.js +288 -13
  49. package/dist/hooks/bug-report-worker.js +282 -7
  50. package/dist/hooks/codex-stop-task-finalizer.js +282 -7
  51. package/dist/hooks/commit-complete.js +282 -7
  52. package/dist/hooks/error-recall.js +306 -8
  53. package/dist/hooks/exe-heartbeat-hook.js +2 -2
  54. package/dist/hooks/ingest-worker.js +2 -2
  55. package/dist/hooks/ingest.js +282 -7
  56. package/dist/hooks/instructions-loaded.js +282 -7
  57. package/dist/hooks/notification.js +282 -7
  58. package/dist/hooks/post-compact.js +282 -7
  59. package/dist/hooks/post-tool-combined.js +306 -8
  60. package/dist/hooks/pre-compact.js +282 -7
  61. package/dist/hooks/pre-tool-use.js +282 -7
  62. package/dist/hooks/prompt-submit.js +306 -8
  63. package/dist/hooks/session-end.js +282 -7
  64. package/dist/hooks/session-start.js +308 -10
  65. package/dist/hooks/stop.js +282 -7
  66. package/dist/hooks/subagent-stop.js +282 -7
  67. package/dist/hooks/summary-worker.js +125 -13
  68. package/dist/index.js +288 -13
  69. package/dist/lib/agent-config.js +2 -2
  70. package/dist/lib/cloud-sync.js +121 -9
  71. package/dist/lib/config.js +2 -2
  72. package/dist/lib/consolidation.js +2 -2
  73. package/dist/lib/database.js +115 -3
  74. package/dist/lib/db-daemon-client.js +2 -2
  75. package/dist/lib/db.js +115 -3
  76. package/dist/lib/device-registry.js +115 -3
  77. package/dist/lib/embedder.js +2 -2
  78. package/dist/lib/employee-templates.js +3 -3
  79. package/dist/lib/employees.js +2 -2
  80. package/dist/lib/exe-daemon-client.js +2 -2
  81. package/dist/lib/exe-daemon.js +339 -31
  82. package/dist/lib/hybrid-search.js +306 -8
  83. package/dist/lib/identity.js +2 -2
  84. package/dist/lib/license.js +2 -2
  85. package/dist/lib/messaging.js +2 -2
  86. package/dist/lib/reminders.js +2 -2
  87. package/dist/lib/schedules.js +119 -7
  88. package/dist/lib/skill-learning.js +2 -2
  89. package/dist/lib/store.js +282 -7
  90. package/dist/lib/task-router.js +2 -2
  91. package/dist/lib/tasks.js +2 -2
  92. package/dist/lib/tmux-routing.js +2 -2
  93. package/dist/lib/token-spend.js +2 -2
  94. package/dist/mcp/server.js +339 -31
  95. package/dist/mcp/tools/complete-reminder.js +2 -2
  96. package/dist/mcp/tools/create-reminder.js +2 -2
  97. package/dist/mcp/tools/create-task.js +2 -2
  98. package/dist/mcp/tools/deactivate-behavior.js +2 -2
  99. package/dist/mcp/tools/list-reminders.js +2 -2
  100. package/dist/mcp/tools/list-tasks.js +2 -2
  101. package/dist/mcp/tools/send-message.js +2 -2
  102. package/dist/mcp/tools/update-task.js +2 -2
  103. package/dist/runtime/index.js +282 -7
  104. package/dist/tui/App.js +290 -15
  105. package/package.json +3 -2
  106. package/stack.release.json +23 -7
@@ -95,8 +95,8 @@ var init_config = __esm({
95
95
  rerankerAutoTrigger: {
96
96
  enabled: true,
97
97
  broadQueryMinCardinality: 5e4,
98
- fetchTopK: 150,
99
- returnTopK: 5
98
+ fetchTopK: 200,
99
+ returnTopK: 20
100
100
  }
101
101
  },
102
102
  graphRagEnabled: true,
@@ -2153,7 +2153,7 @@ async function ensureSchema() {
2153
2153
  ON session_kills(agent_id);
2154
2154
  `);
2155
2155
  await client.execute(`
2156
- CREATE TABLE IF NOT EXISTS global_procedures (
2156
+ CREATE TABLE IF NOT EXISTS company_procedures (
2157
2157
  id TEXT PRIMARY KEY,
2158
2158
  title TEXT NOT NULL,
2159
2159
  content TEXT NOT NULL,
@@ -2164,6 +2164,73 @@ async function ensureSchema() {
2164
2164
  updated_at TEXT NOT NULL
2165
2165
  )
2166
2166
  `);
2167
+ const legacyProcedureObject = await client.execute({
2168
+ sql: "SELECT type FROM sqlite_master WHERE name = 'global_procedures'",
2169
+ args: []
2170
+ });
2171
+ const legacyProcedureType = legacyProcedureObject.rows[0]?.type == null ? null : String(legacyProcedureObject.rows[0].type);
2172
+ if (legacyProcedureType === "table") {
2173
+ await client.execute(`
2174
+ INSERT OR IGNORE INTO company_procedures
2175
+ (id, title, content, priority, domain, active, created_at, updated_at)
2176
+ SELECT id, title, content, priority, domain, active, created_at, updated_at
2177
+ FROM global_procedures
2178
+ `);
2179
+ await client.executeMultiple(`
2180
+ CREATE TRIGGER IF NOT EXISTS global_procedures_mirror_insert
2181
+ AFTER INSERT ON global_procedures
2182
+ BEGIN
2183
+ INSERT OR IGNORE INTO company_procedures
2184
+ (id, title, content, priority, domain, active, created_at, updated_at)
2185
+ VALUES
2186
+ (NEW.id, NEW.title, NEW.content, NEW.priority, NEW.domain, NEW.active, NEW.created_at, NEW.updated_at);
2187
+ END;
2188
+
2189
+ CREATE TRIGGER IF NOT EXISTS global_procedures_mirror_update
2190
+ AFTER UPDATE ON global_procedures
2191
+ BEGIN
2192
+ UPDATE company_procedures
2193
+ SET title = NEW.title,
2194
+ content = NEW.content,
2195
+ priority = NEW.priority,
2196
+ domain = NEW.domain,
2197
+ active = NEW.active,
2198
+ created_at = NEW.created_at,
2199
+ updated_at = NEW.updated_at
2200
+ WHERE id = OLD.id;
2201
+ END;
2202
+ `);
2203
+ } else {
2204
+ await client.execute(`
2205
+ CREATE VIEW IF NOT EXISTS global_procedures AS
2206
+ SELECT id, title, content, priority, domain, active, created_at, updated_at
2207
+ FROM company_procedures
2208
+ `);
2209
+ await client.executeMultiple(`
2210
+ CREATE TRIGGER IF NOT EXISTS global_procedures_insert
2211
+ INSTEAD OF INSERT ON global_procedures
2212
+ BEGIN
2213
+ INSERT INTO company_procedures
2214
+ (id, title, content, priority, domain, active, created_at, updated_at)
2215
+ VALUES
2216
+ (NEW.id, NEW.title, NEW.content, NEW.priority, NEW.domain, NEW.active, NEW.created_at, NEW.updated_at);
2217
+ END;
2218
+
2219
+ CREATE TRIGGER IF NOT EXISTS global_procedures_update
2220
+ INSTEAD OF UPDATE ON global_procedures
2221
+ BEGIN
2222
+ UPDATE company_procedures
2223
+ SET title = NEW.title,
2224
+ content = NEW.content,
2225
+ priority = NEW.priority,
2226
+ domain = NEW.domain,
2227
+ active = NEW.active,
2228
+ created_at = NEW.created_at,
2229
+ updated_at = NEW.updated_at
2230
+ WHERE id = OLD.id;
2231
+ END;
2232
+ `);
2233
+ }
2167
2234
  await client.executeMultiple(`
2168
2235
  CREATE TABLE IF NOT EXISTS conversations (
2169
2236
  id TEXT PRIMARY KEY,
@@ -2303,6 +2370,51 @@ async function ensureSchema() {
2303
2370
  VALUES (new.rowid, new.content_text, new.sender_name, new.agent_response);
2304
2371
  END;
2305
2372
  `);
2373
+ await client.executeMultiple(`
2374
+ CREATE TABLE IF NOT EXISTS memory_cards (
2375
+ id TEXT PRIMARY KEY,
2376
+ memory_id TEXT NOT NULL,
2377
+ agent_id TEXT NOT NULL,
2378
+ session_id TEXT NOT NULL,
2379
+ project_name TEXT,
2380
+ timestamp TEXT NOT NULL,
2381
+ card_type TEXT NOT NULL,
2382
+ subject TEXT,
2383
+ predicate TEXT,
2384
+ object TEXT,
2385
+ content TEXT NOT NULL,
2386
+ source_ref TEXT,
2387
+ confidence REAL DEFAULT 0.6,
2388
+ active INTEGER DEFAULT 1,
2389
+ created_at TEXT NOT NULL
2390
+ );
2391
+
2392
+ CREATE INDEX IF NOT EXISTS idx_memory_cards_agent
2393
+ ON memory_cards(agent_id, active, timestamp);
2394
+
2395
+ CREATE INDEX IF NOT EXISTS idx_memory_cards_memory
2396
+ ON memory_cards(memory_id);
2397
+
2398
+ CREATE VIRTUAL TABLE IF NOT EXISTS memory_cards_fts
2399
+ USING fts5(content, subject, predicate, object, content='memory_cards', content_rowid='rowid');
2400
+
2401
+ CREATE TRIGGER IF NOT EXISTS memory_cards_fts_ai AFTER INSERT ON memory_cards BEGIN
2402
+ INSERT INTO memory_cards_fts(rowid, content, subject, predicate, object)
2403
+ VALUES (new.rowid, new.content, new.subject, new.predicate, new.object);
2404
+ END;
2405
+
2406
+ CREATE TRIGGER IF NOT EXISTS memory_cards_fts_ad AFTER DELETE ON memory_cards BEGIN
2407
+ INSERT INTO memory_cards_fts(memory_cards_fts, rowid, content, subject, predicate, object)
2408
+ VALUES('delete', old.rowid, old.content, old.subject, old.predicate, old.object);
2409
+ END;
2410
+
2411
+ CREATE TRIGGER IF NOT EXISTS memory_cards_fts_au AFTER UPDATE ON memory_cards BEGIN
2412
+ INSERT INTO memory_cards_fts(memory_cards_fts, rowid, content, subject, predicate, object)
2413
+ VALUES('delete', old.rowid, old.content, old.subject, old.predicate, old.object);
2414
+ INSERT INTO memory_cards_fts(rowid, content, subject, predicate, object)
2415
+ VALUES (new.rowid, new.content, new.subject, new.predicate, new.object);
2416
+ END;
2417
+ `);
2306
2418
  try {
2307
2419
  await client.execute({
2308
2420
  sql: `ALTER TABLE memories ADD COLUMN tier INTEGER DEFAULT 3`,
@@ -86,8 +86,8 @@ var DEFAULT_CONFIG = {
86
86
  rerankerAutoTrigger: {
87
87
  enabled: true,
88
88
  broadQueryMinCardinality: 5e4,
89
- fetchTopK: 150,
90
- returnTopK: 5
89
+ fetchTopK: 200,
90
+ returnTopK: 20
91
91
  }
92
92
  },
93
93
  graphRagEnabled: true,
package/dist/lib/db.js CHANGED
@@ -95,8 +95,8 @@ var init_config = __esm({
95
95
  rerankerAutoTrigger: {
96
96
  enabled: true,
97
97
  broadQueryMinCardinality: 5e4,
98
- fetchTopK: 150,
99
- returnTopK: 5
98
+ fetchTopK: 200,
99
+ returnTopK: 20
100
100
  }
101
101
  },
102
102
  graphRagEnabled: true,
@@ -2153,7 +2153,7 @@ async function ensureSchema() {
2153
2153
  ON session_kills(agent_id);
2154
2154
  `);
2155
2155
  await client.execute(`
2156
- CREATE TABLE IF NOT EXISTS global_procedures (
2156
+ CREATE TABLE IF NOT EXISTS company_procedures (
2157
2157
  id TEXT PRIMARY KEY,
2158
2158
  title TEXT NOT NULL,
2159
2159
  content TEXT NOT NULL,
@@ -2164,6 +2164,73 @@ async function ensureSchema() {
2164
2164
  updated_at TEXT NOT NULL
2165
2165
  )
2166
2166
  `);
2167
+ const legacyProcedureObject = await client.execute({
2168
+ sql: "SELECT type FROM sqlite_master WHERE name = 'global_procedures'",
2169
+ args: []
2170
+ });
2171
+ const legacyProcedureType = legacyProcedureObject.rows[0]?.type == null ? null : String(legacyProcedureObject.rows[0].type);
2172
+ if (legacyProcedureType === "table") {
2173
+ await client.execute(`
2174
+ INSERT OR IGNORE INTO company_procedures
2175
+ (id, title, content, priority, domain, active, created_at, updated_at)
2176
+ SELECT id, title, content, priority, domain, active, created_at, updated_at
2177
+ FROM global_procedures
2178
+ `);
2179
+ await client.executeMultiple(`
2180
+ CREATE TRIGGER IF NOT EXISTS global_procedures_mirror_insert
2181
+ AFTER INSERT ON global_procedures
2182
+ BEGIN
2183
+ INSERT OR IGNORE INTO company_procedures
2184
+ (id, title, content, priority, domain, active, created_at, updated_at)
2185
+ VALUES
2186
+ (NEW.id, NEW.title, NEW.content, NEW.priority, NEW.domain, NEW.active, NEW.created_at, NEW.updated_at);
2187
+ END;
2188
+
2189
+ CREATE TRIGGER IF NOT EXISTS global_procedures_mirror_update
2190
+ AFTER UPDATE ON global_procedures
2191
+ BEGIN
2192
+ UPDATE company_procedures
2193
+ SET title = NEW.title,
2194
+ content = NEW.content,
2195
+ priority = NEW.priority,
2196
+ domain = NEW.domain,
2197
+ active = NEW.active,
2198
+ created_at = NEW.created_at,
2199
+ updated_at = NEW.updated_at
2200
+ WHERE id = OLD.id;
2201
+ END;
2202
+ `);
2203
+ } else {
2204
+ await client.execute(`
2205
+ CREATE VIEW IF NOT EXISTS global_procedures AS
2206
+ SELECT id, title, content, priority, domain, active, created_at, updated_at
2207
+ FROM company_procedures
2208
+ `);
2209
+ await client.executeMultiple(`
2210
+ CREATE TRIGGER IF NOT EXISTS global_procedures_insert
2211
+ INSTEAD OF INSERT ON global_procedures
2212
+ BEGIN
2213
+ INSERT INTO company_procedures
2214
+ (id, title, content, priority, domain, active, created_at, updated_at)
2215
+ VALUES
2216
+ (NEW.id, NEW.title, NEW.content, NEW.priority, NEW.domain, NEW.active, NEW.created_at, NEW.updated_at);
2217
+ END;
2218
+
2219
+ CREATE TRIGGER IF NOT EXISTS global_procedures_update
2220
+ INSTEAD OF UPDATE ON global_procedures
2221
+ BEGIN
2222
+ UPDATE company_procedures
2223
+ SET title = NEW.title,
2224
+ content = NEW.content,
2225
+ priority = NEW.priority,
2226
+ domain = NEW.domain,
2227
+ active = NEW.active,
2228
+ created_at = NEW.created_at,
2229
+ updated_at = NEW.updated_at
2230
+ WHERE id = OLD.id;
2231
+ END;
2232
+ `);
2233
+ }
2167
2234
  await client.executeMultiple(`
2168
2235
  CREATE TABLE IF NOT EXISTS conversations (
2169
2236
  id TEXT PRIMARY KEY,
@@ -2303,6 +2370,51 @@ async function ensureSchema() {
2303
2370
  VALUES (new.rowid, new.content_text, new.sender_name, new.agent_response);
2304
2371
  END;
2305
2372
  `);
2373
+ await client.executeMultiple(`
2374
+ CREATE TABLE IF NOT EXISTS memory_cards (
2375
+ id TEXT PRIMARY KEY,
2376
+ memory_id TEXT NOT NULL,
2377
+ agent_id TEXT NOT NULL,
2378
+ session_id TEXT NOT NULL,
2379
+ project_name TEXT,
2380
+ timestamp TEXT NOT NULL,
2381
+ card_type TEXT NOT NULL,
2382
+ subject TEXT,
2383
+ predicate TEXT,
2384
+ object TEXT,
2385
+ content TEXT NOT NULL,
2386
+ source_ref TEXT,
2387
+ confidence REAL DEFAULT 0.6,
2388
+ active INTEGER DEFAULT 1,
2389
+ created_at TEXT NOT NULL
2390
+ );
2391
+
2392
+ CREATE INDEX IF NOT EXISTS idx_memory_cards_agent
2393
+ ON memory_cards(agent_id, active, timestamp);
2394
+
2395
+ CREATE INDEX IF NOT EXISTS idx_memory_cards_memory
2396
+ ON memory_cards(memory_id);
2397
+
2398
+ CREATE VIRTUAL TABLE IF NOT EXISTS memory_cards_fts
2399
+ USING fts5(content, subject, predicate, object, content='memory_cards', content_rowid='rowid');
2400
+
2401
+ CREATE TRIGGER IF NOT EXISTS memory_cards_fts_ai AFTER INSERT ON memory_cards BEGIN
2402
+ INSERT INTO memory_cards_fts(rowid, content, subject, predicate, object)
2403
+ VALUES (new.rowid, new.content, new.subject, new.predicate, new.object);
2404
+ END;
2405
+
2406
+ CREATE TRIGGER IF NOT EXISTS memory_cards_fts_ad AFTER DELETE ON memory_cards BEGIN
2407
+ INSERT INTO memory_cards_fts(memory_cards_fts, rowid, content, subject, predicate, object)
2408
+ VALUES('delete', old.rowid, old.content, old.subject, old.predicate, old.object);
2409
+ END;
2410
+
2411
+ CREATE TRIGGER IF NOT EXISTS memory_cards_fts_au AFTER UPDATE ON memory_cards BEGIN
2412
+ INSERT INTO memory_cards_fts(memory_cards_fts, rowid, content, subject, predicate, object)
2413
+ VALUES('delete', old.rowid, old.content, old.subject, old.predicate, old.object);
2414
+ INSERT INTO memory_cards_fts(rowid, content, subject, predicate, object)
2415
+ VALUES (new.rowid, new.content, new.subject, new.predicate, new.object);
2416
+ END;
2417
+ `);
2306
2418
  try {
2307
2419
  await client.execute({
2308
2420
  sql: `ALTER TABLE memories ADD COLUMN tier INTEGER DEFAULT 3`,
@@ -95,8 +95,8 @@ var init_config = __esm({
95
95
  rerankerAutoTrigger: {
96
96
  enabled: true,
97
97
  broadQueryMinCardinality: 5e4,
98
- fetchTopK: 150,
99
- returnTopK: 5
98
+ fetchTopK: 200,
99
+ returnTopK: 20
100
100
  }
101
101
  },
102
102
  graphRagEnabled: true,
@@ -2182,7 +2182,7 @@ async function ensureSchema() {
2182
2182
  ON session_kills(agent_id);
2183
2183
  `);
2184
2184
  await client.execute(`
2185
- CREATE TABLE IF NOT EXISTS global_procedures (
2185
+ CREATE TABLE IF NOT EXISTS company_procedures (
2186
2186
  id TEXT PRIMARY KEY,
2187
2187
  title TEXT NOT NULL,
2188
2188
  content TEXT NOT NULL,
@@ -2193,6 +2193,73 @@ async function ensureSchema() {
2193
2193
  updated_at TEXT NOT NULL
2194
2194
  )
2195
2195
  `);
2196
+ const legacyProcedureObject = await client.execute({
2197
+ sql: "SELECT type FROM sqlite_master WHERE name = 'global_procedures'",
2198
+ args: []
2199
+ });
2200
+ const legacyProcedureType = legacyProcedureObject.rows[0]?.type == null ? null : String(legacyProcedureObject.rows[0].type);
2201
+ if (legacyProcedureType === "table") {
2202
+ await client.execute(`
2203
+ INSERT OR IGNORE INTO company_procedures
2204
+ (id, title, content, priority, domain, active, created_at, updated_at)
2205
+ SELECT id, title, content, priority, domain, active, created_at, updated_at
2206
+ FROM global_procedures
2207
+ `);
2208
+ await client.executeMultiple(`
2209
+ CREATE TRIGGER IF NOT EXISTS global_procedures_mirror_insert
2210
+ AFTER INSERT ON global_procedures
2211
+ BEGIN
2212
+ INSERT OR IGNORE INTO company_procedures
2213
+ (id, title, content, priority, domain, active, created_at, updated_at)
2214
+ VALUES
2215
+ (NEW.id, NEW.title, NEW.content, NEW.priority, NEW.domain, NEW.active, NEW.created_at, NEW.updated_at);
2216
+ END;
2217
+
2218
+ CREATE TRIGGER IF NOT EXISTS global_procedures_mirror_update
2219
+ AFTER UPDATE ON global_procedures
2220
+ BEGIN
2221
+ UPDATE company_procedures
2222
+ SET title = NEW.title,
2223
+ content = NEW.content,
2224
+ priority = NEW.priority,
2225
+ domain = NEW.domain,
2226
+ active = NEW.active,
2227
+ created_at = NEW.created_at,
2228
+ updated_at = NEW.updated_at
2229
+ WHERE id = OLD.id;
2230
+ END;
2231
+ `);
2232
+ } else {
2233
+ await client.execute(`
2234
+ CREATE VIEW IF NOT EXISTS global_procedures AS
2235
+ SELECT id, title, content, priority, domain, active, created_at, updated_at
2236
+ FROM company_procedures
2237
+ `);
2238
+ await client.executeMultiple(`
2239
+ CREATE TRIGGER IF NOT EXISTS global_procedures_insert
2240
+ INSTEAD OF INSERT ON global_procedures
2241
+ BEGIN
2242
+ INSERT INTO company_procedures
2243
+ (id, title, content, priority, domain, active, created_at, updated_at)
2244
+ VALUES
2245
+ (NEW.id, NEW.title, NEW.content, NEW.priority, NEW.domain, NEW.active, NEW.created_at, NEW.updated_at);
2246
+ END;
2247
+
2248
+ CREATE TRIGGER IF NOT EXISTS global_procedures_update
2249
+ INSTEAD OF UPDATE ON global_procedures
2250
+ BEGIN
2251
+ UPDATE company_procedures
2252
+ SET title = NEW.title,
2253
+ content = NEW.content,
2254
+ priority = NEW.priority,
2255
+ domain = NEW.domain,
2256
+ active = NEW.active,
2257
+ created_at = NEW.created_at,
2258
+ updated_at = NEW.updated_at
2259
+ WHERE id = OLD.id;
2260
+ END;
2261
+ `);
2262
+ }
2196
2263
  await client.executeMultiple(`
2197
2264
  CREATE TABLE IF NOT EXISTS conversations (
2198
2265
  id TEXT PRIMARY KEY,
@@ -2332,6 +2399,51 @@ async function ensureSchema() {
2332
2399
  VALUES (new.rowid, new.content_text, new.sender_name, new.agent_response);
2333
2400
  END;
2334
2401
  `);
2402
+ await client.executeMultiple(`
2403
+ CREATE TABLE IF NOT EXISTS memory_cards (
2404
+ id TEXT PRIMARY KEY,
2405
+ memory_id TEXT NOT NULL,
2406
+ agent_id TEXT NOT NULL,
2407
+ session_id TEXT NOT NULL,
2408
+ project_name TEXT,
2409
+ timestamp TEXT NOT NULL,
2410
+ card_type TEXT NOT NULL,
2411
+ subject TEXT,
2412
+ predicate TEXT,
2413
+ object TEXT,
2414
+ content TEXT NOT NULL,
2415
+ source_ref TEXT,
2416
+ confidence REAL DEFAULT 0.6,
2417
+ active INTEGER DEFAULT 1,
2418
+ created_at TEXT NOT NULL
2419
+ );
2420
+
2421
+ CREATE INDEX IF NOT EXISTS idx_memory_cards_agent
2422
+ ON memory_cards(agent_id, active, timestamp);
2423
+
2424
+ CREATE INDEX IF NOT EXISTS idx_memory_cards_memory
2425
+ ON memory_cards(memory_id);
2426
+
2427
+ CREATE VIRTUAL TABLE IF NOT EXISTS memory_cards_fts
2428
+ USING fts5(content, subject, predicate, object, content='memory_cards', content_rowid='rowid');
2429
+
2430
+ CREATE TRIGGER IF NOT EXISTS memory_cards_fts_ai AFTER INSERT ON memory_cards BEGIN
2431
+ INSERT INTO memory_cards_fts(rowid, content, subject, predicate, object)
2432
+ VALUES (new.rowid, new.content, new.subject, new.predicate, new.object);
2433
+ END;
2434
+
2435
+ CREATE TRIGGER IF NOT EXISTS memory_cards_fts_ad AFTER DELETE ON memory_cards BEGIN
2436
+ INSERT INTO memory_cards_fts(memory_cards_fts, rowid, content, subject, predicate, object)
2437
+ VALUES('delete', old.rowid, old.content, old.subject, old.predicate, old.object);
2438
+ END;
2439
+
2440
+ CREATE TRIGGER IF NOT EXISTS memory_cards_fts_au AFTER UPDATE ON memory_cards BEGIN
2441
+ INSERT INTO memory_cards_fts(memory_cards_fts, rowid, content, subject, predicate, object)
2442
+ VALUES('delete', old.rowid, old.content, old.subject, old.predicate, old.object);
2443
+ INSERT INTO memory_cards_fts(rowid, content, subject, predicate, object)
2444
+ VALUES (new.rowid, new.content, new.subject, new.predicate, new.object);
2445
+ END;
2446
+ `);
2335
2447
  try {
2336
2448
  await client.execute({
2337
2449
  sql: `ALTER TABLE memories ADD COLUMN tier INTEGER DEFAULT 3`,
@@ -246,8 +246,8 @@ var init_config = __esm({
246
246
  rerankerAutoTrigger: {
247
247
  enabled: true,
248
248
  broadQueryMinCardinality: 5e4,
249
- fetchTopK: 150,
250
- returnTopK: 5
249
+ fetchTopK: 200,
250
+ returnTopK: 20
251
251
  }
252
252
  },
253
253
  graphRagEnabled: true,
@@ -68,8 +68,8 @@ var init_config = __esm({
68
68
  rerankerAutoTrigger: {
69
69
  enabled: true,
70
70
  broadQueryMinCardinality: 5e4,
71
- fetchTopK: 150,
72
- returnTopK: 5
71
+ fetchTopK: 200,
72
+ returnTopK: 20
73
73
  }
74
74
  },
75
75
  graphRagEnabled: true,
@@ -306,7 +306,7 @@ var PLATFORM_PROCEDURES = [
306
306
  title: "MCP tools \u2014 advanced (triggers, skills, orchestration)",
307
307
  domain: "tool-use",
308
308
  priority: "p1",
309
- content: "create_trigger: set up a scheduled recurring agent job (cron). list_triggers: view active triggers. load_skill: load a slash-command skill dynamically. apply_starter_pack: import a pre-built behavior + identity pack for a role. export_orchestration: export full org state (tasks, behaviors, identities) as portable JSON. import_orchestration: import org state into a new instance. deploy_client: deploy a customer client instance. query_company_brain: unified RAG query across all company knowledge. create_reminder: set a text reminder (shown in boot brief). list_reminders: view pending reminders. complete_reminder: mark a reminder done. global_procedure: manage customer-owned company procedures (Layer 0; actions: store, list, deactivate). Legacy aliases: store_global_procedure, list_global_procedures, deactivate_global_procedure."
309
+ content: "create_trigger: set up a scheduled recurring agent job (cron). list_triggers: view active triggers. load_skill: load a slash-command skill dynamically. apply_starter_pack: import a pre-built behavior + identity pack for a role. export_orchestration: export full org state (tasks, behaviors, identities) as portable JSON. import_orchestration: import org state into a new instance. deploy_client: deploy a customer client instance. query_company_brain: unified RAG query across all company knowledge. create_reminder: set a text reminder (shown in boot brief). list_reminders: view pending reminders. complete_reminder: mark a reminder done. company_procedure: manage customer-owned company procedures (Layer 0; actions: store, list, deactivate). Legacy aliases: global_procedure, store_global_procedure, list_global_procedures, deactivate_global_procedure."
310
310
  }
311
311
  ];
312
312
  var PLATFORM_PROCEDURE_TITLES = new Set(
@@ -89,8 +89,8 @@ var init_config = __esm({
89
89
  rerankerAutoTrigger: {
90
90
  enabled: true,
91
91
  broadQueryMinCardinality: 5e4,
92
- fetchTopK: 150,
93
- returnTopK: 5
92
+ fetchTopK: 200,
93
+ returnTopK: 20
94
94
  }
95
95
  },
96
96
  graphRagEnabled: true,
@@ -86,8 +86,8 @@ var DEFAULT_CONFIG = {
86
86
  rerankerAutoTrigger: {
87
87
  enabled: true,
88
88
  broadQueryMinCardinality: 5e4,
89
- fetchTopK: 150,
90
- returnTopK: 5
89
+ fetchTopK: 200,
90
+ returnTopK: 20
91
91
  }
92
92
  },
93
93
  graphRagEnabled: true,