@songsid/agend 2.3.4-beta.6 → 2.3.4-beta.8
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/agend-home.d.ts +13 -0
- package/dist/agend-home.js +42 -0
- package/dist/agend-home.js.map +1 -1
- package/dist/auth-api.js +2 -2
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/kiro-identity.d.ts +2 -0
- package/dist/backend/kiro-identity.js +13 -6
- package/dist/backend/kiro-identity.js.map +1 -1
- package/dist/backend/kiro.d.ts +3 -0
- package/dist/backend/kiro.js +57 -4
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/types.d.ts +6 -1
- package/dist/backend/types.js +3 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/backend-availability.d.ts +6 -0
- package/dist/backend-availability.js +13 -5
- package/dist/backend-availability.js.map +1 -1
- package/dist/channel/mcp-tools.js +1 -1
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/cli.js +4 -6
- package/dist/cli.js.map +1 -1
- package/dist/daemon.d.ts +40 -0
- package/dist/daemon.js +354 -15
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-consumed-watch.d.ts +23 -1
- package/dist/delivery-consumed-watch.js +30 -3
- package/dist/delivery-consumed-watch.js.map +1 -1
- package/dist/delivery-reconciliation.d.ts +7 -0
- package/dist/delivery-reconciliation.js +9 -1
- package/dist/delivery-reconciliation.js.map +1 -1
- package/dist/fleet-manager.d.ts +33 -7
- package/dist/fleet-manager.js +196 -67
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-yaml-patch.d.ts +3 -0
- package/dist/fleet-yaml-patch.js +103 -0
- package/dist/fleet-yaml-patch.js.map +1 -0
- package/dist/general-knowledge/skills/concepts/SKILL.md +390 -0
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -1
- package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +41 -4
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +2 -0
- package/dist/instance-lifecycle.d.ts +2 -0
- package/dist/instance-lifecycle.js +38 -4
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/kiro-engine-status.d.ts +11 -0
- package/dist/kiro-engine-status.js +6 -0
- package/dist/kiro-engine-status.js.map +1 -1
- package/dist/kiro-resume-summary.d.ts +37 -0
- package/dist/kiro-resume-summary.js +85 -0
- package/dist/kiro-resume-summary.js.map +1 -0
- package/dist/locale.js +32 -0
- package/dist/locale.js.map +1 -1
- package/dist/login-controller.js +9 -1
- package/dist/login-controller.js.map +1 -1
- package/dist/login-flows.d.ts +2 -0
- package/dist/login-flows.js +5 -2
- package/dist/login-flows.js.map +1 -1
- package/dist/needs-you-hub.js +1 -1
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +6 -0
- package/dist/needs-you.js +8 -2
- package/dist/needs-you.js.map +1 -1
- package/dist/package-preimage.js +27 -2
- package/dist/package-preimage.js.map +1 -1
- package/dist/queued-handoffs.d.ts +33 -0
- package/dist/queued-handoffs.js +75 -0
- package/dist/queued-handoffs.js.map +1 -0
- package/dist/reply-buttons-controller.js +10 -0
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/stall-reporter.d.ts +21 -0
- package/dist/stall-reporter.js +82 -0
- package/dist/stall-reporter.js.map +1 -0
- package/dist/tmux-control.d.ts +2 -2
- package/dist/tmux-control.js +4 -2
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-exec-helper.d.ts +6 -3
- package/dist/tmux-exec-helper.js +115 -53
- package/dist/tmux-exec-helper.js.map +1 -1
- package/dist/tool-permissions.d.ts +5 -2
- package/dist/tool-permissions.js +6 -5
- package/dist/tool-permissions.js.map +1 -1
- package/dist/tunnel/cloudflared-install.d.ts +4 -0
- package/dist/tunnel/cloudflared-install.js +20 -1
- package/dist/tunnel/cloudflared-install.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +8 -1
- package/dist/tunnel/cloudflared.js +34 -6
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/lease.d.ts +3 -3
- package/dist/tunnel/lease.js +23 -19
- package/dist/tunnel/lease.js.map +1 -1
- package/dist/tunnel/manager.js +6 -7
- package/dist/tunnel/manager.js.map +1 -1
- package/dist/ui/panel-needs.js +4 -3
- package/dist/ui/shared/app-i18n.js +2 -2
- package/dist/ui/shared/app-needs.js +1 -1
- package/dist/ui/shared/app.css +16 -1
- package/dist/ui/shared/panel-view.js +266 -17
- package/dist/ui/shared/view-strings.js +26 -0
- package/dist/unattended-install.d.ts +1 -1
- package/dist/unattended-install.js +19 -5
- package/dist/unattended-install.js.map +1 -1
- package/dist/view-api.d.ts +15 -0
- package/dist/view-api.js +94 -33
- package/dist/view-api.js.map +1 -1
- package/dist/web-login.d.ts +4 -3
- package/dist/web-login.js +23 -14
- package/dist/web-login.js.map +1 -1
- package/dist/web-session.d.ts +5 -0
- package/dist/web-session.js +20 -8
- package/dist/web-session.js.map +1 -1
- package/launcher/agend-install.cjs +16 -2
- package/package.json +1 -1
package/dist/tunnel/lease.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ensureAgendHomeOffThread } from "../agend-home.js";
|
|
2
2
|
/**
|
|
3
3
|
* The record that says "a tunnel process may exist right now".
|
|
4
4
|
*
|
|
@@ -12,7 +12,7 @@ import { ensureAgendHome } from "../agend-home.js";
|
|
|
12
12
|
* has to run the reaper too, and it runs in a process where no FleetManager
|
|
13
13
|
* exists. Everything here takes a data directory and nothing else.
|
|
14
14
|
*/
|
|
15
|
-
import {
|
|
15
|
+
import { open, readFile, rename, unlink } from "node:fs/promises";
|
|
16
16
|
import { randomBytes } from "node:crypto";
|
|
17
17
|
import { join } from "node:path";
|
|
18
18
|
import { probeProcess } from "../web-terminal.js";
|
|
@@ -26,33 +26,37 @@ export function leasePath(dataDir) {
|
|
|
26
26
|
* The fsync is not ceremony: the lease has to survive the crash that makes it
|
|
27
27
|
* matter, and a rename that is only in page cache does not.
|
|
28
28
|
*/
|
|
29
|
-
export function writeLease(dataDir, lease) {
|
|
30
|
-
|
|
29
|
+
export async function writeLease(dataDir, lease) {
|
|
30
|
+
// #3009: asynchronous (libuv's threadpool), never on the fleet's main thread. A login's tunnel writes this right
|
|
31
|
+
// around its cloudflared spawn; an fsync or rename that blocks in the kernel then holds one pool thread, not the
|
|
32
|
+
// event loop — the systemd watchdog keeps being pinged and every other agent keeps running.
|
|
33
|
+
// #3017 review (Prism P1): the home's privacy checks too run off the main thread (synchronous lstat/mkdir/open there).
|
|
34
|
+
await ensureAgendHomeOffThread(dataDir);
|
|
31
35
|
const path = leasePath(dataDir);
|
|
32
36
|
const temp = `${path}.tmp-${process.pid}-${randomBytes(6).toString("hex")}`;
|
|
33
|
-
const
|
|
37
|
+
const handle = await open(temp, "wx", 0o600);
|
|
34
38
|
try {
|
|
35
|
-
|
|
36
|
-
|
|
39
|
+
await handle.writeFile(JSON.stringify(lease));
|
|
40
|
+
await handle.sync();
|
|
37
41
|
}
|
|
38
42
|
finally {
|
|
39
|
-
|
|
43
|
+
await handle.close();
|
|
40
44
|
}
|
|
41
45
|
try {
|
|
42
|
-
|
|
46
|
+
await rename(temp, path);
|
|
43
47
|
}
|
|
44
48
|
catch (err) {
|
|
45
49
|
try {
|
|
46
|
-
|
|
50
|
+
await unlink(temp);
|
|
47
51
|
}
|
|
48
52
|
catch { /* already gone */ }
|
|
49
53
|
throw err;
|
|
50
54
|
}
|
|
51
55
|
}
|
|
52
|
-
export function readLease(dataDir) {
|
|
56
|
+
export async function readLease(dataDir) {
|
|
53
57
|
let raw;
|
|
54
58
|
try {
|
|
55
|
-
raw =
|
|
59
|
+
raw = await readFile(leasePath(dataDir), "utf8");
|
|
56
60
|
}
|
|
57
61
|
catch (err) {
|
|
58
62
|
if (err.code === "ENOENT")
|
|
@@ -91,9 +95,9 @@ const CORRUPT = {
|
|
|
91
95
|
sid: "", provider: "unknown", originPort: 0,
|
|
92
96
|
providerPid: null, strongIdentity: null, expiresAt: 0, ownerPid: 0, ownerIdentity: null,
|
|
93
97
|
};
|
|
94
|
-
export function clearLease(dataDir) {
|
|
98
|
+
export async function clearLease(dataDir) {
|
|
95
99
|
try {
|
|
96
|
-
|
|
100
|
+
await unlink(leasePath(dataDir));
|
|
97
101
|
}
|
|
98
102
|
catch { /* already gone */ }
|
|
99
103
|
}
|
|
@@ -111,7 +115,7 @@ export async function reapStaleTunnel(dataDir, opts = {}) {
|
|
|
111
115
|
const graceMs = opts.graceMs ?? TUNNEL_STOP_GRACE_MS;
|
|
112
116
|
let lease;
|
|
113
117
|
try {
|
|
114
|
-
lease = readLease(dataDir);
|
|
118
|
+
lease = await readLease(dataDir);
|
|
115
119
|
}
|
|
116
120
|
catch (err) {
|
|
117
121
|
// A lease we cannot read is not a lease that is absent. Letting this throw
|
|
@@ -157,14 +161,14 @@ export async function reapStaleTunnel(dataDir, opts = {}) {
|
|
|
157
161
|
}
|
|
158
162
|
const before = probe(lease.providerPid);
|
|
159
163
|
if (before.kind === "gone") {
|
|
160
|
-
clearLease(dataDir);
|
|
164
|
+
await clearLease(dataDir);
|
|
161
165
|
return { kind: "reaped", how: "already-gone", pid: lease.providerPid };
|
|
162
166
|
}
|
|
163
167
|
if (before.kind === "identified" && lease.strongIdentity && before.identity !== lease.strongIdentity) {
|
|
164
168
|
// The pid belongs to something else now, which proves the original died.
|
|
165
169
|
// Signalling it would kill an innocent process — the single most damaging
|
|
166
170
|
// thing a reaper can do, and the reason the fingerprint is recorded at all.
|
|
167
|
-
clearLease(dataDir);
|
|
171
|
+
await clearLease(dataDir);
|
|
168
172
|
return { kind: "reaped", how: "pid-reused", pid: lease.providerPid };
|
|
169
173
|
}
|
|
170
174
|
if (before.kind === "unknown" || !lease.strongIdentity) {
|
|
@@ -185,11 +189,11 @@ export async function reapStaleTunnel(dataDir, opts = {}) {
|
|
|
185
189
|
await wait(graceMs);
|
|
186
190
|
const after = probe(lease.providerPid);
|
|
187
191
|
if (after.kind === "gone") {
|
|
188
|
-
clearLease(dataDir);
|
|
192
|
+
await clearLease(dataDir);
|
|
189
193
|
return { kind: "reaped", how: "killed", pid: lease.providerPid };
|
|
190
194
|
}
|
|
191
195
|
if (after.kind === "identified" && after.identity !== lease.strongIdentity) {
|
|
192
|
-
clearLease(dataDir);
|
|
196
|
+
await clearLease(dataDir);
|
|
193
197
|
return { kind: "reaped", how: "pid-reused", pid: lease.providerPid };
|
|
194
198
|
}
|
|
195
199
|
}
|
package/dist/tunnel/lease.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lease.js","sourceRoot":"","sources":["../../src/tunnel/lease.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lease.js","sourceRoot":"","sources":["../../src/tunnel/lease.ts"],"names":[],"mappings":"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"}
|
package/dist/tunnel/manager.js
CHANGED
|
@@ -44,8 +44,7 @@ export class ManagedTunnel {
|
|
|
44
44
|
async reap() {
|
|
45
45
|
const outcome = await reapStaleTunnel(this.opts.dataDir, this.opts);
|
|
46
46
|
if (outcome.kind === "manual") {
|
|
47
|
-
this.
|
|
48
|
-
this.log(this.blocked);
|
|
47
|
+
this.log(manualCleanupMessage(outcome));
|
|
49
48
|
}
|
|
50
49
|
return outcome;
|
|
51
50
|
}
|
|
@@ -82,7 +81,7 @@ export class ManagedTunnel {
|
|
|
82
81
|
// Reserved before the spawn, not after: between these two writes a child
|
|
83
82
|
// may come into existence, and a crash in that window must leave evidence
|
|
84
83
|
// rather than silence.
|
|
85
|
-
writeLease(this.opts.dataDir, {
|
|
84
|
+
await writeLease(this.opts.dataDir, {
|
|
86
85
|
sid: ctx.sid,
|
|
87
86
|
provider: provider.name,
|
|
88
87
|
originPort: Number(ctx.origin.port),
|
|
@@ -105,7 +104,7 @@ export class ManagedTunnel {
|
|
|
105
104
|
// Best effort, and never allowed to throw past the block below: a full disk here must not turn
|
|
106
105
|
// "a child we cannot prove dead" into a rejected start with no block and no announcement.
|
|
107
106
|
try {
|
|
108
|
-
writeLease(this.opts.dataDir, {
|
|
107
|
+
await writeLease(this.opts.dataDir, {
|
|
109
108
|
sid: ctx.sid,
|
|
110
109
|
provider: provider.name,
|
|
111
110
|
originPort: Number(ctx.origin.port),
|
|
@@ -132,7 +131,7 @@ export class ManagedTunnel {
|
|
|
132
131
|
}
|
|
133
132
|
// The provider proved its child is gone (or never made one), so the lease
|
|
134
133
|
// describes nothing and may go.
|
|
135
|
-
clearLease(this.opts.dataDir);
|
|
134
|
+
await clearLease(this.opts.dataDir);
|
|
136
135
|
return {
|
|
137
136
|
ok: false,
|
|
138
137
|
errorKind: startError?.errorKind ?? "spawn-failed",
|
|
@@ -145,7 +144,7 @@ export class ManagedTunnel {
|
|
|
145
144
|
// tunnel is stopped on proof — and if that cannot be proven the failure says so and blocks the next start.
|
|
146
145
|
this.active = handle;
|
|
147
146
|
try {
|
|
148
|
-
writeLease(this.opts.dataDir, {
|
|
147
|
+
await writeLease(this.opts.dataDir, {
|
|
149
148
|
sid: ctx.sid,
|
|
150
149
|
provider: provider.name,
|
|
151
150
|
originPort: Number(ctx.origin.port),
|
|
@@ -186,7 +185,7 @@ export class ManagedTunnel {
|
|
|
186
185
|
const result = await handle.stop(reason);
|
|
187
186
|
this.active = null;
|
|
188
187
|
if (result.confirmed) {
|
|
189
|
-
clearLease(this.opts.dataDir);
|
|
188
|
+
await clearLease(this.opts.dataDir);
|
|
190
189
|
return result;
|
|
191
190
|
}
|
|
192
191
|
this.unconfirmed = { reason: result.reason, pid: result.pid, identity: result.identity };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/tunnel/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,eAAe,EAAE,UAAU,EAAsC,MAAM,YAAY,CAAC;AAC/H,OAAO,EACL,gBAAgB,GAKjB,MAAM,YAAY,CAAC;AAWpB;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IAYK,IAAI;IAXzB,QAAQ,GAAuC,IAAI,CAAC;IACpD,MAAM,GAAwB,IAAI,CAAC;IAC3C,qFAAqF;IAC7E,OAAO,GAAkB,IAAI,CAAC;IACtC;;;;OAIG;IACK,WAAW,GAA2E,IAAI,CAAC;IAEnG,YAA6B,IAA0B;oBAA1B,IAAI;IAAyB,CAAC;IAEnD,GAAG,CAAC,OAAe,IAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE9E,8EAA8E;IACtE,aAAa;QACnB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,KAA0B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzD,gFAAgF;IAChF,KAAK,CAAC,IAAI;QACR,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/tunnel/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/panel-needs.js
CHANGED
|
@@ -25,7 +25,7 @@ import { openSignIn, signInOffered } from "./backend-signin.js";
|
|
|
25
25
|
register("needs", {
|
|
26
26
|
en: {
|
|
27
27
|
title: "Needs you", empty: "Nothing needs you right now", emptyHint: "When an agent waits for you, it shows here — and in your chat app's General.", emptyHintWeb: "When an agent waits for you, it shows here.",
|
|
28
|
-
open: "Open chat", openCard: "Open the card", noAssignee: "Task board (nobody assigned)", fleetSignIns: "Fleet sign-ins", signIn: "Sign in",
|
|
28
|
+
open: "Open chat", kiroOpen: "Open agent", kiroMigration: "Migration instructions", openCard: "Open the card", noAssignee: "Task board (nobody assigned)", fleetSignIns: "Fleet sign-ins", signIn: "Sign in",
|
|
29
29
|
gap: "not wrapped up: {0}", gapUnchecked: "{0} checklist item(s) unchecked", gapNoResult: "no result", gapJoin: ", ", acknowledge: "Acknowledge", acknowledging: "Acknowledging…", answering: "Answering…",
|
|
30
30
|
ageNow: "just now", ageMin: "{0} min", ageHour: "{0} h", ageDay: "{0} d",
|
|
31
31
|
notifyTitle: "Notify me on this device", notifyOn: "Notifications are on for this browser while a tab is open.",
|
|
@@ -38,7 +38,7 @@ register("needs", {
|
|
|
38
38
|
},
|
|
39
39
|
"zh-TW": {
|
|
40
40
|
title: "等你處理", empty: "目前沒有需要你處理的事", emptyHint: "agent 在等你時,會出現在這裡——也會出現在聊天 app 的 General。", emptyHintWeb: "agent 在等你時,會出現在這裡。",
|
|
41
|
-
open: "開啟聊天", openCard: "打開卡片", noAssignee: "任務看板(沒有負責人)", fleetSignIns: "Fleet 登入", signIn: "登入",
|
|
41
|
+
open: "開啟聊天", kiroOpen: "開啟 Agent", kiroMigration: "遷移說明", openCard: "打開卡片", noAssignee: "任務看板(沒有負責人)", fleetSignIns: "Fleet 登入", signIn: "登入",
|
|
42
42
|
gap: "還沒補齊:{0}", gapUnchecked: "還有 {0} 項沒勾", gapNoResult: "沒有產出總結", gapJoin: "、", acknowledge: "確認", acknowledging: "確認中…", answering: "回覆中…",
|
|
43
43
|
ageNow: "剛剛", ageMin: "{0} 分鐘", ageHour: "{0} 小時", ageDay: "{0} 天",
|
|
44
44
|
notifyTitle: "在這台裝置通知我", notifyOn: "這個瀏覽器的通知已開啟(需要開著分頁)。",
|
|
@@ -204,7 +204,8 @@ function NeedsItem({ item, nowMs, owner }) {
|
|
|
204
204
|
<${Icon} name="check" size=${14} />${ack === "busy" ? tn("acknowledging") : tn("acknowledge")}</button>` : null}
|
|
205
205
|
${(item.reason === "auth_paused" || item.reason === "backend_signin") && item.signIn && signInOffered() ? html`<button type="button" class="btn btn-sm btn-primary" onClick=${() => openSignIn(item.signIn)}>${tn("signIn")}</button>` : null}
|
|
206
206
|
${item.type === "task" && item.card ? html`<a class="btn btn-sm" href=${`/ui/fleet?card=${encodeURIComponent(item.card.code)}`}>${tn("openCard")}</a>` : null}
|
|
207
|
-
${item.
|
|
207
|
+
${item.kiroChoice === true ? html`<a class="btn btn-sm" href="https://github.com/songsid/AgEnD/blob/main/src/general-knowledge/skills/kiro-engine-migration/SKILL.md" target="_blank" rel="noopener noreferrer">${tn("kiroMigration")}</a>` : null}
|
|
208
|
+
${item.instance ? html`<a class="btn btn-sm btn-ghost" href=${chatPath(item.instance)}>${tn(item.kiroChoice === true ? "kiroOpen" : "open")}</a>` : null}
|
|
208
209
|
</div>
|
|
209
210
|
</div>
|
|
210
211
|
</article>`;
|
|
@@ -111,7 +111,7 @@ register("app", {
|
|
|
111
111
|
confirmTitle: "Please confirm", confirmOk: "Continue", cancel: "Cancel",
|
|
112
112
|
sidePanelLeave: "Leave {0} without saving? Your changes there will be lost.", sidePanelDiscard: "Discard changes",
|
|
113
113
|
// The server's own wording (src/locale.ts needs.reason.*), so the web says what Discord says.
|
|
114
|
-
needs_reason_hang: "Not responding", needs_reason_exited: "Exited", needs_reason_assist: "Waiting at its terminal", needs_reason_question: "Asking you a question", needs_reason_permission: "Permission needed", needs_reason_dangerous_command: "Dangerous command waiting", needs_reason_login: "Sign-in needed", needs_reason_dialog: "Waiting at a dialog", needs_reason_terminal_input: "May be waiting for input", needs_reason_auth_paused: "Paused: sign-in needed", needs_reason_backend_signin: "Backend sign-in needed", needs_reason_config_invalid: "Configuration file needs attention", needs_reason_config_fallback: "Running on stored configuration", config_history_edit: "{0}, line {1}, column {2}: {3}. AgEnD is still running on the previous settings. The next restart would use the stored valid copy from {4}. Correct the YAML error; the file has not been changed by AgEnD.", config_history_no_history: "{0}, line {1}, column {2}: {3}. AgEnD is still running on the previous settings. No stored valid copy is available, so the next restart cannot recover automatically. Correct the YAML error before restarting; the file has not been changed by AgEnD.", config_history_fallback: "{0}, line {1}, column {2}: {3}. AgEnD started using the stored valid copy from {4}. Correct the YAML error and reload the settings. The file on disk has not been changed by AgEnD.", needs_reason_crashed: "Crashed", needs_reason_usage_limit: "Usage limit reached · reset time unknown", needs_reason_delivery_uncertain: "Could not confirm delivery", needs_reason_delivery_failed: "Delivery failed", needs_reason_task_review: "Waiting for your confirmation", needs_reason_task_blocked: "Blocked: asks you",
|
|
114
|
+
needs_reason_hang: "Not responding", needs_reason_exited: "Exited", needs_reason_assist: "Waiting at its terminal", needs_reason_question: "Asking you a question", needs_reason_permission: "Permission needed", needs_reason_dangerous_command: "Dangerous command waiting", needs_reason_login: "Sign-in needed", needs_reason_dialog: "Waiting at a dialog", needs_reason_kiro_choice: "Kiro needs your decision", needs_reason_terminal_input: "May be waiting for input", needs_reason_auth_paused: "Paused: sign-in needed", needs_reason_backend_signin: "Backend sign-in needed", needs_reason_config_invalid: "Configuration file needs attention", needs_reason_config_fallback: "Running on stored configuration", config_history_edit: "{0}, line {1}, column {2}: {3}. AgEnD is still running on the previous settings. The next restart would use the stored valid copy from {4}. Correct the YAML error; the file has not been changed by AgEnD.", config_history_no_history: "{0}, line {1}, column {2}: {3}. AgEnD is still running on the previous settings. No stored valid copy is available, so the next restart cannot recover automatically. Correct the YAML error before restarting; the file has not been changed by AgEnD.", config_history_fallback: "{0}, line {1}, column {2}: {3}. AgEnD started using the stored valid copy from {4}. Correct the YAML error and reload the settings. The file on disk has not been changed by AgEnD.", needs_reason_crashed: "Crashed", needs_reason_usage_limit: "Usage limit reached · reset time unknown", needs_reason_delivery_uncertain: "Could not confirm delivery", needs_reason_delivery_failed: "Delivery failed", needs_reason_task_review: "Waiting for your confirmation", needs_reason_task_blocked: "Blocked: asks you",
|
|
115
115
|
},
|
|
116
116
|
"zh-TW": {
|
|
117
117
|
brand: "AgEnD", fleet: "Fleet", fleetOverview: "Fleet 概覽", view: "檢視", settings: "設定", instances: "Instances", newInstance: "新增 instance", newAgent: "新增 Agent",
|
|
@@ -156,6 +156,6 @@ register("app", {
|
|
|
156
156
|
search: "搜尋", searchTitle: "搜尋聊天、agent 之間的訊息與任務({0})",
|
|
157
157
|
confirmTitle: "請確認", confirmOk: "繼續", cancel: "取消",
|
|
158
158
|
sidePanelLeave: "不儲存就離開「{0}」?你在那裡的修改會遺失。", sidePanelDiscard: "捨棄修改",
|
|
159
|
-
needs_reason_hang: "沒有回應", needs_reason_exited: "已結束", needs_reason_assist: "在終端機上等待", needs_reason_question: "正在問你問題", needs_reason_permission: "需要權限", needs_reason_dangerous_command: "危險指令待確認", needs_reason_login: "需要登入", needs_reason_dialog: "停在對話框", needs_reason_terminal_input: "可能在等輸入", needs_reason_auth_paused: "已暫停:需要登入", needs_reason_backend_signin: "後端需要登入", needs_reason_config_invalid: "設定檔需要處理", needs_reason_config_fallback: "正在使用儲存的設定副本", config_history_edit: "{0} 第 {1} 行、第 {2} 欄:{3}。AgEnD 仍使用先前的設定執行。下次重新啟動會改用 {4} 儲存的有效副本。請修正 YAML 錯誤;AgEnD 未更動此檔案。", config_history_no_history: "{0} 第 {1} 行、第 {2} 欄:{3}。AgEnD 仍使用先前的設定執行。沒有可用的有效副本,下次重新啟動將無法自動恢復。請在重新啟動前修正 YAML 錯誤;AgEnD 未更動此檔案。", config_history_fallback: "{0} 第 {1} 行、第 {2} 欄:{3}。AgEnD 已使用 {4} 儲存的有效副本啟動。請修正 YAML 錯誤並重新載入設定。AgEnD 未更動磁碟上的檔案。", needs_reason_crashed: "已崩潰", needs_reason_usage_limit: "用量已達上限 · 恢復時間未知", needs_reason_delivery_uncertain: "無法確認是否送達", needs_reason_delivery_failed: "傳送失敗", needs_reason_task_review: "等你確認", needs_reason_task_blocked: "卡住,在問你",
|
|
159
|
+
needs_reason_hang: "沒有回應", needs_reason_exited: "已結束", needs_reason_assist: "在終端機上等待", needs_reason_question: "正在問你問題", needs_reason_permission: "需要權限", needs_reason_dangerous_command: "危險指令待確認", needs_reason_login: "需要登入", needs_reason_dialog: "停在對話框", needs_reason_kiro_choice: "Kiro 需要你決定", needs_reason_terminal_input: "可能在等輸入", needs_reason_auth_paused: "已暫停:需要登入", needs_reason_backend_signin: "後端需要登入", needs_reason_config_invalid: "設定檔需要處理", needs_reason_config_fallback: "正在使用儲存的設定副本", config_history_edit: "{0} 第 {1} 行、第 {2} 欄:{3}。AgEnD 仍使用先前的設定執行。下次重新啟動會改用 {4} 儲存的有效副本。請修正 YAML 錯誤;AgEnD 未更動此檔案。", config_history_no_history: "{0} 第 {1} 行、第 {2} 欄:{3}。AgEnD 仍使用先前的設定執行。沒有可用的有效副本,下次重新啟動將無法自動恢復。請在重新啟動前修正 YAML 錯誤;AgEnD 未更動此檔案。", config_history_fallback: "{0} 第 {1} 行、第 {2} 欄:{3}。AgEnD 已使用 {4} 儲存的有效副本啟動。請修正 YAML 錯誤並重新載入設定。AgEnD 未更動磁碟上的檔案。", needs_reason_crashed: "已崩潰", needs_reason_usage_limit: "用量已達上限 · 恢復時間未知", needs_reason_delivery_uncertain: "無法確認是否送達", needs_reason_delivery_failed: "傳送失敗", needs_reason_task_review: "等你確認", needs_reason_task_blocked: "卡住,在問你",
|
|
160
160
|
},
|
|
161
161
|
});
|
|
@@ -63,7 +63,7 @@ export const configDetail = (item) => {
|
|
|
63
63
|
const issue = item.configIssue;
|
|
64
64
|
return issue ? t(`app.config_history_${issue.mode === "fallback" ? "fallback" : issue.time ? "edit" : "no_history"}`, issue.file, issue.line, issue.column, issue.reason, issue.time || "") : item.detail;
|
|
65
65
|
};
|
|
66
|
-
export const reasonText = (item) => t(`app.needs_reason_${item.reason}`);
|
|
66
|
+
export const reasonText = (item) => t(`app.needs_reason_${item.kiroChoice ? "kiro_choice" : item.reason}`);
|
|
67
67
|
|
|
68
68
|
let stop = null;
|
|
69
69
|
|
package/dist/ui/shared/app.css
CHANGED
|
@@ -1335,6 +1335,21 @@ body.side-resizing, body.side-resizing * { cursor: col-resize !important; user-s
|
|
|
1335
1335
|
/* #1844 Fleet overview → Docs: the arrow says "opens a new tab". */
|
|
1336
1336
|
.hd-docs .hd-ext { color: var(--text-3); }
|
|
1337
1337
|
.v-term { flex: 1; min-height: 0; overflow: auto; scrollbar-gutter: stable; padding: 5px 6px; background: #000000; position: relative; }
|
|
1338
|
+
/* M-2262: the terminal's box — the scrolling terminal, and its scrollback controls over it (they never scroll with it). */
|
|
1339
|
+
/* --v-term-rev: the View's mark (panel-view.js VIEW_REV): a tab still on an older stylesheet reads this one again. */
|
|
1340
|
+
.v-term-box { --v-term-rev: 2; flex: 1; min-height: 0; display: flex; flex-direction: column; position: relative; }
|
|
1341
|
+
.v-term:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
|
|
1342
|
+
.v-term-earlier, .v-term-latest { position: absolute; right: var(--s-4); z-index: 2; display: inline-flex; align-items: center; gap: 4px; opacity: .88; }
|
|
1343
|
+
.v-term-earlier { top: var(--s-2); }
|
|
1344
|
+
.v-term-latest { bottom: var(--s-3); opacity: 1; }
|
|
1345
|
+
.v-term-logbar { flex-shrink: 0; margin: 0; padding: var(--s-2) var(--s-4); background: #111111; border-bottom: 1px solid #2a2a2a; text-align: right; font-size: var(--fs-sm); }
|
|
1346
|
+
.v-term-logbar a { display: inline-flex; align-items: center; gap: 4px; color: #9cc8ff; text-decoration: underline; text-underline-offset: 2px; min-height: 28px; }
|
|
1347
|
+
@media (pointer: coarse) { .v-term-logbar a { min-height: 44px; } }
|
|
1348
|
+
.v-term-latest.has-new { background: var(--accent-fill); border-color: transparent; color: var(--on-accent); }
|
|
1349
|
+
.v-term-earlier:hover, .v-term-earlier:focus-visible { opacity: 1; }
|
|
1350
|
+
.v-term-history-note { position: absolute; left: var(--s-3); right: var(--s-3); bottom: var(--s-3); z-index: 2; margin: 0; padding: var(--s-1) var(--s-3); border-radius: var(--r-sm); background: rgba(20, 20, 20, .92); border: 1px solid #3a3a3a; color: #e0e0e0; font-size: var(--fs-sm); }
|
|
1351
|
+
@media (max-width: 600px) { .v-term-history-note { left: var(--s-4); right: var(--s-4); } }
|
|
1352
|
+
@media (pointer: coarse) { .v-term-earlier, .v-term-latest { min-height: 44px; padding-left: var(--s-3); padding-right: var(--s-3); } }
|
|
1338
1353
|
.v-pre { margin: 0; min-width: 100%; min-height: 100%; font-family: var(--font-mono); line-height: 1.2; white-space: pre; color: #d0d0d0; }
|
|
1339
1354
|
.v-pre .ansi[data-b] { font-weight: var(--fw-bold); }
|
|
1340
1355
|
/* #1582: faint text (SGR 2) — a CLI's suggestion or placeholder, never input — stays faint here. */
|
|
@@ -2304,7 +2319,7 @@ html.oo-immersive .p-fleet > .panel-body { z-index: 50; }
|
|
|
2304
2319
|
.p-fleet > .seg, .p-settings > .seg,
|
|
2305
2320
|
.p-fleet > .panel-body, .p-needs > .panel-body, .p-notices > .panel-body, .p-settings > .panel-body,
|
|
2306
2321
|
.p-log > .panel-body, .p-details > .panel-body, .p-view > .panel-body,
|
|
2307
|
-
.p-log > .log-bar, .p-view > .v-term, .p-view > .v-id, .p-view > .v-watching { position: relative; z-index: 1; }
|
|
2322
|
+
.p-log > .log-bar, .p-view > .v-term-box, .p-view > .v-id, .p-view > .v-watching { position: relative; z-index: 1; }
|
|
2308
2323
|
/* Keep the existing Apply bar's sticky behavior, in its own bounded stock band. */
|
|
2309
2324
|
.p-settings > .s-pending { z-index: 1; }
|
|
2310
2325
|
|