@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
|
@@ -2112,6 +2112,7 @@ __export(database_exports, {
|
|
|
2112
2112
|
isInitialized: () => isInitialized,
|
|
2113
2113
|
setExternalClient: () => setExternalClient
|
|
2114
2114
|
});
|
|
2115
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
2115
2116
|
import { createClient } from "@libsql/client";
|
|
2116
2117
|
async function initDatabase(config) {
|
|
2117
2118
|
if (_walCheckpointTimer) {
|
|
@@ -2153,6 +2154,16 @@ async function initDatabase(config) {
|
|
|
2153
2154
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
2154
2155
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
2155
2156
|
}
|
|
2157
|
+
try {
|
|
2158
|
+
chmodSync2(config.dbPath, 384);
|
|
2159
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
2160
|
+
try {
|
|
2161
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
2162
|
+
} catch {
|
|
2163
|
+
}
|
|
2164
|
+
}
|
|
2165
|
+
} catch {
|
|
2166
|
+
}
|
|
2156
2167
|
}
|
|
2157
2168
|
function isInitialized() {
|
|
2158
2169
|
return _adapterClient !== null || _client !== null;
|
|
@@ -4564,6 +4575,24 @@ var init_platform_procedures = __esm({
|
|
|
4564
4575
|
priority: "p0",
|
|
4565
4576
|
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."
|
|
4566
4577
|
},
|
|
4578
|
+
{
|
|
4579
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
4580
|
+
domain: "support",
|
|
4581
|
+
priority: "p1",
|
|
4582
|
+
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."
|
|
4583
|
+
},
|
|
4584
|
+
{
|
|
4585
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
4586
|
+
domain: "support",
|
|
4587
|
+
priority: "p0",
|
|
4588
|
+
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."
|
|
4589
|
+
},
|
|
4590
|
+
{
|
|
4591
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
4592
|
+
domain: "support",
|
|
4593
|
+
priority: "p1",
|
|
4594
|
+
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."
|
|
4595
|
+
},
|
|
4567
4596
|
// --- Operations ---
|
|
4568
4597
|
{
|
|
4569
4598
|
title: "Managers must supervise deployed workers",
|
|
@@ -7305,7 +7334,7 @@ function readQueue() {
|
|
|
7305
7334
|
function writeQueue(queue) {
|
|
7306
7335
|
ensureDir();
|
|
7307
7336
|
const tmp = `${QUEUE_PATH}.tmp`;
|
|
7308
|
-
writeFileSync7(tmp, JSON.stringify(queue, null, 2));
|
|
7337
|
+
writeFileSync7(tmp, JSON.stringify(queue, null, 2), { mode: 384 });
|
|
7309
7338
|
renameSync4(tmp, QUEUE_PATH);
|
|
7310
7339
|
}
|
|
7311
7340
|
function queueIntercom(targetSession, reason) {
|
|
@@ -785,7 +785,7 @@ function readQueue() {
|
|
|
785
785
|
function writeQueue(queue) {
|
|
786
786
|
ensureDir();
|
|
787
787
|
const tmp = `${QUEUE_PATH}.tmp`;
|
|
788
|
-
writeFileSync6(tmp, JSON.stringify(queue, null, 2));
|
|
788
|
+
writeFileSync6(tmp, JSON.stringify(queue, null, 2), { mode: 384 });
|
|
789
789
|
renameSync3(tmp, QUEUE_PATH);
|
|
790
790
|
}
|
|
791
791
|
function queueIntercom(targetSession, reason) {
|
|
@@ -2293,6 +2293,7 @@ __export(database_exports, {
|
|
|
2293
2293
|
isInitialized: () => isInitialized,
|
|
2294
2294
|
setExternalClient: () => setExternalClient
|
|
2295
2295
|
});
|
|
2296
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
2296
2297
|
import { createClient } from "@libsql/client";
|
|
2297
2298
|
async function initDatabase(config) {
|
|
2298
2299
|
if (_walCheckpointTimer) {
|
|
@@ -2334,6 +2335,16 @@ async function initDatabase(config) {
|
|
|
2334
2335
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
2335
2336
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
2336
2337
|
}
|
|
2338
|
+
try {
|
|
2339
|
+
chmodSync2(config.dbPath, 384);
|
|
2340
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
2341
|
+
try {
|
|
2342
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
2343
|
+
} catch {
|
|
2344
|
+
}
|
|
2345
|
+
}
|
|
2346
|
+
} catch {
|
|
2347
|
+
}
|
|
2337
2348
|
}
|
|
2338
2349
|
function isInitialized() {
|
|
2339
2350
|
return _adapterClient !== null || _client !== null;
|
|
@@ -8128,6 +8139,24 @@ var init_platform_procedures = __esm({
|
|
|
8128
8139
|
priority: "p0",
|
|
8129
8140
|
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."
|
|
8130
8141
|
},
|
|
8142
|
+
{
|
|
8143
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
8144
|
+
domain: "support",
|
|
8145
|
+
priority: "p1",
|
|
8146
|
+
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."
|
|
8147
|
+
},
|
|
8148
|
+
{
|
|
8149
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
8150
|
+
domain: "support",
|
|
8151
|
+
priority: "p0",
|
|
8152
|
+
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."
|
|
8153
|
+
},
|
|
8154
|
+
{
|
|
8155
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
8156
|
+
domain: "support",
|
|
8157
|
+
priority: "p1",
|
|
8158
|
+
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."
|
|
8159
|
+
},
|
|
8131
8160
|
// --- Operations ---
|
|
8132
8161
|
{
|
|
8133
8162
|
title: "Managers must supervise deployed workers",
|
|
@@ -2112,6 +2112,7 @@ __export(database_exports, {
|
|
|
2112
2112
|
isInitialized: () => isInitialized,
|
|
2113
2113
|
setExternalClient: () => setExternalClient
|
|
2114
2114
|
});
|
|
2115
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
2115
2116
|
import { createClient } from "@libsql/client";
|
|
2116
2117
|
async function initDatabase(config) {
|
|
2117
2118
|
if (_walCheckpointTimer) {
|
|
@@ -2153,6 +2154,16 @@ async function initDatabase(config) {
|
|
|
2153
2154
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
2154
2155
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
2155
2156
|
}
|
|
2157
|
+
try {
|
|
2158
|
+
chmodSync2(config.dbPath, 384);
|
|
2159
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
2160
|
+
try {
|
|
2161
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
2162
|
+
} catch {
|
|
2163
|
+
}
|
|
2164
|
+
}
|
|
2165
|
+
} catch {
|
|
2166
|
+
}
|
|
2156
2167
|
}
|
|
2157
2168
|
function isInitialized() {
|
|
2158
2169
|
return _adapterClient !== null || _client !== null;
|
|
@@ -4564,6 +4575,24 @@ var init_platform_procedures = __esm({
|
|
|
4564
4575
|
priority: "p0",
|
|
4565
4576
|
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."
|
|
4566
4577
|
},
|
|
4578
|
+
{
|
|
4579
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
4580
|
+
domain: "support",
|
|
4581
|
+
priority: "p1",
|
|
4582
|
+
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."
|
|
4583
|
+
},
|
|
4584
|
+
{
|
|
4585
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
4586
|
+
domain: "support",
|
|
4587
|
+
priority: "p0",
|
|
4588
|
+
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."
|
|
4589
|
+
},
|
|
4590
|
+
{
|
|
4591
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
4592
|
+
domain: "support",
|
|
4593
|
+
priority: "p1",
|
|
4594
|
+
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."
|
|
4595
|
+
},
|
|
4567
4596
|
// --- Operations ---
|
|
4568
4597
|
{
|
|
4569
4598
|
title: "Managers must supervise deployed workers",
|
package/dist/hooks/stop.js
CHANGED
|
@@ -2034,6 +2034,7 @@ __export(database_exports, {
|
|
|
2034
2034
|
isInitialized: () => isInitialized,
|
|
2035
2035
|
setExternalClient: () => setExternalClient
|
|
2036
2036
|
});
|
|
2037
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
2037
2038
|
import { createClient } from "@libsql/client";
|
|
2038
2039
|
async function initDatabase(config) {
|
|
2039
2040
|
if (_walCheckpointTimer) {
|
|
@@ -2075,6 +2076,16 @@ async function initDatabase(config) {
|
|
|
2075
2076
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
2076
2077
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
2077
2078
|
}
|
|
2079
|
+
try {
|
|
2080
|
+
chmodSync2(config.dbPath, 384);
|
|
2081
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
2082
|
+
try {
|
|
2083
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
2084
|
+
} catch {
|
|
2085
|
+
}
|
|
2086
|
+
}
|
|
2087
|
+
} catch {
|
|
2088
|
+
}
|
|
2078
2089
|
}
|
|
2079
2090
|
function isInitialized() {
|
|
2080
2091
|
return _adapterClient !== null || _client !== null;
|
|
@@ -4638,6 +4649,24 @@ var init_platform_procedures = __esm({
|
|
|
4638
4649
|
priority: "p0",
|
|
4639
4650
|
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."
|
|
4640
4651
|
},
|
|
4652
|
+
{
|
|
4653
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
4654
|
+
domain: "support",
|
|
4655
|
+
priority: "p1",
|
|
4656
|
+
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."
|
|
4657
|
+
},
|
|
4658
|
+
{
|
|
4659
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
4660
|
+
domain: "support",
|
|
4661
|
+
priority: "p0",
|
|
4662
|
+
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."
|
|
4663
|
+
},
|
|
4664
|
+
{
|
|
4665
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
4666
|
+
domain: "support",
|
|
4667
|
+
priority: "p1",
|
|
4668
|
+
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."
|
|
4669
|
+
},
|
|
4641
4670
|
// --- Operations ---
|
|
4642
4671
|
{
|
|
4643
4672
|
title: "Managers must supervise deployed workers",
|
|
@@ -2006,6 +2006,7 @@ __export(database_exports, {
|
|
|
2006
2006
|
isInitialized: () => isInitialized,
|
|
2007
2007
|
setExternalClient: () => setExternalClient
|
|
2008
2008
|
});
|
|
2009
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
2009
2010
|
import { createClient } from "@libsql/client";
|
|
2010
2011
|
async function initDatabase(config) {
|
|
2011
2012
|
if (_walCheckpointTimer) {
|
|
@@ -2047,6 +2048,16 @@ async function initDatabase(config) {
|
|
|
2047
2048
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
2048
2049
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
2049
2050
|
}
|
|
2051
|
+
try {
|
|
2052
|
+
chmodSync2(config.dbPath, 384);
|
|
2053
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
2054
|
+
try {
|
|
2055
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
2056
|
+
} catch {
|
|
2057
|
+
}
|
|
2058
|
+
}
|
|
2059
|
+
} catch {
|
|
2060
|
+
}
|
|
2050
2061
|
}
|
|
2051
2062
|
function isInitialized() {
|
|
2052
2063
|
return _adapterClient !== null || _client !== null;
|
|
@@ -4601,6 +4612,24 @@ var init_platform_procedures = __esm({
|
|
|
4601
4612
|
priority: "p0",
|
|
4602
4613
|
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."
|
|
4603
4614
|
},
|
|
4615
|
+
{
|
|
4616
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
4617
|
+
domain: "support",
|
|
4618
|
+
priority: "p1",
|
|
4619
|
+
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."
|
|
4620
|
+
},
|
|
4621
|
+
{
|
|
4622
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
4623
|
+
domain: "support",
|
|
4624
|
+
priority: "p0",
|
|
4625
|
+
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."
|
|
4626
|
+
},
|
|
4627
|
+
{
|
|
4628
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
4629
|
+
domain: "support",
|
|
4630
|
+
priority: "p1",
|
|
4631
|
+
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."
|
|
4632
|
+
},
|
|
4604
4633
|
// --- Operations ---
|
|
4605
4634
|
{
|
|
4606
4635
|
title: "Managers must supervise deployed workers",
|
|
@@ -1773,6 +1773,7 @@ __export(database_exports, {
|
|
|
1773
1773
|
isInitialized: () => isInitialized,
|
|
1774
1774
|
setExternalClient: () => setExternalClient
|
|
1775
1775
|
});
|
|
1776
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
1776
1777
|
import { createClient } from "@libsql/client";
|
|
1777
1778
|
async function initDatabase(config) {
|
|
1778
1779
|
if (_walCheckpointTimer) {
|
|
@@ -1814,6 +1815,16 @@ async function initDatabase(config) {
|
|
|
1814
1815
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
1815
1816
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
1816
1817
|
}
|
|
1818
|
+
try {
|
|
1819
|
+
chmodSync2(config.dbPath, 384);
|
|
1820
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
1821
|
+
try {
|
|
1822
|
+
chmodSync2(config.dbPath + suffix, 384);
|
|
1823
|
+
} catch {
|
|
1824
|
+
}
|
|
1825
|
+
}
|
|
1826
|
+
} catch {
|
|
1827
|
+
}
|
|
1817
1828
|
}
|
|
1818
1829
|
function isInitialized() {
|
|
1819
1830
|
return _adapterClient !== null || _client !== null;
|
|
@@ -4200,6 +4211,24 @@ var init_platform_procedures = __esm({
|
|
|
4200
4211
|
priority: "p0",
|
|
4201
4212
|
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."
|
|
4202
4213
|
},
|
|
4214
|
+
{
|
|
4215
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
4216
|
+
domain: "support",
|
|
4217
|
+
priority: "p1",
|
|
4218
|
+
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."
|
|
4219
|
+
},
|
|
4220
|
+
{
|
|
4221
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
4222
|
+
domain: "support",
|
|
4223
|
+
priority: "p0",
|
|
4224
|
+
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."
|
|
4225
|
+
},
|
|
4226
|
+
{
|
|
4227
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
4228
|
+
domain: "support",
|
|
4229
|
+
priority: "p1",
|
|
4230
|
+
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."
|
|
4231
|
+
},
|
|
4203
4232
|
// --- Operations ---
|
|
4204
4233
|
{
|
|
4205
4234
|
title: "Managers must supervise deployed workers",
|
|
@@ -5903,6 +5932,21 @@ var init_crdt_sync = __esm({
|
|
|
5903
5932
|
}
|
|
5904
5933
|
});
|
|
5905
5934
|
|
|
5935
|
+
// src/lib/pg-ssl.ts
|
|
5936
|
+
var pg_ssl_exports = {};
|
|
5937
|
+
__export(pg_ssl_exports, {
|
|
5938
|
+
pgSslConfig: () => pgSslConfig
|
|
5939
|
+
});
|
|
5940
|
+
function pgSslConfig() {
|
|
5941
|
+
if (process.env.EXE_DB_SSL_DISABLED === "true") return {};
|
|
5942
|
+
return { ssl: { rejectUnauthorized: process.env.EXE_DB_SSL_ALLOW_SELFSIGNED !== "true" } };
|
|
5943
|
+
}
|
|
5944
|
+
var init_pg_ssl = __esm({
|
|
5945
|
+
"src/lib/pg-ssl.ts"() {
|
|
5946
|
+
"use strict";
|
|
5947
|
+
}
|
|
5948
|
+
});
|
|
5949
|
+
|
|
5906
5950
|
// src/lib/db-backup.ts
|
|
5907
5951
|
var db_backup_exports = {};
|
|
5908
5952
|
__export(db_backup_exports, {
|
|
@@ -6016,6 +6060,7 @@ __export(cloud_sync_exports, {
|
|
|
6016
6060
|
cloudPull: () => cloudPull,
|
|
6017
6061
|
cloudPullBehaviors: () => cloudPullBehaviors,
|
|
6018
6062
|
cloudPullBlob: () => cloudPullBlob,
|
|
6063
|
+
cloudPullCodeContext: () => cloudPullCodeContext,
|
|
6019
6064
|
cloudPullConversations: () => cloudPullConversations,
|
|
6020
6065
|
cloudPullDocuments: () => cloudPullDocuments,
|
|
6021
6066
|
cloudPullGlobalProcedures: () => cloudPullGlobalProcedures,
|
|
@@ -6025,6 +6070,7 @@ __export(cloud_sync_exports, {
|
|
|
6025
6070
|
cloudPush: () => cloudPush,
|
|
6026
6071
|
cloudPushBehaviors: () => cloudPushBehaviors,
|
|
6027
6072
|
cloudPushBlob: () => cloudPushBlob,
|
|
6073
|
+
cloudPushCodeContext: () => cloudPushCodeContext,
|
|
6028
6074
|
cloudPushConversations: () => cloudPushConversations,
|
|
6029
6075
|
cloudPushDocuments: () => cloudPushDocuments,
|
|
6030
6076
|
cloudPushGlobalProcedures: () => cloudPushGlobalProcedures,
|
|
@@ -6103,7 +6149,8 @@ function loadPgClient() {
|
|
|
6103
6149
|
return new Ctor();
|
|
6104
6150
|
}
|
|
6105
6151
|
const { Pool } = await import("pg");
|
|
6106
|
-
const
|
|
6152
|
+
const { pgSslConfig: pgSslConfig2 } = await Promise.resolve().then(() => (init_pg_ssl(), pg_ssl_exports));
|
|
6153
|
+
const pool = new Pool({ connectionString: process.env.DATABASE_URL, ...pgSslConfig2() });
|
|
6107
6154
|
return {
|
|
6108
6155
|
async $queryRawUnsafe(query, ...values) {
|
|
6109
6156
|
const result = await pool.query(query, values);
|
|
@@ -6648,6 +6695,17 @@ async function cloudSync(config) {
|
|
|
6648
6695
|
} catch (err) {
|
|
6649
6696
|
logError(`[cloud-sync] DB backup upload error: ${err instanceof Error ? err.message : String(err)}`);
|
|
6650
6697
|
}
|
|
6698
|
+
let codeContextResult = { pushed: 0, pulled: 0 };
|
|
6699
|
+
try {
|
|
6700
|
+
codeContextResult.pushed = await cloudPushCodeContext(config);
|
|
6701
|
+
} catch (err) {
|
|
6702
|
+
logError(`[cloud-sync] Code context push: ${err instanceof Error ? err.message : String(err)}`);
|
|
6703
|
+
}
|
|
6704
|
+
try {
|
|
6705
|
+
codeContextResult.pulled = await cloudPullCodeContext(config);
|
|
6706
|
+
} catch (err) {
|
|
6707
|
+
logError(`[cloud-sync] Code context pull: ${err instanceof Error ? err.message : String(err)}`);
|
|
6708
|
+
}
|
|
6651
6709
|
return {
|
|
6652
6710
|
pushed,
|
|
6653
6711
|
pulled,
|
|
@@ -6657,7 +6715,8 @@ async function cloudSync(config) {
|
|
|
6657
6715
|
tasks: tasksResult,
|
|
6658
6716
|
conversations: conversationsResult,
|
|
6659
6717
|
documents: documentsResult,
|
|
6660
|
-
roster: rosterResult
|
|
6718
|
+
roster: rosterResult,
|
|
6719
|
+
codeContext: codeContextResult
|
|
6661
6720
|
};
|
|
6662
6721
|
}
|
|
6663
6722
|
function recordRosterDeletion(name) {
|
|
@@ -7295,7 +7354,99 @@ async function cloudPullDocuments(config) {
|
|
|
7295
7354
|
}
|
|
7296
7355
|
return { pulled };
|
|
7297
7356
|
}
|
|
7298
|
-
|
|
7357
|
+
async function cloudPushCodeContext(config) {
|
|
7358
|
+
assertSecureEndpoint(config.endpoint);
|
|
7359
|
+
if (!existsSync19(CODE_CONTEXT_DIR)) return 0;
|
|
7360
|
+
const files = readdirSync6(CODE_CONTEXT_DIR).filter(
|
|
7361
|
+
(f) => f.endsWith(".json") && !f.endsWith(".vectors.json") && !f.startsWith(".")
|
|
7362
|
+
);
|
|
7363
|
+
if (files.length === 0) return 0;
|
|
7364
|
+
const metaPath = path20.join(CODE_CONTEXT_DIR, ".sync-meta.json");
|
|
7365
|
+
let syncMeta = {};
|
|
7366
|
+
if (existsSync19(metaPath)) {
|
|
7367
|
+
try {
|
|
7368
|
+
syncMeta = JSON.parse(readFileSync13(metaPath, "utf-8"));
|
|
7369
|
+
} catch {
|
|
7370
|
+
}
|
|
7371
|
+
}
|
|
7372
|
+
let pushed = 0;
|
|
7373
|
+
for (const file of files) {
|
|
7374
|
+
const filePath = path20.join(CODE_CONTEXT_DIR, file);
|
|
7375
|
+
try {
|
|
7376
|
+
const stat = statSync6(filePath);
|
|
7377
|
+
const lastPushed = syncMeta[file] ?? 0;
|
|
7378
|
+
if (stat.mtimeMs <= lastPushed) continue;
|
|
7379
|
+
const content = readFileSync13(filePath, "utf-8");
|
|
7380
|
+
const header = content.substring(0, 300);
|
|
7381
|
+
if (header.includes("/tmp") || header.includes("/var/folders") || header.includes(".worktrees/")) continue;
|
|
7382
|
+
const compressed = compress(Buffer.from(content, "utf8"));
|
|
7383
|
+
const encrypted = encryptSyncBlob(compressed);
|
|
7384
|
+
const resp = await fetchWithRetry(`${config.endpoint}/sync/push-code-context`, {
|
|
7385
|
+
method: "POST",
|
|
7386
|
+
headers: {
|
|
7387
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
7388
|
+
"Content-Type": "application/json",
|
|
7389
|
+
"X-Device-Id": loadDeviceId()
|
|
7390
|
+
},
|
|
7391
|
+
body: JSON.stringify({ key: file, blob: encrypted })
|
|
7392
|
+
});
|
|
7393
|
+
if (resp.ok) {
|
|
7394
|
+
syncMeta[file] = stat.mtimeMs;
|
|
7395
|
+
pushed++;
|
|
7396
|
+
}
|
|
7397
|
+
} catch {
|
|
7398
|
+
}
|
|
7399
|
+
}
|
|
7400
|
+
if (pushed > 0) {
|
|
7401
|
+
try {
|
|
7402
|
+
writeFileSync9(metaPath, JSON.stringify(syncMeta));
|
|
7403
|
+
} catch {
|
|
7404
|
+
}
|
|
7405
|
+
}
|
|
7406
|
+
return pushed;
|
|
7407
|
+
}
|
|
7408
|
+
async function cloudPullCodeContext(config) {
|
|
7409
|
+
assertSecureEndpoint(config.endpoint);
|
|
7410
|
+
try {
|
|
7411
|
+
const resp = await fetchWithRetry(`${config.endpoint}/sync/pull-code-context`, {
|
|
7412
|
+
method: "GET",
|
|
7413
|
+
headers: {
|
|
7414
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
7415
|
+
"X-Device-Id": loadDeviceId()
|
|
7416
|
+
}
|
|
7417
|
+
});
|
|
7418
|
+
if (!resp.ok) return 0;
|
|
7419
|
+
const data = await resp.json();
|
|
7420
|
+
if (!data.indexes || data.indexes.length === 0) return 0;
|
|
7421
|
+
mkdirSync10(CODE_CONTEXT_DIR, { recursive: true });
|
|
7422
|
+
let pulled = 0;
|
|
7423
|
+
for (const { key, blob } of data.indexes) {
|
|
7424
|
+
try {
|
|
7425
|
+
if (key.endsWith(".vectors.json")) continue;
|
|
7426
|
+
const localPath = path20.join(CODE_CONTEXT_DIR, key);
|
|
7427
|
+
const compressed = decryptSyncBlob(blob);
|
|
7428
|
+
const content = decompress(compressed).toString("utf8");
|
|
7429
|
+
if (!existsSync19(localPath)) {
|
|
7430
|
+
writeFileSync9(localPath, content, "utf-8");
|
|
7431
|
+
pulled++;
|
|
7432
|
+
} else {
|
|
7433
|
+
const localContent = readFileSync13(localPath, "utf-8");
|
|
7434
|
+
if (localContent.length !== content.length) {
|
|
7435
|
+
writeFileSync9(localPath, content, "utf-8");
|
|
7436
|
+
pulled++;
|
|
7437
|
+
}
|
|
7438
|
+
}
|
|
7439
|
+
} catch {
|
|
7440
|
+
}
|
|
7441
|
+
}
|
|
7442
|
+
return pulled;
|
|
7443
|
+
} catch (err) {
|
|
7444
|
+
process.stderr.write(`[cloud-sync] Code context pull failed: ${err instanceof Error ? err.message : String(err)}
|
|
7445
|
+
`);
|
|
7446
|
+
return 0;
|
|
7447
|
+
}
|
|
7448
|
+
}
|
|
7449
|
+
var LOCALHOST_PATTERNS, FETCH_TIMEOUT_MS, PUSH_BATCH_SIZE, ROSTER_LOCK_PATH, LOCK_STALE_MS, _pgPromise, _pgFailed, CLOUD_REUPLOAD_REQUIRED_MESSAGE, ROSTER_DELETIONS_PATH, CODE_CONTEXT_DIR;
|
|
7299
7450
|
var init_cloud_sync = __esm({
|
|
7300
7451
|
"src/lib/cloud-sync.ts"() {
|
|
7301
7452
|
"use strict";
|
|
@@ -7316,6 +7467,7 @@ var init_cloud_sync = __esm({
|
|
|
7316
7467
|
_pgFailed = false;
|
|
7317
7468
|
CLOUD_REUPLOAD_REQUIRED_MESSAGE = "Cloud sync is blocked because this device rotated its memory encryption key. Run `exe-os cloud reupload` first to re-upload the cloud backup with the new key.";
|
|
7318
7469
|
ROSTER_DELETIONS_PATH = path20.join(EXE_AI_DIR, "roster-deletions.json");
|
|
7470
|
+
CODE_CONTEXT_DIR = path20.join(EXE_AI_DIR, "code-context");
|
|
7319
7471
|
}
|
|
7320
7472
|
});
|
|
7321
7473
|
|
package/dist/index.js
CHANGED
|
@@ -1069,7 +1069,7 @@ function readQueue() {
|
|
|
1069
1069
|
function writeQueue(queue) {
|
|
1070
1070
|
ensureDir();
|
|
1071
1071
|
const tmp = `${QUEUE_PATH}.tmp`;
|
|
1072
|
-
writeFileSync4(tmp, JSON.stringify(queue, null, 2));
|
|
1072
|
+
writeFileSync4(tmp, JSON.stringify(queue, null, 2), { mode: 384 });
|
|
1073
1073
|
renameSync3(tmp, QUEUE_PATH);
|
|
1074
1074
|
}
|
|
1075
1075
|
function queueIntercom(targetSession, reason) {
|
|
@@ -2511,6 +2511,7 @@ __export(database_exports, {
|
|
|
2511
2511
|
isInitialized: () => isInitialized,
|
|
2512
2512
|
setExternalClient: () => setExternalClient
|
|
2513
2513
|
});
|
|
2514
|
+
import { chmodSync as chmodSync2 } from "fs";
|
|
2514
2515
|
import { createClient } from "@libsql/client";
|
|
2515
2516
|
async function initDatabase(config2) {
|
|
2516
2517
|
if (_walCheckpointTimer) {
|
|
@@ -2552,6 +2553,16 @@ async function initDatabase(config2) {
|
|
|
2552
2553
|
if (process.env.DATABASE_URL && process.env.EXE_USE_POSTGRES === "1") {
|
|
2553
2554
|
_adapterClient = await createPrismaDbAdapter(_resilientClient);
|
|
2554
2555
|
}
|
|
2556
|
+
try {
|
|
2557
|
+
chmodSync2(config2.dbPath, 384);
|
|
2558
|
+
for (const suffix of ["-wal", "-shm"]) {
|
|
2559
|
+
try {
|
|
2560
|
+
chmodSync2(config2.dbPath + suffix, 384);
|
|
2561
|
+
} catch {
|
|
2562
|
+
}
|
|
2563
|
+
}
|
|
2564
|
+
} catch {
|
|
2565
|
+
}
|
|
2555
2566
|
}
|
|
2556
2567
|
function isInitialized() {
|
|
2557
2568
|
return _adapterClient !== null || _client !== null;
|
|
@@ -8217,6 +8228,24 @@ var init_platform_procedures = __esm({
|
|
|
8217
8228
|
priority: "p0",
|
|
8218
8229
|
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."
|
|
8219
8230
|
},
|
|
8231
|
+
{
|
|
8232
|
+
title: "Bug report status check \u2014 surface available fixes on boot",
|
|
8233
|
+
domain: "support",
|
|
8234
|
+
priority: "p1",
|
|
8235
|
+
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."
|
|
8236
|
+
},
|
|
8237
|
+
{
|
|
8238
|
+
title: "Feature request triage \u2014 upstream feature vs local customization",
|
|
8239
|
+
domain: "support",
|
|
8240
|
+
priority: "p0",
|
|
8241
|
+
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."
|
|
8242
|
+
},
|
|
8243
|
+
{
|
|
8244
|
+
title: "Feature request status check \u2014 surface shipped features on boot",
|
|
8245
|
+
domain: "support",
|
|
8246
|
+
priority: "p1",
|
|
8247
|
+
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."
|
|
8248
|
+
},
|
|
8220
8249
|
// --- Operations ---
|
|
8221
8250
|
{
|
|
8222
8251
|
title: "Managers must supervise deployed workers",
|