@askexenow/exe-os 0.9.20 → 0.9.22
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/LICENSE +24 -15
- package/dist/bin/backfill-conversations.js +17 -4
- package/dist/bin/backfill-responses.js +17 -4
- package/dist/bin/backfill-vectors.js +2 -2
- package/dist/bin/cleanup-stale-review-tasks.js +17 -4
- package/dist/bin/cli.js +420 -180
- package/dist/bin/exe-assign.js +17 -4
- package/dist/bin/exe-boot.js +2 -2
- package/dist/bin/exe-dispatch.js +17 -4
- package/dist/bin/exe-doctor.js +2 -2
- package/dist/bin/exe-export-behaviors.js +17 -4
- package/dist/bin/exe-forget.js +17 -4
- package/dist/bin/exe-gateway.js +17 -4
- package/dist/bin/exe-heartbeat.js +17 -4
- package/dist/bin/exe-kill.js +17 -4
- package/dist/bin/exe-launch-agent.js +17 -4
- package/dist/bin/exe-new-employee.js +42 -18
- package/dist/bin/exe-pending-messages.js +17 -4
- package/dist/bin/exe-pending-notifications.js +17 -4
- package/dist/bin/exe-pending-reviews.js +17 -4
- package/dist/bin/exe-review.js +17 -4
- package/dist/bin/exe-search.js +23 -8
- package/dist/bin/exe-session-cleanup.js +17 -4
- package/dist/bin/exe-start-codex.js +209 -32
- package/dist/bin/exe-start-opencode.js +17 -4
- package/dist/bin/exe-status.js +17 -4
- package/dist/bin/exe-team.js +17 -4
- package/dist/bin/git-sweep.js +17 -4
- package/dist/bin/graph-backfill.js +17 -4
- package/dist/bin/graph-export.js +17 -4
- package/dist/bin/install.js +84 -18
- package/dist/bin/intercom-check.js +17 -4
- package/dist/bin/scan-tasks.js +17 -4
- package/dist/bin/shard-migrate.js +17 -4
- package/dist/bin/update.js +187 -42
- package/dist/gateway/index.js +17 -4
- package/dist/hooks/bug-report-worker.js +793 -150
- package/dist/hooks/codex-stop-task-finalizer.js +3020 -2375
- package/dist/hooks/commit-complete.js +156 -6
- package/dist/hooks/error-recall.js +23 -8
- package/dist/hooks/ingest.js +17 -4
- package/dist/hooks/instructions-loaded.js +17 -4
- package/dist/hooks/notification.js +17 -4
- package/dist/hooks/post-compact.js +17 -4
- package/dist/hooks/post-tool-combined.js +23 -8
- package/dist/hooks/pre-compact.js +156 -8
- package/dist/hooks/pre-tool-use.js +21 -12
- package/dist/hooks/prompt-submit.js +23 -8
- package/dist/hooks/session-end.js +156 -8
- package/dist/hooks/session-start.js +23 -8
- package/dist/hooks/stop.js +306 -9
- package/dist/hooks/subagent-stop.js +306 -9
- package/dist/hooks/summary-worker.js +2 -2
- package/dist/index.js +17 -4
- package/dist/lib/exe-daemon.js +17 -4
- package/dist/lib/hybrid-search.js +23 -8
- package/dist/lib/schedules.js +2 -2
- package/dist/lib/store.js +17 -4
- package/dist/mcp/server.js +36 -10
- package/dist/runtime/index.js +17 -4
- package/dist/tui/App.js +17 -4
- package/package.json +2 -2
package/LICENSE
CHANGED
|
@@ -1,21 +1,30 @@
|
|
|
1
|
-
|
|
1
|
+
Proprietary License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2026
|
|
3
|
+
Copyright (c) 2026 Ask Exe Now Pty Ltd. All rights reserved.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
of
|
|
7
|
-
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
5
|
+
This software and associated documentation files (the "Software") are the
|
|
6
|
+
exclusive property of Ask Exe Now Pty Ltd ("AskExe"). The Software is
|
|
7
|
+
licensed, not sold.
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
RESTRICTIONS
|
|
10
|
+
|
|
11
|
+
You may not, without the prior written consent of AskExe:
|
|
12
|
+
|
|
13
|
+
1. Copy, modify, merge, or create derivative works of the Software;
|
|
14
|
+
2. Distribute, sublicense, sell, lease, or transfer the Software;
|
|
15
|
+
3. Reverse engineer, decompile, or disassemble the Software;
|
|
16
|
+
4. Remove or alter any proprietary notices or labels on the Software.
|
|
17
|
+
|
|
18
|
+
PERMITTED USE
|
|
19
|
+
|
|
20
|
+
Use of the Software is permitted only under a valid license agreement
|
|
21
|
+
with AskExe. See https://askexe.com/license for terms.
|
|
22
|
+
|
|
23
|
+
DISCLAIMER
|
|
14
24
|
|
|
15
25
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
26
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
SOFTWARE.
|
|
27
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
28
|
+
ASKEXE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
29
|
+
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
30
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -2736,8 +2736,8 @@ function getShardClient(projectName) {
|
|
|
2736
2736
|
throw new Error("Shard manager not initialized. Call initShardManager() first.");
|
|
2737
2737
|
}
|
|
2738
2738
|
const safeName = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
2739
|
-
if (!safeName) {
|
|
2740
|
-
throw new Error(`Invalid project name for shard: "${projectName}"`);
|
|
2739
|
+
if (!safeName || safeName === "unknown") {
|
|
2740
|
+
throw new Error(`Invalid project name for shard: "${projectName}" (resolved to "${safeName}")`);
|
|
2741
2741
|
}
|
|
2742
2742
|
const cached = _shards.get(safeName);
|
|
2743
2743
|
if (cached) {
|
|
@@ -3713,19 +3713,32 @@ async function flushBatch() {
|
|
|
3713
3713
|
const { isShardingEnabled: isShardingEnabled2, getReadyShardClient: getReadyShardClient2 } = await Promise.resolve().then(() => (init_shard_manager(), shard_manager_exports));
|
|
3714
3714
|
if (isShardingEnabled2()) {
|
|
3715
3715
|
const byProject = /* @__PURE__ */ new Map();
|
|
3716
|
+
let skippedUnknown = 0;
|
|
3716
3717
|
for (const row of batch) {
|
|
3717
|
-
const proj = row.project_name
|
|
3718
|
+
const proj = row.project_name?.trim();
|
|
3719
|
+
if (!proj) {
|
|
3720
|
+
skippedUnknown++;
|
|
3721
|
+
continue;
|
|
3722
|
+
}
|
|
3718
3723
|
if (!byProject.has(proj)) byProject.set(proj, []);
|
|
3719
3724
|
byProject.get(proj).push(row);
|
|
3720
3725
|
}
|
|
3726
|
+
if (skippedUnknown > 0) {
|
|
3727
|
+
process.stderr.write(
|
|
3728
|
+
`[store] Shard skip: ${skippedUnknown} record(s) with empty project_name (kept in main DB only)
|
|
3729
|
+
`
|
|
3730
|
+
);
|
|
3731
|
+
}
|
|
3721
3732
|
for (const [project, rows] of byProject) {
|
|
3722
3733
|
try {
|
|
3723
3734
|
const shardClient = await getReadyShardClient2(project);
|
|
3724
3735
|
const shardStmts = rows.map(buildStmt);
|
|
3725
3736
|
await shardClient.batch(shardStmts, "write");
|
|
3726
3737
|
} catch (err) {
|
|
3738
|
+
const fullError = err instanceof Error ? `${err.name}: ${err.message}${err.stack ? `
|
|
3739
|
+
${err.stack.split("\n").slice(1, 3).join("\n")}` : ""}` : String(err);
|
|
3727
3740
|
process.stderr.write(
|
|
3728
|
-
`[store] Shard write failed for ${project}
|
|
3741
|
+
`[store] Shard write failed for ${project} (${rows.length} records): ${fullError}
|
|
3729
3742
|
`
|
|
3730
3743
|
);
|
|
3731
3744
|
}
|
|
@@ -2736,8 +2736,8 @@ function getShardClient(projectName) {
|
|
|
2736
2736
|
throw new Error("Shard manager not initialized. Call initShardManager() first.");
|
|
2737
2737
|
}
|
|
2738
2738
|
const safeName = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
2739
|
-
if (!safeName) {
|
|
2740
|
-
throw new Error(`Invalid project name for shard: "${projectName}"`);
|
|
2739
|
+
if (!safeName || safeName === "unknown") {
|
|
2740
|
+
throw new Error(`Invalid project name for shard: "${projectName}" (resolved to "${safeName}")`);
|
|
2741
2741
|
}
|
|
2742
2742
|
const cached = _shards.get(safeName);
|
|
2743
2743
|
if (cached) {
|
|
@@ -3712,19 +3712,32 @@ async function flushBatch() {
|
|
|
3712
3712
|
const { isShardingEnabled: isShardingEnabled2, getReadyShardClient: getReadyShardClient2 } = await Promise.resolve().then(() => (init_shard_manager(), shard_manager_exports));
|
|
3713
3713
|
if (isShardingEnabled2()) {
|
|
3714
3714
|
const byProject = /* @__PURE__ */ new Map();
|
|
3715
|
+
let skippedUnknown = 0;
|
|
3715
3716
|
for (const row of batch) {
|
|
3716
|
-
const proj = row.project_name
|
|
3717
|
+
const proj = row.project_name?.trim();
|
|
3718
|
+
if (!proj) {
|
|
3719
|
+
skippedUnknown++;
|
|
3720
|
+
continue;
|
|
3721
|
+
}
|
|
3717
3722
|
if (!byProject.has(proj)) byProject.set(proj, []);
|
|
3718
3723
|
byProject.get(proj).push(row);
|
|
3719
3724
|
}
|
|
3725
|
+
if (skippedUnknown > 0) {
|
|
3726
|
+
process.stderr.write(
|
|
3727
|
+
`[store] Shard skip: ${skippedUnknown} record(s) with empty project_name (kept in main DB only)
|
|
3728
|
+
`
|
|
3729
|
+
);
|
|
3730
|
+
}
|
|
3720
3731
|
for (const [project, rows] of byProject) {
|
|
3721
3732
|
try {
|
|
3722
3733
|
const shardClient = await getReadyShardClient2(project);
|
|
3723
3734
|
const shardStmts = rows.map(buildStmt);
|
|
3724
3735
|
await shardClient.batch(shardStmts, "write");
|
|
3725
3736
|
} catch (err) {
|
|
3737
|
+
const fullError = err instanceof Error ? `${err.name}: ${err.message}${err.stack ? `
|
|
3738
|
+
${err.stack.split("\n").slice(1, 3).join("\n")}` : ""}` : String(err);
|
|
3726
3739
|
process.stderr.write(
|
|
3727
|
-
`[store] Shard write failed for ${project}
|
|
3740
|
+
`[store] Shard write failed for ${project} (${rows.length} records): ${fullError}
|
|
3728
3741
|
`
|
|
3729
3742
|
);
|
|
3730
3743
|
}
|
|
@@ -2732,8 +2732,8 @@ function getShardClient(projectName) {
|
|
|
2732
2732
|
throw new Error("Shard manager not initialized. Call initShardManager() first.");
|
|
2733
2733
|
}
|
|
2734
2734
|
const safeName = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
2735
|
-
if (!safeName) {
|
|
2736
|
-
throw new Error(`Invalid project name for shard: "${projectName}"`);
|
|
2735
|
+
if (!safeName || safeName === "unknown") {
|
|
2736
|
+
throw new Error(`Invalid project name for shard: "${projectName}" (resolved to "${safeName}")`);
|
|
2737
2737
|
}
|
|
2738
2738
|
const cached = _shards.get(safeName);
|
|
2739
2739
|
if (cached) {
|
|
@@ -2934,8 +2934,8 @@ function getShardClient(projectName) {
|
|
|
2934
2934
|
throw new Error("Shard manager not initialized. Call initShardManager() first.");
|
|
2935
2935
|
}
|
|
2936
2936
|
const safeName = projectName.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
2937
|
-
if (!safeName) {
|
|
2938
|
-
throw new Error(`Invalid project name for shard: "${projectName}"`);
|
|
2937
|
+
if (!safeName || safeName === "unknown") {
|
|
2938
|
+
throw new Error(`Invalid project name for shard: "${projectName}" (resolved to "${safeName}")`);
|
|
2939
2939
|
}
|
|
2940
2940
|
const cached = _shards.get(safeName);
|
|
2941
2941
|
if (cached) {
|
|
@@ -3804,19 +3804,32 @@ async function flushBatch() {
|
|
|
3804
3804
|
const { isShardingEnabled: isShardingEnabled2, getReadyShardClient: getReadyShardClient2 } = await Promise.resolve().then(() => (init_shard_manager(), shard_manager_exports));
|
|
3805
3805
|
if (isShardingEnabled2()) {
|
|
3806
3806
|
const byProject = /* @__PURE__ */ new Map();
|
|
3807
|
+
let skippedUnknown = 0;
|
|
3807
3808
|
for (const row of batch) {
|
|
3808
|
-
const proj = row.project_name
|
|
3809
|
+
const proj = row.project_name?.trim();
|
|
3810
|
+
if (!proj) {
|
|
3811
|
+
skippedUnknown++;
|
|
3812
|
+
continue;
|
|
3813
|
+
}
|
|
3809
3814
|
if (!byProject.has(proj)) byProject.set(proj, []);
|
|
3810
3815
|
byProject.get(proj).push(row);
|
|
3811
3816
|
}
|
|
3817
|
+
if (skippedUnknown > 0) {
|
|
3818
|
+
process.stderr.write(
|
|
3819
|
+
`[store] Shard skip: ${skippedUnknown} record(s) with empty project_name (kept in main DB only)
|
|
3820
|
+
`
|
|
3821
|
+
);
|
|
3822
|
+
}
|
|
3812
3823
|
for (const [project, rows] of byProject) {
|
|
3813
3824
|
try {
|
|
3814
3825
|
const shardClient = await getReadyShardClient2(project);
|
|
3815
3826
|
const shardStmts = rows.map(buildStmt);
|
|
3816
3827
|
await shardClient.batch(shardStmts, "write");
|
|
3817
3828
|
} catch (err) {
|
|
3829
|
+
const fullError = err instanceof Error ? `${err.name}: ${err.message}${err.stack ? `
|
|
3830
|
+
${err.stack.split("\n").slice(1, 3).join("\n")}` : ""}` : String(err);
|
|
3818
3831
|
process.stderr.write(
|
|
3819
|
-
`[store] Shard write failed for ${project}
|
|
3832
|
+
`[store] Shard write failed for ${project} (${rows.length} records): ${fullError}
|
|
3820
3833
|
`
|
|
3821
3834
|
);
|
|
3822
3835
|
}
|