@askexenow/exe-os 0.9.86 → 0.9.88
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/compose/docker-compose.yml +3 -3
- package/dist/bin/age-ontology-load.js +8 -2
- package/dist/bin/agentic-ontology-backfill.js +29 -0
- package/dist/bin/agentic-reflection-backfill.js +29 -0
- package/dist/bin/agentic-semantic-label.js +29 -0
- package/dist/bin/backfill-conversations.js +30 -0
- package/dist/bin/backfill-responses.js +30 -0
- package/dist/bin/backfill-vectors.js +30 -0
- package/dist/bin/bulk-sync-postgres.js +47 -1
- package/dist/bin/cc-doctor.js +3 -2
- package/dist/bin/cleanup-stale-review-tasks.js +30 -0
- package/dist/bin/cli.js +357 -19
- package/dist/bin/exe-agent.js +19 -0
- package/dist/bin/exe-assign.js +30 -0
- package/dist/bin/exe-boot.js +157 -4
- package/dist/bin/exe-call.js +20 -0
- package/dist/bin/exe-cloud.js +156 -3
- package/dist/bin/exe-dispatch.js +30 -1
- package/dist/bin/exe-doctor.js +30 -0
- package/dist/bin/exe-export-behaviors.js +29 -0
- package/dist/bin/exe-forget.js +30 -0
- package/dist/bin/exe-gateway.js +150 -35
- package/dist/bin/exe-healthcheck.js +2 -1
- package/dist/bin/exe-heartbeat.js +30 -0
- package/dist/bin/exe-kill.js +29 -0
- package/dist/bin/exe-launch-agent.js +29 -0
- package/dist/bin/exe-new-employee.js +37 -4
- package/dist/bin/exe-pending-messages.js +29 -0
- package/dist/bin/exe-pending-notifications.js +30 -0
- package/dist/bin/exe-pending-reviews.js +30 -0
- package/dist/bin/exe-rename.js +30 -0
- package/dist/bin/exe-review.js +30 -0
- package/dist/bin/exe-search.js +30 -0
- package/dist/bin/exe-session-cleanup.js +30 -1
- package/dist/bin/exe-settings.js +3 -0
- package/dist/bin/exe-start-codex.js +31 -2
- package/dist/bin/exe-start-opencode.js +31 -2
- package/dist/bin/exe-status.js +30 -0
- package/dist/bin/exe-team.js +30 -0
- package/dist/bin/git-sweep.js +30 -1
- package/dist/bin/graph-backfill.js +29 -0
- package/dist/bin/graph-export.js +29 -0
- package/dist/bin/graph-layer-benchmark.js +9 -1
- package/dist/bin/install.js +9 -0
- package/dist/bin/intercom-check.js +31 -1
- package/dist/bin/list-providers.js +1 -0
- package/dist/bin/postgres-agentic-reflection-backfill.js +7 -1
- package/dist/bin/postgres-agentic-semantic-backfill.js +7 -1
- package/dist/bin/registry-proxy.js +1 -0
- package/dist/bin/scan-tasks.js +31 -1
- package/dist/bin/setup.js +165 -9
- package/dist/bin/shard-migrate.js +29 -0
- package/dist/bin/stack-update.js +24 -7
- package/dist/bin/update.js +5 -0
- package/dist/gateway/index.js +30 -1
- package/dist/hooks/bug-report-worker.js +30 -1
- package/dist/hooks/codex-stop-task-finalizer.js +30 -1
- package/dist/hooks/commit-complete.js +30 -1
- package/dist/hooks/error-recall.js +29 -0
- package/dist/hooks/ingest.js +29 -0
- package/dist/hooks/instructions-loaded.js +29 -0
- package/dist/hooks/notification.js +29 -0
- package/dist/hooks/post-compact.js +29 -0
- package/dist/hooks/post-tool-combined.js +29 -0
- package/dist/hooks/pre-compact.js +30 -1
- package/dist/hooks/pre-tool-use.js +29 -0
- package/dist/hooks/prompt-submit.js +30 -1
- package/dist/hooks/session-end.js +30 -1
- package/dist/hooks/session-start.js +29 -0
- package/dist/hooks/stop.js +29 -0
- package/dist/hooks/subagent-stop.js +29 -0
- package/dist/hooks/summary-worker.js +155 -3
- package/dist/index.js +30 -1
- package/dist/lib/cloud-sync.js +136 -2
- package/dist/lib/consolidation.js +1 -0
- package/dist/lib/database.js +11 -0
- package/dist/lib/db.js +11 -0
- package/dist/lib/device-registry.js +11 -0
- package/dist/lib/employee-templates.js +19 -0
- package/dist/lib/exe-daemon.js +1455 -208
- package/dist/lib/hybrid-search.js +29 -0
- package/dist/lib/identity-templates.js +6 -2
- package/dist/lib/identity.js +1 -0
- package/dist/lib/messaging.js +2 -1
- package/dist/lib/reminders.js +1 -0
- package/dist/lib/schedules.js +29 -0
- package/dist/lib/skill-learning.js +1 -0
- package/dist/lib/store.js +29 -0
- package/dist/lib/tasks.js +2 -1
- package/dist/lib/tmux-routing.js +2 -1
- package/dist/lib/token-spend.js +1 -0
- package/dist/mcp/server.js +1278 -165
- package/dist/mcp/tools/complete-reminder.js +1 -0
- package/dist/mcp/tools/create-reminder.js +1 -0
- package/dist/mcp/tools/create-task.js +8 -3
- package/dist/mcp/tools/deactivate-behavior.js +1 -0
- package/dist/mcp/tools/list-reminders.js +1 -0
- package/dist/mcp/tools/list-tasks.js +1 -0
- package/dist/mcp/tools/send-message.js +2 -1
- package/dist/mcp/tools/update-task.js +2 -1
- package/dist/runtime/index.js +30 -1
- package/dist/tui/App.js +30 -1
- package/package.json +2 -2
|
@@ -1745,6 +1745,7 @@ __export(database_exports, {
|
|
|
1745
1745
|
isInitialized: () => isInitialized,
|
|
1746
1746
|
setExternalClient: () => setExternalClient
|
|
1747
1747
|
});
|
|
1748
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
1748
1749
|
import { createClient } from "@libsql/client";
|
|
1749
1750
|
async function initDatabase(config) {
|
|
1750
1751
|
if (_walCheckpointTimer) {
|
|
@@ -1786,6 +1787,16 @@ async function initDatabase(config) {
|
|
|
1786
1787
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
1787
1788
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
1788
1789
|
}
|
|
1790
|
+
try {
|
|
1791
|
+
chmodSync2(config.dbPath, 384);
|
|
1792
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
1793
|
+
try {
|
|
1794
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
1795
|
+
} catch {
|
|
1796
|
+
}
|
|
1797
|
+
}
|
|
1798
|
+
} catch {
|
|
1799
|
+
}
|
|
1789
1800
|
}
|
|
1790
1801
|
function isInitialized() {
|
|
1791
1802
|
return _adapterClient !== null || _client !== null;
|
|
@@ -4197,6 +4208,24 @@ var init_platform_procedures = __esm({
|
|
|
4197
4208
|
priority: "p0",
|
|
4198
4209
|
content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
|
|
4199
4210
|
},
|
|
4211
|
+
{
|
|
4212
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
4213
|
+
domain: "support",
|
|
4214
|
+
priority: "p1",
|
|
4215
|
+
content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
4216
|
+
},
|
|
4217
|
+
{
|
|
4218
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
4219
|
+
domain: "support",
|
|
4220
|
+
priority: "p0",
|
|
4221
|
+
content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
|
|
4222
|
+
},
|
|
4223
|
+
{
|
|
4224
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
4225
|
+
domain: "support",
|
|
4226
|
+
priority: "p1",
|
|
4227
|
+
content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
4228
|
+
},
|
|
4200
4229
|
// --- Operations ---
|
|
4201
4230
|
{
|
|
4202
4231
|
title: "Managers must supervise deployed workers",
|
|
@@ -5817,7 +5846,7 @@ function readQueue() {
|
|
|
5817
5846
|
function writeQueue(queue) {
|
|
5818
5847
|
ensureDir();
|
|
5819
5848
|
const tmp = `${QUEUE_PATH}.tmp`;
|
|
5820
|
-
writeFileSync5(tmp, JSON.stringify(queue, null, 2));
|
|
5849
|
+
writeFileSync5(tmp, JSON.stringify(queue, null, 2), { mode: 384 });
|
|
5821
5850
|
renameSync4(tmp, QUEUE_PATH);
|
|
5822
5851
|
}
|
|
5823
5852
|
function queueIntercom(targetSession, reason) {
|
package/dist/bin/exe-settings.js
CHANGED
|
@@ -310,6 +310,7 @@ var init_memory = __esm({
|
|
|
310
310
|
});
|
|
311
311
|
|
|
312
312
|
// src/lib/database.ts
|
|
313
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
313
314
|
import { createClient } from "@libsql/client";
|
|
314
315
|
var init_database = __esm({
|
|
315
316
|
"src/lib/database.ts"() {
|
|
@@ -440,6 +441,7 @@ import { fileURLToPath } from "url";
|
|
|
440
441
|
function isMainModule(importMetaUrl) {
|
|
441
442
|
if (process.argv[1] == null) return false;
|
|
442
443
|
if (process.argv[1].includes("mcp/server")) return false;
|
|
444
|
+
if (process.argv[1].includes("exe-daemon")) return false;
|
|
443
445
|
try {
|
|
444
446
|
const scriptPath = realpathSync(process.argv[1]);
|
|
445
447
|
const modulePath = realpathSync(fileURLToPath(importMetaUrl));
|
|
@@ -497,6 +499,7 @@ function assertSecureEndpoint(endpoint) {
|
|
|
497
499
|
}
|
|
498
500
|
}
|
|
499
501
|
var ROSTER_DELETIONS_PATH = path6.join(EXE_AI_DIR, "roster-deletions.json");
|
|
502
|
+
var CODE_CONTEXT_DIR = path6.join(EXE_AI_DIR, "code-context");
|
|
500
503
|
|
|
501
504
|
// src/bin/exe-settings.ts
|
|
502
505
|
init_agent_config();
|
|
@@ -1574,6 +1574,7 @@ __export(database_exports, {
|
|
|
1574
1574
|
isInitialized: () => isInitialized,
|
|
1575
1575
|
setExternalClient: () => setExternalClient
|
|
1576
1576
|
});
|
|
1577
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
1577
1578
|
import { createClient } from "@libsql/client";
|
|
1578
1579
|
async function initDatabase(config) {
|
|
1579
1580
|
if (_walCheckpointTimer) {
|
|
@@ -1615,6 +1616,16 @@ async function initDatabase(config) {
|
|
|
1615
1616
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
1616
1617
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
1617
1618
|
}
|
|
1619
|
+
try {
|
|
1620
|
+
chmodSync2(config.dbPath, 384);
|
|
1621
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
1622
|
+
try {
|
|
1623
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
1624
|
+
} catch {
|
|
1625
|
+
}
|
|
1626
|
+
}
|
|
1627
|
+
} catch {
|
|
1628
|
+
}
|
|
1618
1629
|
}
|
|
1619
1630
|
function isInitialized() {
|
|
1620
1631
|
return _adapterClient !== null || _client !== null;
|
|
@@ -3469,6 +3480,24 @@ var init_platform_procedures = __esm({
|
|
|
3469
3480
|
priority: "p0",
|
|
3470
3481
|
content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
|
|
3471
3482
|
},
|
|
3483
|
+
{
|
|
3484
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
3485
|
+
domain: "support",
|
|
3486
|
+
priority: "p1",
|
|
3487
|
+
content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
3488
|
+
},
|
|
3489
|
+
{
|
|
3490
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
3491
|
+
domain: "support",
|
|
3492
|
+
priority: "p0",
|
|
3493
|
+
content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
|
|
3494
|
+
},
|
|
3495
|
+
{
|
|
3496
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
3497
|
+
domain: "support",
|
|
3498
|
+
priority: "p1",
|
|
3499
|
+
content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
3500
|
+
},
|
|
3472
3501
|
// --- Operations ---
|
|
3473
3502
|
{
|
|
3474
3503
|
title: "Managers must supervise deployed workers",
|
|
@@ -4424,7 +4453,7 @@ var init_preferences = __esm({
|
|
|
4424
4453
|
});
|
|
4425
4454
|
|
|
4426
4455
|
// src/adapters/mcp-http-config.ts
|
|
4427
|
-
import { chmodSync as
|
|
4456
|
+
import { chmodSync as chmodSync3, existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as readFileSync7, writeFileSync as writeFileSync6 } from "fs";
|
|
4428
4457
|
import { randomBytes } from "crypto";
|
|
4429
4458
|
import path12 from "path";
|
|
4430
4459
|
import os9 from "os";
|
|
@@ -4449,7 +4478,7 @@ function readOrCreateDaemonToken(homeDir = os9.homedir()) {
|
|
|
4449
4478
|
writeFileSync6(tokenPath, `${token}
|
|
4450
4479
|
`, "utf-8");
|
|
4451
4480
|
try {
|
|
4452
|
-
|
|
4481
|
+
chmodSync3(tokenPath, 384);
|
|
4453
4482
|
} catch {
|
|
4454
4483
|
}
|
|
4455
4484
|
return token;
|
|
@@ -1574,6 +1574,7 @@ __export(database_exports, {
|
|
|
1574
1574
|
isInitialized: () => isInitialized,
|
|
1575
1575
|
setExternalClient: () => setExternalClient
|
|
1576
1576
|
});
|
|
1577
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
1577
1578
|
import { createClient } from "@libsql/client";
|
|
1578
1579
|
async function initDatabase(config) {
|
|
1579
1580
|
if (_walCheckpointTimer) {
|
|
@@ -1615,6 +1616,16 @@ async function initDatabase(config) {
|
|
|
1615
1616
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
1616
1617
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
1617
1618
|
}
|
|
1619
|
+
try {
|
|
1620
|
+
chmodSync2(config.dbPath, 384);
|
|
1621
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
1622
|
+
try {
|
|
1623
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
1624
|
+
} catch {
|
|
1625
|
+
}
|
|
1626
|
+
}
|
|
1627
|
+
} catch {
|
|
1628
|
+
}
|
|
1618
1629
|
}
|
|
1619
1630
|
function isInitialized() {
|
|
1620
1631
|
return _adapterClient !== null || _client !== null;
|
|
@@ -3469,6 +3480,24 @@ var init_platform_procedures = __esm({
|
|
|
3469
3480
|
priority: "p0",
|
|
3470
3481
|
content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
|
|
3471
3482
|
},
|
|
3483
|
+
{
|
|
3484
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
3485
|
+
domain: "support",
|
|
3486
|
+
priority: "p1",
|
|
3487
|
+
content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
3488
|
+
},
|
|
3489
|
+
{
|
|
3490
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
3491
|
+
domain: "support",
|
|
3492
|
+
priority: "p0",
|
|
3493
|
+
content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
|
|
3494
|
+
},
|
|
3495
|
+
{
|
|
3496
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
3497
|
+
domain: "support",
|
|
3498
|
+
priority: "p1",
|
|
3499
|
+
content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
3500
|
+
},
|
|
3472
3501
|
// --- Operations ---
|
|
3473
3502
|
{
|
|
3474
3503
|
title: "Managers must supervise deployed workers",
|
|
@@ -4413,7 +4442,7 @@ var init_preferences = __esm({
|
|
|
4413
4442
|
});
|
|
4414
4443
|
|
|
4415
4444
|
// src/adapters/mcp-http-config.ts
|
|
4416
|
-
import { chmodSync as
|
|
4445
|
+
import { chmodSync as chmodSync3, existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as readFileSync7, writeFileSync as writeFileSync6 } from "fs";
|
|
4417
4446
|
import { randomBytes } from "crypto";
|
|
4418
4447
|
import path12 from "path";
|
|
4419
4448
|
import os9 from "os";
|
|
@@ -4438,7 +4467,7 @@ function readOrCreateDaemonToken(homeDir = os9.homedir()) {
|
|
|
4438
4467
|
writeFileSync6(tokenPath, `${token}
|
|
4439
4468
|
`, "utf-8");
|
|
4440
4469
|
try {
|
|
4441
|
-
|
|
4470
|
+
chmodSync3(tokenPath, 384);
|
|
4442
4471
|
} catch {
|
|
4443
4472
|
}
|
|
4444
4473
|
return token;
|
package/dist/bin/exe-status.js
CHANGED
|
@@ -1724,6 +1724,7 @@ __export(database_exports, {
|
|
|
1724
1724
|
isInitialized: () => isInitialized,
|
|
1725
1725
|
setExternalClient: () => setExternalClient
|
|
1726
1726
|
});
|
|
1727
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
1727
1728
|
import { createClient } from "@libsql/client";
|
|
1728
1729
|
async function initDatabase(config) {
|
|
1729
1730
|
if (_walCheckpointTimer) {
|
|
@@ -1765,6 +1766,16 @@ async function initDatabase(config) {
|
|
|
1765
1766
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
1766
1767
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
1767
1768
|
}
|
|
1769
|
+
try {
|
|
1770
|
+
chmodSync2(config.dbPath, 384);
|
|
1771
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
1772
|
+
try {
|
|
1773
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
1774
|
+
} catch {
|
|
1775
|
+
}
|
|
1776
|
+
}
|
|
1777
|
+
} catch {
|
|
1778
|
+
}
|
|
1768
1779
|
}
|
|
1769
1780
|
function isInitialized() {
|
|
1770
1781
|
return _adapterClient !== null || _client !== null;
|
|
@@ -4176,6 +4187,24 @@ var init_platform_procedures = __esm({
|
|
|
4176
4187
|
priority: "p0",
|
|
4177
4188
|
content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
|
|
4178
4189
|
},
|
|
4190
|
+
{
|
|
4191
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
4192
|
+
domain: "support",
|
|
4193
|
+
priority: "p1",
|
|
4194
|
+
content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
4195
|
+
},
|
|
4196
|
+
{
|
|
4197
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
4198
|
+
domain: "support",
|
|
4199
|
+
priority: "p0",
|
|
4200
|
+
content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
|
|
4201
|
+
},
|
|
4202
|
+
{
|
|
4203
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
4204
|
+
domain: "support",
|
|
4205
|
+
priority: "p1",
|
|
4206
|
+
content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
4207
|
+
},
|
|
4179
4208
|
// --- Operations ---
|
|
4180
4209
|
{
|
|
4181
4210
|
title: "Managers must supervise deployed workers",
|
|
@@ -6138,6 +6167,7 @@ import { fileURLToPath as fileURLToPath2 } from "url";
|
|
|
6138
6167
|
function isMainModule(importMetaUrl) {
|
|
6139
6168
|
if (process.argv[1] == null) return false;
|
|
6140
6169
|
if (process.argv[1].includes("mcp/server")) return false;
|
|
6170
|
+
if (process.argv[1].includes("exe-daemon")) return false;
|
|
6141
6171
|
try {
|
|
6142
6172
|
const scriptPath = realpathSync(process.argv[1]);
|
|
6143
6173
|
const modulePath = realpathSync(fileURLToPath2(importMetaUrl));
|
package/dist/bin/exe-team.js
CHANGED
|
@@ -1713,6 +1713,7 @@ __export(database_exports, {
|
|
|
1713
1713
|
isInitialized: () => isInitialized,
|
|
1714
1714
|
setExternalClient: () => setExternalClient
|
|
1715
1715
|
});
|
|
1716
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
1716
1717
|
import { createClient } from "@libsql/client";
|
|
1717
1718
|
async function initDatabase(config) {
|
|
1718
1719
|
if (_walCheckpointTimer) {
|
|
@@ -1754,6 +1755,16 @@ async function initDatabase(config) {
|
|
|
1754
1755
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
1755
1756
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
1756
1757
|
}
|
|
1758
|
+
try {
|
|
1759
|
+
chmodSync2(config.dbPath, 384);
|
|
1760
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
1761
|
+
try {
|
|
1762
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
1763
|
+
} catch {
|
|
1764
|
+
}
|
|
1765
|
+
}
|
|
1766
|
+
} catch {
|
|
1767
|
+
}
|
|
1757
1768
|
}
|
|
1758
1769
|
function isInitialized() {
|
|
1759
1770
|
return _adapterClient !== null || _client !== null;
|
|
@@ -4165,6 +4176,24 @@ var init_platform_procedures = __esm({
|
|
|
4165
4176
|
priority: "p0",
|
|
4166
4177
|
content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
|
|
4167
4178
|
},
|
|
4179
|
+
{
|
|
4180
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
4181
|
+
domain: "support",
|
|
4182
|
+
priority: "p1",
|
|
4183
|
+
content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
4184
|
+
},
|
|
4185
|
+
{
|
|
4186
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
4187
|
+
domain: "support",
|
|
4188
|
+
priority: "p0",
|
|
4189
|
+
content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
|
|
4190
|
+
},
|
|
4191
|
+
{
|
|
4192
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
4193
|
+
domain: "support",
|
|
4194
|
+
priority: "p1",
|
|
4195
|
+
content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
4196
|
+
},
|
|
4168
4197
|
// --- Operations ---
|
|
4169
4198
|
{
|
|
4170
4199
|
title: "Managers must supervise deployed workers",
|
|
@@ -5479,6 +5508,7 @@ import { fileURLToPath as fileURLToPath2 } from "url";
|
|
|
5479
5508
|
function isMainModule(importMetaUrl) {
|
|
5480
5509
|
if (process.argv[1] == null) return false;
|
|
5481
5510
|
if (process.argv[1].includes("mcp/server")) return false;
|
|
5511
|
+
if (process.argv[1].includes("exe-daemon")) return false;
|
|
5482
5512
|
try {
|
|
5483
5513
|
const scriptPath = realpathSync(process.argv[1]);
|
|
5484
5514
|
const modulePath = realpathSync(fileURLToPath2(importMetaUrl));
|
package/dist/bin/git-sweep.js
CHANGED
|
@@ -712,7 +712,7 @@ function readQueue() {
|
|
|
712
712
|
function writeQueue(queue) {
|
|
713
713
|
ensureDir();
|
|
714
714
|
const tmp = `${QUEUE_PATH}.tmp`;
|
|
715
|
-
writeFileSync3(tmp, JSON.stringify(queue, null, 2));
|
|
715
|
+
writeFileSync3(tmp, JSON.stringify(queue, null, 2), { mode: 384 });
|
|
716
716
|
renameSync2(tmp, QUEUE_PATH);
|
|
717
717
|
}
|
|
718
718
|
function queueIntercom(targetSession, reason) {
|
|
@@ -2225,6 +2225,7 @@ __export(database_exports, {
|
|
|
2225
2225
|
isInitialized: () => isInitialized,
|
|
2226
2226
|
setExternalClient: () => setExternalClient
|
|
2227
2227
|
});
|
|
2228
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
2228
2229
|
import { createClient } from "@libsql/client";
|
|
2229
2230
|
async function initDatabase(config) {
|
|
2230
2231
|
if (_walCheckpointTimer) {
|
|
@@ -2266,6 +2267,16 @@ async function initDatabase(config) {
|
|
|
2266
2267
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
2267
2268
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
2268
2269
|
}
|
|
2270
|
+
try {
|
|
2271
|
+
chmodSync2(config.dbPath, 384);
|
|
2272
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
2273
|
+
try {
|
|
2274
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
2275
|
+
} catch {
|
|
2276
|
+
}
|
|
2277
|
+
}
|
|
2278
|
+
} catch {
|
|
2279
|
+
}
|
|
2269
2280
|
}
|
|
2270
2281
|
function isInitialized() {
|
|
2271
2282
|
return _adapterClient !== null || _client !== null;
|
|
@@ -7870,6 +7881,24 @@ var init_platform_procedures = __esm({
|
|
|
7870
7881
|
priority: "p0",
|
|
7871
7882
|
content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
|
|
7872
7883
|
},
|
|
7884
|
+
{
|
|
7885
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
7886
|
+
domain: "support",
|
|
7887
|
+
priority: "p1",
|
|
7888
|
+
content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
7889
|
+
},
|
|
7890
|
+
{
|
|
7891
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
7892
|
+
domain: "support",
|
|
7893
|
+
priority: "p0",
|
|
7894
|
+
content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
|
|
7895
|
+
},
|
|
7896
|
+
{
|
|
7897
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
7898
|
+
domain: "support",
|
|
7899
|
+
priority: "p1",
|
|
7900
|
+
content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
7901
|
+
},
|
|
7873
7902
|
// --- Operations ---
|
|
7874
7903
|
{
|
|
7875
7904
|
title: "Managers must supervise deployed workers",
|
|
@@ -1487,6 +1487,7 @@ __export(database_exports, {
|
|
|
1487
1487
|
isInitialized: () => isInitialized,
|
|
1488
1488
|
setExternalClient: () => setExternalClient
|
|
1489
1489
|
});
|
|
1490
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
1490
1491
|
import { createClient } from "@libsql/client";
|
|
1491
1492
|
async function initDatabase(config) {
|
|
1492
1493
|
if (_walCheckpointTimer) {
|
|
@@ -1528,6 +1529,16 @@ async function initDatabase(config) {
|
|
|
1528
1529
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
1529
1530
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
1530
1531
|
}
|
|
1532
|
+
try {
|
|
1533
|
+
chmodSync2(config.dbPath, 384);
|
|
1534
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
1535
|
+
try {
|
|
1536
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
1537
|
+
} catch {
|
|
1538
|
+
}
|
|
1539
|
+
}
|
|
1540
|
+
} catch {
|
|
1541
|
+
}
|
|
1531
1542
|
}
|
|
1532
1543
|
function isInitialized() {
|
|
1533
1544
|
return _adapterClient !== null || _client !== null;
|
|
@@ -3382,6 +3393,24 @@ var init_platform_procedures = __esm({
|
|
|
3382
3393
|
priority: "p0",
|
|
3383
3394
|
content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
|
|
3384
3395
|
},
|
|
3396
|
+
{
|
|
3397
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
3398
|
+
domain: "support",
|
|
3399
|
+
priority: "p1",
|
|
3400
|
+
content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
3401
|
+
},
|
|
3402
|
+
{
|
|
3403
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
3404
|
+
domain: "support",
|
|
3405
|
+
priority: "p0",
|
|
3406
|
+
content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
|
|
3407
|
+
},
|
|
3408
|
+
{
|
|
3409
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
3410
|
+
domain: "support",
|
|
3411
|
+
priority: "p1",
|
|
3412
|
+
content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
3413
|
+
},
|
|
3385
3414
|
// --- Operations ---
|
|
3386
3415
|
{
|
|
3387
3416
|
title: "Managers must supervise deployed workers",
|
package/dist/bin/graph-export.js
CHANGED
|
@@ -1702,6 +1702,7 @@ __export(database_exports, {
|
|
|
1702
1702
|
isInitialized: () => isInitialized,
|
|
1703
1703
|
setExternalClient: () => setExternalClient
|
|
1704
1704
|
});
|
|
1705
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
1705
1706
|
import { createClient } from "@libsql/client";
|
|
1706
1707
|
async function initDatabase(config) {
|
|
1707
1708
|
if (_walCheckpointTimer) {
|
|
@@ -1743,6 +1744,16 @@ async function initDatabase(config) {
|
|
|
1743
1744
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
1744
1745
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
1745
1746
|
}
|
|
1747
|
+
try {
|
|
1748
|
+
chmodSync2(config.dbPath, 384);
|
|
1749
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
1750
|
+
try {
|
|
1751
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
1752
|
+
} catch {
|
|
1753
|
+
}
|
|
1754
|
+
}
|
|
1755
|
+
} catch {
|
|
1756
|
+
}
|
|
1746
1757
|
}
|
|
1747
1758
|
function isInitialized() {
|
|
1748
1759
|
return _adapterClient !== null || _client !== null;
|
|
@@ -4154,6 +4165,24 @@ var init_platform_procedures = __esm({
|
|
|
4154
4165
|
priority: "p0",
|
|
4155
4166
|
content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
|
|
4156
4167
|
},
|
|
4168
|
+
{
|
|
4169
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
4170
|
+
domain: "support",
|
|
4171
|
+
priority: "p1",
|
|
4172
|
+
content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
4173
|
+
},
|
|
4174
|
+
{
|
|
4175
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
4176
|
+
domain: "support",
|
|
4177
|
+
priority: "p0",
|
|
4178
|
+
content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
|
|
4179
|
+
},
|
|
4180
|
+
{
|
|
4181
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
4182
|
+
domain: "support",
|
|
4183
|
+
priority: "p1",
|
|
4184
|
+
content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
4185
|
+
},
|
|
4157
4186
|
// --- Operations ---
|
|
4158
4187
|
{
|
|
4159
4188
|
title: "Managers must supervise deployed workers",
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
// src/bin/graph-layer-benchmark.ts
|
|
4
4
|
import { Client } from "pg";
|
|
5
|
+
|
|
6
|
+
// src/lib/pg-ssl.ts
|
|
7
|
+
function pgSslConfig() {
|
|
8
|
+
if (process.env.EXE_DB_SSL_DISABLED === "true") return {};
|
|
9
|
+
return { ssl: { rejectUnauthorized: process.env.EXE_DB_SSL_ALLOW_SELFSIGNED !== "true" } };
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// src/bin/graph-layer-benchmark.ts
|
|
5
13
|
function now() {
|
|
6
14
|
return Date.now();
|
|
7
15
|
}
|
|
@@ -18,7 +26,7 @@ async function timed(layer, check, fn) {
|
|
|
18
26
|
}
|
|
19
27
|
}
|
|
20
28
|
async function withPg(url, fn) {
|
|
21
|
-
const client = new Client({ connectionString: url });
|
|
29
|
+
const client = new Client({ connectionString: url, ...pgSslConfig() });
|
|
22
30
|
await client.connect();
|
|
23
31
|
try {
|
|
24
32
|
return await fn(client);
|
package/dist/bin/install.js
CHANGED
|
@@ -979,6 +979,15 @@ async function registerMcpServer(packageRoot, homeDir = os6.homedir()) {
|
|
|
979
979
|
delete claudeJson.mcpServers[MCP_LEGACY_KEY];
|
|
980
980
|
process.stderr.write("exe-os: migrated MCP server key exe-mem \u2192 exe-os\n");
|
|
981
981
|
}
|
|
982
|
+
if (claudeJson.projects) {
|
|
983
|
+
for (const [projectPath, projectConfig] of Object.entries(claudeJson.projects)) {
|
|
984
|
+
if (projectConfig.mcpServers?.[MCP_LEGACY_KEY]) {
|
|
985
|
+
delete projectConfig.mcpServers[MCP_LEGACY_KEY];
|
|
986
|
+
process.stderr.write(`exe-os: removed stale project-level exe-mem from ${projectPath}
|
|
987
|
+
`);
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
}
|
|
982
991
|
const currentOs = claudeJson.mcpServers[MCP_PRIMARY_KEY];
|
|
983
992
|
const osMatches = currentOs && JSON.stringify(currentOs) === JSON.stringify(newEntry);
|
|
984
993
|
if (osMatches) {
|
|
@@ -1811,6 +1811,7 @@ __export(database_exports, {
|
|
|
1811
1811
|
isInitialized: () => isInitialized,
|
|
1812
1812
|
setExternalClient: () => setExternalClient
|
|
1813
1813
|
});
|
|
1814
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
1814
1815
|
import { createClient } from "@libsql/client";
|
|
1815
1816
|
async function initDatabase(config) {
|
|
1816
1817
|
if (_walCheckpointTimer) {
|
|
@@ -1852,6 +1853,16 @@ async function initDatabase(config) {
|
|
|
1852
1853
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
1853
1854
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
1854
1855
|
}
|
|
1856
|
+
try {
|
|
1857
|
+
chmodSync2(config.dbPath, 384);
|
|
1858
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
1859
|
+
try {
|
|
1860
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
1861
|
+
} catch {
|
|
1862
|
+
}
|
|
1863
|
+
}
|
|
1864
|
+
} catch {
|
|
1865
|
+
}
|
|
1855
1866
|
}
|
|
1856
1867
|
function isInitialized() {
|
|
1857
1868
|
return _adapterClient !== null || _client !== null;
|
|
@@ -4263,6 +4274,24 @@ var init_platform_procedures = __esm({
|
|
|
4263
4274
|
priority: "p0",
|
|
4264
4275
|
content: "When an agent encounters a suspected Exe OS bug, update breakage, MCP/tool failure, installer issue, memory/orchestration defect, or customer-local patch need, it MUST use create_bug_report. Do this before or alongside any local workaround so the report reaches AskExe support directly via the customer's license. Do NOT ask the founder for permission to file a required bug report. If create_bug_report is deferred/lazy-loaded, load it and call it. If it is unavailable in the live MCP surface, report 'create_bug_report unavailable in this session' and save a local report in exe/output \u2014 never claim the tool does not exist unless the live MCP surface was checked. If upstream delivery fails, call support_test (MCP) and include its result in the local report so AskExe can distinguish customer setup, license provisioning, and server intake issues; only ask the founder to run `exe-os support test` if MCP is disconnected/unavailable. Classify first: upstream_bug = reproducible exe-os/platform defect; customer_customization = identity, behavior, procedure, config, branding, workflow preference that belongs in customer-owned layers; emergency_hotfix = temporary local patch. For upstream bugs/emergency hotfixes include version, repro steps, expected/actual, files changed, workaround, and local diff summary. Avoid permanent platform-code patches unless founder approves; if a hotfix is unavoidable, document it in the bug report and re-check after npm update."
|
|
4265
4276
|
},
|
|
4277
|
+
{
|
|
4278
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
4279
|
+
domain: "support",
|
|
4280
|
+
priority: "p1",
|
|
4281
|
+
content: "Once per session (COO boot only, never repeat), call list_my_bug_reports to check if any previously filed bug reports have been fixed by AskExe. If any report has status 'fixed' with a fixed_version, surface it to the founder immediately: '\u{1F527} N bug fix(es) available \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no reports exist or none are fixed, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
4282
|
+
},
|
|
4283
|
+
{
|
|
4284
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
4285
|
+
domain: "support",
|
|
4286
|
+
priority: "p0",
|
|
4287
|
+
content: "When an agent or founder identifies a desired capability that exe-os does not yet provide, the COO (or equivalent coordinator) must decide: is this a local customization (identity, behavior, procedure, config, branding, workflow preference that can be configured in customer-owned layers) or an upstream feature request (a platform capability that requires changes to exe-os code, shipped via npm update)? Local customizations: implement immediately using store_behavior, update_identity, company_procedure, or config changes. Upstream features: use create_feature_request to submit to AskExe. Include use case, business impact, and current workaround. Do NOT ask the founder for permission to file a feature request \u2014 file it proactively when the need is clear."
|
|
4288
|
+
},
|
|
4289
|
+
{
|
|
4290
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
4291
|
+
domain: "support",
|
|
4292
|
+
priority: "p1",
|
|
4293
|
+
content: "Once per session (COO boot only, never repeat), call list_my_feature_requests to check if any previously filed feature requests have been shipped by AskExe. If any request has status 'shipped' with a shipped_version, surface it to the founder immediately: '\u{1F680} N feature(s) shipped \u2014 run exe-os update to get version X.Y.Z'. This is a one-time check at boot, not a recurring poll. If no requests exist or none are shipped, skip silently. If the MCP tool is unavailable or the network call fails, skip silently \u2014 this is informational, not blocking."
|
|
4294
|
+
},
|
|
4266
4295
|
// --- Operations ---
|
|
4267
4296
|
{
|
|
4268
4297
|
title: "Managers must supervise deployed workers",
|
|
@@ -5967,7 +5996,7 @@ function readQueue() {
|
|
|
5967
5996
|
function writeQueue(queue) {
|
|
5968
5997
|
ensureDir();
|
|
5969
5998
|
const tmp = `${QUEUE_PATH}.tmp`;
|
|
5970
|
-
writeFileSync5(tmp, JSON.stringify(queue, null, 2));
|
|
5999
|
+
writeFileSync5(tmp, JSON.stringify(queue, null, 2), { mode: 384 });
|
|
5971
6000
|
renameSync4(tmp, QUEUE_PATH);
|
|
5972
6001
|
}
|
|
5973
6002
|
function queueIntercom(targetSession, reason) {
|
|
@@ -9448,6 +9477,7 @@ import { fileURLToPath as fileURLToPath3 } from "url";
|
|
|
9448
9477
|
function isMainModule(importMetaUrl) {
|
|
9449
9478
|
if (process.argv[1] == null) return false;
|
|
9450
9479
|
if (process.argv[1].includes("mcp/server")) return false;
|
|
9480
|
+
if (process.argv[1].includes("exe-daemon")) return false;
|
|
9451
9481
|
try {
|
|
9452
9482
|
const scriptPath = realpathSync(process.argv[1]);
|
|
9453
9483
|
const modulePath = realpathSync(fileURLToPath3(importMetaUrl));
|
|
@@ -11,6 +11,7 @@ import { fileURLToPath } from "url";
|
|
|
11
11
|
function isMainModule(importMetaUrl) {
|
|
12
12
|
if (process.argv[1] == null) return false;
|
|
13
13
|
if (process.argv[1].includes("mcp/server")) return false;
|
|
14
|
+
if (process.argv[1].includes("exe-daemon")) return false;
|
|
14
15
|
try {
|
|
15
16
|
const scriptPath = realpathSync(process.argv[1]);
|
|
16
17
|
const modulePath = realpathSync(fileURLToPath(importMetaUrl));
|