@askexenow/exe-os 0.8.41 → 0.8.43
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/dist/bin/backfill-conversations.js +805 -642
- package/dist/bin/backfill-responses.js +804 -641
- package/dist/bin/backfill-vectors.js +791 -634
- package/dist/bin/cleanup-stale-review-tasks.js +788 -631
- package/dist/bin/cli.js +1345 -660
- package/dist/bin/exe-agent.js +20 -1
- package/dist/bin/exe-assign.js +1503 -1343
- package/dist/bin/exe-boot.js +2518 -1798
- package/dist/bin/exe-call.js +39 -1
- package/dist/bin/exe-cloud.js +15 -1
- package/dist/bin/exe-dispatch.js +39 -2
- package/dist/bin/exe-doctor.js +790 -633
- package/dist/bin/exe-export-behaviors.js +792 -637
- package/dist/bin/exe-forget.js +145 -0
- package/dist/bin/exe-gateway.js +2500 -1877
- package/dist/bin/exe-heartbeat.js +147 -1
- package/dist/bin/exe-kill.js +795 -640
- package/dist/bin/exe-launch-agent.js +2168 -2008
- package/dist/bin/exe-link.js +28 -2
- package/dist/bin/exe-new-employee.js +25 -3
- package/dist/bin/exe-pending-messages.js +146 -1
- package/dist/bin/exe-pending-notifications.js +788 -631
- package/dist/bin/exe-pending-reviews.js +147 -1
- package/dist/bin/exe-rename.js +23 -0
- package/dist/bin/exe-review.js +490 -327
- package/dist/bin/exe-search.js +154 -3
- package/dist/bin/exe-session-cleanup.js +2466 -413
- package/dist/bin/exe-status.js +474 -317
- package/dist/bin/exe-team.js +474 -317
- package/dist/bin/git-sweep.js +2690 -150
- package/dist/bin/graph-backfill.js +794 -637
- package/dist/bin/graph-export.js +798 -641
- package/dist/bin/scan-tasks.js +2951 -44
- package/dist/bin/setup.js +62 -26
- package/dist/bin/shard-migrate.js +792 -637
- package/dist/bin/wiki-sync.js +794 -637
- package/dist/gateway/index.js +2504 -1895
- package/dist/hooks/bug-report-worker.js +2118 -576
- package/dist/hooks/commit-complete.js +2689 -149
- package/dist/hooks/error-recall.js +154 -3
- package/dist/hooks/ingest-worker.js +1439 -815
- package/dist/hooks/instructions-loaded.js +151 -0
- package/dist/hooks/notification.js +153 -2
- package/dist/hooks/post-compact.js +164 -0
- package/dist/hooks/pre-compact.js +3073 -101
- package/dist/hooks/pre-tool-use.js +151 -0
- package/dist/hooks/prompt-ingest-worker.js +1714 -1537
- package/dist/hooks/prompt-submit.js +2658 -1113
- package/dist/hooks/response-ingest-worker.js +170 -6
- package/dist/hooks/session-end.js +153 -2
- package/dist/hooks/session-start.js +154 -3
- package/dist/hooks/stop.js +151 -0
- package/dist/hooks/subagent-stop.js +151 -0
- package/dist/hooks/summary-worker.js +179 -7
- package/dist/index.js +278 -100
- package/dist/lib/cloud-sync.js +28 -2
- package/dist/lib/consolidation.js +69 -2
- package/dist/lib/database.js +19 -0
- package/dist/lib/device-registry.js +19 -0
- package/dist/lib/employee-templates.js +20 -1
- package/dist/lib/exe-daemon.js +236 -16
- package/dist/lib/hybrid-search.js +154 -3
- package/dist/lib/license.js +15 -1
- package/dist/lib/messaging.js +39 -2
- package/dist/lib/schedules.js +792 -637
- package/dist/lib/store.js +796 -636
- package/dist/lib/tasks.js +1614 -1091
- package/dist/lib/tmux-routing.js +149 -9
- package/dist/mcp/server.js +1825 -1138
- package/dist/mcp/tools/create-task.js +2280 -828
- package/dist/mcp/tools/list-tasks.js +2788 -159
- package/dist/mcp/tools/send-message.js +39 -2
- package/dist/mcp/tools/update-task.js +64 -0
- package/dist/runtime/index.js +235 -67
- package/dist/tui/App.js +1452 -644
- package/package.json +3 -2
package/dist/bin/exe-call.js
CHANGED
|
@@ -243,6 +243,42 @@ var init_employees = __esm({
|
|
|
243
243
|
}
|
|
244
244
|
});
|
|
245
245
|
|
|
246
|
+
// src/lib/db-retry.ts
|
|
247
|
+
var init_db_retry = __esm({
|
|
248
|
+
"src/lib/db-retry.ts"() {
|
|
249
|
+
"use strict";
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
// src/lib/database.ts
|
|
254
|
+
import { createClient } from "@libsql/client";
|
|
255
|
+
var init_database = __esm({
|
|
256
|
+
"src/lib/database.ts"() {
|
|
257
|
+
"use strict";
|
|
258
|
+
init_db_retry();
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
// src/lib/global-procedures.ts
|
|
263
|
+
import { randomUUID } from "crypto";
|
|
264
|
+
function getGlobalProceduresBlock() {
|
|
265
|
+
if (!_cacheLoaded) return "";
|
|
266
|
+
if (!_cache) return "";
|
|
267
|
+
return `## Organization-Wide Procedures (MANDATORY \u2014 supersedes all other rules)
|
|
268
|
+
|
|
269
|
+
${_cache}
|
|
270
|
+
`;
|
|
271
|
+
}
|
|
272
|
+
var _cache, _cacheLoaded;
|
|
273
|
+
var init_global_procedures = __esm({
|
|
274
|
+
"src/lib/global-procedures.ts"() {
|
|
275
|
+
"use strict";
|
|
276
|
+
init_database();
|
|
277
|
+
_cache = "";
|
|
278
|
+
_cacheLoaded = false;
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
|
|
246
282
|
// src/lib/employee-templates.ts
|
|
247
283
|
var employee_templates_exports = {};
|
|
248
284
|
__export(employee_templates_exports, {
|
|
@@ -261,7 +297,8 @@ __export(employee_templates_exports, {
|
|
|
261
297
|
function getSessionPrompt(storedPrompt) {
|
|
262
298
|
const markerIndex = storedPrompt.indexOf(PROCEDURES_MARKER);
|
|
263
299
|
const rolePrompt = markerIndex >= 0 ? storedPrompt.slice(0, markerIndex).trimEnd() : storedPrompt;
|
|
264
|
-
|
|
300
|
+
const globalBlock = getGlobalProceduresBlock();
|
|
301
|
+
return `${globalBlock}${rolePrompt}
|
|
265
302
|
${BASE_OPERATING_PROCEDURES}`;
|
|
266
303
|
}
|
|
267
304
|
function buildCustomEmployeePrompt(name, role) {
|
|
@@ -301,6 +338,7 @@ var BASE_OPERATING_PROCEDURES, DEFAULT_EXE, TEMPLATE_VERSION, PROCEDURES_MARKER,
|
|
|
301
338
|
var init_employee_templates = __esm({
|
|
302
339
|
"src/lib/employee-templates.ts"() {
|
|
303
340
|
"use strict";
|
|
341
|
+
init_global_procedures();
|
|
304
342
|
BASE_OPERATING_PROCEDURES = `
|
|
305
343
|
EXE OS \u2014 VISION AND NON-NEGOTIABLE PRINCIPLES (above all work):
|
|
306
344
|
|
package/dist/bin/exe-cloud.js
CHANGED
|
@@ -373,7 +373,21 @@ function getCacheAgeMs() {
|
|
|
373
373
|
}
|
|
374
374
|
}
|
|
375
375
|
async function checkLicense() {
|
|
376
|
-
|
|
376
|
+
let key = loadLicense();
|
|
377
|
+
if (!key) {
|
|
378
|
+
try {
|
|
379
|
+
const configPath = path4.join(EXE_AI_DIR, "config.json");
|
|
380
|
+
if (existsSync4(configPath)) {
|
|
381
|
+
const raw = JSON.parse(readFileSync3(configPath, "utf8"));
|
|
382
|
+
const cloud = raw.cloud;
|
|
383
|
+
if (cloud?.apiKey) {
|
|
384
|
+
key = cloud.apiKey;
|
|
385
|
+
saveLicense(key);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
} catch {
|
|
389
|
+
}
|
|
390
|
+
}
|
|
377
391
|
if (!key) return FREE_LICENSE;
|
|
378
392
|
const cached = await getCachedLicense();
|
|
379
393
|
if (cached && getCacheAgeMs() < CACHE_MAX_AGE_MS) return cached;
|
package/dist/bin/exe-dispatch.js
CHANGED
|
@@ -624,8 +624,28 @@ function getMySession() {
|
|
|
624
624
|
return getTransport().getMySession();
|
|
625
625
|
}
|
|
626
626
|
function employeeSessionName(employee, exeSession2, instance) {
|
|
627
|
+
if (!/^exe\d+$/.test(exeSession2)) {
|
|
628
|
+
const root = extractRootExe(exeSession2);
|
|
629
|
+
if (root) {
|
|
630
|
+
process.stderr.write(
|
|
631
|
+
`[tmux-routing] WARN: exeSession="${exeSession2}" is not a root exe session, using "${root}" instead
|
|
632
|
+
`
|
|
633
|
+
);
|
|
634
|
+
exeSession2 = root;
|
|
635
|
+
} else {
|
|
636
|
+
throw new Error(
|
|
637
|
+
`Invalid exeSession "${exeSession2}" \u2014 must be a root exe session (e.g., "exe1"), not an agent session`
|
|
638
|
+
);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
627
641
|
const suffix = instance != null && instance > 0 ? String(instance) : "";
|
|
628
|
-
|
|
642
|
+
const name = `${employee}${suffix}-${exeSession2}`;
|
|
643
|
+
if (!VALID_SESSION_NAME.test(name)) {
|
|
644
|
+
throw new Error(
|
|
645
|
+
`Invalid session name "${name}" \u2014 must match {agent}-exe{N} or {agent}{instance}-exe{N}`
|
|
646
|
+
);
|
|
647
|
+
}
|
|
648
|
+
return name;
|
|
629
649
|
}
|
|
630
650
|
function extractRootExe(name) {
|
|
631
651
|
const match = name.match(/(exe\d+)$/);
|
|
@@ -784,6 +804,22 @@ function ensureEmployee(employeeName2, exeSession2, projectDir2, opts) {
|
|
|
784
804
|
error: `Error: pass employee name ('${bare}'), not session name ('${employeeName2}')`
|
|
785
805
|
};
|
|
786
806
|
}
|
|
807
|
+
if (!/^exe\d+$/.test(exeSession2)) {
|
|
808
|
+
const root = extractRootExe(exeSession2);
|
|
809
|
+
if (root) {
|
|
810
|
+
process.stderr.write(
|
|
811
|
+
`[ensureEmployee] WARN: caller passed exeSession="${exeSession2}" (not a root exe). Auto-correcting to "${root}".
|
|
812
|
+
`
|
|
813
|
+
);
|
|
814
|
+
exeSession2 = root;
|
|
815
|
+
} else {
|
|
816
|
+
return {
|
|
817
|
+
status: "failed",
|
|
818
|
+
sessionName: "",
|
|
819
|
+
error: `Invalid exeSession "${exeSession2}" \u2014 must be a root exe session (e.g., "exe1")`
|
|
820
|
+
};
|
|
821
|
+
}
|
|
822
|
+
}
|
|
787
823
|
let effectiveInstance = opts?.instance;
|
|
788
824
|
if (effectiveInstance === void 0 && opts?.autoInstance) {
|
|
789
825
|
const free = findFreeInstance(
|
|
@@ -1030,7 +1066,7 @@ function spawnEmployee(employeeName2, exeSession2, projectDir2, opts) {
|
|
|
1030
1066
|
releaseSpawnLock(sessionName);
|
|
1031
1067
|
return { sessionName };
|
|
1032
1068
|
}
|
|
1033
|
-
var SPAWN_LOCK_DIR, SESSION_CACHE, BEHAVIORS_EXPORT_TIMEOUT_MS, INTERCOM_DEBOUNCE_MS, INTERCOM_LOG2, DEBOUNCE_FILE, DEBOUNCE_CLEANUP_AGE_MS, BUSY_PATTERN;
|
|
1069
|
+
var SPAWN_LOCK_DIR, SESSION_CACHE, BEHAVIORS_EXPORT_TIMEOUT_MS, VALID_SESSION_NAME, INTERCOM_DEBOUNCE_MS, INTERCOM_LOG2, DEBOUNCE_FILE, DEBOUNCE_CLEANUP_AGE_MS, BUSY_PATTERN;
|
|
1034
1070
|
var init_tmux_routing = __esm({
|
|
1035
1071
|
"src/lib/tmux-routing.ts"() {
|
|
1036
1072
|
"use strict";
|
|
@@ -1045,6 +1081,7 @@ var init_tmux_routing = __esm({
|
|
|
1045
1081
|
SPAWN_LOCK_DIR = path7.join(os4.homedir(), ".exe-os", "spawn-locks");
|
|
1046
1082
|
SESSION_CACHE = path7.join(os4.homedir(), ".exe-os", "session-cache");
|
|
1047
1083
|
BEHAVIORS_EXPORT_TIMEOUT_MS = 1e4;
|
|
1084
|
+
VALID_SESSION_NAME = /^[a-z]+-exe\d+$|^[a-z]+\d+-exe\d+$/;
|
|
1048
1085
|
INTERCOM_DEBOUNCE_MS = 3e4;
|
|
1049
1086
|
INTERCOM_LOG2 = path7.join(os4.homedir(), ".exe-os", "intercom.log");
|
|
1050
1087
|
DEBOUNCE_FILE = path7.join(SESSION_CACHE, "intercom-debounce.json");
|