@askexenow/exe-os 0.9.64 → 0.9.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/deploy/stack-manifests/v0.9.json +4 -4
- package/dist/bin/backfill-conversations.js +22 -0
- package/dist/bin/backfill-responses.js +22 -0
- package/dist/bin/backfill-vectors.js +22 -0
- package/dist/bin/cleanup-stale-review-tasks.js +22 -0
- package/dist/bin/cli.js +2280 -1199
- package/dist/bin/exe-agent-config.js +4 -0
- package/dist/bin/exe-agent.js +16 -0
- package/dist/bin/exe-assign.js +22 -0
- package/dist/bin/exe-boot.js +116 -7
- package/dist/bin/exe-call.js +16 -0
- package/dist/bin/exe-cloud.js +6671 -464
- package/dist/bin/exe-dispatch.js +24 -0
- package/dist/bin/exe-doctor.js +2845 -1223
- package/dist/bin/exe-export-behaviors.js +24 -0
- package/dist/bin/exe-forget.js +22 -0
- package/dist/bin/exe-gateway.js +24 -0
- package/dist/bin/exe-heartbeat.js +23 -0
- package/dist/bin/exe-kill.js +22 -0
- package/dist/bin/exe-launch-agent.js +24 -0
- package/dist/bin/exe-link.js +310 -178
- package/dist/bin/exe-new-employee.js +127 -1
- package/dist/bin/exe-pending-messages.js +22 -0
- package/dist/bin/exe-pending-notifications.js +22 -0
- package/dist/bin/exe-pending-reviews.js +22 -0
- package/dist/bin/exe-rename.js +22 -0
- package/dist/bin/exe-review.js +22 -0
- package/dist/bin/exe-search.js +24 -0
- package/dist/bin/exe-session-cleanup.js +24 -0
- package/dist/bin/exe-settings.js +10 -0
- package/dist/bin/exe-start-codex.js +135 -1
- package/dist/bin/exe-start-opencode.js +149 -1
- package/dist/bin/exe-status.js +22 -0
- package/dist/bin/exe-team.js +22 -0
- package/dist/bin/git-sweep.js +24 -0
- package/dist/bin/graph-backfill.js +22 -0
- package/dist/bin/graph-export.js +22 -0
- package/dist/bin/install.js +115 -1
- package/dist/bin/intercom-check.js +24 -0
- package/dist/bin/scan-tasks.js +24 -0
- package/dist/bin/setup.js +412 -157
- package/dist/bin/shard-migrate.js +22 -0
- package/dist/bin/update.js +4 -0
- package/dist/gateway/index.js +24 -0
- package/dist/hooks/bug-report-worker.js +135 -42
- package/dist/hooks/codex-stop-task-finalizer.js +24 -0
- package/dist/hooks/commit-complete.js +24 -0
- package/dist/hooks/error-recall.js +24 -0
- package/dist/hooks/exe-heartbeat-hook.js +4 -0
- package/dist/hooks/ingest-worker.js +4 -0
- package/dist/hooks/ingest.js +23 -0
- package/dist/hooks/instructions-loaded.js +22 -0
- package/dist/hooks/notification.js +22 -0
- package/dist/hooks/post-compact.js +22 -0
- package/dist/hooks/post-tool-combined.js +24 -0
- package/dist/hooks/pre-compact.js +260 -109
- package/dist/hooks/pre-tool-use.js +22 -0
- package/dist/hooks/prompt-submit.js +24 -0
- package/dist/hooks/session-end.js +161 -122
- package/dist/hooks/session-start.js +142 -0
- package/dist/hooks/stop.js +23 -0
- package/dist/hooks/subagent-stop.js +22 -0
- package/dist/hooks/summary-worker.js +195 -79
- package/dist/index.js +24 -0
- package/dist/lib/agent-config.js +4 -0
- package/dist/lib/cloud-sync.js +50 -6
- package/dist/lib/config.js +12 -0
- package/dist/lib/consolidation.js +4 -0
- package/dist/lib/database.js +4 -0
- package/dist/lib/db-daemon-client.js +4 -0
- package/dist/lib/db.js +4 -0
- package/dist/lib/device-registry.js +4 -0
- package/dist/lib/embedder.js +12 -0
- package/dist/lib/employee-templates.js +16 -0
- package/dist/lib/employees.js +4 -0
- package/dist/lib/exe-daemon-client.js +4 -0
- package/dist/lib/exe-daemon.js +1144 -480
- package/dist/lib/hybrid-search.js +24 -0
- package/dist/lib/identity.js +4 -0
- package/dist/lib/license.js +4 -0
- package/dist/lib/messaging.js +4 -0
- package/dist/lib/reminders.js +4 -0
- package/dist/lib/schedules.js +22 -0
- package/dist/lib/skill-learning.js +12 -0
- package/dist/lib/status-brief.js +39 -0
- package/dist/lib/store.js +22 -0
- package/dist/lib/task-router.js +4 -0
- package/dist/lib/tasks.js +12 -0
- package/dist/lib/tmux-routing.js +12 -0
- package/dist/lib/token-spend.js +4 -0
- package/dist/mcp/server.js +1045 -427
- package/dist/mcp/tools/complete-reminder.js +4 -0
- package/dist/mcp/tools/create-reminder.js +4 -0
- package/dist/mcp/tools/create-task.js +12 -0
- package/dist/mcp/tools/deactivate-behavior.js +4 -0
- package/dist/mcp/tools/list-reminders.js +4 -0
- package/dist/mcp/tools/list-tasks.js +4 -0
- package/dist/mcp/tools/send-message.js +4 -0
- package/dist/mcp/tools/update-task.js +12 -0
- package/dist/runtime/index.js +24 -0
- package/dist/tui/App.js +24 -0
- package/package.json +3 -2
- package/src/commands/exe/cloud.md +15 -8
- package/src/commands/exe/link.md +7 -6
- package/stack.release.json +2 -2
|
@@ -202,6 +202,11 @@ function normalizeAutoUpdate(raw) {
|
|
|
202
202
|
const userAU = raw.autoUpdate ?? {};
|
|
203
203
|
raw.autoUpdate = { ...defaultAU, ...userAU };
|
|
204
204
|
}
|
|
205
|
+
function normalizeOrchestration(raw) {
|
|
206
|
+
const defaultOrg = DEFAULT_CONFIG.orchestration;
|
|
207
|
+
const userOrg = raw.orchestration ?? {};
|
|
208
|
+
raw.orchestration = { ...defaultOrg, ...userOrg };
|
|
209
|
+
}
|
|
205
210
|
async function loadConfig() {
|
|
206
211
|
const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
|
|
207
212
|
await ensurePrivateDir(dir);
|
|
@@ -226,6 +231,7 @@ async function loadConfig() {
|
|
|
226
231
|
normalizeScalingRoadmap(migratedCfg);
|
|
227
232
|
normalizeSessionLifecycle(migratedCfg);
|
|
228
233
|
normalizeAutoUpdate(migratedCfg);
|
|
234
|
+
normalizeOrchestration(migratedCfg);
|
|
229
235
|
const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
|
|
230
236
|
if (config.dbPath.startsWith("~")) {
|
|
231
237
|
config.dbPath = config.dbPath.replace(/^~/, os.homedir());
|
|
@@ -249,6 +255,7 @@ function loadConfigSync() {
|
|
|
249
255
|
normalizeScalingRoadmap(migratedCfg);
|
|
250
256
|
normalizeSessionLifecycle(migratedCfg);
|
|
251
257
|
normalizeAutoUpdate(migratedCfg);
|
|
258
|
+
normalizeOrchestration(migratedCfg);
|
|
252
259
|
return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
|
|
253
260
|
} catch {
|
|
254
261
|
return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db") };
|
|
@@ -270,6 +277,7 @@ async function loadConfigFrom(configPath) {
|
|
|
270
277
|
normalizeScalingRoadmap(migratedCfg);
|
|
271
278
|
normalizeSessionLifecycle(migratedCfg);
|
|
272
279
|
normalizeAutoUpdate(migratedCfg);
|
|
280
|
+
normalizeOrchestration(migratedCfg);
|
|
273
281
|
return { ...DEFAULT_CONFIG, ...migratedCfg };
|
|
274
282
|
} catch {
|
|
275
283
|
return { ...DEFAULT_CONFIG };
|
|
@@ -341,6 +349,10 @@ var init_config = __esm({
|
|
|
341
349
|
checkOnBoot: true,
|
|
342
350
|
autoInstall: false,
|
|
343
351
|
checkIntervalMs: 24 * 60 * 60 * 1e3
|
|
352
|
+
},
|
|
353
|
+
orchestration: {
|
|
354
|
+
phase: "phase_1_coo",
|
|
355
|
+
phaseSetBy: "default"
|
|
344
356
|
}
|
|
345
357
|
};
|
|
346
358
|
CONFIG_MIGRATIONS = [
|
|
@@ -3826,6 +3838,12 @@ var init_platform_procedures = __esm({
|
|
|
3826
3838
|
priority: "p0",
|
|
3827
3839
|
content: "Founder -> coordinator (the executive agent, internally routed as 'COO') -> CTO/CMO. CTO -> engineers. CMO -> content production. Never skip levels: the coordinator does not bypass managers for specialist work. Specialists report to their manager. If you need cross-team info, use ask_team_memory \u2014 don't read other agents' task folders. Each level owns dispatch downward and review upward."
|
|
3828
3840
|
},
|
|
3841
|
+
{
|
|
3842
|
+
title: "Customer orchestration maturity \u2014 recommend, never trap",
|
|
3843
|
+
domain: "workflow",
|
|
3844
|
+
priority: "p1",
|
|
3845
|
+
content: "New customers start best in Phase 1: founder \u2194 coordinator/Chief of Staff, building company context. Suggest Phase 2 executives when domain work repeats; suggest Phase 3 parallel execution only when review/permission gates are ready. This is guidance, not a blocker: users may jump phases anytime. Never overwrite their phase, role titles, identities, or custom org design."
|
|
3846
|
+
},
|
|
3829
3847
|
{
|
|
3830
3848
|
title: "Single dispatch path \u2014 create_task only",
|
|
3831
3849
|
domain: "workflow",
|
|
@@ -3884,6 +3902,12 @@ var init_platform_procedures = __esm({
|
|
|
3884
3902
|
priority: "p0",
|
|
3885
3903
|
content: "exe-build-adv is MANDATORY for ALL work touching 3+ files. Run /exe-build-adv --auto BEFORE implementation. Pipeline: Spec \u2192 AC \u2192 Tests \u2192 Evaluate \u2192 Fix. No multi-file feature ships without pipeline artifacts. No exceptions \u2014 managers reject work without them."
|
|
3886
3904
|
},
|
|
3905
|
+
{
|
|
3906
|
+
title: "Commit discipline \u2014 never leave verified work floating",
|
|
3907
|
+
domain: "workflow",
|
|
3908
|
+
priority: "p1",
|
|
3909
|
+
content: "After any code-change batch passes typecheck/tests/build, run git status, summarize changed files, and commit with a clear message before ending the session. If work must remain uncommitted for review/dogfood, explicitly say so, list the files, and state the blocker. Never imply work is complete while verified changes are still floating locally."
|
|
3910
|
+
},
|
|
3887
3911
|
{
|
|
3888
3912
|
title: "Desktop and TUI are the same product",
|
|
3889
3913
|
domain: "architecture",
|
package/dist/lib/identity.js
CHANGED
package/dist/lib/license.js
CHANGED
package/dist/lib/messaging.js
CHANGED
package/dist/lib/reminders.js
CHANGED
package/dist/lib/schedules.js
CHANGED
|
@@ -178,6 +178,11 @@ function normalizeAutoUpdate(raw) {
|
|
|
178
178
|
const userAU = raw.autoUpdate ?? {};
|
|
179
179
|
raw.autoUpdate = { ...defaultAU, ...userAU };
|
|
180
180
|
}
|
|
181
|
+
function normalizeOrchestration(raw) {
|
|
182
|
+
const defaultOrg = DEFAULT_CONFIG.orchestration;
|
|
183
|
+
const userOrg = raw.orchestration ?? {};
|
|
184
|
+
raw.orchestration = { ...defaultOrg, ...userOrg };
|
|
185
|
+
}
|
|
181
186
|
async function loadConfig() {
|
|
182
187
|
const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
|
|
183
188
|
await ensurePrivateDir(dir);
|
|
@@ -202,6 +207,7 @@ async function loadConfig() {
|
|
|
202
207
|
normalizeScalingRoadmap(migratedCfg);
|
|
203
208
|
normalizeSessionLifecycle(migratedCfg);
|
|
204
209
|
normalizeAutoUpdate(migratedCfg);
|
|
210
|
+
normalizeOrchestration(migratedCfg);
|
|
205
211
|
const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
|
|
206
212
|
if (config.dbPath.startsWith("~")) {
|
|
207
213
|
config.dbPath = config.dbPath.replace(/^~/, os.homedir());
|
|
@@ -277,6 +283,10 @@ var init_config = __esm({
|
|
|
277
283
|
checkOnBoot: true,
|
|
278
284
|
autoInstall: false,
|
|
279
285
|
checkIntervalMs: 24 * 60 * 60 * 1e3
|
|
286
|
+
},
|
|
287
|
+
orchestration: {
|
|
288
|
+
phase: "phase_1_coo",
|
|
289
|
+
phaseSetBy: "default"
|
|
280
290
|
}
|
|
281
291
|
};
|
|
282
292
|
CONFIG_MIGRATIONS = [
|
|
@@ -3150,6 +3160,12 @@ var init_platform_procedures = __esm({
|
|
|
3150
3160
|
priority: "p0",
|
|
3151
3161
|
content: "Founder -> coordinator (the executive agent, internally routed as 'COO') -> CTO/CMO. CTO -> engineers. CMO -> content production. Never skip levels: the coordinator does not bypass managers for specialist work. Specialists report to their manager. If you need cross-team info, use ask_team_memory \u2014 don't read other agents' task folders. Each level owns dispatch downward and review upward."
|
|
3152
3162
|
},
|
|
3163
|
+
{
|
|
3164
|
+
title: "Customer orchestration maturity \u2014 recommend, never trap",
|
|
3165
|
+
domain: "workflow",
|
|
3166
|
+
priority: "p1",
|
|
3167
|
+
content: "New customers start best in Phase 1: founder \u2194 coordinator/Chief of Staff, building company context. Suggest Phase 2 executives when domain work repeats; suggest Phase 3 parallel execution only when review/permission gates are ready. This is guidance, not a blocker: users may jump phases anytime. Never overwrite their phase, role titles, identities, or custom org design."
|
|
3168
|
+
},
|
|
3153
3169
|
{
|
|
3154
3170
|
title: "Single dispatch path \u2014 create_task only",
|
|
3155
3171
|
domain: "workflow",
|
|
@@ -3208,6 +3224,12 @@ var init_platform_procedures = __esm({
|
|
|
3208
3224
|
priority: "p0",
|
|
3209
3225
|
content: "exe-build-adv is MANDATORY for ALL work touching 3+ files. Run /exe-build-adv --auto BEFORE implementation. Pipeline: Spec \u2192 AC \u2192 Tests \u2192 Evaluate \u2192 Fix. No multi-file feature ships without pipeline artifacts. No exceptions \u2014 managers reject work without them."
|
|
3210
3226
|
},
|
|
3227
|
+
{
|
|
3228
|
+
title: "Commit discipline \u2014 never leave verified work floating",
|
|
3229
|
+
domain: "workflow",
|
|
3230
|
+
priority: "p1",
|
|
3231
|
+
content: "After any code-change batch passes typecheck/tests/build, run git status, summarize changed files, and commit with a clear message before ending the session. If work must remain uncommitted for review/dogfood, explicitly say so, list the files, and state the blocker. Never imply work is complete while verified changes are still floating locally."
|
|
3232
|
+
},
|
|
3211
3233
|
{
|
|
3212
3234
|
title: "Desktop and TUI are the same product",
|
|
3213
3235
|
domain: "architecture",
|
|
@@ -138,6 +138,11 @@ function normalizeAutoUpdate(raw) {
|
|
|
138
138
|
const userAU = raw.autoUpdate ?? {};
|
|
139
139
|
raw.autoUpdate = { ...defaultAU, ...userAU };
|
|
140
140
|
}
|
|
141
|
+
function normalizeOrchestration(raw) {
|
|
142
|
+
const defaultOrg = DEFAULT_CONFIG.orchestration;
|
|
143
|
+
const userOrg = raw.orchestration ?? {};
|
|
144
|
+
raw.orchestration = { ...defaultOrg, ...userOrg };
|
|
145
|
+
}
|
|
141
146
|
async function loadConfig() {
|
|
142
147
|
const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
|
|
143
148
|
await ensurePrivateDir(dir);
|
|
@@ -162,6 +167,7 @@ async function loadConfig() {
|
|
|
162
167
|
normalizeScalingRoadmap(migratedCfg);
|
|
163
168
|
normalizeSessionLifecycle(migratedCfg);
|
|
164
169
|
normalizeAutoUpdate(migratedCfg);
|
|
170
|
+
normalizeOrchestration(migratedCfg);
|
|
165
171
|
const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
|
|
166
172
|
if (config.dbPath.startsWith("~")) {
|
|
167
173
|
config.dbPath = config.dbPath.replace(/^~/, os.homedir());
|
|
@@ -185,6 +191,7 @@ function loadConfigSync() {
|
|
|
185
191
|
normalizeScalingRoadmap(migratedCfg);
|
|
186
192
|
normalizeSessionLifecycle(migratedCfg);
|
|
187
193
|
normalizeAutoUpdate(migratedCfg);
|
|
194
|
+
normalizeOrchestration(migratedCfg);
|
|
188
195
|
return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
|
|
189
196
|
} catch {
|
|
190
197
|
return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db") };
|
|
@@ -206,6 +213,7 @@ async function loadConfigFrom(configPath) {
|
|
|
206
213
|
normalizeScalingRoadmap(migratedCfg);
|
|
207
214
|
normalizeSessionLifecycle(migratedCfg);
|
|
208
215
|
normalizeAutoUpdate(migratedCfg);
|
|
216
|
+
normalizeOrchestration(migratedCfg);
|
|
209
217
|
return { ...DEFAULT_CONFIG, ...migratedCfg };
|
|
210
218
|
} catch {
|
|
211
219
|
return { ...DEFAULT_CONFIG };
|
|
@@ -277,6 +285,10 @@ var init_config = __esm({
|
|
|
277
285
|
checkOnBoot: true,
|
|
278
286
|
autoInstall: false,
|
|
279
287
|
checkIntervalMs: 24 * 60 * 60 * 1e3
|
|
288
|
+
},
|
|
289
|
+
orchestration: {
|
|
290
|
+
phase: "phase_1_coo",
|
|
291
|
+
phaseSetBy: "default"
|
|
280
292
|
}
|
|
281
293
|
};
|
|
282
294
|
CONFIG_MIGRATIONS = [
|
package/dist/lib/status-brief.js
CHANGED
|
@@ -60,6 +60,8 @@ async function generateStatusBrief(employees, data, _activeAgentIds) {
|
|
|
60
60
|
}
|
|
61
61
|
const sections = [];
|
|
62
62
|
sections.push([` EXE STATUS BRIEF \u2014 ${dateStr}${sessionTag}`]);
|
|
63
|
+
const orchestrationLines = buildOrchestrationPhase(data, employees);
|
|
64
|
+
if (orchestrationLines.length > 0) sections.push(orchestrationLines);
|
|
63
65
|
const reminderLines = buildReminders(data);
|
|
64
66
|
if (reminderLines.length > 0) sections.push(reminderLines);
|
|
65
67
|
const actionLines = buildActionRequired(data);
|
|
@@ -102,6 +104,11 @@ function buildFirstBootBrief(employees, dateStr, sessionTag) {
|
|
|
102
104
|
bodyLines.push(` ${emoji} ${emp.name}${role}`);
|
|
103
105
|
}
|
|
104
106
|
bodyLines.push("");
|
|
107
|
+
bodyLines.push(" \u{1F9ED} Orchestration:");
|
|
108
|
+
bodyLines.push(" \u2022 Phase 1 \u2014 COO / Chief of Staff mode");
|
|
109
|
+
bodyLines.push(" \u2022 Recommended start: build company context first");
|
|
110
|
+
bodyLines.push(" \u2022 You can unlock executives or parallel mode anytime");
|
|
111
|
+
bodyLines.push("");
|
|
105
112
|
bodyLines.push(" \u{1F4A1} Quick start:");
|
|
106
113
|
bodyLines.push(" \u2022 Run `exe-os backfill-conversations` to import Claude Code history");
|
|
107
114
|
bodyLines.push(" \u2022 Say `/exe` to launch your COO with a full status brief");
|
|
@@ -132,6 +139,38 @@ function buildReminders(data) {
|
|
|
132
139
|
}
|
|
133
140
|
return lines;
|
|
134
141
|
}
|
|
142
|
+
function buildOrchestrationPhase(data, employees) {
|
|
143
|
+
if (!data.orchestrationPhase) return [];
|
|
144
|
+
const phase = data.orchestrationPhase;
|
|
145
|
+
const hasExecutiveBench = employees.some((e) => ["cto", "cmo"].includes(e.role.toLowerCase()));
|
|
146
|
+
const openWorkCount = data.globalTasks.filter((t) => t.status === "open" || t.status === "in_progress").length;
|
|
147
|
+
const domainKeywordHits = data.globalTasks.filter(
|
|
148
|
+
(t) => /\b(api|bug|code|repo|build|deploy|design|brand|copy|content|marketing|legal|finance|sales|crm)\b/i.test(t.title)
|
|
149
|
+
).length;
|
|
150
|
+
const phase1Signal = !hasExecutiveBench && (openWorkCount >= 3 || domainKeywordHits >= 2);
|
|
151
|
+
if (phase === "phase_2_executives") {
|
|
152
|
+
return [
|
|
153
|
+
"\u{1F9ED} ORCHESTRATION",
|
|
154
|
+
" Phase 2 \u2014 Executive bench",
|
|
155
|
+
" Focus: COO works with CTO/CMO/domain executives before specialist fan-out",
|
|
156
|
+
" You can switch phases anytime: exe-os org phase"
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
if (phase === "phase_3_parallel_org") {
|
|
160
|
+
return [
|
|
161
|
+
"\u{1F9ED} ORCHESTRATION",
|
|
162
|
+
" Phase 3 \u2014 Parallel execution org",
|
|
163
|
+
" Focus: executives can delegate to specialists in parallel with review gates",
|
|
164
|
+
" You can switch phases anytime: exe-os org phase"
|
|
165
|
+
];
|
|
166
|
+
}
|
|
167
|
+
return [
|
|
168
|
+
"\u{1F9ED} ORCHESTRATION",
|
|
169
|
+
" Phase 1 \u2014 COO / Chief of Staff mode",
|
|
170
|
+
" Focus: building company context before delegation",
|
|
171
|
+
phase1Signal ? " Signal: repeated domain work detected. Consider: exe-os org unlock executives" : " Ready later? exe-os org unlock executives"
|
|
172
|
+
];
|
|
173
|
+
}
|
|
135
174
|
function buildActionRequired(data) {
|
|
136
175
|
const lines = [];
|
|
137
176
|
let hasIssues = false;
|
package/dist/lib/store.js
CHANGED
|
@@ -187,6 +187,11 @@ function normalizeAutoUpdate(raw) {
|
|
|
187
187
|
const userAU = raw.autoUpdate ?? {};
|
|
188
188
|
raw.autoUpdate = { ...defaultAU, ...userAU };
|
|
189
189
|
}
|
|
190
|
+
function normalizeOrchestration(raw) {
|
|
191
|
+
const defaultOrg = DEFAULT_CONFIG.orchestration;
|
|
192
|
+
const userOrg = raw.orchestration ?? {};
|
|
193
|
+
raw.orchestration = { ...defaultOrg, ...userOrg };
|
|
194
|
+
}
|
|
190
195
|
async function loadConfig() {
|
|
191
196
|
const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
|
|
192
197
|
await ensurePrivateDir(dir);
|
|
@@ -211,6 +216,7 @@ async function loadConfig() {
|
|
|
211
216
|
normalizeScalingRoadmap(migratedCfg);
|
|
212
217
|
normalizeSessionLifecycle(migratedCfg);
|
|
213
218
|
normalizeAutoUpdate(migratedCfg);
|
|
219
|
+
normalizeOrchestration(migratedCfg);
|
|
214
220
|
const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
|
|
215
221
|
if (config.dbPath.startsWith("~")) {
|
|
216
222
|
config.dbPath = config.dbPath.replace(/^~/, os.homedir());
|
|
@@ -286,6 +292,10 @@ var init_config = __esm({
|
|
|
286
292
|
checkOnBoot: true,
|
|
287
293
|
autoInstall: false,
|
|
288
294
|
checkIntervalMs: 24 * 60 * 60 * 1e3
|
|
295
|
+
},
|
|
296
|
+
orchestration: {
|
|
297
|
+
phase: "phase_1_coo",
|
|
298
|
+
phaseSetBy: "default"
|
|
289
299
|
}
|
|
290
300
|
};
|
|
291
301
|
CONFIG_MIGRATIONS = [
|
|
@@ -3150,6 +3160,12 @@ var init_platform_procedures = __esm({
|
|
|
3150
3160
|
priority: "p0",
|
|
3151
3161
|
content: "Founder -> coordinator (the executive agent, internally routed as 'COO') -> CTO/CMO. CTO -> engineers. CMO -> content production. Never skip levels: the coordinator does not bypass managers for specialist work. Specialists report to their manager. If you need cross-team info, use ask_team_memory \u2014 don't read other agents' task folders. Each level owns dispatch downward and review upward."
|
|
3152
3162
|
},
|
|
3163
|
+
{
|
|
3164
|
+
title: "Customer orchestration maturity \u2014 recommend, never trap",
|
|
3165
|
+
domain: "workflow",
|
|
3166
|
+
priority: "p1",
|
|
3167
|
+
content: "New customers start best in Phase 1: founder \u2194 coordinator/Chief of Staff, building company context. Suggest Phase 2 executives when domain work repeats; suggest Phase 3 parallel execution only when review/permission gates are ready. This is guidance, not a blocker: users may jump phases anytime. Never overwrite their phase, role titles, identities, or custom org design."
|
|
3168
|
+
},
|
|
3153
3169
|
{
|
|
3154
3170
|
title: "Single dispatch path \u2014 create_task only",
|
|
3155
3171
|
domain: "workflow",
|
|
@@ -3208,6 +3224,12 @@ var init_platform_procedures = __esm({
|
|
|
3208
3224
|
priority: "p0",
|
|
3209
3225
|
content: "exe-build-adv is MANDATORY for ALL work touching 3+ files. Run /exe-build-adv --auto BEFORE implementation. Pipeline: Spec \u2192 AC \u2192 Tests \u2192 Evaluate \u2192 Fix. No multi-file feature ships without pipeline artifacts. No exceptions \u2014 managers reject work without them."
|
|
3210
3226
|
},
|
|
3227
|
+
{
|
|
3228
|
+
title: "Commit discipline \u2014 never leave verified work floating",
|
|
3229
|
+
domain: "workflow",
|
|
3230
|
+
priority: "p1",
|
|
3231
|
+
content: "After any code-change batch passes typecheck/tests/build, run git status, summarize changed files, and commit with a clear message before ending the session. If work must remain uncommitted for review/dogfood, explicitly say so, list the files, and state the blocker. Never imply work is complete while verified changes are still floating locally."
|
|
3232
|
+
},
|
|
3211
3233
|
{
|
|
3212
3234
|
title: "Desktop and TUI are the same product",
|
|
3213
3235
|
domain: "architecture",
|
package/dist/lib/task-router.js
CHANGED
package/dist/lib/tasks.js
CHANGED
|
@@ -156,6 +156,11 @@ function normalizeAutoUpdate(raw) {
|
|
|
156
156
|
const userAU = raw.autoUpdate ?? {};
|
|
157
157
|
raw.autoUpdate = { ...defaultAU, ...userAU };
|
|
158
158
|
}
|
|
159
|
+
function normalizeOrchestration(raw) {
|
|
160
|
+
const defaultOrg = DEFAULT_CONFIG.orchestration;
|
|
161
|
+
const userOrg = raw.orchestration ?? {};
|
|
162
|
+
raw.orchestration = { ...defaultOrg, ...userOrg };
|
|
163
|
+
}
|
|
159
164
|
async function loadConfig() {
|
|
160
165
|
const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
|
|
161
166
|
await ensurePrivateDir(dir);
|
|
@@ -180,6 +185,7 @@ async function loadConfig() {
|
|
|
180
185
|
normalizeScalingRoadmap(migratedCfg);
|
|
181
186
|
normalizeSessionLifecycle(migratedCfg);
|
|
182
187
|
normalizeAutoUpdate(migratedCfg);
|
|
188
|
+
normalizeOrchestration(migratedCfg);
|
|
183
189
|
const config = { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
|
|
184
190
|
if (config.dbPath.startsWith("~")) {
|
|
185
191
|
config.dbPath = config.dbPath.replace(/^~/, os.homedir());
|
|
@@ -203,6 +209,7 @@ function loadConfigSync() {
|
|
|
203
209
|
normalizeScalingRoadmap(migratedCfg);
|
|
204
210
|
normalizeSessionLifecycle(migratedCfg);
|
|
205
211
|
normalizeAutoUpdate(migratedCfg);
|
|
212
|
+
normalizeOrchestration(migratedCfg);
|
|
206
213
|
return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db"), ...migratedCfg };
|
|
207
214
|
} catch {
|
|
208
215
|
return { ...DEFAULT_CONFIG, dbPath: path.join(dir, "memories.db") };
|
|
@@ -224,6 +231,7 @@ async function loadConfigFrom(configPath) {
|
|
|
224
231
|
normalizeScalingRoadmap(migratedCfg);
|
|
225
232
|
normalizeSessionLifecycle(migratedCfg);
|
|
226
233
|
normalizeAutoUpdate(migratedCfg);
|
|
234
|
+
normalizeOrchestration(migratedCfg);
|
|
227
235
|
return { ...DEFAULT_CONFIG, ...migratedCfg };
|
|
228
236
|
} catch {
|
|
229
237
|
return { ...DEFAULT_CONFIG };
|
|
@@ -295,6 +303,10 @@ var init_config = __esm({
|
|
|
295
303
|
checkOnBoot: true,
|
|
296
304
|
autoInstall: false,
|
|
297
305
|
checkIntervalMs: 24 * 60 * 60 * 1e3
|
|
306
|
+
},
|
|
307
|
+
orchestration: {
|
|
308
|
+
phase: "phase_1_coo",
|
|
309
|
+
phaseSetBy: "default"
|
|
298
310
|
}
|
|
299
311
|
};
|
|
300
312
|
CONFIG_MIGRATIONS = [
|
package/dist/lib/tmux-routing.js
CHANGED
|
@@ -441,6 +441,11 @@ function normalizeAutoUpdate(raw) {
|
|
|
441
441
|
const userAU = raw.autoUpdate ?? {};
|
|
442
442
|
raw.autoUpdate = { ...defaultAU, ...userAU };
|
|
443
443
|
}
|
|
444
|
+
function normalizeOrchestration(raw) {
|
|
445
|
+
const defaultOrg = DEFAULT_CONFIG.orchestration;
|
|
446
|
+
const userOrg = raw.orchestration ?? {};
|
|
447
|
+
raw.orchestration = { ...defaultOrg, ...userOrg };
|
|
448
|
+
}
|
|
444
449
|
async function loadConfig() {
|
|
445
450
|
const dir = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? EXE_AI_DIR;
|
|
446
451
|
await ensurePrivateDir(dir);
|
|
@@ -465,6 +470,7 @@ async function loadConfig() {
|
|
|
465
470
|
normalizeScalingRoadmap(migratedCfg);
|
|
466
471
|
normalizeSessionLifecycle(migratedCfg);
|
|
467
472
|
normalizeAutoUpdate(migratedCfg);
|
|
473
|
+
normalizeOrchestration(migratedCfg);
|
|
468
474
|
const config = { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db"), ...migratedCfg };
|
|
469
475
|
if (config.dbPath.startsWith("~")) {
|
|
470
476
|
config.dbPath = config.dbPath.replace(/^~/, os2.homedir());
|
|
@@ -488,6 +494,7 @@ function loadConfigSync() {
|
|
|
488
494
|
normalizeScalingRoadmap(migratedCfg);
|
|
489
495
|
normalizeSessionLifecycle(migratedCfg);
|
|
490
496
|
normalizeAutoUpdate(migratedCfg);
|
|
497
|
+
normalizeOrchestration(migratedCfg);
|
|
491
498
|
return { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db"), ...migratedCfg };
|
|
492
499
|
} catch {
|
|
493
500
|
return { ...DEFAULT_CONFIG, dbPath: path2.join(dir, "memories.db") };
|
|
@@ -509,6 +516,7 @@ async function loadConfigFrom(configPath) {
|
|
|
509
516
|
normalizeScalingRoadmap(migratedCfg);
|
|
510
517
|
normalizeSessionLifecycle(migratedCfg);
|
|
511
518
|
normalizeAutoUpdate(migratedCfg);
|
|
519
|
+
normalizeOrchestration(migratedCfg);
|
|
512
520
|
return { ...DEFAULT_CONFIG, ...migratedCfg };
|
|
513
521
|
} catch {
|
|
514
522
|
return { ...DEFAULT_CONFIG };
|
|
@@ -580,6 +588,10 @@ var init_config = __esm({
|
|
|
580
588
|
checkOnBoot: true,
|
|
581
589
|
autoInstall: false,
|
|
582
590
|
checkIntervalMs: 24 * 60 * 60 * 1e3
|
|
591
|
+
},
|
|
592
|
+
orchestration: {
|
|
593
|
+
phase: "phase_1_coo",
|
|
594
|
+
phaseSetBy: "default"
|
|
583
595
|
}
|
|
584
596
|
};
|
|
585
597
|
CONFIG_MIGRATIONS = [
|
package/dist/lib/token-spend.js
CHANGED