@moxxy/sdk 0.39.0 → 0.41.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/README.md +2 -2
- package/dist/computer-control.d.ts +81 -0
- package/dist/computer-control.d.ts.map +1 -0
- package/dist/computer-control.js +19 -0
- package/dist/computer-control.js.map +1 -0
- package/dist/events.d.ts +14 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mode/collect-stream.d.ts +3 -0
- package/dist/mode/collect-stream.d.ts.map +1 -1
- package/dist/mode/collect-stream.js +78 -60
- package/dist/mode/collect-stream.js.map +1 -1
- package/dist/mode/project-messages.d.ts.map +1 -1
- package/dist/mode/project-messages.js +4 -1
- package/dist/mode/project-messages.js.map +1 -1
- package/dist/mode/provider-timing.d.ts +11 -0
- package/dist/mode/provider-timing.d.ts.map +1 -0
- package/dist/mode/provider-timing.js +15 -0
- package/dist/mode/provider-timing.js.map +1 -0
- package/dist/mode/react-loop.d.ts.map +1 -1
- package/dist/mode/react-loop.js +5 -1
- package/dist/mode/react-loop.js.map +1 -1
- package/dist/mode.d.ts +3 -1
- package/dist/mode.d.ts.map +1 -1
- package/dist/permission.d.ts +3 -0
- package/dist/permission.d.ts.map +1 -1
- package/dist/provider-utils.js +41 -7
- package/dist/provider-utils.js.map +1 -1
- package/dist/session-like.d.ts +6 -1
- package/dist/session-like.d.ts.map +1 -1
- package/dist/tool-dispatch.d.ts +2 -1
- package/dist/tool-dispatch.d.ts.map +1 -1
- package/dist/tool-dispatch.js +15 -1
- package/dist/tool-dispatch.js.map +1 -1
- package/dist/tool.d.ts +6 -0
- package/dist/tool.d.ts.map +1 -1
- package/dist/workflow-approval.d.ts +135 -0
- package/dist/workflow-approval.d.ts.map +1 -0
- package/dist/workflow-approval.js +18 -0
- package/dist/workflow-approval.js.map +1 -0
- package/dist/workflow.d.ts +3 -3
- package/dist/workflow.d.ts.map +1 -1
- package/package.json +6 -2
- package/src/computer-control.test.ts +17 -0
- package/src/computer-control.ts +31 -0
- package/src/events.ts +15 -0
- package/src/index.ts +12 -0
- package/src/loop-helpers.test.ts +15 -0
- package/src/mode/collect-stream.ts +18 -0
- package/src/mode/project-messages.ts +4 -1
- package/src/mode/provider-timing.test.ts +16 -0
- package/src/mode/provider-timing.ts +19 -0
- package/src/mode/react-loop.ts +5 -1
- package/src/mode.ts +1 -1
- package/src/permission.ts +3 -0
- package/src/provider-schema-constraints.test.ts +29 -0
- package/src/provider-utils.test.ts +1 -1
- package/src/provider-utils.ts +33 -5
- package/src/session-like.ts +6 -1
- package/src/tool-dispatch.ts +27 -3
- package/src/tool.ts +7 -0
- package/src/workflow-approval.test.ts +12 -0
- package/src/workflow-approval.ts +41 -0
- package/src/workflow.ts +5 -3
package/dist/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
export interface WorkflowApprovalScope {
|
|
2
|
+
readonly workflowId: string;
|
|
3
|
+
readonly workflowName: string;
|
|
4
|
+
readonly revision: string;
|
|
5
|
+
readonly runId: string;
|
|
6
|
+
}
|
|
7
|
+
export type WorkflowApprovalChoice = 'allow_once' | 'allow_always' | 'deny';
|
|
8
|
+
export interface WorkflowApprovalItem extends WorkflowApprovalScope {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly tool: string;
|
|
11
|
+
readonly input: unknown;
|
|
12
|
+
readonly createdAt: number;
|
|
13
|
+
readonly status: 'pending' | 'allowed' | 'denied' | 'cancelled' | 'interrupted' | 'revoked';
|
|
14
|
+
readonly choice?: WorkflowApprovalChoice;
|
|
15
|
+
}
|
|
16
|
+
export interface WorkflowApprovalsView {
|
|
17
|
+
list(): Promise<ReadonlyArray<WorkflowApprovalItem>>;
|
|
18
|
+
decide(id: string, choice: WorkflowApprovalChoice): Promise<void>;
|
|
19
|
+
revoke(id: string): Promise<void>;
|
|
20
|
+
cancel(id: string): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
import { z } from 'zod';
|
|
23
|
+
export declare const workflowApprovalItemSchema: z.ZodEffects<z.ZodObject<{
|
|
24
|
+
id: z.ZodString;
|
|
25
|
+
workflowId: z.ZodString;
|
|
26
|
+
workflowName: z.ZodString;
|
|
27
|
+
revision: z.ZodString;
|
|
28
|
+
runId: z.ZodString;
|
|
29
|
+
tool: z.ZodString;
|
|
30
|
+
input: z.ZodUnknown;
|
|
31
|
+
createdAt: z.ZodNumber;
|
|
32
|
+
status: z.ZodEnum<["pending", "allowed", "denied", "cancelled", "interrupted", "revoked"]>;
|
|
33
|
+
choice: z.ZodOptional<z.ZodEnum<["allow_once", "allow_always", "deny"]>>;
|
|
34
|
+
}, "strict", z.ZodTypeAny, {
|
|
35
|
+
tool: string;
|
|
36
|
+
id: string;
|
|
37
|
+
status: "denied" | "pending" | "allowed" | "cancelled" | "interrupted" | "revoked";
|
|
38
|
+
workflowId: string;
|
|
39
|
+
workflowName: string;
|
|
40
|
+
revision: string;
|
|
41
|
+
runId: string;
|
|
42
|
+
createdAt: number;
|
|
43
|
+
input?: unknown;
|
|
44
|
+
choice?: "allow_always" | "deny" | "allow_once" | undefined;
|
|
45
|
+
}, {
|
|
46
|
+
tool: string;
|
|
47
|
+
id: string;
|
|
48
|
+
status: "denied" | "pending" | "allowed" | "cancelled" | "interrupted" | "revoked";
|
|
49
|
+
workflowId: string;
|
|
50
|
+
workflowName: string;
|
|
51
|
+
revision: string;
|
|
52
|
+
runId: string;
|
|
53
|
+
createdAt: number;
|
|
54
|
+
input?: unknown;
|
|
55
|
+
choice?: "allow_always" | "deny" | "allow_once" | undefined;
|
|
56
|
+
}>, {
|
|
57
|
+
input: unknown;
|
|
58
|
+
tool: string;
|
|
59
|
+
id: string;
|
|
60
|
+
status: "denied" | "pending" | "allowed" | "cancelled" | "interrupted" | "revoked";
|
|
61
|
+
workflowId: string;
|
|
62
|
+
workflowName: string;
|
|
63
|
+
revision: string;
|
|
64
|
+
runId: string;
|
|
65
|
+
createdAt: number;
|
|
66
|
+
choice?: "allow_always" | "deny" | "allow_once" | undefined;
|
|
67
|
+
}, {
|
|
68
|
+
tool: string;
|
|
69
|
+
id: string;
|
|
70
|
+
status: "denied" | "pending" | "allowed" | "cancelled" | "interrupted" | "revoked";
|
|
71
|
+
workflowId: string;
|
|
72
|
+
workflowName: string;
|
|
73
|
+
revision: string;
|
|
74
|
+
runId: string;
|
|
75
|
+
createdAt: number;
|
|
76
|
+
input?: unknown;
|
|
77
|
+
choice?: "allow_always" | "deny" | "allow_once" | undefined;
|
|
78
|
+
}>;
|
|
79
|
+
export declare const workflowApprovalItemsSchema: z.ZodArray<z.ZodEffects<z.ZodObject<{
|
|
80
|
+
id: z.ZodString;
|
|
81
|
+
workflowId: z.ZodString;
|
|
82
|
+
workflowName: z.ZodString;
|
|
83
|
+
revision: z.ZodString;
|
|
84
|
+
runId: z.ZodString;
|
|
85
|
+
tool: z.ZodString;
|
|
86
|
+
input: z.ZodUnknown;
|
|
87
|
+
createdAt: z.ZodNumber;
|
|
88
|
+
status: z.ZodEnum<["pending", "allowed", "denied", "cancelled", "interrupted", "revoked"]>;
|
|
89
|
+
choice: z.ZodOptional<z.ZodEnum<["allow_once", "allow_always", "deny"]>>;
|
|
90
|
+
}, "strict", z.ZodTypeAny, {
|
|
91
|
+
tool: string;
|
|
92
|
+
id: string;
|
|
93
|
+
status: "denied" | "pending" | "allowed" | "cancelled" | "interrupted" | "revoked";
|
|
94
|
+
workflowId: string;
|
|
95
|
+
workflowName: string;
|
|
96
|
+
revision: string;
|
|
97
|
+
runId: string;
|
|
98
|
+
createdAt: number;
|
|
99
|
+
input?: unknown;
|
|
100
|
+
choice?: "allow_always" | "deny" | "allow_once" | undefined;
|
|
101
|
+
}, {
|
|
102
|
+
tool: string;
|
|
103
|
+
id: string;
|
|
104
|
+
status: "denied" | "pending" | "allowed" | "cancelled" | "interrupted" | "revoked";
|
|
105
|
+
workflowId: string;
|
|
106
|
+
workflowName: string;
|
|
107
|
+
revision: string;
|
|
108
|
+
runId: string;
|
|
109
|
+
createdAt: number;
|
|
110
|
+
input?: unknown;
|
|
111
|
+
choice?: "allow_always" | "deny" | "allow_once" | undefined;
|
|
112
|
+
}>, {
|
|
113
|
+
input: unknown;
|
|
114
|
+
tool: string;
|
|
115
|
+
id: string;
|
|
116
|
+
status: "denied" | "pending" | "allowed" | "cancelled" | "interrupted" | "revoked";
|
|
117
|
+
workflowId: string;
|
|
118
|
+
workflowName: string;
|
|
119
|
+
revision: string;
|
|
120
|
+
runId: string;
|
|
121
|
+
createdAt: number;
|
|
122
|
+
choice?: "allow_always" | "deny" | "allow_once" | undefined;
|
|
123
|
+
}, {
|
|
124
|
+
tool: string;
|
|
125
|
+
id: string;
|
|
126
|
+
status: "denied" | "pending" | "allowed" | "cancelled" | "interrupted" | "revoked";
|
|
127
|
+
workflowId: string;
|
|
128
|
+
workflowName: string;
|
|
129
|
+
revision: string;
|
|
130
|
+
runId: string;
|
|
131
|
+
createdAt: number;
|
|
132
|
+
input?: unknown;
|
|
133
|
+
choice?: "allow_always" | "deny" | "allow_once" | undefined;
|
|
134
|
+
}>, "many">;
|
|
135
|
+
//# sourceMappingURL=workflow-approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-approval.d.ts","sourceRoot":"","sources":["../src/workflow-approval.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,cAAc,GAAG,MAAM,CAAC;AAC5E,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;IAC5F,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AACD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAciB,CAAC;AACzD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAAsC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const workflowApprovalItemSchema = z
|
|
3
|
+
.object({
|
|
4
|
+
id: z.string().uuid(),
|
|
5
|
+
workflowId: z.string().min(1),
|
|
6
|
+
workflowName: z.string().min(1),
|
|
7
|
+
revision: z.string().min(1),
|
|
8
|
+
runId: z.string().min(1),
|
|
9
|
+
tool: z.string().min(1),
|
|
10
|
+
input: z.unknown(),
|
|
11
|
+
createdAt: z.number().finite().positive(),
|
|
12
|
+
status: z.enum(['pending', 'allowed', 'denied', 'cancelled', 'interrupted', 'revoked']),
|
|
13
|
+
choice: z.enum(['allow_once', 'allow_always', 'deny']).optional(),
|
|
14
|
+
})
|
|
15
|
+
.strict()
|
|
16
|
+
.transform((item) => ({ ...item, input: item.input }));
|
|
17
|
+
export const workflowApprovalItemsSchema = z.array(workflowApprovalItemSchema);
|
|
18
|
+
//# sourceMappingURL=workflow-approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-approval.js","sourceRoot":"","sources":["../src/workflow-approval.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;IAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IACvF,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;CAClE,CAAC;KACD,MAAM,EAAE;KACR,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC"}
|
package/dist/workflow.d.ts
CHANGED
|
@@ -176,7 +176,7 @@ export interface WorkflowLookup {
|
|
|
176
176
|
workflow(name: string): Workflow | undefined;
|
|
177
177
|
}
|
|
178
178
|
/** Lifecycle subtypes an executor emits as `plugin_event`s (mirrors plan_*). */
|
|
179
|
-
export type WorkflowEventSubtype = 'workflow_started' | 'workflow_step_started' | 'workflow_step_completed' | 'workflow_step_skipped' | 'workflow_step_failed' | 'workflow_step_awaiting_input' | 'workflow_paused' | 'workflow_resumed' | 'workflow_completed' | 'workflow_failed';
|
|
179
|
+
export type WorkflowEventSubtype = 'workflow_started' | 'workflow_step_started' | 'workflow_step_completed' | 'workflow_step_skipped' | 'workflow_step_failed' | 'workflow_step_cancelled' | 'workflow_step_awaiting_input' | 'workflow_paused' | 'workflow_resumed' | 'workflow_completed' | 'workflow_failed' | 'workflow_cancelled';
|
|
180
180
|
/**
|
|
181
181
|
* Everything an executor needs to run a workflow, supplied by the caller.
|
|
182
182
|
* The in-turn `workflow_run` tool wires `spawner` from `ctx.subagents`; the
|
|
@@ -203,8 +203,8 @@ export interface WorkflowRunDeps {
|
|
|
203
203
|
/** Nested-workflow recursion depth; executors guard against runaway nesting. */
|
|
204
204
|
readonly depth?: number;
|
|
205
205
|
}
|
|
206
|
-
export type WorkflowStepStatus = 'completed' | 'skipped' | 'failed' | 'awaiting_input';
|
|
207
|
-
export type WorkflowRunStatus = 'completed' | 'paused' | 'failed';
|
|
206
|
+
export type WorkflowStepStatus = 'completed' | 'skipped' | 'failed' | 'awaiting_input' | 'cancelled';
|
|
207
|
+
export type WorkflowRunStatus = 'completed' | 'paused' | 'failed' | 'cancelled';
|
|
208
208
|
export interface WorkflowStepResult {
|
|
209
209
|
readonly id: string;
|
|
210
210
|
readonly status: WorkflowStepStatus;
|
package/dist/workflow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moxxy/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.41.0",
|
|
4
4
|
"description": "Typed public surface for the moxxy framework: event types, define* factories, lifecycle hook signatures.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"moxxy",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"author": "Michal Makowski <michal.makowski97@gmail.com>",
|
|
35
35
|
"license": "MIT",
|
|
36
36
|
"engines": {
|
|
37
|
-
"node": ">=20.
|
|
37
|
+
"node": ">=20.19.0"
|
|
38
38
|
},
|
|
39
39
|
"sideEffects": false,
|
|
40
40
|
"type": "module",
|
|
@@ -53,6 +53,10 @@
|
|
|
53
53
|
"types": "./dist/tool-display.d.ts",
|
|
54
54
|
"import": "./dist/tool-display.js"
|
|
55
55
|
},
|
|
56
|
+
"./workflow-approval": {
|
|
57
|
+
"types": "./dist/workflow-approval.d.ts",
|
|
58
|
+
"import": "./dist/workflow-approval.js"
|
|
59
|
+
},
|
|
56
60
|
"./transcriber": {
|
|
57
61
|
"types": "./dist/transcriber.d.ts",
|
|
58
62
|
"import": "./dist/transcriber.js"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { expect, it } from 'vitest';
|
|
2
|
+
import { computerControlCommandSchema, computerControlSnapshotSchema } from './computer-control.js';
|
|
3
|
+
|
|
4
|
+
it('requires exact session and turn ownership for human control commands', () => {
|
|
5
|
+
const command={sessionId:'session-a',turnId:'turn-a',command:'stop'};
|
|
6
|
+
expect(computerControlCommandSchema.safeParse(command).success).toBe(true);
|
|
7
|
+
expect(computerControlCommandSchema.safeParse({turnId:'turn-a',command:'stop'}).success).toBe(false);
|
|
8
|
+
expect(computerControlCommandSchema.safeParse({...command,command:'restart'}).success).toBe(false);
|
|
9
|
+
expect(computerControlCommandSchema.safeParse({...command,workspaceId:'unexpected'}).success).toBe(false);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('validates bounded control-state snapshots, never executable commands', () => {
|
|
13
|
+
const snapshot={sessionId:'s',turnId:'t',state:'waiting_for_focus',windowId:null};
|
|
14
|
+
expect(computerControlSnapshotSchema.safeParse(snapshot).success).toBe(true);
|
|
15
|
+
expect(computerControlSnapshotSchema.safeParse({...snapshot,state:'running arbitrary code'}).success).toBe(false);
|
|
16
|
+
expect(computerControlSnapshotSchema.safeParse({...snapshot,windowId:'x'.repeat(200)}).success).toBe(false);
|
|
17
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
export const computerControlStateSchema = z.enum([
|
|
4
|
+
'idle', 'background', 'foreground', 'waiting_for_focus',
|
|
5
|
+
'paused_by_user', 'recovering', 'stopped', 'failed',
|
|
6
|
+
]);
|
|
7
|
+
const identity = z.string().min(1).max(160);
|
|
8
|
+
export const computerControlOwnerSchema = z.object({ sessionId: identity, turnId: identity }).strict();
|
|
9
|
+
export const computerControlCommandSchema = computerControlOwnerSchema.extend({
|
|
10
|
+
command: z.enum(['pause', 'resume', 'stop']),
|
|
11
|
+
}).strict();
|
|
12
|
+
export const computerControlSnapshotSchema = computerControlOwnerSchema.extend({
|
|
13
|
+
state: computerControlStateSchema,
|
|
14
|
+
windowId: identity.nullable(),
|
|
15
|
+
}).strict();
|
|
16
|
+
|
|
17
|
+
export type ComputerControlState = z.infer<typeof computerControlStateSchema>;
|
|
18
|
+
export const computerApprovalFocusSchema = computerControlOwnerSchema.extend({
|
|
19
|
+
windowId: identity, callId: identity, hostPid: z.number().int().min(1).max(2147483647),
|
|
20
|
+
stage: z.enum(['begin', 'finish']), approved: z.boolean(),
|
|
21
|
+
}).strict();
|
|
22
|
+
export type ComputerApprovalFocus = z.infer<typeof computerApprovalFocusSchema>;
|
|
23
|
+
export type ComputerControlCommand = z.infer<typeof computerControlCommandSchema>;
|
|
24
|
+
export type ComputerControlSnapshot = z.infer<typeof computerControlSnapshotSchema>;
|
|
25
|
+
export interface ComputerControlService {
|
|
26
|
+
approvalFocus?(command: ComputerApprovalFocus): Promise<void>;
|
|
27
|
+
/** Empty when this session has no live Computer Use turn. */
|
|
28
|
+
snapshot(): Promise<ReadonlyArray<ComputerControlSnapshot>>;
|
|
29
|
+
/** Human control only: never starts a helper or grants tool permission. */
|
|
30
|
+
control(command: ComputerControlCommand): Promise<void>;
|
|
31
|
+
}
|
package/src/events.ts
CHANGED
|
@@ -284,6 +284,21 @@ export interface ProviderResponseEvent extends EventBase {
|
|
|
284
284
|
readonly outputTokens?: number;
|
|
285
285
|
readonly cacheReadTokens?: number;
|
|
286
286
|
readonly cacheCreationTokens?: number;
|
|
287
|
+
readonly timing?: ProviderCallTiming;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/** Local monotonic measurements, not a claim about server-side model compute. */
|
|
291
|
+
export interface ProviderCallTiming {
|
|
292
|
+
readonly contextProjectionMs: number;
|
|
293
|
+
readonly preparationMs: number;
|
|
294
|
+
readonly hooksMs: number;
|
|
295
|
+
readonly firstEventMs: number | null;
|
|
296
|
+
/** Iterator waiting includes the provider adapter, network and remote work. */
|
|
297
|
+
readonly providerWaitMs: number;
|
|
298
|
+
/** Local processing of stream events, including event-log subscribers. */
|
|
299
|
+
readonly consumerMs: number;
|
|
300
|
+
/** Sum of measured stages; excludes tools, permissions and focus waits. */
|
|
301
|
+
readonly totalMs: number;
|
|
287
302
|
}
|
|
288
303
|
|
|
289
304
|
export interface ErrorEvent extends EventBase {
|
package/src/index.ts
CHANGED
|
@@ -35,12 +35,21 @@ export type {
|
|
|
35
35
|
ElisionEvent,
|
|
36
36
|
ProviderRequestEvent,
|
|
37
37
|
ProviderResponseEvent,
|
|
38
|
+
ProviderCallTiming,
|
|
38
39
|
ErrorEvent,
|
|
39
40
|
AbortEvent,
|
|
40
41
|
PluginEvent,
|
|
41
42
|
} from './events.js';
|
|
42
43
|
|
|
43
44
|
export type { EventLogReader } from './log.js';
|
|
45
|
+
export {
|
|
46
|
+
computerControlStateSchema, computerControlOwnerSchema,
|
|
47
|
+
computerControlCommandSchema, computerControlSnapshotSchema,
|
|
48
|
+
computerApprovalFocusSchema, type ComputerApprovalFocus,
|
|
49
|
+
} from './computer-control.js';
|
|
50
|
+
export type {
|
|
51
|
+
ComputerControlState, ComputerControlCommand, ComputerControlSnapshot, ComputerControlService,
|
|
52
|
+
} from './computer-control.js';
|
|
44
53
|
|
|
45
54
|
// Identity. The type + pure helpers ride the main barrel; the OS resolver needs
|
|
46
55
|
// `node:os` and is exported from `@moxxy/sdk/server`.
|
|
@@ -149,6 +158,7 @@ export type {
|
|
|
149
158
|
ToolContext,
|
|
150
159
|
ToolDef,
|
|
151
160
|
HostedTool,
|
|
161
|
+
ToolImageResult,
|
|
152
162
|
ToolCompactPresentation,
|
|
153
163
|
BrokeredFs,
|
|
154
164
|
BrokeredStat,
|
|
@@ -344,6 +354,7 @@ export {
|
|
|
344
354
|
type CheckpointResult,
|
|
345
355
|
type TurnCheckpoint,
|
|
346
356
|
} from './mode-helpers.js';
|
|
357
|
+
export type { WorkflowApprovalScope, WorkflowApprovalChoice, WorkflowApprovalItem, WorkflowApprovalsView } from './workflow-approval.js';
|
|
347
358
|
export {
|
|
348
359
|
dispatchToolCall,
|
|
349
360
|
executeToolUses,
|
|
@@ -595,3 +606,4 @@ export {
|
|
|
595
606
|
} from './install-hints.js';
|
|
596
607
|
|
|
597
608
|
export { z } from 'zod';
|
|
609
|
+
export { workflowApprovalItemSchema, workflowApprovalItemsSchema } from './workflow-approval.js';
|
package/src/loop-helpers.test.ts
CHANGED
|
@@ -222,6 +222,21 @@ describe('projectMessagesFromLog', () => {
|
|
|
222
222
|
}
|
|
223
223
|
});
|
|
224
224
|
|
|
225
|
+
it.each([
|
|
226
|
+
{ mediaType: 'image/png', base64: 'AAAABBBB', forModel: 'capture=c1; window=w1; source=(-1920,0,1920,1080)' },
|
|
227
|
+
{ type: 'image', mediaType: 'image/png', data: 'AAAABBBB', forModel: 'capture=c1; window=w1; source=(-1920,0,1920,1080)' },
|
|
228
|
+
])('preserves image metadata as model-facing text without stringifying pixels', (output) => {
|
|
229
|
+
const log = reader([
|
|
230
|
+
event(0, { type: 'tool_call_requested', turnId: t1, source: 'model', callId: 'c1', name: 'computer_screenshot', input: {} }),
|
|
231
|
+
event(1, { type: 'tool_result', turnId: t1, source: 'tool', callId: 'c1', ok: true, output }),
|
|
232
|
+
]);
|
|
233
|
+
const result = projectMessagesFromLog({ log }).find((message) => message.role === 'tool_result');
|
|
234
|
+
expect(result?.content).toEqual([
|
|
235
|
+
{ type: 'tool_result', toolUseId: 'c1', content: output.forModel, isError: false },
|
|
236
|
+
{ type: 'image', mediaType: 'image/png', data: 'AAAABBBB' },
|
|
237
|
+
]);
|
|
238
|
+
});
|
|
239
|
+
|
|
225
240
|
it('accepts the provider-native image shape { type:image, mediaType, data }', () => {
|
|
226
241
|
const log = reader([
|
|
227
242
|
event(0, { type: 'user_prompt', turnId: t1, source: 'user', text: 'grab' }),
|
|
@@ -2,6 +2,8 @@ import type { ProviderEvent, ProviderMessage, TokenUsage } from '../provider.js'
|
|
|
2
2
|
import type { ModeContext } from '../mode.js';
|
|
3
3
|
import type { StopReason } from '../provider-utils.js';
|
|
4
4
|
import { applyLazyTools } from '../tool-gating.js';
|
|
5
|
+
import type { ProviderCallTiming } from '../events.js';
|
|
6
|
+
import { providerTiming } from './provider-timing.js';
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* Shared bits used by every loop strategy: a typed tool-use struct and a
|
|
@@ -38,6 +40,7 @@ function addUsage(a: TokenUsage, b: TokenUsage): TokenUsage {
|
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
export interface StreamResult {
|
|
43
|
+
readonly timing?: ProviderCallTiming;
|
|
41
44
|
readonly text: string;
|
|
42
45
|
readonly toolUses: ReadonlyArray<CollectedToolUse>;
|
|
43
46
|
readonly stopReason: StopReason;
|
|
@@ -67,6 +70,7 @@ export async function collectProviderStream(
|
|
|
67
70
|
ctx: ModeContext,
|
|
68
71
|
messages: ReadonlyArray<ProviderMessage>,
|
|
69
72
|
opts: {
|
|
73
|
+
projectionMs?: number;
|
|
70
74
|
iteration?: number;
|
|
71
75
|
includeTools?: boolean;
|
|
72
76
|
maxTokens?: number;
|
|
@@ -89,6 +93,7 @@ export async function collectProviderStream(
|
|
|
89
93
|
volatileTailCount?: number;
|
|
90
94
|
} = {},
|
|
91
95
|
): Promise<StreamResult> {
|
|
96
|
+
const start=performance.now();
|
|
92
97
|
const descriptor = ctx.provider.models.find((model) => model.id === ctx.model);
|
|
93
98
|
|
|
94
99
|
// Tool schemas are useful only when both the caller requests them and the
|
|
@@ -148,6 +153,7 @@ export async function collectProviderStream(
|
|
|
148
153
|
...(reqReasoning ? { reasoning: reqReasoning } : {}),
|
|
149
154
|
signal: ctx.signal,
|
|
150
155
|
};
|
|
156
|
+
const prepared=performance.now();
|
|
151
157
|
const transformed = await ctx.hooks.dispatchBeforeProviderCall(req, {
|
|
152
158
|
sessionId: ctx.sessionId,
|
|
153
159
|
// Thread the session's real cwd/env (mirrored on ModeContext) so path-based
|
|
@@ -160,6 +166,10 @@ export async function collectProviderStream(
|
|
|
160
166
|
turnId: ctx.turnId,
|
|
161
167
|
iteration: opts.iteration ?? 0,
|
|
162
168
|
});
|
|
169
|
+
const hooked=performance.now();
|
|
170
|
+
let firstEvent:number|null=null;
|
|
171
|
+
let consumerMs=0;
|
|
172
|
+
const timing=() => providerTiming({start,prepared,hooked,end:performance.now(),firstEvent,consumerMs,projectionMs:opts.projectionMs ?? 0});
|
|
163
173
|
|
|
164
174
|
let text = '';
|
|
165
175
|
const toolUses = new Map<string, { name?: string; input?: unknown }>();
|
|
@@ -180,6 +190,7 @@ export async function collectProviderStream(
|
|
|
180
190
|
stream = ctx.provider.stream(transformed);
|
|
181
191
|
} catch (err) {
|
|
182
192
|
return {
|
|
193
|
+
timing:timing(),
|
|
183
194
|
text: '',
|
|
184
195
|
toolUses: [],
|
|
185
196
|
stopReason: 'error',
|
|
@@ -189,6 +200,9 @@ export async function collectProviderStream(
|
|
|
189
200
|
|
|
190
201
|
try {
|
|
191
202
|
for await (const event of stream) {
|
|
203
|
+
const processingStarted=performance.now();
|
|
204
|
+
if (firstEvent===null) firstEvent=processingStarted;
|
|
205
|
+
try {
|
|
192
206
|
switch (event.type) {
|
|
193
207
|
case 'text_delta': {
|
|
194
208
|
text += event.delta;
|
|
@@ -247,6 +261,7 @@ export async function collectProviderStream(
|
|
|
247
261
|
default:
|
|
248
262
|
break;
|
|
249
263
|
}
|
|
264
|
+
} finally { consumerMs+=performance.now()-processingStarted; }
|
|
250
265
|
}
|
|
251
266
|
} catch (err) {
|
|
252
267
|
// A stream-level `error` event is the more authoritative classification —
|
|
@@ -260,6 +275,8 @@ export async function collectProviderStream(
|
|
|
260
275
|
}
|
|
261
276
|
}
|
|
262
277
|
|
|
278
|
+
const measuredTiming=timing();
|
|
279
|
+
|
|
263
280
|
const finalToolUses: CollectedToolUse[] = [];
|
|
264
281
|
for (const [id, partial] of toolUses) {
|
|
265
282
|
if (!partial.name) continue;
|
|
@@ -277,6 +294,7 @@ export async function collectProviderStream(
|
|
|
277
294
|
}
|
|
278
295
|
: undefined;
|
|
279
296
|
return {
|
|
297
|
+
timing:measuredTiming,
|
|
280
298
|
text,
|
|
281
299
|
toolUses: finalToolUses,
|
|
282
300
|
stopReason,
|
|
@@ -420,7 +420,10 @@ export function projectMessages(
|
|
|
420
420
|
} else if (e.ok && (image = imageBlockFromOutput(e.output))) {
|
|
421
421
|
// Short marker satisfies the tool_use→tool_result pairing; the image
|
|
422
422
|
// block (appended below) carries the actual pixels.
|
|
423
|
-
|
|
423
|
+
const description = (e.output as { forModel?: unknown }).forModel;
|
|
424
|
+
text = typeof description === 'string'
|
|
425
|
+
? description
|
|
426
|
+
: '[image returned by tool — see attached image]';
|
|
424
427
|
} else {
|
|
425
428
|
text = safeStringifyOutput(e.output);
|
|
426
429
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { expect, it } from 'vitest';
|
|
2
|
+
import { providerTiming } from './provider-timing.js';
|
|
3
|
+
|
|
4
|
+
it('separates preparation, hooks, provider waiting and local stream handling without double counting', () => {
|
|
5
|
+
expect(providerTiming({start:100,prepared:110,hooked:140,end:240,firstEvent:180,consumerMs:25,projectionMs:7})).toEqual({
|
|
6
|
+
contextProjectionMs:7,preparationMs:10,hooksMs:30,firstEventMs:40,
|
|
7
|
+
providerWaitMs:75,consumerMs:25,totalMs:147,
|
|
8
|
+
});
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('keeps a missing first event distinct from an immediate response', () => {
|
|
12
|
+
const timing=providerTiming({start:0,prepared:0,hooked:1,end:5,firstEvent:null,consumerMs:0,projectionMs:0});
|
|
13
|
+
expect(timing.firstEventMs).toBeNull();
|
|
14
|
+
expect(timing.providerWaitMs).toBe(4);
|
|
15
|
+
expect(timing.totalMs).toBe(5);
|
|
16
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ProviderCallTiming } from '../events.js';
|
|
2
|
+
|
|
3
|
+
export function providerTiming(sample: {
|
|
4
|
+
start:number; prepared:number; hooked:number; end:number;
|
|
5
|
+
firstEvent:number|null; consumerMs:number; projectionMs:number;
|
|
6
|
+
}): ProviderCallTiming {
|
|
7
|
+
const duration=(end:number,start:number) => Math.max(0,end-start);
|
|
8
|
+
const streamMs=duration(sample.end,sample.hooked);
|
|
9
|
+
const consumerMs=Math.min(streamMs,Math.max(0,sample.consumerMs));
|
|
10
|
+
return {
|
|
11
|
+
contextProjectionMs:sample.projectionMs,
|
|
12
|
+
preparationMs:duration(sample.prepared,sample.start),
|
|
13
|
+
hooksMs:duration(sample.hooked,sample.prepared),
|
|
14
|
+
firstEventMs:sample.firstEvent===null ? null : duration(sample.firstEvent,sample.hooked),
|
|
15
|
+
providerWaitMs:streamMs-consumerMs,
|
|
16
|
+
consumerMs,
|
|
17
|
+
totalMs:duration(sample.end,sample.start)+sample.projectionMs,
|
|
18
|
+
};
|
|
19
|
+
}
|
package/src/mode/react-loop.ts
CHANGED
|
@@ -267,6 +267,7 @@ export async function* runReactLoop(
|
|
|
267
267
|
// selected model can actually execute the loader. Unknown/dynamic model ids
|
|
268
268
|
// retain the historical tool-capable behavior, matching collect-stream's
|
|
269
269
|
// conservative capability fallback.
|
|
270
|
+
const projectionStarted=performance.now();
|
|
270
271
|
const descriptor = ctx.provider.models.find((candidate) => candidate.id === ctx.model);
|
|
271
272
|
const availableSkills = descriptor?.supportsTools === false ? [] : ctx.skills.list();
|
|
272
273
|
const systemPrompt = buildSystemPromptWithSkills(ctx.systemPrompt, availableSkills);
|
|
@@ -275,6 +276,7 @@ export async function* runReactLoop(
|
|
|
275
276
|
...(volatileText ? { trailingUserText: volatileText } : {}),
|
|
276
277
|
});
|
|
277
278
|
|
|
279
|
+
const projectionMs=performance.now()-projectionStarted;
|
|
278
280
|
yield await ctx.emit({
|
|
279
281
|
type: 'provider_request',
|
|
280
282
|
sessionId: ctx.sessionId,
|
|
@@ -284,11 +286,12 @@ export async function* runReactLoop(
|
|
|
284
286
|
model: ctx.model,
|
|
285
287
|
});
|
|
286
288
|
|
|
287
|
-
const { text, toolUses, stopReason, error, usage, reasoning } = await collectProviderStream(
|
|
289
|
+
const { text, toolUses, stopReason, error, usage, reasoning, timing } = await collectProviderStream(
|
|
288
290
|
ctx,
|
|
289
291
|
messages,
|
|
290
292
|
{
|
|
291
293
|
iteration,
|
|
294
|
+
projectionMs,
|
|
292
295
|
stablePrefixIndex,
|
|
293
296
|
// Volatile text is injected for this call only, never appended to the
|
|
294
297
|
// log — the cache strategy must keep its rolling tail breakpoint
|
|
@@ -317,6 +320,7 @@ export async function* runReactLoop(
|
|
|
317
320
|
provider: ctx.provider.name,
|
|
318
321
|
model: ctx.model,
|
|
319
322
|
...usageEventFields(usage),
|
|
323
|
+
...(timing ? {timing} : {}),
|
|
320
324
|
});
|
|
321
325
|
|
|
322
326
|
if (error) {
|
package/src/mode.ts
CHANGED
|
@@ -194,7 +194,7 @@ export interface ApprovalDecision {
|
|
|
194
194
|
|
|
195
195
|
export interface ApprovalResolver {
|
|
196
196
|
readonly name: string;
|
|
197
|
-
confirm(req: ApprovalRequest): Promise<ApprovalDecision>;
|
|
197
|
+
confirm(req: ApprovalRequest, context?: { readonly turnId: string }): Promise<ApprovalDecision>;
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
/**
|
package/src/permission.ts
CHANGED
|
@@ -39,6 +39,7 @@ export interface PendingToolCall {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
export interface PermissionContext {
|
|
42
|
+
readonly turnId?: string;
|
|
42
43
|
readonly toolDescription?: string;
|
|
43
44
|
readonly skillContext?: string;
|
|
44
45
|
readonly sessionId: string;
|
|
@@ -47,6 +48,8 @@ export interface PermissionContext {
|
|
|
47
48
|
export interface PermissionResolver {
|
|
48
49
|
readonly name: string;
|
|
49
50
|
check(call: PendingToolCall, ctx: PermissionContext): Promise<PermissionDecision>;
|
|
51
|
+
/** Host-scoped approval that unattended modes must not bypass. */
|
|
52
|
+
mandatoryCheck?(call: PendingToolCall, ctx: PermissionContext): Promise<PermissionDecision | null>;
|
|
50
53
|
/**
|
|
51
54
|
* Optional prompt-free policy probe. Returns the decision the persistent
|
|
52
55
|
* policy layer would make for this call (user deny/allow rules from
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { zodToJsonSchema } from './provider-utils.js';
|
|
4
|
+
|
|
5
|
+
describe('model-visible validation constraints', () => {
|
|
6
|
+
it('preserves integer limits including exclusive positive bounds', () => {
|
|
7
|
+
expect(zodToJsonSchema(z.number().int().min(500).max(8000))).toEqual({ type: 'integer', minimum: 500, maximum: 8000 });
|
|
8
|
+
expect(zodToJsonSchema(z.number().positive().lt(10))).toEqual({ type: 'number', exclusiveMinimum: 0, exclusiveMaximum: 10 });
|
|
9
|
+
});
|
|
10
|
+
it('preserves string lengths and supported key patterns', () => {
|
|
11
|
+
expect(zodToJsonSchema(z.string().min(1).max(160))).toEqual({ type: 'string', minLength: 1, maxLength: 160 });
|
|
12
|
+
expect(zodToJsonSchema(z.string().regex(/^(enter|tab)$/))).toEqual({ type: 'string', pattern: '^(enter|tab)$' });
|
|
13
|
+
expect(zodToJsonSchema(z.string().length(3))).toEqual({ type: 'string', minLength: 3, maxLength: 3 });
|
|
14
|
+
});
|
|
15
|
+
it('preserves array bounds', () => {
|
|
16
|
+
expect(zodToJsonSchema(z.array(z.string()).min(1).max(4))).toEqual({ type: 'array', items: { type: 'string' }, minItems: 1, maxItems: 4 });
|
|
17
|
+
expect(zodToJsonSchema(z.array(z.number()).length(2))).toEqual({ type: 'array', items: { type: 'number' }, minItems: 2, maxItems: 2 });
|
|
18
|
+
});
|
|
19
|
+
it('preserves an explicit null alternative through optional and transform wrappers', () => {
|
|
20
|
+
const schema = z.object({ root: z.object({ id: z.string().min(1) }).nullable().optional().transform(value => value ?? undefined) });
|
|
21
|
+
expect(zodToJsonSchema(schema)).toMatchObject({
|
|
22
|
+
required: [], properties: { root: { anyOf: [
|
|
23
|
+
{ type: 'object', properties: { id: { type: 'string', minLength: 1 } }, required: ['id'] },
|
|
24
|
+
{ type: 'null' },
|
|
25
|
+
] } },
|
|
26
|
+
});
|
|
27
|
+
expect(schema.parse({ root: null })).toEqual({ root: undefined });
|
|
28
|
+
});
|
|
29
|
+
});
|