@askexenow/exe-os 0.8.29 → 0.8.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.js +1 -1
- package/dist/bin/setup.js +1 -1
- package/package.json +1 -1
- package/src/commands/exe/assign.md +2 -2
- package/src/commands/exe/build-adv.md +4 -4
- package/src/commands/exe/call.md +3 -3
- package/src/commands/exe/cloud.md +1 -1
- package/src/commands/exe/doctor.md +1 -1
- package/src/commands/exe/employee-heartbeat.md +1 -1
- package/src/commands/exe/forget.md +1 -1
- package/src/commands/exe/intercom.md +5 -5
- package/src/commands/exe/launch.md +1 -1
- package/src/commands/exe/link.md +1 -1
- package/src/commands/exe/new-employee.md +1 -1
- package/src/commands/exe/review.md +1 -1
- package/src/commands/exe/schedule.md +7 -7
- package/src/commands/exe/search.md +1 -1
- package/src/commands/exe/settings.md +1 -1
- package/src/commands/exe/setup.md +1 -1
- package/src/commands/exe/status.md +1 -1
- package/src/commands/exe/team.md +1 -1
- package/src/commands/exe/update.md +1 -1
- package/src/commands/exe.md +3 -3
package/dist/bin/cli.js
CHANGED
|
@@ -5002,7 +5002,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
5002
5002
|
if (res.ok) {
|
|
5003
5003
|
const data = await res.json();
|
|
5004
5004
|
if (data.apiKey) {
|
|
5005
|
-
cloudConfig = { apiKey: data.apiKey, endpoint: "https://
|
|
5005
|
+
cloudConfig = { apiKey: data.apiKey, endpoint: "https://askexe.com/cloud" };
|
|
5006
5006
|
const { saveLicense: saveLicense3, mirrorLicenseKey: mirrorLicenseKey3 } = await Promise.resolve().then(() => (init_license(), license_exports));
|
|
5007
5007
|
saveLicense3(data.apiKey);
|
|
5008
5008
|
mirrorLicenseKey3(data.apiKey);
|
package/dist/bin/setup.js
CHANGED
|
@@ -2474,7 +2474,7 @@ async function runSetupWizard(opts = {}) {
|
|
|
2474
2474
|
if (res.ok) {
|
|
2475
2475
|
const data = await res.json();
|
|
2476
2476
|
if (data.apiKey) {
|
|
2477
|
-
cloudConfig = { apiKey: data.apiKey, endpoint: "https://
|
|
2477
|
+
cloudConfig = { apiKey: data.apiKey, endpoint: "https://askexe.com/cloud" };
|
|
2478
2478
|
const { saveLicense: saveLicense3, mirrorLicenseKey: mirrorLicenseKey3 } = await Promise.resolve().then(() => (init_license(), license_exports));
|
|
2479
2479
|
saveLicense3(data.apiKey);
|
|
2480
2480
|
mirrorLicenseKey3(data.apiKey);
|
package/package.json
CHANGED
|
@@ -8,10 +8,10 @@ Assign a task to the best specialist or a named employee.
|
|
|
8
8
|
|
|
9
9
|
Auto-route (finds best match):
|
|
10
10
|
```bash
|
|
11
|
-
node "$(npm root -g)/exe-os/dist/bin/exe-assign.js" "debug the auth timeout"
|
|
11
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-assign.js" "debug the auth timeout"
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
Direct assign:
|
|
15
15
|
```bash
|
|
16
|
-
node "$(npm root -g)/exe-os/dist/bin/exe-assign.js" yoshi "debug the auth timeout"
|
|
16
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-assign.js" yoshi "debug the auth timeout"
|
|
17
17
|
```
|
|
@@ -181,8 +181,8 @@ For each subtask, call create_task with:
|
|
|
181
181
|
**VERIFY:**
|
|
182
182
|
```bash
|
|
183
183
|
SUBTASK_COUNT=$(node -e "
|
|
184
|
-
const {getClient}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'exe-os/dist/lib/turso.js'));
|
|
185
|
-
const {initStore}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'exe-os/dist/lib/store.js'));
|
|
184
|
+
const {getClient}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'@askexenow/exe-os/dist/lib/turso.js'));
|
|
185
|
+
const {initStore}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'@askexenow/exe-os/dist/lib/store.js'));
|
|
186
186
|
(async()=>{await initStore();const c=getClient();const r=await c.execute({sql:\"SELECT COUNT(*) as cnt FROM tasks WHERE title LIKE 'build-adv/{slug}%' AND status != 'done'\",args:[]});console.log(Number(r.rows[0]?.cnt??0))})()
|
|
187
187
|
" 2>/dev/null)
|
|
188
188
|
[ "$SUBTASK_COUNT" -gt 0 ] 2>/dev/null && echo "CHECKPOINT_PASS:${SUBTASK_COUNT}_subtasks" || echo "CHECKPOINT_FAIL:no_subtasks_in_db"
|
|
@@ -319,8 +319,8 @@ node -e "const f='exe/output/{slug}/build-state.json'; const s=JSON.parse(requir
|
|
|
319
319
|
**VERIFY:**
|
|
320
320
|
```bash
|
|
321
321
|
OPEN_COUNT=$(node -e "
|
|
322
|
-
const {getClient}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'exe-os/dist/lib/turso.js'));
|
|
323
|
-
const {initStore}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'exe-os/dist/lib/store.js'));
|
|
322
|
+
const {getClient}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'@askexenow/exe-os/dist/lib/turso.js'));
|
|
323
|
+
const {initStore}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'@askexenow/exe-os/dist/lib/store.js'));
|
|
324
324
|
(async()=>{await initStore();const c=getClient();const r=await c.execute({sql:\"SELECT COUNT(*) as cnt FROM tasks WHERE title LIKE 'build-adv/{slug}%' AND status NOT IN ('done','cancelled')\",args:[]});console.log(Number(r.rows[0]?.cnt??0))})()
|
|
325
325
|
" 2>/dev/null)
|
|
326
326
|
[ "$OPEN_COUNT" -eq 0 ] 2>/dev/null && echo "CHECKPOINT_PASS" || echo "CHECKPOINT_FAIL:${OPEN_COUNT}_subtasks_still_open"
|
package/src/commands/exe/call.md
CHANGED
|
@@ -67,7 +67,7 @@ Employee sessions are named `{name}-{exeSession}` (e.g., `yoshi-exe1`) or `{name
|
|
|
67
67
|
```bash
|
|
68
68
|
NAME="$ARGUMENTS"
|
|
69
69
|
EXE_SESSION=$(tmux display-message -p '#{session_name}' 2>/dev/null)
|
|
70
|
-
RESULT=$(node -e "const {ensureEmployee}=require('$(npm root -g)/exe-os/dist/lib/tmux-routing.js'); const r=ensureEmployee('${NAME}','${EXE_SESSION}','$(pwd)'); console.log(JSON.stringify(r));")
|
|
70
|
+
RESULT=$(node -e "const {ensureEmployee}=require('$(npm root -g)/@askexenow/exe-os/dist/lib/tmux-routing.js'); const r=ensureEmployee('${NAME}','${EXE_SESSION}','$(pwd)'); console.log(JSON.stringify(r));")
|
|
71
71
|
echo "$RESULT"
|
|
72
72
|
```
|
|
73
73
|
Report the result and STOP HERE. Do not continue to step 1.
|
|
@@ -102,7 +102,7 @@ export AGENT_ROLE="${ROLE}"
|
|
|
102
102
|
MY_SESSION=$(tmux display-message -p '#{session_name}' 2>/dev/null)
|
|
103
103
|
DISPATCH_INFO="$HOME/.exe-os/session-cache/dispatch-info-${MY_SESSION}.json"
|
|
104
104
|
DISPATCHED_BY=$(node -e "try{const d=JSON.parse(require('fs').readFileSync('$DISPATCH_INFO','utf8'));console.log(d.dispatchedBy||'')}catch{console.log('')}" 2>/dev/null)
|
|
105
|
-
node -e "const {parseParentExe,registerParentExe}=require('$(npm root -g)/exe-os/dist/lib/tmux-routing.js'); const p=parseParentExe('$MY_SESSION','$NAME'); if(p) registerParentExe('$KEY',p,'$DISPATCHED_BY'||undefined);"
|
|
105
|
+
node -e "const {parseParentExe,registerParentExe}=require('$(npm root -g)/@askexenow/exe-os/dist/lib/tmux-routing.js'); const p=parseParentExe('$MY_SESSION','$NAME'); if(p) registerParentExe('$KEY',p,'$DISPATCHED_BY'||undefined);"
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
2. Ensure exe folder structure exists and scan for open tasks:
|
|
@@ -114,7 +114,7 @@ if [ -f .gitignore ]; then
|
|
|
114
114
|
else
|
|
115
115
|
echo -e '# Employee task assignments (private)\n/exe/' > .gitignore
|
|
116
116
|
fi
|
|
117
|
-
node "$(npm root -g)/exe-os/dist/bin/scan-tasks.js" "exe/$ARGUMENTS" --format=mandatory 2>/dev/null
|
|
117
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/scan-tasks.js" "exe/$ARGUMENTS" --format=mandatory 2>/dev/null
|
|
118
118
|
```
|
|
119
119
|
|
|
120
120
|
3. Check memories for context from exe:
|
|
@@ -11,7 +11,7 @@ One command to link a device and enable cloud sync.
|
|
|
11
11
|
- `/exe-cloud status` — show current sync status and key fingerprint
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
node "$(npm root -g)/exe-os/dist/bin/exe-cloud.js" $ARGUMENTS
|
|
14
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-cloud.js" $ARGUMENTS
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
**Note:** `/exe-link` is deprecated. Use `/exe-cloud` instead.
|
|
@@ -6,5 +6,5 @@ allowed-tools: Bash
|
|
|
6
6
|
Run a full memory health audit showing total memories, per-agent breakdown, date range, and any issues.
|
|
7
7
|
|
|
8
8
|
```bash
|
|
9
|
-
node "$(npm root -g)/exe-os/dist/bin/exe-doctor.js" $ARGUMENTS
|
|
9
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-doctor.js" $ARGUMENTS
|
|
10
10
|
```
|
|
@@ -37,7 +37,7 @@ if [ -f "$ACTIVITY_FILE" ]; then
|
|
|
37
37
|
fi
|
|
38
38
|
|
|
39
39
|
# Use canonical scanner — single source of truth for task status detection
|
|
40
|
-
node "$(npm root -g)/exe-os/dist/bin/scan-tasks.js" "exe/$AGENT" --format=mandatory 2>/dev/null
|
|
40
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/scan-tasks.js" "exe/$AGENT" --format=mandatory 2>/dev/null
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
**If the script outputs task info:** read the task file and begin working immediately. Do not ask what to do.
|
|
@@ -24,23 +24,23 @@ fi
|
|
|
24
24
|
|
|
25
25
|
# Exe gets review notifications instead of task dispatch
|
|
26
26
|
if [ "$AGENT" = "exe" ]; then
|
|
27
|
-
node "$(npm root -g)/exe-os/dist/bin/exe-pending-reviews.js" 2>/dev/null
|
|
27
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-pending-reviews.js" 2>/dev/null
|
|
28
28
|
# Exe also subscribes to notifications (subtasks_complete, task_complete, etc.)
|
|
29
29
|
# so parent-of-parent rollups surface live instead of only at boot.
|
|
30
|
-
node "$(npm root -g)/exe-os/dist/bin/exe-pending-notifications.js" "$AGENT" 2>/dev/null
|
|
30
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-pending-notifications.js" "$AGENT" 2>/dev/null
|
|
31
31
|
exit 0
|
|
32
32
|
fi
|
|
33
33
|
|
|
34
34
|
# Use canonical scanner — single source of truth for task status detection
|
|
35
|
-
node "$(npm root -g)/exe-os/dist/bin/scan-tasks.js" "exe/$AGENT" --format=mandatory 2>/dev/null
|
|
35
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/scan-tasks.js" "exe/$AGENT" --format=mandatory 2>/dev/null
|
|
36
36
|
|
|
37
37
|
# Check for pending messages
|
|
38
|
-
node "$(npm root -g)/exe-os/dist/bin/exe-pending-messages.js" "$AGENT" 2>/dev/null
|
|
38
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-pending-messages.js" "$AGENT" 2>/dev/null
|
|
39
39
|
|
|
40
40
|
# Check for pending notifications (subtasks_complete, rollup signals, etc.)
|
|
41
41
|
# Employees acting as parent-of-parents (e.g. yoshi holding multiple parent
|
|
42
42
|
# tasks) need these too — not only exe. See the parent-cascade audit §6.
|
|
43
|
-
node "$(npm root -g)/exe-os/dist/bin/exe-pending-notifications.js" "$AGENT" 2>/dev/null
|
|
43
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-pending-notifications.js" "$AGENT" 2>/dev/null
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
### For exe (AGENT=exe)
|
|
@@ -33,7 +33,7 @@ For each name in $ARGUMENTS, verify it exists in the roster. If any name is not
|
|
|
33
33
|
```bash
|
|
34
34
|
NAME="<employee>"
|
|
35
35
|
EXE_SESSION=$(tmux display-message -p '#{session_name}' 2>/dev/null)
|
|
36
|
-
RESULT=$(node -e "const {ensureEmployee}=require('$(npm root -g)/exe-os/dist/lib/tmux-routing.js'); const r=ensureEmployee('${NAME}','${EXE_SESSION}','$(pwd)'); console.log(JSON.stringify(r));")
|
|
36
|
+
RESULT=$(node -e "const {ensureEmployee}=require('$(npm root -g)/@askexenow/exe-os/dist/lib/tmux-routing.js'); const r=ensureEmployee('${NAME}','${EXE_SESSION}','$(pwd)'); console.log(JSON.stringify(r));")
|
|
37
37
|
echo "${NAME}: ${RESULT}"
|
|
38
38
|
```
|
|
39
39
|
|
package/src/commands/exe/link.md
CHANGED
|
@@ -21,8 +21,8 @@ Determine the action:
|
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
23
|
node -e "
|
|
24
|
-
const {initStore}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'exe-os/dist/lib/store.js'));
|
|
25
|
-
const {listSchedules}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'exe-os/dist/lib/schedules.js'));
|
|
24
|
+
const {initStore}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'@askexenow/exe-os/dist/lib/store.js'));
|
|
25
|
+
const {listSchedules}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'@askexenow/exe-os/dist/lib/schedules.js'));
|
|
26
26
|
(async()=>{
|
|
27
27
|
await initStore();
|
|
28
28
|
const schedules=await listSchedules();
|
|
@@ -45,8 +45,8 @@ Print the output as-is.
|
|
|
45
45
|
```bash
|
|
46
46
|
ID="<extracted-id>"
|
|
47
47
|
node -e "
|
|
48
|
-
const {initStore}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'exe-os/dist/lib/store.js'));
|
|
49
|
-
const {deleteSchedule}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'exe-os/dist/lib/schedules.js'));
|
|
48
|
+
const {initStore}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'@askexenow/exe-os/dist/lib/store.js'));
|
|
49
|
+
const {deleteSchedule}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'@askexenow/exe-os/dist/lib/schedules.js'));
|
|
50
50
|
(async()=>{
|
|
51
51
|
await initStore();
|
|
52
52
|
const ok=await deleteSchedule('${ID}');
|
|
@@ -66,7 +66,7 @@ node -e "
|
|
|
66
66
|
```bash
|
|
67
67
|
TIME_EXPR="<extracted-time>"
|
|
68
68
|
node -e "
|
|
69
|
-
const {parseHumanCron}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'exe-os/dist/lib/schedules.js'));
|
|
69
|
+
const {parseHumanCron}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'@askexenow/exe-os/dist/lib/schedules.js'));
|
|
70
70
|
console.log(parseHumanCron('${TIME_EXPR}'))
|
|
71
71
|
" 2>/dev/null
|
|
72
72
|
```
|
|
@@ -89,8 +89,8 @@ DESC="<description>"
|
|
|
89
89
|
TYPE="<job-type>"
|
|
90
90
|
CRONTAB="<0-or-1>"
|
|
91
91
|
node -e "
|
|
92
|
-
const {initStore}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'exe-os/dist/lib/store.js'));
|
|
93
|
-
const {createSchedule}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'exe-os/dist/lib/schedules.js'));
|
|
92
|
+
const {initStore}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'@askexenow/exe-os/dist/lib/store.js'));
|
|
93
|
+
const {createSchedule}=require(require('path').join(require('child_process').execSync('npm root -g',{encoding:'utf8'}).trim(),'@askexenow/exe-os/dist/lib/schedules.js'));
|
|
94
94
|
(async()=>{
|
|
95
95
|
await initStore();
|
|
96
96
|
const s=await createSchedule({cron:'${CRON}',description:'${DESC}',jobType:'${TYPE}',useCrontab:${CRONTAB}===1});
|
|
@@ -68,7 +68,7 @@ Use AskUserQuestion to ask for their Exe Cloud API key (exe_sk_...).
|
|
|
68
68
|
|
|
69
69
|
Validate the key:
|
|
70
70
|
```bash
|
|
71
|
-
curl -s "https://
|
|
71
|
+
curl -s "https://askexe.com/cloud/auth/verify" \
|
|
72
72
|
-H "Authorization: Bearer USER_API_KEY" | cat
|
|
73
73
|
```
|
|
74
74
|
|
|
@@ -8,7 +8,7 @@ Show real-time employee status by capturing tmux pane output.
|
|
|
8
8
|
|
|
9
9
|
Run:
|
|
10
10
|
```bash
|
|
11
|
-
node "$(npm root -g)/exe-os/dist/bin/exe-status.js" $ARGUMENTS 2>/dev/null
|
|
11
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-status.js" $ARGUMENTS 2>/dev/null
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
Print the output EXACTLY as-is — it is pre-formatted with box-drawing characters.
|
package/src/commands/exe/team.md
CHANGED
package/src/commands/exe.md
CHANGED
|
@@ -133,7 +133,7 @@ When an employee sends `context-full: <name> hit capacity. Checkpoint saved. Res
|
|
|
133
133
|
After completing a review (or batch of reviews), re-check for new reviews:
|
|
134
134
|
|
|
135
135
|
```bash
|
|
136
|
-
node "$(npm root -g)/exe-os/dist/bin/exe-pending-reviews.js" 2>/dev/null
|
|
136
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-pending-reviews.js" 2>/dev/null
|
|
137
137
|
```
|
|
138
138
|
|
|
139
139
|
If more reviews exist, start reviewing them immediately. Do NOT stop and wait for the founder. Keep chaining until the queue is empty. Only then resume normal conversation.
|
|
@@ -149,7 +149,7 @@ You manage 10-20+ projects. When the founder asks "what's going on," give the re
|
|
|
149
149
|
Run the boot script:
|
|
150
150
|
|
|
151
151
|
```bash
|
|
152
|
-
node "$(npm root -g)/exe-os/dist/bin/exe-boot.js"
|
|
152
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-boot.js"
|
|
153
153
|
```
|
|
154
154
|
|
|
155
155
|
**The user already sees the bash output. Do NOT reproduce, summarize, reformat, or comment on it.**
|
|
@@ -160,7 +160,7 @@ Say nothing after the script runs. The user will speak first.
|
|
|
160
160
|
When the founder asks about status, reviews, tasks, progress, or "what's going on" at ANY point AFTER the initial boot — re-run the status query. NEVER reference the boot snapshot for current state.
|
|
161
161
|
|
|
162
162
|
```bash
|
|
163
|
-
node "$(npm root -g)/exe-os/dist/bin/exe-boot.js" --brief-only
|
|
163
|
+
node "$(npm root -g)/@askexenow/exe-os/dist/bin/exe-boot.js" --brief-only
|
|
164
164
|
```
|
|
165
165
|
|
|
166
166
|
The boot snapshot is context for session start. For any subsequent status question, the DB is the source of truth. Query it. `--brief-only` is fast (read-only, no reconciliation, no side effects).
|