agim-cli 1.1.8 → 1.1.10
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/CHANGELOG.md +110 -0
- package/dist/cli-ui/entry-menu.d.ts +2 -0
- package/dist/cli-ui/entry-menu.d.ts.map +1 -1
- package/dist/cli-ui/entry-menu.js +2 -1
- package/dist/cli-ui/entry-menu.js.map +1 -1
- package/dist/cli-ui/i18n.d.ts +14 -0
- package/dist/cli-ui/i18n.d.ts.map +1 -1
- package/dist/cli-ui/i18n.js +30 -0
- package/dist/cli-ui/i18n.js.map +1 -1
- package/dist/cli-ui/token-menu.d.ts +3 -0
- package/dist/cli-ui/token-menu.d.ts.map +1 -0
- package/dist/cli-ui/token-menu.js +127 -0
- package/dist/cli-ui/token-menu.js.map +1 -0
- package/dist/cli.js +90 -11
- package/dist/cli.js.map +1 -1
- package/dist/core/a2a-notify.d.ts +35 -0
- package/dist/core/a2a-notify.d.ts.map +1 -0
- package/dist/core/a2a-notify.js +265 -0
- package/dist/core/a2a-notify.js.map +1 -0
- package/dist/core/a2a.d.ts +5 -0
- package/dist/core/a2a.d.ts.map +1 -1
- package/dist/core/a2a.js +59 -3
- package/dist/core/a2a.js.map +1 -1
- package/dist/core/access-token.d.ts +41 -0
- package/dist/core/access-token.d.ts.map +1 -0
- package/dist/core/access-token.js +179 -0
- package/dist/core/access-token.js.map +1 -0
- package/dist/core/agent-base.d.ts.map +1 -1
- package/dist/core/agent-base.js +4 -1
- package/dist/core/agent-base.js.map +1 -1
- package/dist/core/message-sink.d.ts +14 -0
- package/dist/core/message-sink.d.ts.map +1 -1
- package/dist/core/message-sink.js +7 -5
- package/dist/core/message-sink.js.map +1 -1
- package/dist/core/restart-flow.d.ts.map +1 -1
- package/dist/core/restart-flow.js +50 -12
- package/dist/core/restart-flow.js.map +1 -1
- package/dist/core/types.d.ts +6 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/web/public/_app.js +59 -0
- package/dist/web/public/login.html +196 -0
- package/dist/web/public/settings.html +140 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +190 -8
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
|
@@ -117,6 +117,16 @@ export async function initiateRestart(initiator) {
|
|
|
117
117
|
? 'agim.service'
|
|
118
118
|
: (existsSync('/etc/systemd/system/im-hub.service') ? 'im-hub.service' : null);
|
|
119
119
|
if (unitName) {
|
|
120
|
+
// v1.1.10: deliver the "🔄 重启中…" ack SYNCHRONOUSLY before issuing
|
|
121
|
+
// systemctl restart. Otherwise the message sits in outbox while the
|
|
122
|
+
// process dies, the new process pushes "✅ 已重启完成…" first via
|
|
123
|
+
// priority='high', and the worker only flushes the ack afterwards.
|
|
124
|
+
// Result: completion appears in IM BEFORE the in-flight notice — the
|
|
125
|
+
// exact reversal the screenshot showed.
|
|
126
|
+
const ackMessage = pre.warnings.length === 0
|
|
127
|
+
? '🔄 重启中(systemd 接管)… 预计 5-10 秒内回来。'
|
|
128
|
+
: `🔄 重启中(systemd 接管)… 预计 5-10 秒内回来。\n 注意:${pre.warnings.join(';')}`;
|
|
129
|
+
await deliverRestartAck(initiator, ackMessage);
|
|
120
130
|
log.info({
|
|
121
131
|
event: 'restart-flow.systemd_restart',
|
|
122
132
|
unit: unitName,
|
|
@@ -134,12 +144,9 @@ export async function initiateRestart(initiator) {
|
|
|
134
144
|
err: err instanceof Error ? err.message : String(err),
|
|
135
145
|
});
|
|
136
146
|
}
|
|
137
|
-
return
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
? '🔄 重启中(systemd 接管)… 预计 5-10 秒内回来。'
|
|
141
|
-
: `🔄 重启中(systemd 接管)… 预计 5-10 秒内回来。\n 注意:${pre.warnings.join(';')}`,
|
|
142
|
-
};
|
|
147
|
+
// ack already in flight — return empty message so the command handler
|
|
148
|
+
// doesn't push a duplicate via the normal reply pipeline.
|
|
149
|
+
return { ok: true, message: '' };
|
|
143
150
|
}
|
|
144
151
|
log.warn({ event: 'restart-flow.systemd_unit_missing' }, 'detectService said systemd but no unit file found; falling through to background helper');
|
|
145
152
|
}
|
|
@@ -168,6 +175,14 @@ export async function initiateRestart(initiator) {
|
|
|
168
175
|
errors: [String(err)],
|
|
169
176
|
};
|
|
170
177
|
}
|
|
178
|
+
// v1.1.10: deliver the ack synchronously so it arrives before the
|
|
179
|
+
// shutdown signal lands. Otherwise the new process's "✅ 已重启完成…"
|
|
180
|
+
// push (priority='high') reaches IM first and the worker only flushes
|
|
181
|
+
// this ack afterwards — reversing the order seen in chat.
|
|
182
|
+
const helperAck = pre.warnings.length === 0
|
|
183
|
+
? '🔄 重启中… 预计 5–10 秒内回来。'
|
|
184
|
+
: `🔄 重启中… 预计 5–10 秒内回来。\n 注意:${pre.warnings.join(';')}`;
|
|
185
|
+
await deliverRestartAck(initiator, helperAck);
|
|
171
186
|
setTimeout(() => {
|
|
172
187
|
try {
|
|
173
188
|
process.kill(process.pid, 'SIGTERM');
|
|
@@ -176,12 +191,35 @@ export async function initiateRestart(initiator) {
|
|
|
176
191
|
process.exit(0);
|
|
177
192
|
}
|
|
178
193
|
}, 300);
|
|
179
|
-
return {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
194
|
+
return { ok: true, message: '' };
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Push the "🔄 重启中…" notice via sink with priority='high' so the
|
|
198
|
+
* adapter actually delivers it before the process exits. Non-IM initiators
|
|
199
|
+
* (web / CLI) get the message back through their own return channel and
|
|
200
|
+
* don't need a push — we skip in those cases.
|
|
201
|
+
*/
|
|
202
|
+
async function deliverRestartAck(initiator, body) {
|
|
203
|
+
if (initiator.source !== 'im' || !initiator.platform || !initiator.threadId)
|
|
204
|
+
return;
|
|
205
|
+
try {
|
|
206
|
+
const { sink } = await import('./message-sink.js');
|
|
207
|
+
await sink.deliver({
|
|
208
|
+
platform: initiator.platform,
|
|
209
|
+
channelId: initiator.channelId ?? '',
|
|
210
|
+
threadId: initiator.threadId,
|
|
211
|
+
payload: body,
|
|
212
|
+
kind: 'text',
|
|
213
|
+
priority: 'high',
|
|
214
|
+
source: 'system',
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
log.warn({
|
|
219
|
+
event: 'restart-flow.ack_deliver_failed',
|
|
220
|
+
err: err instanceof Error ? err.message : String(err),
|
|
221
|
+
}, 'failed to deliver restart-in-progress ack; falling back to return-message path');
|
|
222
|
+
}
|
|
185
223
|
}
|
|
186
224
|
/**
|
|
187
225
|
* Build the detached helper script. It:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restart-flow.js","sourceRoot":"","sources":["../../src/core/restart-flow.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"restart-flow.js","sourceRoot":"","sources":["../../src/core/restart-flow.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -363,6 +363,12 @@ export interface AgentSendOpts {
|
|
|
363
363
|
* call_agent hop). Adapters forward it into RunContext.callDepth so
|
|
364
364
|
* the bus can enforce IMHUB_A2A_MAX_DEPTH on the next hop. */
|
|
365
365
|
callDepth?: number;
|
|
366
|
+
/** Optional AbortSignal. When aborted, the adapter should terminate the
|
|
367
|
+
* underlying child process (SIGTERM, then SIGKILL after a brief grace
|
|
368
|
+
* period). A2A wires this from its per-call timeout so timeout failures
|
|
369
|
+
* don't leave orphan codex / claude / opencode processes writing into
|
|
370
|
+
* `_agim-output/` long after agim has given up on the result. */
|
|
371
|
+
signal?: AbortSignal;
|
|
366
372
|
}
|
|
367
373
|
/**
|
|
368
374
|
* Adapter interface for AI coding agents (Claude Code, Codex, Copilot)
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
package/dist/web/public/_app.js
CHANGED
|
@@ -158,7 +158,25 @@
|
|
|
158
158
|
if (init.body && !headers['Content-Type']) {
|
|
159
159
|
headers['Content-Type'] = 'application/json'
|
|
160
160
|
}
|
|
161
|
+
// v1.1.10: attach the web access token from localStorage (set after a
|
|
162
|
+
// successful /login). Cookie is also set by /api/auth/login, but adding
|
|
163
|
+
// the header makes the API directly usable via curl + a bearer prefix.
|
|
164
|
+
if (!headers['Authorization']) {
|
|
165
|
+
try {
|
|
166
|
+
const tk = localStorage.getItem('agim_token')
|
|
167
|
+
if (tk) headers['Authorization'] = `Bearer ${tk}`
|
|
168
|
+
} catch { /* ignore */ }
|
|
169
|
+
}
|
|
161
170
|
const res = await fetch(path, { ...init, headers, credentials: 'same-origin' })
|
|
171
|
+
if (res.status === 401) {
|
|
172
|
+
// Token missing / invalid / expired — kick the user to /login.
|
|
173
|
+
try { localStorage.removeItem('agim_token') } catch { /* ignore */ }
|
|
174
|
+
const next = encodeURIComponent(location.pathname + location.search)
|
|
175
|
+
location.href = `/login?next=${next}`
|
|
176
|
+
const err = new Error('unauthorized')
|
|
177
|
+
err.status = 401
|
|
178
|
+
throw err
|
|
179
|
+
}
|
|
162
180
|
if (!res.ok) {
|
|
163
181
|
let msg = `${res.status} ${res.statusText}`
|
|
164
182
|
try { const j = await res.json(); if (j?.error) msg = j.error } catch { /* ignore */ }
|
|
@@ -171,6 +189,47 @@
|
|
|
171
189
|
return ct.includes('application/json') ? res.json() : res.text()
|
|
172
190
|
}
|
|
173
191
|
|
|
192
|
+
// ============================================================
|
|
193
|
+
// Global fetch interceptor (v1.1.10)
|
|
194
|
+
// ============================================================
|
|
195
|
+
// Static pages (tasks.html / reminders.html / memos.html) often call
|
|
196
|
+
// `fetch('/api/foo')` directly without going through apiFetch. Patch
|
|
197
|
+
// window.fetch so the access token attaches automatically + 401 kicks
|
|
198
|
+
// the user back to /login.
|
|
199
|
+
;(function installFetchAuth(){
|
|
200
|
+
if (window.__agimFetchPatched) return
|
|
201
|
+
window.__agimFetchPatched = true
|
|
202
|
+
var origFetch = window.fetch.bind(window)
|
|
203
|
+
window.fetch = function(input, init){
|
|
204
|
+
var opts = init || {}
|
|
205
|
+
var url = typeof input === 'string' ? input : (input && input.url) || ''
|
|
206
|
+
// Only inject for same-origin API paths (/api/...) and the static
|
|
207
|
+
// route serving — leave external fetches (CDN) alone.
|
|
208
|
+
var isLocalApi = url.startsWith('/') || url.startsWith(location.origin)
|
|
209
|
+
if (isLocalApi) {
|
|
210
|
+
var headers = new Headers(opts.headers || (typeof input !== 'string' ? input.headers : undefined))
|
|
211
|
+
if (!headers.has('Authorization')) {
|
|
212
|
+
try {
|
|
213
|
+
var tk = localStorage.getItem('agim_token')
|
|
214
|
+
if (tk) headers.set('Authorization', 'Bearer ' + tk)
|
|
215
|
+
} catch { /* ignore */ }
|
|
216
|
+
}
|
|
217
|
+
opts = Object.assign({}, opts, { headers, credentials: opts.credentials || 'same-origin' })
|
|
218
|
+
}
|
|
219
|
+
return origFetch(input, opts).then(function(res){
|
|
220
|
+
if (res.status === 401 && isLocalApi && !url.startsWith('/api/auth/')) {
|
|
221
|
+
try { localStorage.removeItem('agim_token') } catch {}
|
|
222
|
+
var next = encodeURIComponent(location.pathname + location.search)
|
|
223
|
+
// Only redirect from non-login pages to avoid loops.
|
|
224
|
+
if (!location.pathname.startsWith('/login')) {
|
|
225
|
+
location.href = '/login?next=' + next
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return res
|
|
229
|
+
})
|
|
230
|
+
}
|
|
231
|
+
})()
|
|
232
|
+
|
|
174
233
|
// ============================================================
|
|
175
234
|
// Expose
|
|
176
235
|
// ============================================================
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
|
|
6
|
+
<meta name="robots" content="noindex,nofollow">
|
|
7
|
+
<title>Agim · Login</title>
|
|
8
|
+
<style>
|
|
9
|
+
:root{color-scheme:light dark;--bg:#f6f8fa;--fg:#1f2328;--card:#ffffff;--border:#d0d7de;--muted:#656d76;--accent:#0969da;--accent-hover:#0860c9;--ok:#1a7f37;--err:#cf222e;--code:#f4f6f8}
|
|
10
|
+
@media (prefers-color-scheme:dark){:root{--bg:#0d1117;--fg:#e6edf3;--card:#161b22;--border:#30363d;--muted:#8d96a0;--accent:#2f81f7;--accent-hover:#388bfd;--ok:#3fb950;--err:#f85149;--code:#21262d}}
|
|
11
|
+
*{box-sizing:border-box}
|
|
12
|
+
html,body{margin:0;padding:0;height:100%;background:var(--bg);color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"}
|
|
13
|
+
.wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}
|
|
14
|
+
.card{width:100%;max-width:460px;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:28px 28px 24px;box-shadow:0 4px 16px rgba(0,0,0,0.06)}
|
|
15
|
+
header{display:flex;align-items:center;gap:10px;margin-bottom:6px}
|
|
16
|
+
header .lock{font-size:24px}
|
|
17
|
+
header h1{margin:0;font-size:18px;font-weight:600}
|
|
18
|
+
.sub{margin:0 0 18px;color:var(--muted);font-size:13px}
|
|
19
|
+
label{display:block;font-size:12px;font-weight:600;margin-bottom:6px;color:var(--muted)}
|
|
20
|
+
input[type=text],input[type=password]{width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:6px;background:var(--card);color:var(--fg);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}
|
|
21
|
+
input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 25%,transparent)}
|
|
22
|
+
button{margin-top:14px;width:100%;padding:9px 12px;background:var(--accent);color:#fff;border:none;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer}
|
|
23
|
+
button:hover{background:var(--accent-hover)}
|
|
24
|
+
button:disabled{opacity:0.6;cursor:default}
|
|
25
|
+
.msg{margin-top:12px;font-size:13px;min-height:18px}
|
|
26
|
+
.msg.err{color:var(--err)}
|
|
27
|
+
.msg.ok{color:var(--ok)}
|
|
28
|
+
.divider{margin:22px 0 12px;display:flex;align-items:center;gap:8px;color:var(--muted);font-size:12px}
|
|
29
|
+
.divider::before,.divider::after{content:"";flex:1;height:1px;background:var(--border)}
|
|
30
|
+
.howto{font-size:13px;color:var(--muted);line-height:1.7}
|
|
31
|
+
.howto h2{margin:0 0 8px;font-size:13px;color:var(--fg);font-weight:600}
|
|
32
|
+
.howto ol{padding-left:18px;margin:0 0 8px}
|
|
33
|
+
.howto li{margin:2px 0}
|
|
34
|
+
.howto code{background:var(--code);padding:1px 6px;border-radius:4px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--fg)}
|
|
35
|
+
.howto .hint{font-size:12px;color:var(--muted);margin-top:8px}
|
|
36
|
+
.lang{position:absolute;top:20px;right:24px}
|
|
37
|
+
.lang button{margin:0;padding:4px 10px;background:transparent;color:var(--muted);border:1px solid var(--border);width:auto;font-size:11px;font-weight:500;border-radius:14px}
|
|
38
|
+
.lang button.active{background:var(--accent);color:#fff;border-color:var(--accent)}
|
|
39
|
+
</style>
|
|
40
|
+
</head>
|
|
41
|
+
<body>
|
|
42
|
+
<div class="lang">
|
|
43
|
+
<button id="lang-en" class="active" type="button">EN</button>
|
|
44
|
+
<button id="lang-zh" type="button">中文</button>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="wrap">
|
|
47
|
+
<div class="card">
|
|
48
|
+
<header>
|
|
49
|
+
<span class="lock">🔒</span>
|
|
50
|
+
<h1 id="t-title">Agim Console</h1>
|
|
51
|
+
</header>
|
|
52
|
+
<p class="sub" id="t-sub">Enter your access token to continue.</p>
|
|
53
|
+
|
|
54
|
+
<form id="login-form">
|
|
55
|
+
<label for="token" id="t-label">Access token</label>
|
|
56
|
+
<input id="token" type="password" autocomplete="off" autofocus placeholder="agim_xxxxxxxxxxxxxx" />
|
|
57
|
+
<button type="submit" id="t-submit">Sign in →</button>
|
|
58
|
+
</form>
|
|
59
|
+
<div id="msg" class="msg"></div>
|
|
60
|
+
|
|
61
|
+
<div class="divider" id="t-howto-title">How to get a token</div>
|
|
62
|
+
<div class="howto">
|
|
63
|
+
<ol>
|
|
64
|
+
<li id="t-step1">SSH into the Agim host and run <code>agim</code></li>
|
|
65
|
+
<li id="t-step2">Pick <em>Manage web access tokens</em></li>
|
|
66
|
+
<li id="t-step3">Pick <em>Generate a new token</em></li>
|
|
67
|
+
<li id="t-step4">Paste the printed value above</li>
|
|
68
|
+
</ol>
|
|
69
|
+
<div class="hint" id="t-hint">⚠️ The raw token is shown only once on the terminal — save it in a password manager.<br>Power users: <code>agim token create</code> works one-shot.</div>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
<script>
|
|
74
|
+
(function(){
|
|
75
|
+
// i18n
|
|
76
|
+
var T = {
|
|
77
|
+
en: {
|
|
78
|
+
title: 'Agim Console',
|
|
79
|
+
sub: 'Enter your access token to continue.',
|
|
80
|
+
label: 'Access token',
|
|
81
|
+
submit: 'Sign in →',
|
|
82
|
+
submitting: 'Signing in…',
|
|
83
|
+
howto: 'How to get a token',
|
|
84
|
+
step1: 'SSH into the Agim host and run <code>agim</code>',
|
|
85
|
+
step2: 'Pick <em>Manage web access tokens</em>',
|
|
86
|
+
step3: 'Pick <em>Generate a new token</em>',
|
|
87
|
+
step4: 'Paste the printed value above',
|
|
88
|
+
hint: '⚠️ The raw token is shown only once on the terminal — save it in a password manager.<br>Power users: <code>agim token create</code> works one-shot.',
|
|
89
|
+
bad: 'Invalid token. Run <code>agim token create</code> to generate a new one.',
|
|
90
|
+
err: 'Login failed: ',
|
|
91
|
+
ok: '✓ Authenticated, redirecting…',
|
|
92
|
+
},
|
|
93
|
+
zh: {
|
|
94
|
+
title: 'Agim 控制台',
|
|
95
|
+
sub: '请输入访问 Token 继续。',
|
|
96
|
+
label: '访问 Token',
|
|
97
|
+
submit: '登录 →',
|
|
98
|
+
submitting: '验证中…',
|
|
99
|
+
howto: '如何获取 Token',
|
|
100
|
+
step1: 'SSH 登录 Agim 主机,执行 <code>agim</code>',
|
|
101
|
+
step2: '选择"管理 Web 访问 Token"',
|
|
102
|
+
step3: '选择"生成新 Token"',
|
|
103
|
+
step4: '把终端打印的 Token 粘贴到上方',
|
|
104
|
+
hint: '⚠️ 原文只在终端显示一次,请妥善保存到密码管理器。<br>快捷方式:<code>agim token create</code> 一键生成。',
|
|
105
|
+
bad: 'Token 无效。可在终端执行 <code>agim token create</code> 生成新 Token。',
|
|
106
|
+
err: '登录失败:',
|
|
107
|
+
ok: '✓ 验证通过,正在跳转…',
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
function applyLang(lang){
|
|
112
|
+
var t = T[lang];
|
|
113
|
+
document.getElementById('t-title').textContent = t.title;
|
|
114
|
+
document.getElementById('t-sub').textContent = t.sub;
|
|
115
|
+
document.getElementById('t-label').textContent = t.label;
|
|
116
|
+
document.getElementById('t-submit').textContent = t.submit;
|
|
117
|
+
document.getElementById('t-howto-title').textContent = t.howto;
|
|
118
|
+
document.getElementById('t-step1').innerHTML = t.step1;
|
|
119
|
+
document.getElementById('t-step2').innerHTML = t.step2;
|
|
120
|
+
document.getElementById('t-step3').innerHTML = t.step3;
|
|
121
|
+
document.getElementById('t-step4').innerHTML = t.step4;
|
|
122
|
+
document.getElementById('t-hint').innerHTML = t.hint;
|
|
123
|
+
document.documentElement.lang = lang === 'zh' ? 'zh' : 'en';
|
|
124
|
+
document.getElementById('lang-en').classList.toggle('active', lang === 'en');
|
|
125
|
+
document.getElementById('lang-zh').classList.toggle('active', lang === 'zh');
|
|
126
|
+
localStorage.setItem('im-hub-lang', lang);
|
|
127
|
+
window.__lang = lang;
|
|
128
|
+
}
|
|
129
|
+
var initial = localStorage.getItem('im-hub-lang') || (navigator.language && navigator.language.toLowerCase().startsWith('zh') ? 'zh' : 'en');
|
|
130
|
+
applyLang(initial);
|
|
131
|
+
document.getElementById('lang-en').addEventListener('click', function(){ applyLang('en'); });
|
|
132
|
+
document.getElementById('lang-zh').addEventListener('click', function(){ applyLang('zh'); });
|
|
133
|
+
|
|
134
|
+
function nextUrl(){
|
|
135
|
+
var p = new URLSearchParams(location.search);
|
|
136
|
+
var n = p.get('next') || '/';
|
|
137
|
+
// Disallow open redirects to other hosts.
|
|
138
|
+
try {
|
|
139
|
+
var u = new URL(n, location.origin);
|
|
140
|
+
if (u.origin !== location.origin) return '/';
|
|
141
|
+
return u.pathname + u.search;
|
|
142
|
+
} catch { return '/'; }
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
var form = document.getElementById('login-form');
|
|
146
|
+
var msg = document.getElementById('msg');
|
|
147
|
+
var input = document.getElementById('token');
|
|
148
|
+
var btn = document.getElementById('t-submit');
|
|
149
|
+
|
|
150
|
+
form.addEventListener('submit', async function(ev){
|
|
151
|
+
ev.preventDefault();
|
|
152
|
+
var token = (input.value || '').trim();
|
|
153
|
+
if (!token) return;
|
|
154
|
+
var t = T[window.__lang || 'en'];
|
|
155
|
+
msg.className = 'msg';
|
|
156
|
+
msg.innerHTML = '';
|
|
157
|
+
btn.disabled = true;
|
|
158
|
+
btn.textContent = t.submitting;
|
|
159
|
+
try {
|
|
160
|
+
var r = await fetch('/api/auth/login', {
|
|
161
|
+
method: 'POST',
|
|
162
|
+
headers: { 'Content-Type': 'application/json' },
|
|
163
|
+
body: JSON.stringify({ token: token }),
|
|
164
|
+
});
|
|
165
|
+
if (r.status === 401) {
|
|
166
|
+
msg.className = 'msg err';
|
|
167
|
+
msg.innerHTML = t.bad;
|
|
168
|
+
btn.disabled = false;
|
|
169
|
+
btn.textContent = t.submit;
|
|
170
|
+
input.select();
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if (!r.ok) {
|
|
174
|
+
var body = await r.text();
|
|
175
|
+
msg.className = 'msg err';
|
|
176
|
+
msg.textContent = t.err + (r.status + ' ' + body.slice(0, 200));
|
|
177
|
+
btn.disabled = false;
|
|
178
|
+
btn.textContent = t.submit;
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Also stash in localStorage so old _app.js code paths that read it still work.
|
|
182
|
+
localStorage.setItem('agim_token', token);
|
|
183
|
+
msg.className = 'msg ok';
|
|
184
|
+
msg.textContent = t.ok;
|
|
185
|
+
setTimeout(function(){ location.href = nextUrl(); }, 350);
|
|
186
|
+
} catch (err) {
|
|
187
|
+
msg.className = 'msg err';
|
|
188
|
+
msg.textContent = t.err + (err && err.message || String(err));
|
|
189
|
+
btn.disabled = false;
|
|
190
|
+
btn.textContent = t.submit;
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
})();
|
|
194
|
+
</script>
|
|
195
|
+
</body>
|
|
196
|
+
</html>
|
|
@@ -178,6 +178,23 @@
|
|
|
178
178
|
viewerTunnelBinaryMissing: 'cloudflared not installed',
|
|
179
179
|
viewerTunnelCurrentUrl: 'Current URL',
|
|
180
180
|
viewerTunnelRefresh: 'Refresh',
|
|
181
|
+
a2aNotifyTitle: 'A2A Notifications',
|
|
182
|
+
a2aNotifyHint: 'Push intermediate state to your IM thread when one agent calls another (e.g. Claude → Codex). Keeps you in the loop during long handoffs.',
|
|
183
|
+
a2aDefaultTimeout: 'Default A2A timeout (minutes)',
|
|
184
|
+
a2aDefaultTimeoutHint: 'How long agim waits for a child agent before timing out. Raised from 10 min to 30 min in v1.1.10 — long enough for Codex to do ~4 API pulls + write a report.',
|
|
185
|
+
a2aMaxTimeout: 'Max allowed timeout (minutes)',
|
|
186
|
+
a2aMaxTimeoutHint: 'Hard ceiling. Refuses caller-supplied timeoutMs larger than this so an agent can\'t block A2A forever.',
|
|
187
|
+
a2aNotifyMode: 'Notify mode',
|
|
188
|
+
a2aNotifyOff: 'Off',
|
|
189
|
+
a2aNotifyEssential: 'Essential (start + complete/timeout/failed)',
|
|
190
|
+
a2aNotifyVerbose: 'Verbose (add heartbeats on file changes)',
|
|
191
|
+
a2aMaxDepth: 'Max notify depth',
|
|
192
|
+
a2aMaxDepthHint: 'Only notify for callees up to this nesting depth (1 = direct child only). Avoids spamming on deep call chains.',
|
|
193
|
+
a2aHeartbeatMin: 'Heartbeat interval (minutes, verbose only)',
|
|
194
|
+
a2aHeartbeatHint: 'Checks the callee\'s _agim-output/ directory; pushes a note if files changed or a "still thinking" note otherwise.',
|
|
195
|
+
a2aSave: 'Save',
|
|
196
|
+
a2aSaved: 'Saved — applies to the next A2A invocation, no restart needed.',
|
|
197
|
+
a2aSaveFailed: 'Failed to save A2A settings',
|
|
181
198
|
},
|
|
182
199
|
zh: {
|
|
183
200
|
title: 'Agim — 设置',
|
|
@@ -342,6 +359,23 @@
|
|
|
342
359
|
viewerTunnelBinaryMissing: '未安装 cloudflared',
|
|
343
360
|
viewerTunnelCurrentUrl: '当前 URL',
|
|
344
361
|
viewerTunnelRefresh: '刷新',
|
|
362
|
+
a2aNotifyTitle: 'A2A 中间状态通知',
|
|
363
|
+
a2aNotifyHint: '当一个 agent 调另一个 agent(例如 Claude → Codex)时,把开始/进度/完成/超时的状态推到你的 IM 会话,避免长任务"哑巴等"。',
|
|
364
|
+
a2aDefaultTimeout: 'A2A 默认超时(分钟)',
|
|
365
|
+
a2aDefaultTimeoutHint: 'agim 等子 agent 的时长上限。v1.1.10 从 10 min 提到 30 min — 足够 Codex 拉几次 API + 写报告。',
|
|
366
|
+
a2aMaxTimeout: 'A2A 最大允许超时(分钟)',
|
|
367
|
+
a2aMaxTimeoutHint: '硬上限。agent 调用时即使传更大的 timeoutMs 也会被截到这个值。防止 A2A 被永久卡住。',
|
|
368
|
+
a2aNotifyMode: '通知模式',
|
|
369
|
+
a2aNotifyOff: '关闭',
|
|
370
|
+
a2aNotifyEssential: '精简(仅 start + 终态)',
|
|
371
|
+
a2aNotifyVerbose: '详细(额外在文件变化时推 heartbeat)',
|
|
372
|
+
a2aMaxDepth: '最大通知深度',
|
|
373
|
+
a2aMaxDepthHint: '只对嵌套深度 ≤ 此值的子调用发通知(1 = 仅直接子调用)。避免深度嵌套刷屏。',
|
|
374
|
+
a2aHeartbeatMin: 'Heartbeat 间隔(分钟,详细模式生效)',
|
|
375
|
+
a2aHeartbeatHint: '每隔这么久检查一次子 agent 的 _agim-output/ 目录;有新文件就推一条,没变化就推"仍在 think"。',
|
|
376
|
+
a2aSave: '保存',
|
|
377
|
+
a2aSaved: '已保存 — 下次 A2A 调用生效,无需重启。',
|
|
378
|
+
a2aSaveFailed: '保存 A2A 配置失败',
|
|
345
379
|
},
|
|
346
380
|
};
|
|
347
381
|
function t(key) { return T[window.__lang][key] || T.en[key] || key; }
|
|
@@ -744,7 +778,23 @@
|
|
|
744
778
|
// (if any reverse-proxy added one) is sent automatically.
|
|
745
779
|
function authFetch(url, init = {}) {
|
|
746
780
|
const headers = { ...(init.headers || {}) };
|
|
747
|
-
|
|
781
|
+
// v1.1.10: attach access token (Bearer + Cookie both work, but
|
|
782
|
+
// setting Bearer ensures direct curl-style usage from devtools also
|
|
783
|
+
// succeeds). 401 → redirect to /login with `next` set to current URL.
|
|
784
|
+
if (!headers['Authorization']) {
|
|
785
|
+
try {
|
|
786
|
+
const tk = localStorage.getItem('agim_token');
|
|
787
|
+
if (tk) headers['Authorization'] = `Bearer ${tk}`;
|
|
788
|
+
} catch { /* ignore */ }
|
|
789
|
+
}
|
|
790
|
+
return fetch(url, { ...init, headers, credentials: 'same-origin' }).then(r => {
|
|
791
|
+
if (r.status === 401) {
|
|
792
|
+
try { localStorage.removeItem('agim_token'); } catch {}
|
|
793
|
+
const next = encodeURIComponent(location.pathname + location.search);
|
|
794
|
+
location.href = `/login?next=${next}`;
|
|
795
|
+
}
|
|
796
|
+
return r;
|
|
797
|
+
});
|
|
748
798
|
}
|
|
749
799
|
|
|
750
800
|
// Fetch config on load
|
|
@@ -1476,6 +1526,50 @@
|
|
|
1476
1526
|
<p class="muted" id="viewerStatus" style="margin-top:8px;font-size:12px"></p>
|
|
1477
1527
|
</div>
|
|
1478
1528
|
|
|
1529
|
+
<!-- A2A Notifications (env-file) — push intermediate state during agent-to-agent handoffs -->
|
|
1530
|
+
<div class="card">
|
|
1531
|
+
<h2>🔀 ${t('a2aNotifyTitle')}</h2>
|
|
1532
|
+
<p class="muted" style="margin-top:-4px;margin-bottom:12px;font-size:13px">${t('a2aNotifyHint')}</p>
|
|
1533
|
+
|
|
1534
|
+
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;max-width:720px">
|
|
1535
|
+
<div>
|
|
1536
|
+
<label>${t('a2aDefaultTimeout')}</label>
|
|
1537
|
+
<input type="number" id="a2aDefaultTimeout" min="1" max="60" placeholder="30" />
|
|
1538
|
+
<p class="muted" style="margin-top:4px;font-size:11px">${t('a2aDefaultTimeoutHint')}</p>
|
|
1539
|
+
</div>
|
|
1540
|
+
<div>
|
|
1541
|
+
<label>${t('a2aMaxTimeout')}</label>
|
|
1542
|
+
<input type="number" id="a2aMaxTimeout" min="1" max="180" placeholder="60" />
|
|
1543
|
+
<p class="muted" style="margin-top:4px;font-size:11px">${t('a2aMaxTimeoutHint')}</p>
|
|
1544
|
+
</div>
|
|
1545
|
+
</div>
|
|
1546
|
+
|
|
1547
|
+
<label style="margin-top:12px;display:block">${t('a2aNotifyMode')}</label>
|
|
1548
|
+
<select id="a2aNotifyMode" style="max-width:480px">
|
|
1549
|
+
<option value="off">${t('a2aNotifyOff')}</option>
|
|
1550
|
+
<option value="essential" selected>${t('a2aNotifyEssential')}</option>
|
|
1551
|
+
<option value="verbose">${t('a2aNotifyVerbose')}</option>
|
|
1552
|
+
</select>
|
|
1553
|
+
|
|
1554
|
+
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:12px;max-width:720px">
|
|
1555
|
+
<div>
|
|
1556
|
+
<label>${t('a2aMaxDepth')}</label>
|
|
1557
|
+
<input type="number" id="a2aMaxDepth" min="0" max="5" placeholder="1" />
|
|
1558
|
+
<p class="muted" style="margin-top:4px;font-size:11px">${t('a2aMaxDepthHint')}</p>
|
|
1559
|
+
</div>
|
|
1560
|
+
<div>
|
|
1561
|
+
<label>${t('a2aHeartbeatMin')}</label>
|
|
1562
|
+
<input type="number" id="a2aHeartbeatMin" min="1" max="60" placeholder="5" />
|
|
1563
|
+
<p class="muted" style="margin-top:4px;font-size:11px">${t('a2aHeartbeatHint')}</p>
|
|
1564
|
+
</div>
|
|
1565
|
+
</div>
|
|
1566
|
+
|
|
1567
|
+
<div class="actions" style="margin-top:12px">
|
|
1568
|
+
<button type="button" class="btn btn-primary" id="saveA2A">${t('a2aSave')}</button>
|
|
1569
|
+
</div>
|
|
1570
|
+
<p class="muted" id="a2aStatus" style="margin-top:8px;font-size:12px"></p>
|
|
1571
|
+
</div>
|
|
1572
|
+
|
|
1479
1573
|
<!-- Baidu Maps AK (env-file) — feeds /memo address geocoding -->
|
|
1480
1574
|
<div class="card">
|
|
1481
1575
|
<h2>🗺 Baidu Maps AK</h2>
|
|
@@ -1548,6 +1642,22 @@
|
|
|
1548
1642
|
set('viewerLines', 'IMHUB_VIEWER_LINES');
|
|
1549
1643
|
set('viewerCodeLines', 'IMHUB_VIEWER_CODE_LINES');
|
|
1550
1644
|
set('viewerMaxPastes', 'IMHUB_VIEWER_MAX_PASTES');
|
|
1645
|
+
// A2A card — values stored as ms / direct values; UI uses minutes for the timeouts.
|
|
1646
|
+
const a2aDt = document.getElementById('a2aDefaultTimeout');
|
|
1647
|
+
if (a2aDt) {
|
|
1648
|
+
const ms = parseInt(env['IMHUB_A2A_TIMEOUT_DEFAULT_MS'] || '', 10);
|
|
1649
|
+
a2aDt.value = Number.isFinite(ms) && ms > 0 ? String(Math.round(ms / 60000)) : '';
|
|
1650
|
+
}
|
|
1651
|
+
const a2aMt = document.getElementById('a2aMaxTimeout');
|
|
1652
|
+
if (a2aMt) {
|
|
1653
|
+
const ms = parseInt(env['IMHUB_A2A_MAX_TIMEOUT_MS'] || '', 10);
|
|
1654
|
+
a2aMt.value = Number.isFinite(ms) && ms > 0 ? String(Math.round(ms / 60000)) : '';
|
|
1655
|
+
}
|
|
1656
|
+
const a2aMode = document.getElementById('a2aNotifyMode');
|
|
1657
|
+
if (a2aMode) a2aMode.value = (env['IMHUB_A2A_NOTIFY_MODE'] || 'essential').toLowerCase();
|
|
1658
|
+
set('a2aMaxDepth', 'IMHUB_A2A_NOTIFY_MAX_DEPTH');
|
|
1659
|
+
set('a2aHeartbeatMin', 'IMHUB_A2A_HEARTBEAT_MIN');
|
|
1660
|
+
|
|
1551
1661
|
const vTunnelMode = document.getElementById('viewerTunnelMode');
|
|
1552
1662
|
if (vTunnelMode) {
|
|
1553
1663
|
vTunnelMode.value = (env['IMHUB_VIEWER_TUNNEL_MODE'] || 'off').toLowerCase() === 'quick' ? 'quick' : 'off';
|
|
@@ -1869,6 +1979,35 @@
|
|
|
1869
1979
|
});
|
|
1870
1980
|
document.getElementById('revealBaidu')?.addEventListener('click', () => loadEnvSection(true));
|
|
1871
1981
|
|
|
1982
|
+
// A2A card — save timeouts (min → ms) + mode + depth + heartbeat.
|
|
1983
|
+
document.getElementById('saveA2A')?.addEventListener('click', async () => {
|
|
1984
|
+
const dtMin = parseInt(document.getElementById('a2aDefaultTimeout')?.value || '', 10);
|
|
1985
|
+
const mtMin = parseInt(document.getElementById('a2aMaxTimeout')?.value || '', 10);
|
|
1986
|
+
const mode = document.getElementById('a2aNotifyMode')?.value || 'essential';
|
|
1987
|
+
const depth = (document.getElementById('a2aMaxDepth')?.value || '').trim();
|
|
1988
|
+
const heartbeat = (document.getElementById('a2aHeartbeatMin')?.value || '').trim();
|
|
1989
|
+
const status = document.getElementById('a2aStatus');
|
|
1990
|
+
try {
|
|
1991
|
+
await authFetch('/api/env', {
|
|
1992
|
+
method: 'PUT',
|
|
1993
|
+
headers: { 'Content-Type': 'application/json' },
|
|
1994
|
+
body: JSON.stringify({
|
|
1995
|
+
updates: {
|
|
1996
|
+
IMHUB_A2A_TIMEOUT_DEFAULT_MS: Number.isFinite(dtMin) && dtMin > 0 ? String(dtMin * 60000) : null,
|
|
1997
|
+
IMHUB_A2A_MAX_TIMEOUT_MS: Number.isFinite(mtMin) && mtMin > 0 ? String(mtMin * 60000) : null,
|
|
1998
|
+
IMHUB_A2A_NOTIFY_MODE: mode,
|
|
1999
|
+
IMHUB_A2A_NOTIFY_MAX_DEPTH: depth || null,
|
|
2000
|
+
IMHUB_A2A_HEARTBEAT_MIN: heartbeat || null,
|
|
2001
|
+
},
|
|
2002
|
+
}),
|
|
2003
|
+
});
|
|
2004
|
+
if (status) status.textContent = t('a2aSaved');
|
|
2005
|
+
await loadEnvSection();
|
|
2006
|
+
} catch (err) {
|
|
2007
|
+
if (status) status.textContent = t('a2aSaveFailed') + ': ' + (err && err.message ? err.message : err);
|
|
2008
|
+
}
|
|
2009
|
+
});
|
|
2010
|
+
|
|
1872
2011
|
// Tunnel mode dropdown — show/hide status panel on change.
|
|
1873
2012
|
document.getElementById('viewerTunnelMode')?.addEventListener('change', (e) => {
|
|
1874
2013
|
const box = document.getElementById('viewerTunnelStatusBox');
|
package/dist/web/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AA+JA,wBAAgB,iBAAiB,IAAI,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAOrE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;CACrB,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA4tB/C"}
|