@lemoncat7/dsh-ssh 1.11.2 → 1.11.4
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/dsh-021-compatibility.md +9 -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.11.4.md +24 -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/temporary-access.md +13 -2
- package/docs/usage.md +215 -0
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +229 -139
- package/lib/client.js.map +4 -4
- 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/package.json +37 -34
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temporary-access.d.ts","sourceRoot":"","sources":["../src/temporary-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"temporary-access.d.ts","sourceRoot":"","sources":["../src/temporary-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAMlD,wFAAwF;AACxF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAQvF;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,GAAG,MAAM,IAAI,CAyF1G"}
|
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":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAInD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAEzD,wFAAwF;AACxF,MAAM,UAAU,oBAAoB,CAAC,QAAsB,EAAE,MAAc;IACzE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACvC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG;WAClJ,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IACzH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IACxE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IACrE,OAAO,OAAO,CAAC,CAAC,CAAE,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAY,EAAE,KAAe,EAAE,SAAuB;IAC5F,gFAAgF;IAChF,MAAM,KAAK,GAAG,IAAI,GAAG,EAA8E,CAAA;IACnG,MAAM,WAAW,GAAG,CAAC,OAAmB,EAAU,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAC5E,MAAM,SAAS,GAAsB;QACnC,GAAG,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE;YAC/D,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAA;YAC3B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,KAAK,IAAI;gBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;YACpF,OAAO,IAAI,EAAE,CAAA;QACf,CAAC,CAAC;QACF,GAAG,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YACzC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;gBAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACzD,CAAC,CAAC;QACF,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,MAAM,KAAK,MAAM;YAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC;QACxG,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC;QACxE,GAAG,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC;KAC5E,CAAA;IACD,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,EAAE,MAAM,EAAE,CAAC,KAAc,EAAE,KAAc,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;IACpJ,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3C,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,+dAA+d;QAC5e,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,0CAA0C,EAAE,EAAE;QAC7J,MAAM;QACN,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK;QAC9B,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;YAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACzD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;YAC1F,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;YACvJ,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YACnE,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;YACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAgC,CAAA;YACnE,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;YACrD,MAAM,MAAM,GAAG,YAAY,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,0DAA0D,CAAA;YAC9K,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAA;YACtK,IAAI,MAAM,KAAK,cAAc;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;YACpE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;YAC/G,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACxC,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;YACpF,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;YACxC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAA;QACzJ,CAAC;KACF,CAAC,CAAC,CAAC,CAAA;IACJ,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3C,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,2OAA2O;QACxP,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;QACnK,MAAM;QACN,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK;QAC9B,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAChF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YACzE,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC9F,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;YAC9K,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;YACtH,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,uBAAuB,CAAA;YAC/F,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,IAAI,IAAI,OAAO,GAAG,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;YAClJ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,wBAAwB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;QAClN,CAAC;KACF,CAAC,CAAC,CAAC,CAAA;IACJ,OAAO,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,CAAA,CAAC,CAAC,CAAA;AACtF,CAAC"}
|
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lemoncat7/dsh-ssh",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.4",
|
|
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,7 @@
|
|
|
32
32
|
"./package.json": "./package.json"
|
|
33
33
|
},
|
|
34
34
|
"files": [
|
|
35
|
+
"docs/releases/1.11.3.md",
|
|
35
36
|
"docs/releases/1.11.2.md",
|
|
36
37
|
"docs/releases/1.11.1.md",
|
|
37
38
|
"docs/releases/1.10.5.md",
|
|
@@ -43,7 +44,9 @@
|
|
|
43
44
|
"ARCHITECTURE.md",
|
|
44
45
|
"docs/**/*.md",
|
|
45
46
|
"LICENSE",
|
|
46
|
-
"docs/releases/1.10.4.md"
|
|
47
|
+
"docs/releases/1.10.4.md",
|
|
48
|
+
"docs/dsh-021-compatibility.md",
|
|
49
|
+
"docs/releases/1.11.4.md"
|
|
47
50
|
],
|
|
48
51
|
"dsh": {
|
|
49
52
|
"bundle": {
|
|
@@ -65,7 +68,8 @@
|
|
|
65
68
|
}
|
|
66
69
|
},
|
|
67
70
|
"engines": {
|
|
68
|
-
"node": "^22.19.0 || >=24.0.0"
|
|
71
|
+
"node": "^22.19.0 || >=24.0.0",
|
|
72
|
+
"dsh": "^0.2.1-rc.2"
|
|
69
73
|
},
|
|
70
74
|
"scripts": {
|
|
71
75
|
"clean": "node -e \"require('node:fs').rmSync('lib', { recursive: true, force: true })\"",
|
|
@@ -75,7 +79,7 @@
|
|
|
75
79
|
"pack:check": "npm pack --dry-run"
|
|
76
80
|
},
|
|
77
81
|
"dependencies": {
|
|
78
|
-
"@deepseek-ai/schemastery": "~3.18.
|
|
82
|
+
"@deepseek-ai/schemastery": "~3.18.5",
|
|
79
83
|
"@gsap/react": "^2.1.2",
|
|
80
84
|
"basic-ftp": "6.2.1",
|
|
81
85
|
"gsap": "^3.15.0",
|
|
@@ -86,34 +90,33 @@
|
|
|
86
90
|
"undici": "^6.28.0"
|
|
87
91
|
},
|
|
88
92
|
"peerDependencies": {
|
|
89
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
90
|
-
"@deepseek-ai/dsh-agent": "^0.2.
|
|
91
|
-
"@deepseek-ai/dsh-credentials": "^0.2.
|
|
92
|
-
"@deepseek-ai/dsh-system-prompt": "^0.2.
|
|
93
|
-
"@deepseek-ai/dsh-tools": "^0.2.
|
|
93
|
+
"@deepseek-ai/cordis": "^4.0.5",
|
|
94
|
+
"@deepseek-ai/dsh-agent": "^0.2.1-rc.2",
|
|
95
|
+
"@deepseek-ai/dsh-credentials": "^0.2.1-rc.2",
|
|
96
|
+
"@deepseek-ai/dsh-system-prompt": "^0.2.1-rc.2",
|
|
97
|
+
"@deepseek-ai/dsh-tools": "^0.2.1-rc.2"
|
|
94
98
|
},
|
|
95
99
|
"devDependencies": {
|
|
96
|
-
"@deepseek-ai/cordis": "~4.0.
|
|
97
|
-
"@deepseek-ai/dsh-agent": "0.2.
|
|
98
|
-
"@deepseek-ai/dsh-api-session-controller": "0.2.
|
|
99
|
-
"@deepseek-ai/dsh-api-workspace-controller": "0.2.
|
|
100
|
-
"@deepseek-ai/dsh-client-ui-conversation": "0.2.
|
|
101
|
-
"@deepseek-ai/dsh-client-ui-layout": "0.2.
|
|
102
|
-
"@deepseek-ai/dsh-client-ui-primitives": "0.2.
|
|
103
|
-
"@deepseek-ai/dsh-client-ui-renderer": "0.2.
|
|
104
|
-
"@deepseek-ai/dsh-client-ui-session": "0.2.
|
|
105
|
-
"@deepseek-ai/dsh-client-ui-sidebar": "0.2.
|
|
106
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.2.
|
|
107
|
-
"@deepseek-ai/dsh-client-ui-theme": "0.2.
|
|
108
|
-
"@deepseek-ai/dsh-credentials": "0.2.
|
|
109
|
-
"@deepseek-ai/dsh-
|
|
110
|
-
"@deepseek-ai/dsh-
|
|
111
|
-
"@deepseek-ai/dsh-
|
|
112
|
-
"@deepseek-ai/dsh-
|
|
113
|
-
"@deepseek-ai/dsh-
|
|
114
|
-
"@deepseek-ai/dsh-
|
|
115
|
-
"@deepseek-ai/dsh-
|
|
116
|
-
"@deepseek-ai/dsh-user-approval": "0.2.0-rc.2",
|
|
100
|
+
"@deepseek-ai/cordis": "~4.0.5",
|
|
101
|
+
"@deepseek-ai/dsh-agent": "0.2.1-rc.2",
|
|
102
|
+
"@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.2",
|
|
103
|
+
"@deepseek-ai/dsh-api-workspace-controller": "0.2.1-rc.2",
|
|
104
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.2.1-rc.2",
|
|
105
|
+
"@deepseek-ai/dsh-client-ui-layout": "0.2.1-rc.2",
|
|
106
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.2",
|
|
107
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.2",
|
|
108
|
+
"@deepseek-ai/dsh-client-ui-session": "0.2.1-rc.2",
|
|
109
|
+
"@deepseek-ai/dsh-client-ui-sidebar": "0.2.1-rc.2",
|
|
110
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.2",
|
|
111
|
+
"@deepseek-ai/dsh-client-ui-theme": "0.2.1-rc.2",
|
|
112
|
+
"@deepseek-ai/dsh-credentials": "0.2.1-rc.2",
|
|
113
|
+
"@deepseek-ai/dsh-llm": "0.2.1-rc.2",
|
|
114
|
+
"@deepseek-ai/dsh-scope": "0.2.1-rc.2",
|
|
115
|
+
"@deepseek-ai/dsh-session": "0.2.1-rc.2",
|
|
116
|
+
"@deepseek-ai/dsh-system-prompt": "0.2.1-rc.2",
|
|
117
|
+
"@deepseek-ai/dsh-terminal": "0.2.1-rc.2",
|
|
118
|
+
"@deepseek-ai/dsh-tools": "0.2.1-rc.2",
|
|
119
|
+
"@deepseek-ai/dsh-user-approval": "0.2.1-rc.2",
|
|
117
120
|
"@tiptap/core": "^3.30.5",
|
|
118
121
|
"@tiptap/extension-image": "^3.30.5",
|
|
119
122
|
"@tiptap/extension-table": "^3.30.5",
|
|
@@ -130,10 +133,10 @@
|
|
|
130
133
|
"esbuild": "^0.25.0",
|
|
131
134
|
"react": "18.3.1",
|
|
132
135
|
"typescript": "^5.9.3",
|
|
133
|
-
"@deepseek-ai/dsh-client-ui-workspace": "0.2.
|
|
134
|
-
"@deepseek-ai/dsh-sandbox": "0.2.
|
|
135
|
-
"@deepseek-ai/dsh-sandbox-policy": "0.2.
|
|
136
|
-
"@deepseek-ai/dsh-ptc-runtime": "0.2.
|
|
136
|
+
"@deepseek-ai/dsh-client-ui-workspace": "0.2.1-rc.2",
|
|
137
|
+
"@deepseek-ai/dsh-sandbox": "0.2.1-rc.2",
|
|
138
|
+
"@deepseek-ai/dsh-sandbox-policy": "0.2.1-rc.2",
|
|
139
|
+
"@deepseek-ai/dsh-ptc-runtime": "0.2.1-rc.2"
|
|
137
140
|
},
|
|
138
141
|
"publishConfig": {
|
|
139
142
|
"access": "public"
|