@lemoncat7/dsh-ssh 1.11.1 → 1.11.3
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/README.md +22 -285
- package/docs/releases/1.11.2.md +13 -0
- package/docs/releases/1.11.3-style.1.md +10 -0
- package/docs/releases/1.11.3-style.2.md +9 -0
- package/docs/releases/1.11.3-style.3.md +7 -0
- package/docs/releases/1.11.3.md +25 -0
- package/docs/releases/1.2.0.md +25 -0
- package/docs/releases/1.4.3.md +13 -0
- package/docs/releases/1.4.4.md +9 -0
- package/docs/releases/1.4.5.md +10 -0
- package/docs/releases/1.4.6.md +13 -0
- package/docs/releases/1.5.0.md +15 -0
- package/docs/releases/1.5.1.md +10 -0
- package/docs/releases/1.5.2.md +9 -0
- package/docs/releases/1.5.3.md +8 -0
- package/docs/releases/1.6.0.md +8 -0
- package/docs/releases/1.7.0.md +16 -0
- package/docs/releases/README.md +14 -0
- package/docs/session-browser-state.md +10 -0
- package/docs/temporary-access.md +13 -2
- package/docs/usage.md +215 -0
- package/lib/client-api.d.ts +1 -0
- package/lib/client-api.d.ts.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +219 -131
- package/lib/client.js.map +4 -4
- package/lib/explorer-state.d.ts +11 -0
- package/lib/explorer-state.d.ts.map +1 -0
- package/lib/explorer-state.js +17 -0
- package/lib/explorer-state.js.map +1 -0
- package/lib/local-workspace.d.ts.map +1 -1
- package/lib/local-workspace.js +13 -7
- package/lib/local-workspace.js.map +1 -1
- package/lib/locales/messages.d.ts +4 -0
- package/lib/locales/messages.d.ts.map +1 -1
- package/lib/locales/messages.js +4 -0
- package/lib/locales/messages.js.map +1 -1
- package/lib/main-panel-compat.d.ts.map +1 -1
- package/lib/main-panel-compat.js +6 -6
- package/lib/main-panel-compat.js.map +1 -1
- package/lib/remote-workspace-tree.d.ts.map +1 -1
- package/lib/remote-workspace-tree.js +6 -0
- package/lib/remote-workspace-tree.js.map +1 -1
- package/lib/sftp-client.d.ts.map +1 -1
- package/lib/sftp-client.js +37 -10
- package/lib/sftp-client.js.map +1 -1
- package/lib/sftp.d.ts +1 -0
- package/lib/sftp.d.ts.map +1 -1
- package/lib/sftp.js +18 -16
- package/lib/sftp.js.map +1 -1
- package/lib/temporary-access.d.ts.map +1 -1
- package/lib/temporary-access.js +60 -22
- package/lib/temporary-access.js.map +1 -1
- package/lib/temporary-consent.d.ts +9 -0
- package/lib/temporary-consent.d.ts.map +1 -0
- package/lib/temporary-consent.js +48 -0
- package/lib/temporary-consent.js.map +1 -0
- package/lib/temporary-task-access.d.ts +36 -0
- package/lib/temporary-task-access.d.ts.map +1 -0
- package/lib/temporary-task-access.js +61 -0
- package/lib/temporary-task-access.js.map +1 -0
- package/lib/text-preview.d.ts +7 -0
- package/lib/text-preview.d.ts.map +1 -0
- package/lib/text-preview.js +32 -0
- package/lib/text-preview.js.map +1 -0
- package/package.json +3 -1
package/lib/temporary-access.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { defineTool } from '@deepseek-ai/dsh-tools';
|
|
2
2
|
import { executeSshCommand } from './exec.js';
|
|
3
3
|
import { normalizeRemoteDirectory } from './directory.js';
|
|
4
|
+
import { currentHumanText, consentMatches, confirmsPending } from './temporary-consent.js';
|
|
5
|
+
import { TemporaryTaskAccess } from './temporary-task-access.js';
|
|
4
6
|
/** Resolve only explicit identifiers; ambiguous numeric shortcuts never pick a host. */
|
|
5
7
|
export function resolveTemporaryHost(profiles, target) {
|
|
6
8
|
const key = target.trim().toLowerCase();
|
|
@@ -15,8 +17,10 @@ export function resolveTemporaryHost(profiles, target) {
|
|
|
15
17
|
return matches[0];
|
|
16
18
|
}
|
|
17
19
|
export function registerTemporaryAccess(ctx, store, connector) {
|
|
18
|
-
// No durable injection is changed
|
|
20
|
+
// No durable injection is changed. Cross-session leases require an exact board task.
|
|
19
21
|
const turns = new Map();
|
|
22
|
+
const pending = new Map();
|
|
23
|
+
const tasks = new TemporaryTaskAccess(id => store.profile(id));
|
|
20
24
|
const fingerprint = (profile) => JSON.stringify(profile);
|
|
21
25
|
const disposers = [
|
|
22
26
|
ctx.on('agent/pre-step', async ({ agent, turn, signal }, next) => {
|
|
@@ -26,19 +30,31 @@ export function registerTemporaryAccess(ctx, store, connector) {
|
|
|
26
30
|
return next();
|
|
27
31
|
}),
|
|
28
32
|
ctx.on('session/event', (session, event) => {
|
|
29
|
-
if (event.type === '
|
|
33
|
+
if (event.type === 'user/message' && event.data.source.kind === 'user' && event.data.content.some(b => b.type === 'text' && /(?:撤销|取消|停止|不要|禁止).*(?:SSH|临时|授权|访问)/iu.test(b.text))) {
|
|
34
|
+
turns.get(session.id)?.grants.clear();
|
|
35
|
+
pending.delete(session.id);
|
|
36
|
+
tasks.revokeSession(session.id, true);
|
|
37
|
+
}
|
|
38
|
+
if (event.type === 'turn/end') {
|
|
30
39
|
turns.delete(session.id);
|
|
40
|
+
tasks.revokeSession(session.id, event.data.reason.kind !== 'completed');
|
|
41
|
+
if (event.data.reason.kind !== 'completed')
|
|
42
|
+
pending.delete(session.id);
|
|
43
|
+
}
|
|
31
44
|
}),
|
|
32
|
-
ctx.on('agent/status', ({ agent, status }) => { if (status === 'idle')
|
|
33
|
-
turns.delete(agent.session.id);
|
|
34
|
-
|
|
35
|
-
|
|
45
|
+
ctx.on('agent/status', ({ agent, status }) => { if (status === 'idle') {
|
|
46
|
+
turns.delete(agent.session.id);
|
|
47
|
+
tasks.revokeSession(agent.session.id);
|
|
48
|
+
} }),
|
|
49
|
+
ctx.on('agent/error', ({ agent }) => { turns.delete(agent.session.id); pending.delete(agent.session.id); tasks.revokeSession(agent.session.id, true); }),
|
|
50
|
+
ctx.on('agent/disposed', ({ agent }) => { turns.delete(agent.session.id); pending.delete(agent.session.id); tasks.revokeSession(agent.session.id, true); }),
|
|
51
|
+
ctx.provide('dshSshTemporaryAccess', { bind: tasks.bind.bind(tasks) }),
|
|
36
52
|
];
|
|
37
53
|
const output = { schema: { type: 'string' }, render: (_args, value) => [{ type: 'text', text: String(value) }] };
|
|
38
54
|
disposers.push(ctx.tools.register(defineTool({
|
|
39
55
|
name: 'ssh_request_temporary_access',
|
|
40
|
-
description: '
|
|
41
|
-
parameters: { target: { type: 'string', required: true }, task: { type: 'string', required: true, description: 'The concrete task requested by the user.' } },
|
|
56
|
+
description: 'Request temporary SSH command access to a saved host explicitly authorized in the CURRENT HUMAN message. The plugin verifies the real message, not your claim of consent; no approval popup is needed. If consent is unclear, show the returned scope and ask the user in chat, then retry only after their reply. For delegation, FIRST create the board task with autoRun=false and an assignee, then pass taskId here; the user must authorize that recipient, or confirm the returned scope. Only after granted=true submit that same task. Without taskId access expires at this turn end. Task grants apply to one execution, at most 60 minutes, never to other tasks or reviewers. Use ssh_temporary_exec; do not change permanent mounts.',
|
|
57
|
+
parameters: { target: { type: 'string', required: true }, task: { type: 'string', required: true, description: 'The concrete task requested by the user.' }, taskId: { type: 'string', description: 'Optional exact planned board task ID for a designated executor. Create it with autoRun=false before requesting access.' } },
|
|
42
58
|
output,
|
|
43
59
|
isConcurrencySafe: () => false,
|
|
44
60
|
presentCall: args => ({ card: 'terminal', title: `SSH 临时授权 · ${args.target}` }),
|
|
@@ -52,25 +68,46 @@ export function registerTemporaryAccess(ctx, store, connector) {
|
|
|
52
68
|
throw new Error('请提供主机和明确的任务说明。');
|
|
53
69
|
const profile = resolveTemporaryHost(store.profiles(), args.target);
|
|
54
70
|
const identity = fingerprint(profile);
|
|
55
|
-
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
71
|
+
let target;
|
|
72
|
+
if (args.taskId !== undefined) {
|
|
73
|
+
if (typeof args.taskId !== 'string' || !args.taskId.trim() || args.taskId.length > 200)
|
|
74
|
+
throw new Error('无效的看板任务 ID');
|
|
75
|
+
const resolver = ctx.get('dshPartnerSshTaskAccess');
|
|
76
|
+
if (!resolver)
|
|
77
|
+
throw new Error('伙伴任务授权桥接尚未就绪,不能将当前会话权限传给其他伙伴');
|
|
78
|
+
target = resolver.resolve(args.taskId, id);
|
|
79
|
+
}
|
|
80
|
+
for (const [key, item] of pending)
|
|
81
|
+
if (item.expiresAt <= Date.now())
|
|
82
|
+
pending.delete(key);
|
|
83
|
+
const human = currentHumanText(exec.agent.session.snapshotEvents(), current.turn);
|
|
84
|
+
const previous = pending.get(id);
|
|
85
|
+
const confirmation = confirmsPending(human) && previous && previous.expiresAt > Date.now() && previous.turn < current.turn
|
|
86
|
+
&& previous.identity === identity && previous.taskId === target?.taskId && previous.scope === target?.scope && previous.text === args.task.trim();
|
|
87
|
+
if (!confirmation && !consentMatches(human, profile, target?.companionName)) {
|
|
88
|
+
if (pending.size >= 256 && !pending.has(id))
|
|
89
|
+
throw new Error('待确认申请过多,请稍后重试');
|
|
90
|
+
pending.set(id, { identity, ...(target ? { taskId: target.taskId, scope: target.scope } : {}), text: args.task.trim(), turn: current.turn, expiresAt: Date.now() + 10 * 60_000 });
|
|
91
|
+
return JSON.stringify({ granted: false, code: 'SSH_USER_CONSENT_REQUIRED', profileId: profile.id,
|
|
92
|
+
scope: `临时 SSH:${profile.name}(${profile.username}@${profile.host}:${profile.port});${target ? `执行伙伴:${target.companionName};看板任务:${target.title}(${target.taskId});` : '仅当前会话;'}任务:${args.task.trim()}。允许远程命令修改文件,不永久挂载。`,
|
|
93
|
+
instruction: '未授予权限。向用户完整展示上述范围;用户回复“确认临时访问”后,以完全相同的 target、task 和 taskId 重试。不需要弹窗,禁止自行伪造确认或改换目标。确认有效期 10 分钟。' });
|
|
94
|
+
}
|
|
62
95
|
if (turns.get(id) !== current || current.signal.aborted || exec.signal.aborted)
|
|
63
96
|
throw new Error('任务已结束,授权未生效。');
|
|
64
97
|
const latest = store.profile(profile.id);
|
|
65
98
|
if (!latest || fingerprint(latest) !== identity)
|
|
66
99
|
throw new Error('主机配置已改变,请重新确认授权。');
|
|
67
|
-
|
|
68
|
-
|
|
100
|
+
pending.delete(id);
|
|
101
|
+
if (target)
|
|
102
|
+
tasks.grant(target, profile, id);
|
|
103
|
+
else
|
|
104
|
+
current.grants.set(profile.id, identity);
|
|
105
|
+
return JSON.stringify({ granted: true, authorization: confirmation ? 'human-confirmed-request' : 'current-human-message', profileId: profile.id, name: profile.name, host: profile.host, ...(target ? { taskId: target.taskId, companion: target.companionName } : {}), expires: target ? 'one-task-execution-max-60-minutes' : 'current-agent-turn-end', tool: 'ssh_temporary_exec' });
|
|
69
106
|
},
|
|
70
107
|
})));
|
|
71
108
|
disposers.push(ctx.tools.register(defineTool({
|
|
72
109
|
name: 'ssh_temporary_exec',
|
|
73
|
-
description: 'Execute a command
|
|
110
|
+
description: 'Execute a command using temporary SSH access verified from a human message, or a task-bound grant injected by the partner runtime. Does not change permanent mounts. Use cwd for the working directory. Expired grants must be authorized again; never assume another session shares access.',
|
|
74
111
|
parameters: { profileId: { type: 'string', required: true }, command: { type: 'string', required: true }, cwd: { type: 'string' }, timeoutMs: { type: 'integer' } },
|
|
75
112
|
output,
|
|
76
113
|
isConcurrencySafe: () => false,
|
|
@@ -78,17 +115,18 @@ export function registerTemporaryAccess(ctx, store, connector) {
|
|
|
78
115
|
execute: async (args, exec) => {
|
|
79
116
|
const current = exec.agent ? turns.get(exec.agent.session.id) : undefined;
|
|
80
117
|
const profile = typeof args.profileId === 'string' ? store.profile(args.profileId) : undefined;
|
|
81
|
-
|
|
82
|
-
|
|
118
|
+
const taskSignal = exec.agent && profile ? tasks.signal(exec.agent.session.id, profile) : undefined;
|
|
119
|
+
if (!current || current.signal.aborted || exec.signal.aborted || !profile || (current.grants.get(profile.id) !== fingerprint(profile) && !taskSignal))
|
|
120
|
+
throw new Error('没有有效的本轮或本任务临时授权,请先通过 ssh_request_temporary_access 核验用户授意。');
|
|
83
121
|
if (typeof args.command !== 'string' || !args.command.trim() || args.command.length > 100000)
|
|
84
122
|
throw new Error('无效命令。');
|
|
85
123
|
const settings = store.settings(), timeout = args.timeoutMs ?? settings.defaultCommandTimeoutMs;
|
|
86
124
|
if (typeof timeout !== 'number' || !Number.isInteger(timeout) || timeout < 1000 || timeout > 300000)
|
|
87
125
|
throw new Error('timeoutMs 必须为 1000–300000。');
|
|
88
|
-
return JSON.stringify(await executeSshCommand(connector, profile.id, args.command, timeout, settings.maxOutputChars, AbortSignal.any([exec.signal, current.signal]), normalizeRemoteDirectory(args.cwd ?? '~')));
|
|
126
|
+
return JSON.stringify(await executeSshCommand(connector, profile.id, args.command, timeout, settings.maxOutputChars, AbortSignal.any([exec.signal, current.signal, ...(taskSignal ? [taskSignal] : [])]), normalizeRemoteDirectory(args.cwd ?? '~')));
|
|
89
127
|
},
|
|
90
128
|
})));
|
|
91
|
-
return () => { turns.clear(); for (const dispose of disposers.reverse())
|
|
129
|
+
return () => { turns.clear(); pending.clear(); tasks.clear(); for (const dispose of disposers.reverse())
|
|
92
130
|
dispose(); };
|
|
93
131
|
}
|
|
94
132
|
//# sourceMappingURL=temporary-access.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temporary-access.js","sourceRoot":"","sources":["../src/temporary-access.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"temporary-access.js","sourceRoot":"","sources":["../src/temporary-access.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SessionEvent } from '@deepseek-ai/dsh-session';
|
|
2
|
+
import type { SshProfile } from './domain.js';
|
|
3
|
+
/** Only human messages entered in this turn count; plugin notices and old chats do not. */
|
|
4
|
+
export declare function currentHumanText(events: readonly SessionEvent[], turn: number): string | undefined;
|
|
5
|
+
export declare function hasName(text: string, name: string): boolean;
|
|
6
|
+
/** Deliberately conservative. Ambiguity asks for a short human confirmation, not an LLM attestation. */
|
|
7
|
+
export declare function consentMatches(text: string | undefined, profile: SshProfile, recipient?: string): boolean;
|
|
8
|
+
export declare function confirmsPending(text: string | undefined): boolean;
|
|
9
|
+
//# sourceMappingURL=temporary-consent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporary-consent.d.ts","sourceRoot":"","sources":["../src/temporary-consent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYlG;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3D;AAED,wGAAwG;AACxG,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CASzG;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEjE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** Only human messages entered in this turn count; plugin notices and old chats do not. */
|
|
2
|
+
export function currentHumanText(events, turn) {
|
|
3
|
+
let start = -1;
|
|
4
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
5
|
+
const e = events[i];
|
|
6
|
+
if (e?.type === 'turn/start' && e.data.turn === turn) {
|
|
7
|
+
start = i;
|
|
8
|
+
break;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
if (start < 0)
|
|
12
|
+
return undefined;
|
|
13
|
+
const entered = events.slice(start + 1).filter(e => {
|
|
14
|
+
if (e.type !== 'user/message')
|
|
15
|
+
return false;
|
|
16
|
+
const source = e.data.source;
|
|
17
|
+
return source.kind !== 'runtime-context' && source.form !== 'recall';
|
|
18
|
+
});
|
|
19
|
+
const latest = entered.at(-1);
|
|
20
|
+
if (latest?.type !== 'user/message' || latest.data.source.kind !== 'user')
|
|
21
|
+
return undefined;
|
|
22
|
+
return latest.data.content.flatMap(block => block.type === 'text' ? [block.text] : []).join('\n').trim();
|
|
23
|
+
}
|
|
24
|
+
export function hasName(text, name) {
|
|
25
|
+
if (!name.trim())
|
|
26
|
+
return false;
|
|
27
|
+
const escaped = name.trim().replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
28
|
+
return new RegExp(`(?<![a-z0-9_.-])${escaped}(?![a-z0-9_.-])`, 'iu').test(text);
|
|
29
|
+
}
|
|
30
|
+
/** Deliberately conservative. Ambiguity asks for a short human confirmation, not an LLM attestation. */
|
|
31
|
+
export function consentMatches(text, profile, recipient) {
|
|
32
|
+
if (!text || text.length > 4000)
|
|
33
|
+
return false;
|
|
34
|
+
// Do not treat quotations, questions, conditional statements or prohibitions as consent.
|
|
35
|
+
if (/[??`<>“”「」"'\n]|(?:不|没|未|勿|禁止|拒绝|撤销|取消|别|如果|假如|假设|是否|能否|为什么|如何|怎么|他说|原文|例如|比如|解释|说明|翻译|讨论|示例|举例|告诉我|请问|会不会|据说|声称)|\b(?:not|never|don't|if|example|said|revoke|cancel)\b/iu.test(text))
|
|
36
|
+
return false;
|
|
37
|
+
if (!/^(?:(?:我(?:明确)?(?:授权|允许|同意|让你|要你))|(?:请|麻烦|你|让|帮我|帮忙|到|去|授权|允许|同意|确认|可以)|临时(?:访问|授权|使用))/u.test(text.trim()))
|
|
38
|
+
return false;
|
|
39
|
+
const host = [profile.name, profile.host, profile.id].some(name => hasName(text, name))
|
|
40
|
+
|| (/^(?:\d{1,3}\.){3}\d{1,3}$/.test(profile.host) && new RegExp(`(?:到|去|连接|访问|主机)\\s*${profile.host.split('.').at(-1)}(?![0-9])`, 'u').test(text));
|
|
41
|
+
if (!host || (recipient && !hasName(text, recipient)))
|
|
42
|
+
return false;
|
|
43
|
+
return /(?:授权|允许|同意|确认|可以|临时访问|临时使用|帮我|请|去|到).*(?:SSH|访问|连接|执行|检查|查看|看看|操作|排查|安装|部署|运行|下载|修复|配置|更新|重启)|(?:授权|允许|同意|确认).*临时|^临时(?:授权|访问|使用)/iu.test(text);
|
|
44
|
+
}
|
|
45
|
+
export function confirmsPending(text) {
|
|
46
|
+
return !!text && /^(?:确认|同意|允许)(?:本次|这次)?(?:SSH\s*)?临时(?:访问|授权)(?:[,, ](?:按上述范围|仅限本次任务))?[。.!!\s]*$/iu.test(text.trim());
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=temporary-consent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporary-consent.js","sourceRoot":"","sources":["../src/temporary-consent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { SshProfile } from './domain.js';
|
|
2
|
+
export interface TaskTarget {
|
|
3
|
+
taskId: string;
|
|
4
|
+
companionId: string;
|
|
5
|
+
companionName: string;
|
|
6
|
+
title: string;
|
|
7
|
+
scope: string;
|
|
8
|
+
valid(): boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface PartnerTaskResolver {
|
|
11
|
+
resolve(taskId: string, requesterSessionId: string): TaskTarget;
|
|
12
|
+
}
|
|
13
|
+
/** In-memory, one-execution leases. Never changes mounts or exposes credentials. */
|
|
14
|
+
export declare class TemporaryTaskAccess {
|
|
15
|
+
private readonly profile;
|
|
16
|
+
private readonly now;
|
|
17
|
+
private tickets;
|
|
18
|
+
constructor(profile: (id: string) => SshProfile | undefined, now?: () => number);
|
|
19
|
+
grant(target: TaskTarget, profile: SshProfile, owner: string): void;
|
|
20
|
+
bind(input: {
|
|
21
|
+
taskId: string;
|
|
22
|
+
companionId: string;
|
|
23
|
+
sessionId: string;
|
|
24
|
+
signal?: AbortSignal;
|
|
25
|
+
}): {
|
|
26
|
+
prompt: string;
|
|
27
|
+
dispose(): void;
|
|
28
|
+
};
|
|
29
|
+
has(sessionId: string, profile: SshProfile): boolean;
|
|
30
|
+
signal(sessionId: string, profile: SshProfile): AbortSignal | undefined;
|
|
31
|
+
revokeSession(sessionId: string, owner?: boolean): void;
|
|
32
|
+
clear(): void;
|
|
33
|
+
private remove;
|
|
34
|
+
private prune;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=temporary-task-access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporary-task-access.d.ts","sourceRoot":"","sources":["../src/temporary-task-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;IACxF,KAAK,IAAI,OAAO,CAAA;CACjB;AACD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,UAAU,CAAA;CAChE;AAGD,oFAAoF;AACpF,qBAAa,mBAAmB;IAElB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAA0C,OAAO,CAAC,QAAQ,CAAC,GAAG;IADlG,OAAO,CAAC,OAAO,CAA4B;gBACd,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,EAAmB,GAAG,eAAW;IAC7G,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAUnE,IAAI,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,IAAI,IAAI,CAAA;KAAE;IASlI,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO;IAGpD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS;IAIvE,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,IAAI;IAGrD,KAAK,IAAI,IAAI;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/** In-memory, one-execution leases. Never changes mounts or exposes credentials. */
|
|
2
|
+
export class TemporaryTaskAccess {
|
|
3
|
+
profile;
|
|
4
|
+
now;
|
|
5
|
+
tickets = new Map();
|
|
6
|
+
constructor(profile, now = Date.now) {
|
|
7
|
+
this.profile = profile;
|
|
8
|
+
this.now = now;
|
|
9
|
+
}
|
|
10
|
+
grant(target, profile, owner) {
|
|
11
|
+
this.prune();
|
|
12
|
+
const key = `${target.taskId}:${profile.id}`;
|
|
13
|
+
if (this.tickets.get(key)?.sessionId)
|
|
14
|
+
throw new Error('任务已经使用临时授权,请先结束当前执行');
|
|
15
|
+
if (this.tickets.size >= 256)
|
|
16
|
+
throw new Error('临时授权数量已达上限,请先结束已有任务');
|
|
17
|
+
this.remove(key);
|
|
18
|
+
const controller = new AbortController();
|
|
19
|
+
const timer = setTimeout(() => this.remove(key), 60 * 60_000);
|
|
20
|
+
timer.unref?.();
|
|
21
|
+
this.tickets.set(key, { target, profile, fingerprint: JSON.stringify(profile), owner, expiresAt: this.now() + 60 * 60_000, controller, timer });
|
|
22
|
+
}
|
|
23
|
+
bind(input) {
|
|
24
|
+
this.prune();
|
|
25
|
+
const selected = [...this.tickets.entries()].filter(([, t]) => t.target.taskId === input.taskId && t.target.companionId === input.companionId && !t.sessionId);
|
|
26
|
+
if (input.signal?.aborted)
|
|
27
|
+
return { prompt: '', dispose() { } };
|
|
28
|
+
for (const [, t] of selected)
|
|
29
|
+
t.sessionId = input.sessionId;
|
|
30
|
+
const dispose = () => { for (const [key, ticket] of selected)
|
|
31
|
+
if (this.tickets.get(key) === ticket)
|
|
32
|
+
this.remove(key); input.signal?.removeEventListener('abort', dispose); };
|
|
33
|
+
input.signal?.addEventListener('abort', dispose, { once: true });
|
|
34
|
+
return { prompt: selected.length ? '\n本次看板任务已取得用户临时 SSH 授权,仅本次执行有效;不要重新申请或永久挂载。使用 ssh_temporary_exec,主机:' + selected.map(([, t]) => `${t.profile.name}(profileId=${t.profile.id})`).join('、') : '', dispose };
|
|
35
|
+
}
|
|
36
|
+
has(sessionId, profile) {
|
|
37
|
+
return !!this.signal(sessionId, profile);
|
|
38
|
+
}
|
|
39
|
+
signal(sessionId, profile) {
|
|
40
|
+
this.prune();
|
|
41
|
+
return [...this.tickets.values()].find(t => t.sessionId === sessionId && t.profile.id === profile.id && t.fingerprint === JSON.stringify(profile))?.controller.signal;
|
|
42
|
+
}
|
|
43
|
+
revokeSession(sessionId, owner = false) {
|
|
44
|
+
for (const [key, t] of this.tickets)
|
|
45
|
+
if (t.sessionId === sessionId || (owner && t.owner === sessionId))
|
|
46
|
+
this.remove(key);
|
|
47
|
+
}
|
|
48
|
+
clear() { for (const key of this.tickets.keys())
|
|
49
|
+
this.remove(key); }
|
|
50
|
+
remove(key) { const t = this.tickets.get(key); if (t) {
|
|
51
|
+
clearTimeout(t.timer);
|
|
52
|
+
t.controller.abort();
|
|
53
|
+
this.tickets.delete(key);
|
|
54
|
+
} }
|
|
55
|
+
prune() {
|
|
56
|
+
for (const [key, t] of this.tickets)
|
|
57
|
+
if (t.expiresAt <= this.now() || !t.target.valid() || JSON.stringify(this.profile(t.profile.id)) !== t.fingerprint)
|
|
58
|
+
this.remove(key);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=temporary-task-access.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporary-task-access.js","sourceRoot":"","sources":["../src/temporary-task-access.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SftpFilePreview } from './sftp.js';
|
|
2
|
+
export declare const MAX_TEXT_PREVIEW_BYTES = 1048576;
|
|
3
|
+
export declare const MAX_MEDIA_PREVIEW_BYTES: number;
|
|
4
|
+
/** Decide before reading; unknown suffixes are sniffed within the text budget. */
|
|
5
|
+
export declare function previewWithoutReading(base: SftpFilePreview, limit?: number): SftpFilePreview | undefined;
|
|
6
|
+
export declare function textPreview(base: SftpFilePreview, bytes: Buffer, limit?: number): SftpFilePreview;
|
|
7
|
+
//# sourceMappingURL=text-preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-preview.d.ts","sourceRoot":"","sources":["../src/text-preview.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAEhD,eAAO,MAAM,sBAAsB,UAAY,CAAA;AAC/C,eAAO,MAAM,uBAAuB,QAAiB,CAAA;AAErD,kFAAkF;AAClF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,SAAyB,GAAG,eAAe,GAAG,SAAS,CAKxH;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAyB,GAAG,eAAe,CAYjH"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { markdownHash } from './markdown-file.js';
|
|
2
|
+
export const MAX_TEXT_PREVIEW_BYTES = 1_048_576;
|
|
3
|
+
export const MAX_MEDIA_PREVIEW_BYTES = 16 * 1_048_576;
|
|
4
|
+
/** Decide before reading; unknown suffixes are sniffed within the text budget. */
|
|
5
|
+
export function previewWithoutReading(base, limit = MAX_TEXT_PREVIEW_BYTES) {
|
|
6
|
+
const media = base.kind === 'image' || base.kind === 'pdf';
|
|
7
|
+
if (base.size > (media ? MAX_MEDIA_PREVIEW_BYTES : limit))
|
|
8
|
+
return { ...base, kind: 'binary', previewUnavailable: 'too-large' };
|
|
9
|
+
if (media || (base.kind === 'binary' && base.mimeType !== 'application/octet-stream'))
|
|
10
|
+
return base;
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
export function textPreview(base, bytes, limit = MAX_TEXT_PREVIEW_BYTES) {
|
|
14
|
+
if (bytes.length > limit || base.size > limit)
|
|
15
|
+
return { ...base, kind: 'binary', previewUnavailable: 'too-large' };
|
|
16
|
+
if (bytes.length !== base.size)
|
|
17
|
+
return { ...base, kind: 'binary', previewUnavailable: 'unreadable' };
|
|
18
|
+
// Strict decoding avoids presenting binary files as replacement characters.
|
|
19
|
+
// BOM-marked UTF-16 is readable but not editable as UTF-8 Markdown.
|
|
20
|
+
const utf16 = bytes[0] === 0xff && bytes[1] === 0xfe ? 'utf-16le' : bytes[0] === 0xfe && bytes[1] === 0xff ? 'utf-16be' : undefined;
|
|
21
|
+
try {
|
|
22
|
+
const text = new TextDecoder(utf16 ?? 'utf-8', { fatal: true, ignoreBOM: true }).decode(bytes);
|
|
23
|
+
if (/[\u0000-\u0008\u000b\u000e-\u001f\u007f]/u.test(text))
|
|
24
|
+
throw new Error('binary content');
|
|
25
|
+
return { ...base, kind: 'text', mimeType: base.kind === 'text' ? base.mimeType : 'text/plain', text, truncated: false,
|
|
26
|
+
...(utf16 ? {} : { contentHash: markdownHash(bytes) }) };
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return { ...base, kind: 'binary', previewUnavailable: 'unreadable' };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=text-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-preview.js","sourceRoot":"","sources":["../src/text-preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGjD,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAA;AAC/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,SAAS,CAAA;AAErD,kFAAkF;AAClF,MAAM,UAAU,qBAAqB,CAAC,IAAqB,EAAE,KAAK,GAAG,sBAAsB;IACzF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAA;IAC1D,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAA;IAC9H,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,0BAA0B,CAAC;QAAE,OAAO,IAAI,CAAA;IAClG,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAqB,EAAE,KAAa,EAAE,KAAK,GAAG,sBAAsB;IAC9F,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAA;IAClH,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,CAAA;IACpG,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;IACnI,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,IAAI,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC9F,IAAI,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QAC7F,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK;YACnH,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;IAC5D,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,CAAA;IAAC,CAAC;AAClF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lemoncat7/dsh-ssh",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.3",
|
|
4
4
|
"description": "Secure SSH, FTP/FTPS/SFTP file transfer, browser terminals, proxies, port forwarding, and session-scoped AI access for DeepSeek Harness",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|
|
@@ -32,6 +32,8 @@
|
|
|
32
32
|
"./package.json": "./package.json"
|
|
33
33
|
},
|
|
34
34
|
"files": [
|
|
35
|
+
"docs/releases/1.11.3.md",
|
|
36
|
+
"docs/releases/1.11.2.md",
|
|
35
37
|
"docs/releases/1.11.1.md",
|
|
36
38
|
"docs/releases/1.10.5.md",
|
|
37
39
|
"lib/**/*.js",
|