@deepseek-ai/dsh-webhook 0.1.6-alpha.2 → 0.1.7-alpha.2
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/lib/index.js +121 -50
- package/lib/types/session.js +111 -46
- package/package.json +25 -25
package/lib/index.js
CHANGED
|
@@ -6,6 +6,64 @@ import { isAbsolute } from "node:path";
|
|
|
6
6
|
import { brandString } from "@deepseek-ai/dsh-brand";
|
|
7
7
|
//#region lib/types/session.js
|
|
8
8
|
/** Workspace-backed Session creation for one settled webhook rule result. */
|
|
9
|
+
var __addDisposableResource = function(env, value, async) {
|
|
10
|
+
if (value !== null && value !== void 0) {
|
|
11
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
12
|
+
var dispose, inner;
|
|
13
|
+
if (async) {
|
|
14
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
15
|
+
dispose = value[Symbol.asyncDispose];
|
|
16
|
+
}
|
|
17
|
+
if (dispose === void 0) {
|
|
18
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
19
|
+
dispose = value[Symbol.dispose];
|
|
20
|
+
if (async) inner = dispose;
|
|
21
|
+
}
|
|
22
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
23
|
+
if (inner) dispose = function() {
|
|
24
|
+
try {
|
|
25
|
+
inner.call(this);
|
|
26
|
+
} catch (e) {
|
|
27
|
+
return Promise.reject(e);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
env.stack.push({
|
|
31
|
+
value,
|
|
32
|
+
dispose,
|
|
33
|
+
async
|
|
34
|
+
});
|
|
35
|
+
} else if (async) env.stack.push({ async: true });
|
|
36
|
+
return value;
|
|
37
|
+
};
|
|
38
|
+
var __disposeResources = (function(SuppressedError) {
|
|
39
|
+
return function(env) {
|
|
40
|
+
function fail(e) {
|
|
41
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
42
|
+
env.hasError = true;
|
|
43
|
+
}
|
|
44
|
+
var r, s = 0;
|
|
45
|
+
function next() {
|
|
46
|
+
while (r = env.stack.pop()) try {
|
|
47
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
48
|
+
if (r.dispose) {
|
|
49
|
+
var result = r.dispose.call(r.value);
|
|
50
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
|
|
51
|
+
fail(e);
|
|
52
|
+
return next();
|
|
53
|
+
});
|
|
54
|
+
} else s |= 1;
|
|
55
|
+
} catch (e) {
|
|
56
|
+
fail(e);
|
|
57
|
+
}
|
|
58
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
59
|
+
if (env.hasError) throw env.error;
|
|
60
|
+
}
|
|
61
|
+
return next();
|
|
62
|
+
};
|
|
63
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
|
|
64
|
+
var e = new Error(message);
|
|
65
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
66
|
+
});
|
|
9
67
|
/** Require one non-empty string field from an untyped rule result. */
|
|
10
68
|
function requiredString(record, field) {
|
|
11
69
|
const value = record[field];
|
|
@@ -88,62 +146,75 @@ function installInitialModelSelection(agentCtx, selection) {
|
|
|
88
146
|
* @param signal - registration lifetime cancellation through publication.
|
|
89
147
|
*/
|
|
90
148
|
async function createWebhookSession(ctx, delivery, ruleId, request, signal) {
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const workspace = await ctx.workspaceRegistry.create(resolved.workspacePath);
|
|
97
|
-
signal.throwIfAborted();
|
|
98
|
-
const sessionId = brandString(`webhook-${randomUUID()}`);
|
|
99
|
-
const handle = await ctx.agents.create({
|
|
100
|
-
sessionId,
|
|
101
|
-
signal,
|
|
102
|
-
meta: {
|
|
103
|
-
cwd: workspace.path,
|
|
104
|
-
agentPreset: preset.id
|
|
105
|
-
},
|
|
106
|
-
agentOptions: resolved.agentOptions,
|
|
107
|
-
setup: async (agentCtx) => {
|
|
108
|
-
await ctx.agentPresets.mount(agentCtx, preset.id);
|
|
109
|
-
installInitialModelSelection(agentCtx, resolved.modelSelection);
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
let attached = false;
|
|
149
|
+
const env_1 = {
|
|
150
|
+
stack: [],
|
|
151
|
+
error: void 0,
|
|
152
|
+
hasError: false
|
|
153
|
+
};
|
|
113
154
|
try {
|
|
155
|
+
const resolved = resolveRequest(ctx, request);
|
|
156
|
+
ctx.permissionPresets.resolve(resolved.permissionPreset);
|
|
157
|
+
const preset = await ctx.agentPresets.resolve(resolved.agentPreset);
|
|
158
|
+
__addDisposableResource(env_1, await ctx.agentPresets.acquireScope(preset.id), true);
|
|
114
159
|
signal.throwIfAborted();
|
|
115
|
-
await
|
|
116
|
-
attached = true;
|
|
160
|
+
const workspace = await ctx.workspaceRegistry.create(resolved.workspacePath);
|
|
117
161
|
signal.throwIfAborted();
|
|
118
|
-
|
|
119
|
-
ctx.
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
ruleId,
|
|
131
|
-
form: "notice",
|
|
132
|
-
summary: boundContextSummary(`${delivery.kind} webhook handled by ${ruleId}`)
|
|
162
|
+
const sessionId = brandString(`webhook-${randomUUID()}`);
|
|
163
|
+
const handle = await ctx.agents.create({
|
|
164
|
+
sessionId,
|
|
165
|
+
signal,
|
|
166
|
+
meta: {
|
|
167
|
+
cwd: workspace.path,
|
|
168
|
+
agentPreset: preset.id
|
|
169
|
+
},
|
|
170
|
+
agentOptions: resolved.agentOptions,
|
|
171
|
+
setup: async (agentCtx) => {
|
|
172
|
+
await ctx.agentPresets.mount(agentCtx, preset.id);
|
|
173
|
+
installInitialModelSelection(agentCtx, resolved.modelSelection);
|
|
133
174
|
}
|
|
134
|
-
})
|
|
135
|
-
|
|
136
|
-
if (attached) try {
|
|
137
|
-
await workspace.detachSession(sessionId);
|
|
138
|
-
} catch (rollbackError) {
|
|
139
|
-
reportRollbackFailure(ctx, `Workspace detach for Session "${sessionId}"`, rollbackError);
|
|
140
|
-
}
|
|
175
|
+
});
|
|
176
|
+
let attached = false;
|
|
141
177
|
try {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
178
|
+
signal.throwIfAborted();
|
|
179
|
+
await workspace.attachSession(sessionId);
|
|
180
|
+
attached = true;
|
|
181
|
+
signal.throwIfAborted();
|
|
182
|
+
ctx.permissionPresets.set(handle.agent.session, resolved.permissionPreset);
|
|
183
|
+
ctx.sessionTitle.rename(handle.agent.session, resolved.title);
|
|
184
|
+
handle.agent.followup(createUserMessage({
|
|
185
|
+
content: [{
|
|
186
|
+
type: "text",
|
|
187
|
+
text: resolved.prompt
|
|
188
|
+
}],
|
|
189
|
+
source: {
|
|
190
|
+
kind: "webhook",
|
|
191
|
+
provider: delivery.kind,
|
|
192
|
+
source: delivery.source,
|
|
193
|
+
deliveryId: delivery.deliveryId,
|
|
194
|
+
ruleId,
|
|
195
|
+
form: "notice",
|
|
196
|
+
summary: boundContextSummary(`${delivery.kind} webhook handled by ${ruleId}`)
|
|
197
|
+
}
|
|
198
|
+
}));
|
|
199
|
+
} catch (error) {
|
|
200
|
+
if (attached) try {
|
|
201
|
+
await workspace.detachSession(sessionId);
|
|
202
|
+
} catch (rollbackError) {
|
|
203
|
+
reportRollbackFailure(ctx, `Workspace detach for Session "${sessionId}"`, rollbackError);
|
|
204
|
+
}
|
|
205
|
+
try {
|
|
206
|
+
await handle.dispose();
|
|
207
|
+
} catch (rollbackError) {
|
|
208
|
+
reportRollbackFailure(ctx, `Agent disposal for Session "${sessionId}"`, rollbackError);
|
|
209
|
+
}
|
|
210
|
+
throw error;
|
|
145
211
|
}
|
|
146
|
-
|
|
212
|
+
} catch (e_1) {
|
|
213
|
+
env_1.error = e_1;
|
|
214
|
+
env_1.hasError = true;
|
|
215
|
+
} finally {
|
|
216
|
+
const result_1 = __disposeResources(env_1);
|
|
217
|
+
if (result_1) await result_1;
|
|
147
218
|
}
|
|
148
219
|
}
|
|
149
220
|
//#endregion
|
package/lib/types/session.js
CHANGED
|
@@ -1,4 +1,56 @@
|
|
|
1
1
|
/** Workspace-backed Session creation for one settled webhook rule result. */
|
|
2
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
3
|
+
if (value !== null && value !== void 0) {
|
|
4
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
5
|
+
var dispose, inner;
|
|
6
|
+
if (async) {
|
|
7
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
8
|
+
dispose = value[Symbol.asyncDispose];
|
|
9
|
+
}
|
|
10
|
+
if (dispose === void 0) {
|
|
11
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
12
|
+
dispose = value[Symbol.dispose];
|
|
13
|
+
if (async) inner = dispose;
|
|
14
|
+
}
|
|
15
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
16
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
17
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
18
|
+
}
|
|
19
|
+
else if (async) {
|
|
20
|
+
env.stack.push({ async: true });
|
|
21
|
+
}
|
|
22
|
+
return value;
|
|
23
|
+
};
|
|
24
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
25
|
+
return function (env) {
|
|
26
|
+
function fail(e) {
|
|
27
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
28
|
+
env.hasError = true;
|
|
29
|
+
}
|
|
30
|
+
var r, s = 0;
|
|
31
|
+
function next() {
|
|
32
|
+
while (r = env.stack.pop()) {
|
|
33
|
+
try {
|
|
34
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
35
|
+
if (r.dispose) {
|
|
36
|
+
var result = r.dispose.call(r.value);
|
|
37
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
38
|
+
}
|
|
39
|
+
else s |= 1;
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
fail(e);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
46
|
+
if (env.hasError) throw env.error;
|
|
47
|
+
}
|
|
48
|
+
return next();
|
|
49
|
+
};
|
|
50
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
51
|
+
var e = new Error(message);
|
|
52
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
53
|
+
});
|
|
2
54
|
import { randomUUID } from 'node:crypto';
|
|
3
55
|
import { isAbsolute } from 'node:path';
|
|
4
56
|
import { brandString } from '@deepseek-ai/dsh-brand';
|
|
@@ -86,61 +138,74 @@ function installInitialModelSelection(agentCtx, selection) {
|
|
|
86
138
|
* @param signal - registration lifetime cancellation through publication.
|
|
87
139
|
*/
|
|
88
140
|
export async function createWebhookSession(ctx, delivery, ruleId, request, signal) {
|
|
89
|
-
const
|
|
90
|
-
ctx.permissionPresets.resolve(resolved.permissionPreset);
|
|
91
|
-
const preset = await ctx.agentPresets.resolve(resolved.agentPreset);
|
|
92
|
-
await ctx.agentPresets.standingKeyFor(preset.id);
|
|
93
|
-
signal.throwIfAborted();
|
|
94
|
-
const workspace = await ctx.workspaceRegistry.create(resolved.workspacePath);
|
|
95
|
-
signal.throwIfAborted();
|
|
96
|
-
const sessionId = brandString(`webhook-${randomUUID()}`);
|
|
97
|
-
const handle = await ctx.agents.create({
|
|
98
|
-
sessionId,
|
|
99
|
-
signal,
|
|
100
|
-
meta: { cwd: workspace.path, agentPreset: preset.id },
|
|
101
|
-
agentOptions: resolved.agentOptions,
|
|
102
|
-
setup: async (agentCtx) => {
|
|
103
|
-
await ctx.agentPresets.mount(agentCtx, preset.id);
|
|
104
|
-
installInitialModelSelection(agentCtx, resolved.modelSelection);
|
|
105
|
-
},
|
|
106
|
-
});
|
|
107
|
-
let attached = false;
|
|
141
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
108
142
|
try {
|
|
143
|
+
const resolved = resolveRequest(ctx, request);
|
|
144
|
+
ctx.permissionPresets.resolve(resolved.permissionPreset);
|
|
145
|
+
const preset = await ctx.agentPresets.resolve(resolved.agentPreset);
|
|
146
|
+
const presetScope = __addDisposableResource(env_1, await ctx.agentPresets.acquireScope(preset.id), true);
|
|
147
|
+
void presetScope;
|
|
109
148
|
signal.throwIfAborted();
|
|
110
|
-
await
|
|
111
|
-
attached = true;
|
|
149
|
+
const workspace = await ctx.workspaceRegistry.create(resolved.workspacePath);
|
|
112
150
|
signal.throwIfAborted();
|
|
113
|
-
|
|
114
|
-
ctx.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
ruleId,
|
|
123
|
-
form: 'notice',
|
|
124
|
-
summary: boundContextSummary(`${delivery.kind} webhook handled by ${ruleId}`),
|
|
151
|
+
const sessionId = brandString(`webhook-${randomUUID()}`);
|
|
152
|
+
const handle = await ctx.agents.create({
|
|
153
|
+
sessionId,
|
|
154
|
+
signal,
|
|
155
|
+
meta: { cwd: workspace.path, agentPreset: preset.id },
|
|
156
|
+
agentOptions: resolved.agentOptions,
|
|
157
|
+
setup: async (agentCtx) => {
|
|
158
|
+
await ctx.agentPresets.mount(agentCtx, preset.id);
|
|
159
|
+
installInitialModelSelection(agentCtx, resolved.modelSelection);
|
|
125
160
|
},
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
161
|
+
});
|
|
162
|
+
let attached = false;
|
|
163
|
+
try {
|
|
164
|
+
signal.throwIfAborted();
|
|
165
|
+
await workspace.attachSession(sessionId);
|
|
166
|
+
attached = true;
|
|
167
|
+
signal.throwIfAborted();
|
|
168
|
+
ctx.permissionPresets.set(handle.agent.session, resolved.permissionPreset);
|
|
169
|
+
ctx.sessionTitle.rename(handle.agent.session, resolved.title);
|
|
170
|
+
handle.agent.followup(createUserMessage({
|
|
171
|
+
content: [{ type: 'text', text: resolved.prompt }],
|
|
172
|
+
source: {
|
|
173
|
+
kind: 'webhook',
|
|
174
|
+
provider: delivery.kind,
|
|
175
|
+
source: delivery.source,
|
|
176
|
+
deliveryId: delivery.deliveryId,
|
|
177
|
+
ruleId,
|
|
178
|
+
form: 'notice',
|
|
179
|
+
summary: boundContextSummary(`${delivery.kind} webhook handled by ${ruleId}`),
|
|
180
|
+
},
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
if (attached) {
|
|
185
|
+
try {
|
|
186
|
+
await workspace.detachSession(sessionId);
|
|
187
|
+
}
|
|
188
|
+
catch (rollbackError) {
|
|
189
|
+
reportRollbackFailure(ctx, `Workspace detach for Session "${sessionId}"`, rollbackError);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
130
192
|
try {
|
|
131
|
-
await
|
|
193
|
+
await handle.dispose();
|
|
132
194
|
}
|
|
133
195
|
catch (rollbackError) {
|
|
134
|
-
reportRollbackFailure(ctx, `
|
|
196
|
+
reportRollbackFailure(ctx, `Agent disposal for Session "${sessionId}"`, rollbackError);
|
|
135
197
|
}
|
|
198
|
+
throw error;
|
|
136
199
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
200
|
+
}
|
|
201
|
+
catch (e_1) {
|
|
202
|
+
env_1.error = e_1;
|
|
203
|
+
env_1.hasError = true;
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
const result_1 = __disposeResources(env_1);
|
|
207
|
+
if (result_1)
|
|
208
|
+
await result_1;
|
|
144
209
|
}
|
|
145
210
|
}
|
|
146
211
|
//# sourceMappingURL=session.js.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepseek-ai/dsh-webhook",
|
|
3
3
|
"description": "Fire-and-forget webhook rule runtime that creates Workspace-backed DeepSeek Harness Sessions",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.7-alpha.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -37,33 +37,33 @@
|
|
|
37
37
|
],
|
|
38
38
|
"license": "MIT",
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@deepseek-ai/cordis": "
|
|
41
|
-
"@deepseek-ai/dsh-agent": "
|
|
42
|
-
"@deepseek-ai/dsh-agent-default-model": "
|
|
43
|
-
"@deepseek-ai/dsh-
|
|
44
|
-
"@deepseek-ai/dsh-
|
|
45
|
-
"@deepseek-ai/dsh-llm": "
|
|
46
|
-
"@deepseek-ai/dsh-permission-presets": "
|
|
47
|
-
"@deepseek-ai/dsh-session": "
|
|
48
|
-
"@deepseek-ai/dsh-
|
|
49
|
-
"@deepseek-ai/dsh-
|
|
40
|
+
"@deepseek-ai/cordis": "~4.0.4",
|
|
41
|
+
"@deepseek-ai/dsh-agent": "0.1.7-alpha.2",
|
|
42
|
+
"@deepseek-ai/dsh-agent-default-model": "0.1.7-alpha.2",
|
|
43
|
+
"@deepseek-ai/dsh-invariants": "0.1.7-alpha.2",
|
|
44
|
+
"@deepseek-ai/dsh-agent-preset-registry": "0.1.7-alpha.2",
|
|
45
|
+
"@deepseek-ai/dsh-llm": "0.1.7-alpha.2",
|
|
46
|
+
"@deepseek-ai/dsh-permission-presets": "0.1.7-alpha.2",
|
|
47
|
+
"@deepseek-ai/dsh-session": "0.1.7-alpha.2",
|
|
48
|
+
"@deepseek-ai/dsh-workspace": "0.1.7-alpha.2",
|
|
49
|
+
"@deepseek-ai/dsh-session-title": "0.1.7-alpha.2"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@deepseek-ai/cordis": "
|
|
53
|
-
"@deepseek-ai/cordis-plugin-include": "
|
|
54
|
-
"@deepseek-ai/cordis-plugin-loader": "
|
|
55
|
-
"@deepseek-ai/dsh-agent": "
|
|
56
|
-
"@deepseek-ai/dsh-agent-
|
|
57
|
-
"@deepseek-ai/dsh-
|
|
58
|
-
"@deepseek-ai/dsh-
|
|
59
|
-
"@deepseek-ai/dsh-
|
|
60
|
-
"@deepseek-ai/dsh-
|
|
61
|
-
"@deepseek-ai/dsh-session": "
|
|
62
|
-
"@deepseek-ai/dsh-
|
|
63
|
-
"@deepseek-ai/dsh-
|
|
52
|
+
"@deepseek-ai/cordis": "~4.0.4",
|
|
53
|
+
"@deepseek-ai/cordis-plugin-include": "~1.0.9",
|
|
54
|
+
"@deepseek-ai/cordis-plugin-loader": "~1.0.5",
|
|
55
|
+
"@deepseek-ai/dsh-agent": "0.1.7-alpha.2",
|
|
56
|
+
"@deepseek-ai/dsh-agent-preset-registry": "0.1.7-alpha.2",
|
|
57
|
+
"@deepseek-ai/dsh-llm": "0.1.7-alpha.2",
|
|
58
|
+
"@deepseek-ai/dsh-agent-default-model": "0.1.7-alpha.2",
|
|
59
|
+
"@deepseek-ai/dsh-permission-presets": "0.1.7-alpha.2",
|
|
60
|
+
"@deepseek-ai/dsh-session": "0.1.7-alpha.2",
|
|
61
|
+
"@deepseek-ai/dsh-session-title": "0.1.7-alpha.2",
|
|
62
|
+
"@deepseek-ai/dsh-workspace": "0.1.7-alpha.2",
|
|
63
|
+
"@deepseek-ai/dsh-invariants": "0.1.7-alpha.2"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@deepseek-ai/dsh-util-values": "
|
|
67
|
-
"@deepseek-ai/dsh-brand": "
|
|
66
|
+
"@deepseek-ai/dsh-util-values": "0.1.7-alpha.2",
|
|
67
|
+
"@deepseek-ai/dsh-brand": "0.1.7-alpha.2"
|
|
68
68
|
}
|
|
69
69
|
}
|