tmux-ide 2.1.0 → 2.1.2
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/dashboard/out/404/index.html +1 -1
- package/dashboard/out/404.html +1 -1
- package/dashboard/out/__next.__PAGE__.txt +1 -1
- package/dashboard/out/__next._full.txt +1 -1
- package/dashboard/out/__next._head.txt +1 -1
- package/dashboard/out/__next._index.txt +1 -1
- package/dashboard/out/__next._tree.txt +1 -1
- package/dashboard/out/_next/static/chunks/{6cb5c58418022991.js → 422e1bb4d41ce5ba.js} +1 -1
- package/dashboard/out/_not-found/__next._full.txt +1 -1
- package/dashboard/out/_not-found/__next._head.txt +1 -1
- package/dashboard/out/_not-found/__next._index.txt +1 -1
- package/dashboard/out/_not-found/__next._not-found.__PAGE__.txt +1 -1
- package/dashboard/out/_not-found/__next._not-found.txt +1 -1
- package/dashboard/out/_not-found/__next._tree.txt +1 -1
- package/dashboard/out/_not-found/index.html +1 -1
- package/dashboard/out/_not-found/index.txt +1 -1
- package/dashboard/out/index.html +1 -1
- package/dashboard/out/index.txt +1 -1
- package/dashboard/out/project/__fallback/__next._full.txt +2 -2
- package/dashboard/out/project/__fallback/__next._head.txt +1 -1
- package/dashboard/out/project/__fallback/__next._index.txt +1 -1
- package/dashboard/out/project/__fallback/__next._tree.txt +1 -1
- package/dashboard/out/project/__fallback/__next.project.$d$name.__PAGE__.txt +2 -2
- package/dashboard/out/project/__fallback/__next.project.$d$name.txt +1 -1
- package/dashboard/out/project/__fallback/__next.project.txt +1 -1
- package/dashboard/out/project/__fallback/index.html +1 -1
- package/dashboard/out/project/__fallback/index.txt +2 -2
- package/package.json +1 -1
- package/src/command-center/server.ts +8 -2
- package/src/lib/daemon.ts +4 -18
- package/src/lib/orchestrator.ts +10 -2
- /package/dashboard/out/_next/static/{WTHSCKfFb30xXXhXuq66f → hKfaRIxA4e3yTmkv1VUnK}/_buildManifest.js +0 -0
- /package/dashboard/out/_next/static/{WTHSCKfFb30xXXhXuq66f → hKfaRIxA4e3yTmkv1VUnK}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/out/_next/static/{WTHSCKfFb30xXXhXuq66f → hKfaRIxA4e3yTmkv1VUnK}/_ssgManifest.js +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { execFileSync, execFile } from "node:child_process";
|
|
2
2
|
import { promisify } from "node:util";
|
|
3
3
|
import { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync } from "node:fs";
|
|
4
|
-
import { join } from "node:path";
|
|
4
|
+
import { join, dirname } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
5
6
|
import { Hono } from "hono";
|
|
6
7
|
import { streamSSE } from "hono/streaming";
|
|
7
8
|
import { cors } from "hono/cors";
|
|
@@ -88,6 +89,11 @@ export interface CreateAppOptions {
|
|
|
88
89
|
remoteRegistry?: RemoteRegistry;
|
|
89
90
|
}
|
|
90
91
|
|
|
92
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
93
|
+
const pkgVersion: string = JSON.parse(
|
|
94
|
+
readFileSync(join(__dirname, "../../package.json"), "utf-8"),
|
|
95
|
+
).version;
|
|
96
|
+
|
|
91
97
|
const ALLOWED_MILESTONE_TRANSITIONS = new Map([
|
|
92
98
|
["locked", new Set(["active"])],
|
|
93
99
|
["active", new Set(["validating"])],
|
|
@@ -1410,7 +1416,7 @@ export function createApp(options: CreateAppOptions = {}): Hono {
|
|
|
1410
1416
|
return c.json({
|
|
1411
1417
|
ok: true,
|
|
1412
1418
|
uptime: Math.round(process.uptime()),
|
|
1413
|
-
version:
|
|
1419
|
+
version: pkgVersion,
|
|
1414
1420
|
});
|
|
1415
1421
|
});
|
|
1416
1422
|
|
package/src/lib/daemon.ts
CHANGED
|
@@ -115,8 +115,6 @@ function listPanes(): MonitorPane[] {
|
|
|
115
115
|
// ---------------------------------------------------------------------------
|
|
116
116
|
|
|
117
117
|
let lastState = "";
|
|
118
|
-
let prevAgentStates = new Map<string, "busy" | "idle" | null>();
|
|
119
|
-
let monitorInitialized = false;
|
|
120
118
|
|
|
121
119
|
function tick(): void {
|
|
122
120
|
if (!sessionExists()) {
|
|
@@ -158,22 +156,10 @@ function tick(): void {
|
|
|
158
156
|
}
|
|
159
157
|
}
|
|
160
158
|
|
|
161
|
-
//
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
for (const pane of panes) {
|
|
166
|
-
const prev = prevAgentStates.get(pane.id);
|
|
167
|
-
const curr = agentStates.get(pane.id);
|
|
168
|
-
if (prev === "busy" && curr === "idle" && pane.id !== masterPane.id) {
|
|
169
|
-
const label = pane.name ?? pane.title ?? pane.id;
|
|
170
|
-
tmuxSilent("send-keys", "-t", masterPane.id, `Agent "${label}" is now idle`, "Enter");
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
monitorInitialized = true;
|
|
176
|
-
prevAgentStates = agentStates;
|
|
159
|
+
// Agent idle notifications removed — the orchestrator's completion
|
|
160
|
+
// handler already notifies the lead pane with task context when a
|
|
161
|
+
// task finishes. Raw busy→idle transitions from the monitor loop
|
|
162
|
+
// fired on spinner gaps between tool calls, spamming the lead.
|
|
177
163
|
|
|
178
164
|
tmuxSilent("refresh-client", "-S");
|
|
179
165
|
lastState = stateKey;
|
package/src/lib/orchestrator.ts
CHANGED
|
@@ -905,8 +905,8 @@ export function dispatch(
|
|
|
905
905
|
.filter((t) => {
|
|
906
906
|
// Skip if already claimed
|
|
907
907
|
if (state.claimedTasks.has(t.id)) return false;
|
|
908
|
-
// Regular todo tasks
|
|
909
|
-
if (t.status === "todo"
|
|
908
|
+
// Regular todo tasks (include pre-assigned tasks — assignee is a preference hint)
|
|
909
|
+
if (t.status === "todo") {
|
|
910
910
|
// Skip if waiting for scheduled retry (nextRetryAt is in the future)
|
|
911
911
|
if (t.nextRetryAt && new Date(t.nextRetryAt).getTime() > now) return false;
|
|
912
912
|
// Check dependencies: all depends_on tasks must be done
|
|
@@ -1059,6 +1059,14 @@ export function findBestAgent(
|
|
|
1059
1059
|
const candidates = idleAgents.filter((p) => !excludeIds.has(p.id));
|
|
1060
1060
|
if (candidates.length === 0) return null;
|
|
1061
1061
|
|
|
1062
|
+
// Pre-assigned agent preference: if the task has an assignee (set at creation time),
|
|
1063
|
+
// prefer that agent if it's idle. This treats assignee as a preference hint.
|
|
1064
|
+
if (task.assignee) {
|
|
1065
|
+
const preferred = candidates.find((p) => agentIdentifier(p) === task.assignee);
|
|
1066
|
+
if (preferred) return preferred;
|
|
1067
|
+
// Preferred agent not idle — fall through to normal matching
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1062
1070
|
// No specialty required — any idle agent works
|
|
1063
1071
|
if (!task.specialty) return candidates[0] ?? null;
|
|
1064
1072
|
|
|
File without changes
|
|
File without changes
|
/package/dashboard/out/_next/static/{WTHSCKfFb30xXXhXuq66f → hKfaRIxA4e3yTmkv1VUnK}/_ssgManifest.js
RENAMED
|
File without changes
|