@zenalexa/unicli 0.216.2 → 1.0.0
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/AGENTS.md +1 -1
- package/README.md +13 -5
- package/README.zh-CN.md +12 -5
- package/dist/adapters/_electron/desktop-shared.d.ts.map +1 -1
- package/dist/adapters/_electron/desktop-shared.js +13 -0
- package/dist/adapters/_electron/desktop-shared.js.map +1 -1
- package/dist/adapters/_electron/shared.d.ts +1 -0
- package/dist/adapters/_electron/shared.d.ts.map +1 -1
- package/dist/adapters/_electron/shared.js +49 -2
- package/dist/adapters/_electron/shared.js.map +1 -1
- package/dist/adapters/uiverse/components.js +2 -2
- package/dist/adapters/uiverse/components.js.map +1 -1
- package/dist/browser/bridge.d.ts +3 -1
- package/dist/browser/bridge.d.ts.map +1 -1
- package/dist/browser/bridge.js +47 -23
- package/dist/browser/bridge.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/browser-operator-runtime.d.ts.map +1 -1
- package/dist/commands/browser-operator-runtime.js +4 -2
- package/dist/commands/browser-operator-runtime.js.map +1 -1
- package/dist/commands/browser-operator.d.ts.map +1 -1
- package/dist/commands/browser-operator.js +110 -38
- package/dist/commands/browser-operator.js.map +1 -1
- package/dist/commands/describe.d.ts.map +1 -1
- package/dist/commands/describe.js +20 -1
- package/dist/commands/describe.js.map +1 -1
- package/dist/commands/dispatch.d.ts +3 -0
- package/dist/commands/dispatch.d.ts.map +1 -1
- package/dist/commands/dispatch.js +70 -4
- package/dist/commands/dispatch.js.map +1 -1
- package/dist/core/schema-v2.d.ts +2 -2
- package/dist/discovery/loader.d.ts.map +1 -1
- package/dist/discovery/loader.js +2 -0
- package/dist/discovery/loader.js.map +1 -1
- package/dist/engine/browser/action-evidence.d.ts +28 -0
- package/dist/engine/browser/action-evidence.d.ts.map +1 -0
- package/dist/engine/browser/action-evidence.js +320 -0
- package/dist/engine/browser/action-evidence.js.map +1 -0
- package/dist/engine/browser/evidence.d.ts +63 -0
- package/dist/engine/browser/evidence.d.ts.map +1 -0
- package/dist/engine/browser/evidence.js +301 -0
- package/dist/engine/browser/evidence.js.map +1 -0
- package/dist/engine/capability-policy.d.ts +39 -0
- package/dist/engine/capability-policy.d.ts.map +1 -0
- package/dist/engine/capability-policy.js +195 -0
- package/dist/engine/capability-policy.js.map +1 -0
- package/dist/engine/executor.d.ts +3 -3
- package/dist/engine/executor.d.ts.map +1 -1
- package/dist/engine/executor.js.map +1 -1
- package/dist/engine/kernel/execute.d.ts +4 -1
- package/dist/engine/kernel/execute.d.ts.map +1 -1
- package/dist/engine/kernel/execute.js +92 -10
- package/dist/engine/kernel/execute.js.map +1 -1
- package/dist/engine/kernel/types.d.ts +2 -0
- package/dist/engine/kernel/types.d.ts.map +1 -1
- package/dist/engine/operation-policy.d.ts +52 -0
- package/dist/engine/operation-policy.d.ts.map +1 -0
- package/dist/engine/operation-policy.js +360 -0
- package/dist/engine/operation-policy.js.map +1 -0
- package/dist/engine/session/events.d.ts +22 -0
- package/dist/engine/session/events.d.ts.map +1 -0
- package/dist/engine/session/events.js +66 -0
- package/dist/engine/session/events.js.map +1 -0
- package/dist/engine/session/run-loop.d.ts +11 -0
- package/dist/engine/session/run-loop.d.ts.map +1 -0
- package/dist/engine/session/run-loop.js +173 -0
- package/dist/engine/session/run-loop.js.map +1 -0
- package/dist/engine/session/store.d.ts +19 -0
- package/dist/engine/session/store.d.ts.map +1 -0
- package/dist/engine/session/store.js +84 -0
- package/dist/engine/session/store.js.map +1 -0
- package/dist/engine/session/types.d.ts +37 -0
- package/dist/engine/session/types.d.ts.map +1 -0
- package/dist/engine/session/types.js +2 -0
- package/dist/engine/session/types.js.map +1 -0
- package/dist/engine/steps/fetch-text.d.ts +1 -1
- package/dist/engine/steps/fetch-text.d.ts.map +1 -1
- package/dist/engine/steps/fetch-text.js +52 -18
- package/dist/engine/steps/fetch-text.js.map +1 -1
- package/dist/engine/steps/fetch.d.ts +1 -0
- package/dist/engine/steps/fetch.d.ts.map +1 -1
- package/dist/engine/steps/fetch.js +7 -1
- package/dist/engine/steps/fetch.js.map +1 -1
- package/dist/engine/steps/parse-rss.d.ts.map +1 -1
- package/dist/engine/steps/parse-rss.js +9 -4
- package/dist/engine/steps/parse-rss.js.map +1 -1
- package/dist/engine/template.d.ts.map +1 -1
- package/dist/engine/template.js +2 -1
- package/dist/engine/template.js.map +1 -1
- package/dist/engine/text-normalize.d.ts +6 -0
- package/dist/engine/text-normalize.d.ts.map +1 -0
- package/dist/engine/text-normalize.js +63 -0
- package/dist/engine/text-normalize.js.map +1 -0
- package/dist/fast-path.d.ts.map +1 -1
- package/dist/fast-path.js +234 -19
- package/dist/fast-path.js.map +1 -1
- package/dist/main.d.ts +1 -1
- package/dist/main.js +1 -1
- package/dist/manifest.json +3357 -600
- package/dist/mcp/dispatch.d.ts +3 -3
- package/dist/mcp/dispatch.d.ts.map +1 -1
- package/dist/mcp/dispatch.js +6 -5
- package/dist/mcp/dispatch.js.map +1 -1
- package/dist/output/error-map.d.ts.map +1 -1
- package/dist/output/error-map.js +21 -0
- package/dist/output/error-map.js.map +1 -1
- package/dist/protocol/acp-helpers.d.ts +2 -2
- package/dist/protocol/acp-helpers.d.ts.map +1 -1
- package/dist/protocol/acp-helpers.js +5 -4
- package/dist/protocol/acp-helpers.js.map +1 -1
- package/dist/registry.d.ts +3 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +2 -0
- package/dist/registry.js.map +1 -1
- package/dist/types.d.ts +9 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +16 -16
- package/src/adapters/36kr/news.yaml +4 -1
- package/src/adapters/_electron/desktop-shared.ts +14 -0
- package/src/adapters/_electron/shared.ts +54 -2
- package/src/adapters/uiverse/components.ts +2 -2
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-selectable operation policy.
|
|
3
|
+
*
|
|
4
|
+
* Adapter metadata stays open by default. This layer classifies likely side
|
|
5
|
+
* effects from the command contract and lets users opt into stricter approval
|
|
6
|
+
* profiles without forcing every adapter author to pre-label privacy.
|
|
7
|
+
*/
|
|
8
|
+
import { AdapterType } from "../types.js";
|
|
9
|
+
import { buildCapabilityApprovalMemory, deriveCapabilityScope, } from "./capability-policy.js";
|
|
10
|
+
export class InvalidPermissionProfileError extends Error {
|
|
11
|
+
constructor(profile) {
|
|
12
|
+
super(`invalid permission profile "${profile}"; expected one of: open, confirm, locked`);
|
|
13
|
+
this.name = "InvalidPermissionProfileError";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const OPEN_PROFILES = new Set(["open", "confirm", "locked"]);
|
|
17
|
+
const MESSAGE_TOKENS = new Set([
|
|
18
|
+
"ask",
|
|
19
|
+
"dm",
|
|
20
|
+
"greet",
|
|
21
|
+
"mail-send",
|
|
22
|
+
"messages-send",
|
|
23
|
+
"reply",
|
|
24
|
+
"reply-dm",
|
|
25
|
+
"send",
|
|
26
|
+
]);
|
|
27
|
+
const PUBLISH_TOKENS = new Set([
|
|
28
|
+
"comment",
|
|
29
|
+
"create-draft",
|
|
30
|
+
"draft",
|
|
31
|
+
"post",
|
|
32
|
+
"publish",
|
|
33
|
+
"reel",
|
|
34
|
+
"repost",
|
|
35
|
+
"story",
|
|
36
|
+
"tweet",
|
|
37
|
+
]);
|
|
38
|
+
const ACCOUNT_STATE_TOKENS = new Set([
|
|
39
|
+
"accept",
|
|
40
|
+
"add-friend",
|
|
41
|
+
"block",
|
|
42
|
+
"bookmark",
|
|
43
|
+
"coin",
|
|
44
|
+
"follow",
|
|
45
|
+
"hide-reply",
|
|
46
|
+
"like",
|
|
47
|
+
"list-add",
|
|
48
|
+
"list-remove",
|
|
49
|
+
"mute",
|
|
50
|
+
"pin",
|
|
51
|
+
"rate",
|
|
52
|
+
"save",
|
|
53
|
+
"subscribe",
|
|
54
|
+
"unblock",
|
|
55
|
+
"unbookmark",
|
|
56
|
+
"unfollow",
|
|
57
|
+
"unlike",
|
|
58
|
+
"unmute",
|
|
59
|
+
"unsave",
|
|
60
|
+
"upvote",
|
|
61
|
+
"vote",
|
|
62
|
+
]);
|
|
63
|
+
const DESTRUCTIVE_EXACT_COMMANDS = new Set([
|
|
64
|
+
"delete",
|
|
65
|
+
"delete-stub",
|
|
66
|
+
"destroy",
|
|
67
|
+
"empty-trash",
|
|
68
|
+
"rm",
|
|
69
|
+
"reset",
|
|
70
|
+
"trash",
|
|
71
|
+
]);
|
|
72
|
+
const DESTRUCTIVE_PIECES = new Set(["delete", "destroy", "reset", "trash"]);
|
|
73
|
+
const REMOTE_TRANSFORM_TOKENS = new Set([
|
|
74
|
+
"background",
|
|
75
|
+
"face-swap",
|
|
76
|
+
"object-remover",
|
|
77
|
+
"remove-bg",
|
|
78
|
+
"restore",
|
|
79
|
+
"try-on",
|
|
80
|
+
"upscale",
|
|
81
|
+
]);
|
|
82
|
+
const SERVICE_STATE_TOKENS = new Set([
|
|
83
|
+
"add",
|
|
84
|
+
"create",
|
|
85
|
+
"create-stub",
|
|
86
|
+
"set",
|
|
87
|
+
"update",
|
|
88
|
+
]);
|
|
89
|
+
const REMOTE_RESOURCE_TOKENS = new Set([
|
|
90
|
+
"copy",
|
|
91
|
+
"create",
|
|
92
|
+
"issue-create",
|
|
93
|
+
"mkdir",
|
|
94
|
+
"move",
|
|
95
|
+
"mv",
|
|
96
|
+
"rename",
|
|
97
|
+
]);
|
|
98
|
+
const REMOTE_WEB_STRATEGIES = new Set([
|
|
99
|
+
"public",
|
|
100
|
+
"cookie",
|
|
101
|
+
"header",
|
|
102
|
+
"intercept",
|
|
103
|
+
"ui",
|
|
104
|
+
]);
|
|
105
|
+
const LOCAL_APP_TOKENS = new Set([
|
|
106
|
+
"calendar-create",
|
|
107
|
+
"click-text",
|
|
108
|
+
"do-not-disturb",
|
|
109
|
+
"lock-screen",
|
|
110
|
+
"model",
|
|
111
|
+
"new",
|
|
112
|
+
"notify",
|
|
113
|
+
"open",
|
|
114
|
+
"open-app",
|
|
115
|
+
"press",
|
|
116
|
+
"reminder-create",
|
|
117
|
+
"reminders-complete",
|
|
118
|
+
"screen-lock",
|
|
119
|
+
"shortcuts-run",
|
|
120
|
+
"sleep",
|
|
121
|
+
"type-text",
|
|
122
|
+
"wallpaper",
|
|
123
|
+
]);
|
|
124
|
+
const LOCAL_FILE_TOKENS = new Set([
|
|
125
|
+
"clipboard",
|
|
126
|
+
"convert",
|
|
127
|
+
"export",
|
|
128
|
+
"extract-audio",
|
|
129
|
+
"finder-copy",
|
|
130
|
+
"finder-move",
|
|
131
|
+
"finder-new-folder",
|
|
132
|
+
"gif",
|
|
133
|
+
"import",
|
|
134
|
+
"normalize",
|
|
135
|
+
"print",
|
|
136
|
+
"resize",
|
|
137
|
+
"render",
|
|
138
|
+
"screen-recording",
|
|
139
|
+
"screenshot",
|
|
140
|
+
"thumbnail",
|
|
141
|
+
"trim",
|
|
142
|
+
"upload",
|
|
143
|
+
]);
|
|
144
|
+
const CONTENT_ARG_NAMES = new Set([
|
|
145
|
+
"body",
|
|
146
|
+
"content",
|
|
147
|
+
"message",
|
|
148
|
+
"notes",
|
|
149
|
+
"prompt",
|
|
150
|
+
"subject",
|
|
151
|
+
"text",
|
|
152
|
+
"title",
|
|
153
|
+
"draft",
|
|
154
|
+
]);
|
|
155
|
+
function commandTokens(site, command) {
|
|
156
|
+
const raw = `${site}-${command}`.toLowerCase();
|
|
157
|
+
const pieces = raw.split(/[^a-z0-9]+/).filter(Boolean);
|
|
158
|
+
return new Set([raw, command.toLowerCase(), ...pieces]);
|
|
159
|
+
}
|
|
160
|
+
function hasAny(tokens, candidates) {
|
|
161
|
+
for (const candidate of candidates) {
|
|
162
|
+
if (tokens.has(candidate))
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
function hasContentArg(args = []) {
|
|
168
|
+
return args.some((arg) => CONTENT_ARG_NAMES.has(arg.name.toLowerCase()));
|
|
169
|
+
}
|
|
170
|
+
function normalizedDescription(input) {
|
|
171
|
+
return (input.description ?? "").trim().toLowerCase();
|
|
172
|
+
}
|
|
173
|
+
function looksReadOnlyCommand(input) {
|
|
174
|
+
const description = normalizedDescription(input);
|
|
175
|
+
if (!/^(dump|fetch|get|inspect|list|read|search|show)\b/.test(description)) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
return !hasContentArg(input.args);
|
|
179
|
+
}
|
|
180
|
+
function isExplicitLocalSurface(surface) {
|
|
181
|
+
return surface === "desktop" || surface === "system";
|
|
182
|
+
}
|
|
183
|
+
function isRemoteWebSurface(input) {
|
|
184
|
+
if (input.adapterType === AdapterType.BRIDGE ||
|
|
185
|
+
input.adapterType === AdapterType.DESKTOP ||
|
|
186
|
+
input.adapterType === AdapterType.SERVICE ||
|
|
187
|
+
isExplicitLocalSurface(input.targetSurface)) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
return ((input.targetSurface === undefined && input.adapterType === undefined) ||
|
|
191
|
+
input.targetSurface === "web" ||
|
|
192
|
+
input.targetSurface === "mobile" ||
|
|
193
|
+
input.adapterType === AdapterType.WEB_API ||
|
|
194
|
+
input.adapterType === AdapterType.BROWSER ||
|
|
195
|
+
input.browser === true ||
|
|
196
|
+
(input.strategy !== undefined && REMOTE_WEB_STRATEGIES.has(input.strategy)));
|
|
197
|
+
}
|
|
198
|
+
function hasDestructiveIntent(input, tokens) {
|
|
199
|
+
const command = input.command.toLowerCase();
|
|
200
|
+
const description = normalizedDescription(input);
|
|
201
|
+
return (DESTRUCTIVE_EXACT_COMMANDS.has(command) ||
|
|
202
|
+
hasAny(tokens, DESTRUCTIVE_EXACT_COMMANDS) ||
|
|
203
|
+
hasAny(tokens, DESTRUCTIVE_PIECES) ||
|
|
204
|
+
/^(delete|remove|clear)\b/.test(description));
|
|
205
|
+
}
|
|
206
|
+
function looksMessageCommand(input, tokens) {
|
|
207
|
+
const description = normalizedDescription(input);
|
|
208
|
+
return ((hasAny(tokens, MESSAGE_TOKENS) && hasContentArg(input.args)) ||
|
|
209
|
+
/^(send|greet|batch greet)\b/.test(description));
|
|
210
|
+
}
|
|
211
|
+
function looksPublishCommand(input, tokens) {
|
|
212
|
+
const description = normalizedDescription(input);
|
|
213
|
+
return ((hasAny(tokens, PUBLISH_TOKENS) && hasContentArg(input.args)) ||
|
|
214
|
+
/^(post|publish|repost)\b/.test(description) ||
|
|
215
|
+
/^create\b.*\b(post|article draft|draft)\b/.test(description) ||
|
|
216
|
+
/^upload\b.*\bdraft\b/.test(description) ||
|
|
217
|
+
/^submit\b.*\bvenue\b/.test(description));
|
|
218
|
+
}
|
|
219
|
+
function looksRemoteTransformCommand(input, tokens) {
|
|
220
|
+
const description = normalizedDescription(input);
|
|
221
|
+
return (isRemoteWebSurface(input) &&
|
|
222
|
+
(hasAny(tokens, REMOTE_TRANSFORM_TOKENS) ||
|
|
223
|
+
/^generate\b.*\bimage\b/.test(description) ||
|
|
224
|
+
/^submit\b.*\b(ai review|feedback)\b/.test(description)));
|
|
225
|
+
}
|
|
226
|
+
function looksServiceStateMutation(input, tokens) {
|
|
227
|
+
const description = normalizedDescription(input);
|
|
228
|
+
return (input.adapterType === AdapterType.SERVICE &&
|
|
229
|
+
(hasDestructiveIntent(input, tokens) ||
|
|
230
|
+
hasAny(tokens, SERVICE_STATE_TOKENS) ||
|
|
231
|
+
/^(add|create|set|update)\b/.test(description)));
|
|
232
|
+
}
|
|
233
|
+
function looksRemoteResourceCommand(input, tokens) {
|
|
234
|
+
const description = normalizedDescription(input);
|
|
235
|
+
return (isRemoteWebSurface(input) &&
|
|
236
|
+
(hasAny(tokens, REMOTE_RESOURCE_TOKENS) ||
|
|
237
|
+
/^(copy|create|move|rename|save|submit)\b/.test(description)));
|
|
238
|
+
}
|
|
239
|
+
function isTargetSurface(value) {
|
|
240
|
+
return (value === "web" ||
|
|
241
|
+
value === "desktop" ||
|
|
242
|
+
value === "system" ||
|
|
243
|
+
value === "mobile");
|
|
244
|
+
}
|
|
245
|
+
export function resolvePermissionProfile(value) {
|
|
246
|
+
const configured = value ?? process.env.UNICLI_PERMISSION_PROFILE;
|
|
247
|
+
if (configured === undefined || configured.trim() === "")
|
|
248
|
+
return "open";
|
|
249
|
+
const raw = configured.trim().toLowerCase();
|
|
250
|
+
if (OPEN_PROFILES.has(raw)) {
|
|
251
|
+
return raw;
|
|
252
|
+
}
|
|
253
|
+
throw new InvalidPermissionProfileError(configured);
|
|
254
|
+
}
|
|
255
|
+
export function resolveOperationTargetSurface(input) {
|
|
256
|
+
if (isTargetSurface(input.targetSurface))
|
|
257
|
+
return input.targetSurface;
|
|
258
|
+
switch (input.adapterType) {
|
|
259
|
+
case AdapterType.DESKTOP:
|
|
260
|
+
return "desktop";
|
|
261
|
+
case AdapterType.BRIDGE:
|
|
262
|
+
case AdapterType.SERVICE:
|
|
263
|
+
return "system";
|
|
264
|
+
default:
|
|
265
|
+
return "web";
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
export function resolveOperationAdapterPath(site, command, adapterPath) {
|
|
269
|
+
return adapterPath ?? `src/adapters/${site}/${command}.yaml`;
|
|
270
|
+
}
|
|
271
|
+
export function inferOperationEffect(input) {
|
|
272
|
+
const tokens = commandTokens(input.site, input.command);
|
|
273
|
+
if (looksReadOnlyCommand(input))
|
|
274
|
+
return "read";
|
|
275
|
+
if (hasAny(tokens, ACCOUNT_STATE_TOKENS))
|
|
276
|
+
return "account_state";
|
|
277
|
+
if (looksMessageCommand(input, tokens))
|
|
278
|
+
return "send_message";
|
|
279
|
+
if (looksPublishCommand(input, tokens))
|
|
280
|
+
return "publish_content";
|
|
281
|
+
if (looksRemoteTransformCommand(input, tokens))
|
|
282
|
+
return "remote_transform";
|
|
283
|
+
if (looksServiceStateMutation(input, tokens))
|
|
284
|
+
return "service_state";
|
|
285
|
+
if (hasDestructiveIntent(input, tokens))
|
|
286
|
+
return "destructive";
|
|
287
|
+
if (looksRemoteResourceCommand(input, tokens))
|
|
288
|
+
return "remote_resource";
|
|
289
|
+
if (hasAny(tokens, LOCAL_APP_TOKENS))
|
|
290
|
+
return "local_app";
|
|
291
|
+
if (input.adapterType === AdapterType.DESKTOP ||
|
|
292
|
+
hasAny(tokens, LOCAL_FILE_TOKENS)) {
|
|
293
|
+
return "local_file";
|
|
294
|
+
}
|
|
295
|
+
return "read";
|
|
296
|
+
}
|
|
297
|
+
export function riskForEffect(effect) {
|
|
298
|
+
switch (effect) {
|
|
299
|
+
case "read":
|
|
300
|
+
return "low";
|
|
301
|
+
case "account_state":
|
|
302
|
+
case "remote_transform":
|
|
303
|
+
case "remote_resource":
|
|
304
|
+
case "local_app":
|
|
305
|
+
case "local_file":
|
|
306
|
+
case "unknown_write":
|
|
307
|
+
return "medium";
|
|
308
|
+
case "destructive":
|
|
309
|
+
case "service_state":
|
|
310
|
+
case "publish_content":
|
|
311
|
+
case "send_message":
|
|
312
|
+
return "high";
|
|
313
|
+
default:
|
|
314
|
+
return "none";
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
function approvalRequired(profile, risk) {
|
|
318
|
+
if (profile === "open")
|
|
319
|
+
return false;
|
|
320
|
+
if (profile === "confirm")
|
|
321
|
+
return risk === "high";
|
|
322
|
+
return risk === "medium" || risk === "high";
|
|
323
|
+
}
|
|
324
|
+
export function evaluateOperationPolicy(input) {
|
|
325
|
+
const profile = resolvePermissionProfile(input.profile);
|
|
326
|
+
const effect = inferOperationEffect(input);
|
|
327
|
+
const risk = riskForEffect(effect);
|
|
328
|
+
const approved = input.approved === true || process.env.UNICLI_APPROVE === "1";
|
|
329
|
+
const approval_required = approvalRequired(profile, risk);
|
|
330
|
+
const enforcement = approval_required && !approved ? "needs_approval" : "allow";
|
|
331
|
+
const capability_scope = deriveCapabilityScope(input, effect);
|
|
332
|
+
const approval_memory = buildCapabilityApprovalMemory({
|
|
333
|
+
site: input.site,
|
|
334
|
+
command: input.command,
|
|
335
|
+
profile,
|
|
336
|
+
effect,
|
|
337
|
+
approved,
|
|
338
|
+
scope: capability_scope,
|
|
339
|
+
});
|
|
340
|
+
const reason = effect === "read"
|
|
341
|
+
? "classified as read-only by command contract"
|
|
342
|
+
: `classified as ${effect.replaceAll("_", " ")} with ${risk} risk`;
|
|
343
|
+
return {
|
|
344
|
+
profile,
|
|
345
|
+
effect,
|
|
346
|
+
risk,
|
|
347
|
+
capability_scope,
|
|
348
|
+
approval_memory,
|
|
349
|
+
approval_required,
|
|
350
|
+
approved,
|
|
351
|
+
enforcement,
|
|
352
|
+
reason,
|
|
353
|
+
...(enforcement === "needs_approval"
|
|
354
|
+
? {
|
|
355
|
+
approval_hint: "rerun with --yes, set UNICLI_APPROVE=1, or use --permission-profile open",
|
|
356
|
+
}
|
|
357
|
+
: {}),
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=operation-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation-policy.js","sourceRoot":"","sources":["../../src/engine/operation-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { EvidenceVisibility, PublicRunEvent, RunEvent, RunEventSequence, RunTraceMetadata } from "./types.js";
|
|
2
|
+
export type { EvidenceVisibility, PublicRunEvent, RunEvent, RunEventName, RunEventSequence, RunId, RunTraceMetadata, TraceId, } from "./types.js";
|
|
3
|
+
interface EventOptions {
|
|
4
|
+
timestamp?: string;
|
|
5
|
+
visibility?: EvidenceVisibility;
|
|
6
|
+
data?: Record<string, unknown>;
|
|
7
|
+
internal?: unknown;
|
|
8
|
+
secret?: unknown;
|
|
9
|
+
}
|
|
10
|
+
export declare function createRunEventSequence(start?: number): RunEventSequence;
|
|
11
|
+
export declare function createRunStartedEvent(metadata: RunTraceMetadata, sequence: RunEventSequence, options?: EventOptions): RunEvent;
|
|
12
|
+
export declare function createToolCallStartedEvent(metadata: RunTraceMetadata, sequence: RunEventSequence, data?: Record<string, unknown>): RunEvent;
|
|
13
|
+
export declare function createPermissionEvaluatedEvent(metadata: RunTraceMetadata, sequence: RunEventSequence, data: Record<string, unknown>): RunEvent;
|
|
14
|
+
export declare function createEvidenceCapturedEvent(metadata: RunTraceMetadata, sequence: RunEventSequence, options: EventOptions & {
|
|
15
|
+
evidence_type: string;
|
|
16
|
+
}): RunEvent;
|
|
17
|
+
export declare function createToolCallCompletedEvent(metadata: RunTraceMetadata, sequence: RunEventSequence, data: Record<string, unknown>): RunEvent;
|
|
18
|
+
export declare function createToolCallFailedEvent(metadata: RunTraceMetadata, sequence: RunEventSequence, data: Record<string, unknown>): RunEvent;
|
|
19
|
+
export declare function createRunCompletedEvent(metadata: RunTraceMetadata, sequence: RunEventSequence, data: Record<string, unknown>): RunEvent;
|
|
20
|
+
export declare function createRunFailedEvent(metadata: RunTraceMetadata, sequence: RunEventSequence, data: Record<string, unknown>): RunEvent;
|
|
21
|
+
export declare function projectRunEventForPublicSurface(event: RunEvent): PublicRunEvent;
|
|
22
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/engine/session/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,KAAK,EACL,gBAAgB,EAChB,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,SAAI,GAAG,gBAAgB,CAQlE;AAuBD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,GAAE,YAAiB,GACzB,QAAQ,CAEV;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,QAAQ,CASV;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,QAAQ,CAEV;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,YAAY,GAAG;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,GACA,QAAQ,CAQV;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,QAAQ,CAEV;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,QAAQ,CAEV;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,QAAQ,CAEV;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,QAAQ,CAEV;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,QAAQ,GACd,cAAc,CAGhB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export function createRunEventSequence(start = 0) {
|
|
2
|
+
let current = start;
|
|
3
|
+
return {
|
|
4
|
+
next: () => {
|
|
5
|
+
current += 1;
|
|
6
|
+
return current;
|
|
7
|
+
},
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function createEvent(name, metadata, sequence, options = {}) {
|
|
11
|
+
return {
|
|
12
|
+
schema_version: "1",
|
|
13
|
+
name,
|
|
14
|
+
run_id: metadata.run_id,
|
|
15
|
+
trace_id: metadata.trace_id,
|
|
16
|
+
sequence: sequence.next(),
|
|
17
|
+
timestamp: options.timestamp ?? new Date().toISOString(),
|
|
18
|
+
visibility: options.visibility ?? "internal",
|
|
19
|
+
metadata,
|
|
20
|
+
...(options.data !== undefined ? { data: options.data } : {}),
|
|
21
|
+
...(options.internal !== undefined ? { internal: options.internal } : {}),
|
|
22
|
+
...(options.secret !== undefined ? { secret: options.secret } : {}),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function createRunStartedEvent(metadata, sequence, options = {}) {
|
|
26
|
+
return createEvent("run.started", metadata, sequence, options);
|
|
27
|
+
}
|
|
28
|
+
export function createToolCallStartedEvent(metadata, sequence, data = {}) {
|
|
29
|
+
return createEvent("tool.call.started", metadata, sequence, {
|
|
30
|
+
data: {
|
|
31
|
+
command: metadata.command,
|
|
32
|
+
adapter_path: metadata.adapter_path,
|
|
33
|
+
args_hash: metadata.args_hash,
|
|
34
|
+
...data,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
export function createPermissionEvaluatedEvent(metadata, sequence, data) {
|
|
39
|
+
return createEvent("permission.evaluated", metadata, sequence, { data });
|
|
40
|
+
}
|
|
41
|
+
export function createEvidenceCapturedEvent(metadata, sequence, options) {
|
|
42
|
+
return createEvent("evidence.captured", metadata, sequence, {
|
|
43
|
+
...options,
|
|
44
|
+
data: {
|
|
45
|
+
evidence_type: options.evidence_type,
|
|
46
|
+
...options.data,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
export function createToolCallCompletedEvent(metadata, sequence, data) {
|
|
51
|
+
return createEvent("tool.call.completed", metadata, sequence, { data });
|
|
52
|
+
}
|
|
53
|
+
export function createToolCallFailedEvent(metadata, sequence, data) {
|
|
54
|
+
return createEvent("tool.call.failed", metadata, sequence, { data });
|
|
55
|
+
}
|
|
56
|
+
export function createRunCompletedEvent(metadata, sequence, data) {
|
|
57
|
+
return createEvent("run.completed", metadata, sequence, { data });
|
|
58
|
+
}
|
|
59
|
+
export function createRunFailedEvent(metadata, sequence, data) {
|
|
60
|
+
return createEvent("run.failed", metadata, sequence, { data });
|
|
61
|
+
}
|
|
62
|
+
export function projectRunEventForPublicSurface(event) {
|
|
63
|
+
const { internal: _internal, secret: _secret, ...publicEvent } = event;
|
|
64
|
+
return publicEvent;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/engine/session/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Invocation, InvocationResult } from "../kernel/types.js";
|
|
2
|
+
import { type RunStore } from "./store.js";
|
|
3
|
+
import { type RunId } from "./events.js";
|
|
4
|
+
export interface RunRecordingOptions {
|
|
5
|
+
enabled?: boolean;
|
|
6
|
+
store?: RunStore;
|
|
7
|
+
runId?: RunId;
|
|
8
|
+
}
|
|
9
|
+
export declare function isRunRecordingEnabled(enabled?: boolean): boolean;
|
|
10
|
+
export declare function executeWithRunRecording(inv: Invocation, options?: RunRecordingOptions): Promise<InvocationResult>;
|
|
11
|
+
//# sourceMappingURL=run-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-loop.d.ts","sourceRoot":"","sources":["../../../src/engine/session/run-loop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAQvE,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,YAAY,CAAC;AACpB,OAAO,EAWL,KAAK,KAAK,EAEX,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAGhE;AAgKD,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,UAAU,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,gBAAgB,CAAC,CAyD3B"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { execute } from "../kernel/execute.js";
|
|
3
|
+
import { evaluateOperationPolicy, InvalidPermissionProfileError, resolveOperationAdapterPath, resolveOperationTargetSurface, } from "../operation-policy.js";
|
|
4
|
+
import { appendRunEvent, createRunStore, RunStoreError, } from "./store.js";
|
|
5
|
+
import { createPermissionEvaluatedEvent, createEvidenceCapturedEvent, createRunCompletedEvent, createRunEventSequence, createRunFailedEvent, createRunStartedEvent, createToolCallCompletedEvent, createToolCallFailedEvent, createToolCallStartedEvent, } from "./events.js";
|
|
6
|
+
export function isRunRecordingEnabled(enabled) {
|
|
7
|
+
if (enabled !== undefined)
|
|
8
|
+
return enabled;
|
|
9
|
+
return process.env.UNICLI_RECORD_RUN === "1";
|
|
10
|
+
}
|
|
11
|
+
function stableJson(value) {
|
|
12
|
+
if (Array.isArray(value)) {
|
|
13
|
+
return `[${value.map(stableJson).join(",")}]`;
|
|
14
|
+
}
|
|
15
|
+
if (value && typeof value === "object") {
|
|
16
|
+
return `{${Object.keys(value)
|
|
17
|
+
.sort()
|
|
18
|
+
.map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`)
|
|
19
|
+
.join(",")}}`;
|
|
20
|
+
}
|
|
21
|
+
return JSON.stringify(value);
|
|
22
|
+
}
|
|
23
|
+
function hashArgs(args) {
|
|
24
|
+
return `sha256:${createHash("sha256").update(stableJson(args)).digest("hex")}`;
|
|
25
|
+
}
|
|
26
|
+
function rawPermissionProfile(inv) {
|
|
27
|
+
const raw = inv.permissionProfile ?? process.env.UNICLI_PERMISSION_PROFILE;
|
|
28
|
+
return raw && raw.trim().length > 0 ? raw.trim().toLowerCase() : "open";
|
|
29
|
+
}
|
|
30
|
+
function metadataForInvocation(inv, runId) {
|
|
31
|
+
const adapterPath = resolveOperationAdapterPath(inv.adapter.name, inv.cmdName, inv.command.adapter_path);
|
|
32
|
+
const targetSurface = resolveOperationTargetSurface({
|
|
33
|
+
adapterType: inv.adapter.type,
|
|
34
|
+
targetSurface: inv.command.target_surface,
|
|
35
|
+
});
|
|
36
|
+
return {
|
|
37
|
+
run_id: runId,
|
|
38
|
+
trace_id: inv.trace_id,
|
|
39
|
+
command: `${inv.adapter.name}.${inv.cmdName}`,
|
|
40
|
+
site: inv.adapter.name,
|
|
41
|
+
cmd: inv.cmdName,
|
|
42
|
+
adapter_path: adapterPath,
|
|
43
|
+
permission_profile: rawPermissionProfile(inv),
|
|
44
|
+
transport_surface: inv.surface,
|
|
45
|
+
target_surface: targetSurface,
|
|
46
|
+
args_hash: hashArgs(inv.bag.args),
|
|
47
|
+
pipeline_steps: inv.command.pipeline?.length ?? 0,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function evaluatePermissionForEvent(inv, metadata) {
|
|
51
|
+
try {
|
|
52
|
+
const policy = evaluateOperationPolicy({
|
|
53
|
+
site: inv.adapter.name,
|
|
54
|
+
command: inv.cmdName,
|
|
55
|
+
description: inv.command.description,
|
|
56
|
+
adapterType: inv.adapter.type,
|
|
57
|
+
targetSurface: metadata.target_surface,
|
|
58
|
+
strategy: inv.command.strategy ?? inv.adapter.strategy,
|
|
59
|
+
browser: inv.adapter.browser === true || inv.command.browser === true,
|
|
60
|
+
args: inv.command.adapterArgs,
|
|
61
|
+
profile: inv.permissionProfile,
|
|
62
|
+
approved: inv.approved,
|
|
63
|
+
});
|
|
64
|
+
return { ...policy };
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (err instanceof InvalidPermissionProfileError) {
|
|
68
|
+
return {
|
|
69
|
+
profile: metadata.permission_profile,
|
|
70
|
+
effect: "unknown_write",
|
|
71
|
+
risk: "high",
|
|
72
|
+
approval_required: true,
|
|
73
|
+
approved: false,
|
|
74
|
+
enforcement: "needs_approval",
|
|
75
|
+
reason: err.message,
|
|
76
|
+
error: { code: "invalid_input", message: err.message },
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
throw err;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function appendAll(store, events, warnings) {
|
|
83
|
+
for (const event of events) {
|
|
84
|
+
try {
|
|
85
|
+
await appendRunEvent(store, event);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
const message = err instanceof RunStoreError || err instanceof Error
|
|
89
|
+
? err.message
|
|
90
|
+
: String(err);
|
|
91
|
+
warnings.push(`[run-record] ${message}`);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function successData(result) {
|
|
97
|
+
return {
|
|
98
|
+
exit_code: result.exitCode,
|
|
99
|
+
result_count: result.results.length,
|
|
100
|
+
duration_ms: result.durationMs,
|
|
101
|
+
outcome: result.results.length === 0 ? "empty" : "success",
|
|
102
|
+
envelope: result.envelope,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function failureData(result, metadata) {
|
|
106
|
+
const error = result.error === undefined
|
|
107
|
+
? undefined
|
|
108
|
+
: {
|
|
109
|
+
...result.error,
|
|
110
|
+
adapter_path: result.error.adapter_path ?? metadata.adapter_path,
|
|
111
|
+
};
|
|
112
|
+
return {
|
|
113
|
+
exit_code: result.exitCode,
|
|
114
|
+
result_count: result.results.length,
|
|
115
|
+
duration_ms: result.durationMs,
|
|
116
|
+
error,
|
|
117
|
+
envelope: result.envelope,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function evidenceData(result, metadata) {
|
|
121
|
+
return {
|
|
122
|
+
outcome: result.error === undefined
|
|
123
|
+
? result.results.length === 0
|
|
124
|
+
? "empty"
|
|
125
|
+
: "success"
|
|
126
|
+
: "failure",
|
|
127
|
+
exit_code: result.exitCode,
|
|
128
|
+
result_count: result.results.length,
|
|
129
|
+
duration_ms: result.durationMs,
|
|
130
|
+
adapter_path: metadata.adapter_path,
|
|
131
|
+
envelope_command: result.envelope.command,
|
|
132
|
+
has_error: result.error !== undefined,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export async function executeWithRunRecording(inv, options = {}) {
|
|
136
|
+
if (!isRunRecordingEnabled(options.enabled)) {
|
|
137
|
+
return execute(inv);
|
|
138
|
+
}
|
|
139
|
+
const store = options.store ?? createRunStore();
|
|
140
|
+
const runId = options.runId ?? `run-${inv.trace_id}`;
|
|
141
|
+
const metadata = metadataForInvocation(inv, runId);
|
|
142
|
+
const sequence = createRunEventSequence();
|
|
143
|
+
const warnings = [];
|
|
144
|
+
await appendAll(store, [
|
|
145
|
+
createRunStartedEvent(metadata, sequence),
|
|
146
|
+
createToolCallStartedEvent(metadata, sequence),
|
|
147
|
+
createPermissionEvaluatedEvent(metadata, sequence, evaluatePermissionForEvent(inv, metadata)),
|
|
148
|
+
], warnings);
|
|
149
|
+
const result = await execute(inv);
|
|
150
|
+
const terminalEvents = result.error === undefined
|
|
151
|
+
? [
|
|
152
|
+
createToolCallCompletedEvent(metadata, sequence, successData(result)),
|
|
153
|
+
createEvidenceCapturedEvent(metadata, sequence, {
|
|
154
|
+
evidence_type: "result-envelope",
|
|
155
|
+
visibility: "internal",
|
|
156
|
+
data: evidenceData(result, metadata),
|
|
157
|
+
}),
|
|
158
|
+
createRunCompletedEvent(metadata, sequence, successData(result)),
|
|
159
|
+
]
|
|
160
|
+
: [
|
|
161
|
+
createToolCallFailedEvent(metadata, sequence, failureData(result, metadata)),
|
|
162
|
+
createEvidenceCapturedEvent(metadata, sequence, {
|
|
163
|
+
evidence_type: "result-envelope",
|
|
164
|
+
visibility: "internal",
|
|
165
|
+
data: evidenceData(result, metadata),
|
|
166
|
+
}),
|
|
167
|
+
createRunFailedEvent(metadata, sequence, failureData(result, metadata)),
|
|
168
|
+
];
|
|
169
|
+
await appendAll(store, terminalEvents, warnings);
|
|
170
|
+
result.warnings.push(...warnings);
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=run-loop.js.map
|