agim-cli 1.0.11 → 1.0.13
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 +52 -0
- package/dist/core/restart-completion.d.ts +11 -0
- package/dist/core/restart-completion.d.ts.map +1 -1
- package/dist/core/restart-completion.js +23 -1
- package/dist/core/restart-completion.js.map +1 -1
- package/dist/core/restart-flow.d.ts +6 -2
- package/dist/core/restart-flow.d.ts.map +1 -1
- package/dist/core/restart-flow.js.map +1 -1
- package/dist/web/public/settings.html +8 -103
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,58 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [1.0.13] - 2026-05-13
|
|
8
|
+
|
|
9
|
+
### Fixed — WeChat completion ack after restart silently dropped
|
|
10
|
+
|
|
11
|
+
When a restart was initiated from a WeChat thread, the "✅ 已重启完成"
|
|
12
|
+
message was logged as
|
|
13
|
+
|
|
14
|
+
component=restart-completion event=restart-completion.push_no_messenger
|
|
15
|
+
platform=wechat msg="IM messenger not registered after restart;
|
|
16
|
+
completion push dropped"
|
|
17
|
+
|
|
18
|
+
and never reached the user. Root cause: the wechat-ilink adapter tags
|
|
19
|
+
inbound `MessageContext.platform = 'wechat'`, but registers in the
|
|
20
|
+
plugin registry under the name `wechat-ilink`. The completion path
|
|
21
|
+
in `core/restart-completion.ts:pushToInitiator` called
|
|
22
|
+
`registry.getMessenger('wechat')` directly, which returned undefined
|
|
23
|
+
and dropped the push silently.
|
|
24
|
+
|
|
25
|
+
`restart-completion.ts` now goes through a new `resolveMessenger()`
|
|
26
|
+
helper: exact-name match first (preserves telegram / feishu /
|
|
27
|
+
dingtalk / discord behavior, all of which have aligned names), then a
|
|
28
|
+
prefix fallback so `wechat` finds `wechat-ilink` — and a future
|
|
29
|
+
`wechat-padlocal` etc. would resolve transparently.
|
|
30
|
+
|
|
31
|
+
Only WeChat was affected. No state-file format change; users on 1.0.12
|
|
32
|
+
who don't restart from WeChat see no behavioral difference.
|
|
33
|
+
|
|
34
|
+
## [1.0.12] - 2026-05-13
|
|
35
|
+
|
|
36
|
+
### Removed — Safety card "Skip permissions" toggle
|
|
37
|
+
|
|
38
|
+
The web /settings Safety card no longer exposes a toggle for
|
|
39
|
+
`IMHUB_DANGEROUSLY_SKIP_PERMISSIONS`. The toggle was a footgun for the
|
|
40
|
+
typical systemd deployment: im-hub runs as root, but Claude CLI itself
|
|
41
|
+
hard-refuses `--dangerously-skip-permissions` for uid=0 with
|
|
42
|
+
|
|
43
|
+
claude-code failed (exit 1):
|
|
44
|
+
--dangerously-skip-permissions cannot be used with root/sudo
|
|
45
|
+
privileges for security reasons
|
|
46
|
+
|
|
47
|
+
so flipping the toggle ON only succeeded in breaking every subsequent
|
|
48
|
+
Claude run. Removing the UI control means operators don't trip the
|
|
49
|
+
guard by accident.
|
|
50
|
+
|
|
51
|
+
The env variable itself is **still honored** by the Claude adapter
|
|
52
|
+
(`src/plugins/agents/claude-code/index.ts`). Non-root deployments that
|
|
53
|
+
genuinely want the bypass can edit `~/.agim/env` manually:
|
|
54
|
+
|
|
55
|
+
IMHUB_DANGEROUSLY_SKIP_PERMISSIONS=1
|
|
56
|
+
|
|
57
|
+
The Safety card now contains only the Admin Allowlist editor.
|
|
58
|
+
|
|
7
59
|
## [1.0.11] - 2026-05-13
|
|
8
60
|
|
|
9
61
|
### Fixed - /restart races systemd own restart in systemd-managed installs
|
|
@@ -1,4 +1,15 @@
|
|
|
1
|
+
import type { MessengerAdapter } from './types.js';
|
|
1
2
|
export declare function processRestartPending(defaultAgent: string): Promise<void>;
|
|
3
|
+
/** Look up the messenger that should ack a restart.
|
|
4
|
+
*
|
|
5
|
+
* The wechat-ilink adapter registers as "wechat-ilink" but tags every
|
|
6
|
+
* inbound MessageContext with platform="wechat", so the persisted
|
|
7
|
+
* initiator.platform is the short form. Try the exact name first to
|
|
8
|
+
* preserve behavior for telegram / feishu / dingtalk / discord (where
|
|
9
|
+
* both sides agree), then fall back to a prefix scan so "wechat" finds
|
|
10
|
+
* "wechat-ilink" — and any future "wechat-padlocal" etc. would also
|
|
11
|
+
* resolve transparently. */
|
|
12
|
+
export declare function resolveMessenger(platform: string): MessengerAdapter | undefined;
|
|
2
13
|
/** Returns true if the running process appears to be inside a restart
|
|
3
14
|
* (state file exists, fresh). Useful for log lines / startup ordering. */
|
|
4
15
|
export declare function isInsideRestart(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restart-completion.d.ts","sourceRoot":"","sources":["../../src/core/restart-completion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"restart-completion.d.ts","sourceRoot":"","sources":["../../src/core/restart-completion.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAYlD,wBAAsB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD/E;AAoFD;;;;;;;;6BAQ6B;AAC7B,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAW/E;AAMD;2EAC2E;AAC3E,wBAAgB,eAAe,IAAI,OAAO,CAQzC"}
|
|
@@ -110,11 +110,12 @@ async function pushToInitiator(initiator, body) {
|
|
|
110
110
|
log.warn({ event: 'restart-completion.push_missing_ctx', initiator }, 'IM initiator missing platform/threadId; cannot push completion message');
|
|
111
111
|
return;
|
|
112
112
|
}
|
|
113
|
-
const adapter =
|
|
113
|
+
const adapter = resolveMessenger(initiator.platform);
|
|
114
114
|
if (!adapter) {
|
|
115
115
|
log.warn({
|
|
116
116
|
event: 'restart-completion.push_no_messenger',
|
|
117
117
|
platform: initiator.platform,
|
|
118
|
+
registered: registry.listMessengers(),
|
|
118
119
|
}, 'IM messenger not registered after restart; completion push dropped');
|
|
119
120
|
return;
|
|
120
121
|
}
|
|
@@ -134,6 +135,27 @@ async function pushToInitiator(initiator, body) {
|
|
|
134
135
|
}, 'completion message push threw — dropping');
|
|
135
136
|
}
|
|
136
137
|
}
|
|
138
|
+
/** Look up the messenger that should ack a restart.
|
|
139
|
+
*
|
|
140
|
+
* The wechat-ilink adapter registers as "wechat-ilink" but tags every
|
|
141
|
+
* inbound MessageContext with platform="wechat", so the persisted
|
|
142
|
+
* initiator.platform is the short form. Try the exact name first to
|
|
143
|
+
* preserve behavior for telegram / feishu / dingtalk / discord (where
|
|
144
|
+
* both sides agree), then fall back to a prefix scan so "wechat" finds
|
|
145
|
+
* "wechat-ilink" — and any future "wechat-padlocal" etc. would also
|
|
146
|
+
* resolve transparently. */
|
|
147
|
+
export function resolveMessenger(platform) {
|
|
148
|
+
const direct = registry.getMessenger(platform);
|
|
149
|
+
if (direct)
|
|
150
|
+
return direct;
|
|
151
|
+
const prefix = platform + '-';
|
|
152
|
+
for (const name of registry.listMessengers()) {
|
|
153
|
+
if (name === platform || name.startsWith(prefix)) {
|
|
154
|
+
return registry.getMessenger(name);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return undefined;
|
|
158
|
+
}
|
|
137
159
|
function safeUnlink(p) {
|
|
138
160
|
try {
|
|
139
161
|
unlinkSync(p);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restart-completion.js","sourceRoot":"","sources":["../../src/core/restart-completion.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,uEAAuE;AACvE,qEAAqE;AACrE,2BAA2B;AAC3B,EAAE;AACF,SAAS;AACT,gEAAgE;AAChE,+DAA+D;AAC/D,+EAA+E;AAC/E,wEAAwE;AACxE,mEAAmE;AAEnE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"restart-completion.js","sourceRoot":"","sources":["../../src/core/restart-completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,12 @@ export interface RestartInitiator {
|
|
|
6
6
|
/** Source layer that initiated. Determines who receives the completion
|
|
7
7
|
* message. */
|
|
8
8
|
source: 'im' | 'web' | 'cli';
|
|
9
|
-
/** IM platform name
|
|
10
|
-
*
|
|
9
|
+
/** IM platform name as set on MessageContext by the inbound adapter
|
|
10
|
+
* (wechat / telegram / feishu / dingtalk / discord). Note: this is
|
|
11
|
+
* the short form used in MessageContext, NOT necessarily the same
|
|
12
|
+
* string the adapter registers under in registry.ts — restart-
|
|
13
|
+
* completion's resolveMessenger() bridges that gap.
|
|
14
|
+
* Empty when source !== 'im'. */
|
|
11
15
|
platform?: string;
|
|
12
16
|
channelId?: string;
|
|
13
17
|
threadId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restart-flow.d.ts","sourceRoot":"","sources":["../../src/core/restart-flow.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,oBAAoB,QAA0C,CAAA;AAC3E,eAAO,MAAM,kBAAkB,QAAwC,CAAA;AAIvE;0EAC0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B;mBACe;IACf,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,CAAA;IAC5B;
|
|
1
|
+
{"version":3,"file":"restart-flow.d.ts","sourceRoot":"","sources":["../../src/core/restart-flow.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,oBAAoB,QAA0C,CAAA;AAC3E,eAAO,MAAM,kBAAkB,QAAwC,CAAA;AAIvE;0EAC0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B;mBACe;IACf,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,CAAA;IAC5B;;;;;sCAKkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;gCAE4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAA;IACV,SAAS,EAAE,gBAAgB,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB;;qCAEiC;IACjC,oBAAoB,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAA;IACX;wEACoE;IACpE,OAAO,EAAE,MAAM,CAAA;IACf,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAmBD,wBAAsB,eAAe,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CA6H1F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restart-flow.js","sourceRoot":"","sources":["../../src/core/restart-flow.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,iEAAiE;AACjE,sEAAsE;AACtE,iBAAiB;AACjB,EAAE;AACF,mEAAmE;AACnE,uEAAuE;AACvE,2DAA2D;AAC3D,sBAAsB;AACtB,EAAE;AACF,YAAY;AACZ,oEAAoE;AACpE,gDAAgD;AAChD,0DAA0D;AAC1D,uDAAuD;AACvD,oEAAoE;AACpE,wDAAwD;AACxD,EAAE;AACF,gEAAgE;AAChE,wEAAwE;AACxE,uEAAuE;AACvE,QAAQ;AAER,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAA;AAElD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAA;AAE3D,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAEzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAA;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAA;AACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;AAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"restart-flow.js","sourceRoot":"","sources":["../../src/core/restart-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -129,16 +129,8 @@
|
|
|
129
129
|
svcStopped: '✓ Service stopped (this page is now disconnected)',
|
|
130
130
|
svcFgWarning: 'Foreground service is running in another terminal — restart it there.',
|
|
131
131
|
|
|
132
|
-
// ── Safety /
|
|
132
|
+
// ── Safety / admin allowlist ─────────────────────────────
|
|
133
133
|
safetyTitle: 'Safety',
|
|
134
|
-
safetySkipLabel: 'Skip permission prompts for Claude Code (Dangerous)',
|
|
135
|
-
safetySkipHint: 'When ON, Claude Code launches with --dangerously-skip-permissions. Every tool call (Bash, Edit, Write, …) runs without approval and without honoring PreToolUse hooks. Only enable on private / sandboxed deployments you fully trust.',
|
|
136
|
-
safetySkipStatusOn: 'Currently: SKIPPING approvals — DANGEROUS',
|
|
137
|
-
safetySkipStatusOff: 'Currently: approval prompts enforced (default)',
|
|
138
|
-
safetySkipConfirmOn: 'Turn OFF approval prompts for Claude Code? Every tool call will run without confirmation. Click OK only if this deployment is private / sandboxed.',
|
|
139
|
-
safetyRestartHint: 'Click Save & Restart to apply.',
|
|
140
|
-
safetySaveRestart: 'Save & Restart',
|
|
141
|
-
safetySaved: '✓ Setting saved',
|
|
142
134
|
adminListTitle: 'Admin Allowlist',
|
|
143
135
|
adminListHint: 'Only these users can run /restart, /stop, and natural-language equivalents in IM. Edits persist to ~/.agim/env immediately — no restart needed.',
|
|
144
136
|
adminListLoading: 'Loading…',
|
|
@@ -264,16 +256,8 @@
|
|
|
264
256
|
svcStopped: '✓ 服务已停止(页面已断开连接)',
|
|
265
257
|
svcFgWarning: '前台服务在另一个终端运行——回那个终端重启。',
|
|
266
258
|
|
|
267
|
-
// ── Safety /
|
|
259
|
+
// ── Safety / admin allowlist ─────────────────────────────
|
|
268
260
|
safetyTitle: '安全',
|
|
269
|
-
safetySkipLabel: '免审批:Claude Code(危险)',
|
|
270
|
-
safetySkipHint: '打开后 Claude Code 以 --dangerously-skip-permissions 启动,所有工具调用(Bash / Edit / Write …)不再申请审批,也不走 PreToolUse hooks。仅推荐在你完全信任的私人 / 沙箱环境使用。',
|
|
271
|
-
safetySkipStatusOn: '当前:免审批 — 危险',
|
|
272
|
-
safetySkipStatusOff: '当前:审批正常生效(默认)',
|
|
273
|
-
safetySkipConfirmOn: '关闭 Claude Code 审批?所有工具调用都会不经确认直接执行。仅当此部署是私人 / 沙箱环境时点确定。',
|
|
274
|
-
safetyRestartHint: '点「保存并重启」让改动生效。',
|
|
275
|
-
safetySaveRestart: '保存并重启',
|
|
276
|
-
safetySaved: '✓ 设置已保存',
|
|
277
261
|
adminListTitle: '管理员白名单',
|
|
278
262
|
adminListHint: '只有列表里的用户能在 IM 里跑 /restart / /stop 或自然语言"重启服务"。改动会立即写入 ~/.agim/env,无需重启。',
|
|
279
263
|
adminListLoading: '加载中…',
|
|
@@ -735,37 +719,22 @@
|
|
|
735
719
|
// Service status loads asynchronously; the card renders with a
|
|
736
720
|
// placeholder, populated by the first /api/service/status response.
|
|
737
721
|
void loadServiceStatus();
|
|
738
|
-
// Safety toggle reflects the current env value; load once on render.
|
|
739
|
-
void loadSafetyState();
|
|
740
722
|
// Admin allowlist list — loads via /api/admin-allowlist.
|
|
741
723
|
void loadAdminList();
|
|
742
724
|
}
|
|
743
725
|
|
|
744
726
|
// ==========================================
|
|
745
|
-
// Safety card —
|
|
746
|
-
//
|
|
747
|
-
//
|
|
748
|
-
//
|
|
727
|
+
// Safety card — IM admin allowlist editor.
|
|
728
|
+
// The Claude --dangerously-skip-permissions toggle was removed in
|
|
729
|
+
// v1.0.12: Claude CLI refuses that flag when running as root, which
|
|
730
|
+
// is the default systemd deployment, so the toggle was a footgun.
|
|
731
|
+
// Operators who still want it can set IMHUB_DANGEROUSLY_SKIP_
|
|
732
|
+
// PERMISSIONS=1 in ~/.agim/env manually (non-root only).
|
|
749
733
|
// ==========================================
|
|
750
734
|
function renderSafetyCard() {
|
|
751
735
|
return `
|
|
752
736
|
<div class="card">
|
|
753
737
|
<h2>${t('safetyTitle')} ⚠️</h2>
|
|
754
|
-
<div class="agent-row" style="border-bottom:none;padding:8px 0">
|
|
755
|
-
<div class="left" style="max-width:calc(100% - 60px)">
|
|
756
|
-
<div>
|
|
757
|
-
<div class="name">${t('safetySkipLabel')}</div>
|
|
758
|
-
<div class="hint" style="white-space:normal;line-height:1.5">${t('safetySkipHint')}</div>
|
|
759
|
-
<div class="hint" id="safety-skip-status" style="margin-top:6px">—</div>
|
|
760
|
-
</div>
|
|
761
|
-
</div>
|
|
762
|
-
<div class="toggle" id="safety-skip-toggle" data-active="0"></div>
|
|
763
|
-
</div>
|
|
764
|
-
<div class="hint" style="margin-top:10px">${t('safetyRestartHint')}</div>
|
|
765
|
-
<div class="actions">
|
|
766
|
-
<button type="button" class="btn btn-primary" id="safety-save-restart">${t('safetySaveRestart')}</button>
|
|
767
|
-
</div>
|
|
768
|
-
<hr class="divider">
|
|
769
738
|
<div style="font-size:13px;font-weight:600;margin-bottom:6px">${t('adminListTitle')}</div>
|
|
770
739
|
<div class="hint" style="margin-bottom:10px">${t('adminListHint')}</div>
|
|
771
740
|
<div id="admin-list" style="margin-bottom:10px">${t('adminListLoading')}</div>
|
|
@@ -789,37 +758,6 @@
|
|
|
789
758
|
`;
|
|
790
759
|
}
|
|
791
760
|
|
|
792
|
-
// Pending state — what the toggle is set to RIGHT NOW (before save).
|
|
793
|
-
// Diffed against the on-disk env value to decide if Save-and-Restart
|
|
794
|
-
// should fire the restart.
|
|
795
|
-
let safetySkipCurrent = false;
|
|
796
|
-
let safetySkipPending = false;
|
|
797
|
-
|
|
798
|
-
async function loadSafetyState() {
|
|
799
|
-
try {
|
|
800
|
-
const data = await authFetch('/api/env').then(r => r.json());
|
|
801
|
-
// Treat env value '1' as on, anything else as off. /api/env masks
|
|
802
|
-
// sensitive values but plain '1'/'0' come through verbatim.
|
|
803
|
-
const v = data && data.env && data.env.IMHUB_DANGEROUSLY_SKIP_PERMISSIONS;
|
|
804
|
-
safetySkipCurrent = v === '1';
|
|
805
|
-
safetySkipPending = safetySkipCurrent;
|
|
806
|
-
renderSafetyToggleState();
|
|
807
|
-
} catch (err) {
|
|
808
|
-
const el = document.getElementById('safety-skip-status');
|
|
809
|
-
if (el) el.textContent = (t('error') + ': ' + (err && err.message ? err.message : err));
|
|
810
|
-
}
|
|
811
|
-
}
|
|
812
|
-
|
|
813
|
-
function renderSafetyToggleState() {
|
|
814
|
-
const toggle = document.getElementById('safety-skip-toggle');
|
|
815
|
-
const status = document.getElementById('safety-skip-status');
|
|
816
|
-
if (!toggle || !status) return;
|
|
817
|
-
toggle.classList.toggle('active', safetySkipPending);
|
|
818
|
-
toggle.setAttribute('data-active', safetySkipPending ? '1' : '0');
|
|
819
|
-
status.textContent = safetySkipPending ? t('safetySkipStatusOn') : t('safetySkipStatusOff');
|
|
820
|
-
status.style.color = safetySkipPending ? 'var(--red)' : 'var(--text-dim)';
|
|
821
|
-
}
|
|
822
|
-
|
|
823
761
|
// ─── Admin allowlist editor ──────────────────────────────────
|
|
824
762
|
async function loadAdminList() {
|
|
825
763
|
const listEl = document.getElementById('admin-list');
|
|
@@ -1408,39 +1346,6 @@
|
|
|
1408
1346
|
document.getElementById('svc-stop')?.addEventListener('click', () => svcAction('stop'));
|
|
1409
1347
|
document.getElementById('svc-start')?.addEventListener('click', () => svcAction('start'));
|
|
1410
1348
|
|
|
1411
|
-
// Safety toggle — flip pending state. Save & Restart commits to env.
|
|
1412
|
-
document.getElementById('safety-skip-toggle')?.addEventListener('click', () => {
|
|
1413
|
-
// Going from OFF → ON crosses a security boundary; double-check.
|
|
1414
|
-
if (!safetySkipPending && !confirm(t('safetySkipConfirmOn'))) return;
|
|
1415
|
-
safetySkipPending = !safetySkipPending;
|
|
1416
|
-
renderSafetyToggleState();
|
|
1417
|
-
});
|
|
1418
|
-
document.getElementById('safety-save-restart')?.addEventListener('click', async () => {
|
|
1419
|
-
const wantedOn = safetySkipPending;
|
|
1420
|
-
try {
|
|
1421
|
-
const updates = wantedOn
|
|
1422
|
-
? { IMHUB_DANGEROUSLY_SKIP_PERMISSIONS: '1' }
|
|
1423
|
-
: { IMHUB_DANGEROUSLY_SKIP_PERMISSIONS: null };
|
|
1424
|
-
const res = await authFetch('/api/env', {
|
|
1425
|
-
method: 'PUT',
|
|
1426
|
-
headers: { 'Content-Type': 'application/json' },
|
|
1427
|
-
body: JSON.stringify({ updates }),
|
|
1428
|
-
});
|
|
1429
|
-
if (!res.ok) {
|
|
1430
|
-
const j = await res.json().catch(() => ({}));
|
|
1431
|
-
throw new Error(j.error || res.statusText);
|
|
1432
|
-
}
|
|
1433
|
-
toast(t('safetySaved'), 'success');
|
|
1434
|
-
safetySkipCurrent = wantedOn;
|
|
1435
|
-
// The env file write only takes effect on the next start. Reuse the
|
|
1436
|
-
// service-control restart path so the user gets the same overlay /
|
|
1437
|
-
// auto-reconnect they get clicking the Restart button manually.
|
|
1438
|
-
await svcAction('restart');
|
|
1439
|
-
} catch (err) {
|
|
1440
|
-
toast(`${t('error')}: ${err && err.message ? err.message : err}`, 'error');
|
|
1441
|
-
}
|
|
1442
|
-
});
|
|
1443
|
-
|
|
1444
1349
|
// Add admin (Safety card → Admin Allowlist).
|
|
1445
1350
|
document.getElementById('admin-add')?.addEventListener('click', async () => {
|
|
1446
1351
|
const platform = (document.getElementById('admin-platform')?.value || '').trim();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agim-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.13",
|
|
4
4
|
"description": "Agim (阿吉姆) — universal messenger-to-agent bridge. Connect WeChat / Feishu / DingTalk / Telegram / Discord to Claude Code / Codex / Copilot / OpenCode, or any custom agent via ACP. Installs the `agim` command.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|