@crosshands/cli 0.1.6 → 0.2.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/dist/bin.js +3 -3
- package/dist/bin.js.map +1 -1
- package/dist/broker-host.d.ts +2 -1
- package/dist/broker-host.d.ts.map +1 -1
- package/dist/broker-host.js +65 -40
- package/dist/broker-host.js.map +1 -1
- package/dist/broker-result.d.ts +7 -0
- package/dist/broker-result.d.ts.map +1 -0
- package/dist/broker-result.js +10 -0
- package/dist/broker-result.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +60 -32
- package/dist/index.js.map +1 -1
- package/dist/intent/dispatch.d.ts +13 -0
- package/dist/intent/dispatch.d.ts.map +1 -0
- package/dist/intent/dispatch.js +180 -0
- package/dist/intent/dispatch.js.map +1 -0
- package/dist/intent/env.d.ts +11 -0
- package/dist/intent/env.d.ts.map +1 -0
- package/dist/intent/env.js +10 -0
- package/dist/intent/env.js.map +1 -0
- package/dist/intent/evaluate.d.ts +21 -0
- package/dist/intent/evaluate.d.ts.map +1 -0
- package/dist/intent/evaluate.js +115 -0
- package/dist/intent/evaluate.js.map +1 -0
- package/dist/intent/log.d.ts +8 -0
- package/dist/intent/log.d.ts.map +1 -0
- package/dist/intent/log.js +37 -0
- package/dist/intent/log.js.map +1 -0
- package/dist/intent/tree.d.ts +13 -0
- package/dist/intent/tree.d.ts.map +1 -0
- package/dist/intent/tree.js +99 -0
- package/dist/intent/tree.js.map +1 -0
- package/dist/local-client.d.ts +1 -0
- package/dist/local-client.d.ts.map +1 -1
- package/dist/local-client.js +23 -15
- package/dist/local-client.js.map +1 -1
- package/package.json +6 -6
- package/src/bin.ts +4 -3
- package/src/broker-host.ts +68 -38
- package/src/broker-result.ts +14 -0
- package/src/index.ts +71 -35
- package/src/intent/dispatch.ts +276 -0
- package/src/intent/env.ts +13 -0
- package/src/intent/evaluate.ts +155 -0
- package/src/intent/log.ts +47 -0
- package/src/intent/tree.ts +108 -0
- package/src/local-client.ts +31 -15
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { ComputerError, createComputerError, hasIntentTarget, parsePublicInput, parsePublicOutput, PublicMutationResultSchema, PublicSnapshotResultSchema, SnapshotResultSchema, splitPublicInput, toBrokerInput } from '@crosshands/contract';
|
|
2
|
+
import { unwrapBrokerResult } from '../broker-result.js';
|
|
3
|
+
import { parseJevEnv } from './env.js';
|
|
4
|
+
import { liveEvaluator, namedTargetAllowed, suggestionFromAnswers } from './evaluate.js';
|
|
5
|
+
import { clickableMoves, parseTreeMoves } from './tree.js';
|
|
6
|
+
const NAMED_GATE = new Set(['click', 'setValue']);
|
|
7
|
+
function policyUnavailable() {
|
|
8
|
+
return createComputerError('policy_unavailable', 'Jev could not rank this snapshot').toJSON();
|
|
9
|
+
}
|
|
10
|
+
function snapshotResultOf(value) {
|
|
11
|
+
return SnapshotResultSchema.parse(value);
|
|
12
|
+
}
|
|
13
|
+
function notAttempted(error, suggestion) {
|
|
14
|
+
return PublicMutationResultSchema.parse({
|
|
15
|
+
outcome: { state: 'not_attempted', error },
|
|
16
|
+
...(suggestion === undefined ? {} : { suggestion })
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function withSnapshotIssue(look, issue) {
|
|
20
|
+
return PublicSnapshotResultSchema.parse({
|
|
21
|
+
...look,
|
|
22
|
+
issues: [...look.issues, issue]
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function contextTokenOf(input) {
|
|
26
|
+
if (!('contextToken' in input) || typeof input.contextToken !== 'string')
|
|
27
|
+
return undefined;
|
|
28
|
+
return input.contextToken;
|
|
29
|
+
}
|
|
30
|
+
function elementIndexOf(input) {
|
|
31
|
+
if (!('target' in input))
|
|
32
|
+
return undefined;
|
|
33
|
+
const target = input.target;
|
|
34
|
+
if (target === null || typeof target !== 'object' || !('elementIndex' in target))
|
|
35
|
+
return undefined;
|
|
36
|
+
return typeof target.elementIndex === 'number' ? target.elementIndex : undefined;
|
|
37
|
+
}
|
|
38
|
+
function boundIndex(operation, suggestion) {
|
|
39
|
+
const move = suggestion.move;
|
|
40
|
+
if (operation === 'setValue' && move.kind === 'setValue')
|
|
41
|
+
return move.elementIndex;
|
|
42
|
+
if ((operation === 'click' || operation === 'scroll' || operation === 'performSecondaryAction') &&
|
|
43
|
+
move.kind === 'click') {
|
|
44
|
+
return move.elementIndex;
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
async function rank(look, goal, evaluate, log, app) {
|
|
49
|
+
const moves = clickableMoves(parseTreeMoves(look.snapshot.treeText));
|
|
50
|
+
if (moves.length === 0) {
|
|
51
|
+
return {
|
|
52
|
+
untrusted: true,
|
|
53
|
+
snapshotId: look.snapshot.id,
|
|
54
|
+
move: { kind: 'blocked', reason: 'no_candidate' }
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const suggestion = suggestionFromAnswers(look.snapshot.id, moves, await evaluate({ goal, ...(app === undefined ? {} : { app }), moves }));
|
|
58
|
+
log?.emit({
|
|
59
|
+
kind: 'jev.decision',
|
|
60
|
+
snapshotId: suggestion.snapshotId,
|
|
61
|
+
move: suggestion.move.kind,
|
|
62
|
+
...(suggestion.move.kind === 'click' ||
|
|
63
|
+
suggestion.move.kind === 'setValue' ||
|
|
64
|
+
suggestion.move.kind === 'secondary' ||
|
|
65
|
+
suggestion.move.kind === 'scroll'
|
|
66
|
+
? { elementIndex: suggestion.move.elementIndex }
|
|
67
|
+
: {}),
|
|
68
|
+
confidence: suggestion.confidence,
|
|
69
|
+
goal
|
|
70
|
+
});
|
|
71
|
+
return suggestion;
|
|
72
|
+
}
|
|
73
|
+
function evaluatorFor(env, override) {
|
|
74
|
+
if (override !== undefined)
|
|
75
|
+
return override;
|
|
76
|
+
if (env.kind !== 'on')
|
|
77
|
+
return undefined;
|
|
78
|
+
return liveEvaluator(env.apiKey);
|
|
79
|
+
}
|
|
80
|
+
async function lookAgain(request, token) {
|
|
81
|
+
return snapshotResultOf(await request('getAppState', { contextToken: token, captureScreenshot: false }));
|
|
82
|
+
}
|
|
83
|
+
async function suggestObserve(request, input, goal, env, evaluate, log) {
|
|
84
|
+
const result = await request('getAppState', toBrokerInput('getAppState', input));
|
|
85
|
+
if (goal === undefined || env.kind === 'off')
|
|
86
|
+
return result;
|
|
87
|
+
const look = snapshotResultOf(result);
|
|
88
|
+
if (env.kind === 'fail_closed' || evaluate === undefined) {
|
|
89
|
+
return withSnapshotIssue(look, policyUnavailable());
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
const app = 'app' in input && typeof input.app === 'string' ? input.app : undefined;
|
|
93
|
+
const suggestion = await rank(look, goal, evaluate, log, app);
|
|
94
|
+
return parsePublicOutput('getAppState', { ...look, suggestion });
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return withSnapshotIssue(look, policyUnavailable());
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async function bindIntentTarget(request, operation, input, goal, env, evaluate, log) {
|
|
101
|
+
if (env.kind === 'off') {
|
|
102
|
+
throw createComputerError('invalid_argument', 'intent targeting requires CROSSHANDS_JEV=1');
|
|
103
|
+
}
|
|
104
|
+
if (env.kind === 'fail_closed' || evaluate === undefined || goal === undefined) {
|
|
105
|
+
throw createComputerError('intent_unavailable', 'Jev is enabled but no TypeSafe key is set');
|
|
106
|
+
}
|
|
107
|
+
const token = contextTokenOf(input);
|
|
108
|
+
if (token === undefined) {
|
|
109
|
+
throw createComputerError('invalid_argument', 'intent targeting requires a context token');
|
|
110
|
+
}
|
|
111
|
+
let look;
|
|
112
|
+
let suggestion;
|
|
113
|
+
try {
|
|
114
|
+
look = await lookAgain(request, token);
|
|
115
|
+
suggestion = await rank(look, goal, evaluate, log);
|
|
116
|
+
}
|
|
117
|
+
catch (cause) {
|
|
118
|
+
if (cause instanceof ComputerError)
|
|
119
|
+
throw cause;
|
|
120
|
+
return notAttempted(policyUnavailable());
|
|
121
|
+
}
|
|
122
|
+
const index = boundIndex(operation, suggestion);
|
|
123
|
+
if (index === undefined)
|
|
124
|
+
return notAttempted(policyUnavailable(), suggestion);
|
|
125
|
+
const bound = {
|
|
126
|
+
...splitPublicInput(input).rest,
|
|
127
|
+
contextToken: look.context.token,
|
|
128
|
+
target: { kind: 'element', elementIndex: index }
|
|
129
|
+
};
|
|
130
|
+
const result = await request(operation, toBrokerInput(operation, bound));
|
|
131
|
+
const body = result !== null && typeof result === 'object' ? result : {};
|
|
132
|
+
return parsePublicOutput(operation, {
|
|
133
|
+
...body,
|
|
134
|
+
resolvedTarget: { kind: 'element', elementIndex: index },
|
|
135
|
+
suggestion
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
async function gateNamedTarget(request, input, goal, evaluate, log) {
|
|
139
|
+
const named = elementIndexOf(input);
|
|
140
|
+
const token = contextTokenOf(input);
|
|
141
|
+
if (token === undefined || named === undefined)
|
|
142
|
+
return undefined;
|
|
143
|
+
try {
|
|
144
|
+
const look = await lookAgain(request, token);
|
|
145
|
+
const suggestion = await rank(look, goal, evaluate, log);
|
|
146
|
+
const picked = suggestion.move.kind === 'click' || suggestion.move.kind === 'setValue'
|
|
147
|
+
? suggestion.move.elementIndex
|
|
148
|
+
: undefined;
|
|
149
|
+
if (picked !== named || !namedTargetAllowed(suggestion.confidence)) {
|
|
150
|
+
return notAttempted(createComputerError('goal_mismatch', 'Named target does not match the per-call goal').toJSON(), suggestion);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return notAttempted(policyUnavailable());
|
|
155
|
+
}
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
export async function dispatchPublicOperation(broker, operation, rawInput, options = {}) {
|
|
159
|
+
const envState = parseJevEnv(options.env);
|
|
160
|
+
const parsed = parsePublicInput(operation, rawInput);
|
|
161
|
+
const { goal } = splitPublicInput(parsed);
|
|
162
|
+
const evaluate = evaluatorFor(envState, options.evaluate);
|
|
163
|
+
const request = async (name, input) => unwrapBrokerResult(await broker.request(name, input));
|
|
164
|
+
if (operation === 'getAppState') {
|
|
165
|
+
return suggestObserve(request, parsed, goal, envState, evaluate, options.log);
|
|
166
|
+
}
|
|
167
|
+
if (hasIntentTarget(parsed)) {
|
|
168
|
+
return bindIntentTarget(request, operation, parsed, goal, envState, evaluate, options.log);
|
|
169
|
+
}
|
|
170
|
+
if (goal !== undefined &&
|
|
171
|
+
envState.kind === 'on' &&
|
|
172
|
+
evaluate !== undefined &&
|
|
173
|
+
NAMED_GATE.has(operation)) {
|
|
174
|
+
const gated = await gateNamedTarget(request, parsed, goal, evaluate, options.log);
|
|
175
|
+
if (gated !== undefined)
|
|
176
|
+
return gated;
|
|
177
|
+
}
|
|
178
|
+
return request(operation, toBrokerInput(operation, parsed));
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/intent/dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/intent/env.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GACd;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAElC,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAOxE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function parseJevEnv(env = process.env) {
|
|
2
|
+
if (env.CROSSHANDS_JEV !== '1')
|
|
3
|
+
return { kind: 'off' };
|
|
4
|
+
const apiKey = env.TYPESAFE_API_KEY;
|
|
5
|
+
if (typeof apiKey !== 'string' || apiKey.length === 0) {
|
|
6
|
+
return { kind: 'fail_closed', reason: 'missing_key' };
|
|
7
|
+
}
|
|
8
|
+
return { kind: 'on', apiKey };
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/intent/env.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,WAAW,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC9D,IAAI,GAAG,CAAC,cAAc,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IACtD,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAA;IACnC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,CAAA;IACvD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AAC/B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Suggestion } from '@crosshands/contract';
|
|
2
|
+
import type { TreeMove } from './tree.js';
|
|
3
|
+
export type JevAnswers = {
|
|
4
|
+
move: 'click' | 'setValue' | 'wait' | 'done' | 'blocked';
|
|
5
|
+
clickWhich?: string;
|
|
6
|
+
setValueWhich?: string;
|
|
7
|
+
confidence?: number;
|
|
8
|
+
goalMet?: number;
|
|
9
|
+
blockedReason?: string;
|
|
10
|
+
};
|
|
11
|
+
export type EvaluateInput = {
|
|
12
|
+
goal: string;
|
|
13
|
+
app?: string;
|
|
14
|
+
moves: readonly TreeMove[];
|
|
15
|
+
};
|
|
16
|
+
export type EvaluateFn = (input: EvaluateInput) => Promise<JevAnswers>;
|
|
17
|
+
export declare const GATE_REFUSE_BELOW = 0.35;
|
|
18
|
+
export declare function namedTargetAllowed(confidence: number | undefined): boolean;
|
|
19
|
+
export declare function suggestionFromAnswers(snapshotId: string, moves: readonly TreeMove[], answers: JevAnswers): Suggestion;
|
|
20
|
+
export declare function liveEvaluator(apiKey: string): EvaluateFn;
|
|
21
|
+
//# sourceMappingURL=evaluate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/intent/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACxD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;AAEtE,eAAO,MAAM,iBAAiB,OAAO,CAAA;AAErC,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAG1E;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,OAAO,EAAE,UAAU,GAClB,UAAU,CAiCZ;AAeD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CA0ExD"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
export const GATE_REFUSE_BELOW = 0.35;
|
|
2
|
+
export function namedTargetAllowed(confidence) {
|
|
3
|
+
if (confidence === undefined)
|
|
4
|
+
return true;
|
|
5
|
+
return confidence >= GATE_REFUSE_BELOW;
|
|
6
|
+
}
|
|
7
|
+
export function suggestionFromAnswers(snapshotId, moves, answers) {
|
|
8
|
+
const byIndex = new Map(moves.map((move) => [String(move.elementIndex), move]));
|
|
9
|
+
if (answers.move === 'wait') {
|
|
10
|
+
return { untrusted: true, snapshotId, move: { kind: 'wait' }, confidence: answers.confidence };
|
|
11
|
+
}
|
|
12
|
+
if (answers.move === 'done') {
|
|
13
|
+
return { untrusted: true, snapshotId, move: { kind: 'done' }, confidence: answers.confidence };
|
|
14
|
+
}
|
|
15
|
+
if (answers.move === 'blocked') {
|
|
16
|
+
return {
|
|
17
|
+
untrusted: true,
|
|
18
|
+
snapshotId,
|
|
19
|
+
move: { kind: 'blocked', reason: answers.blockedReason ?? 'blocked' },
|
|
20
|
+
confidence: answers.confidence
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const raw = answers.move === 'setValue' ? answers.setValueWhich : answers.clickWhich;
|
|
24
|
+
const selected = raw === undefined ? undefined : byIndex.get(raw);
|
|
25
|
+
if (selected === undefined) {
|
|
26
|
+
return {
|
|
27
|
+
untrusted: true,
|
|
28
|
+
snapshotId,
|
|
29
|
+
move: { kind: 'blocked', reason: 'no_candidate' },
|
|
30
|
+
confidence: answers.confidence
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
untrusted: true,
|
|
35
|
+
snapshotId,
|
|
36
|
+
move: { kind: answers.move, elementIndex: selected.elementIndex },
|
|
37
|
+
confidence: answers.confidence,
|
|
38
|
+
label: `${selected.role} ${selected.label}`.trim()
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function criteria(moves) {
|
|
42
|
+
return Object.fromEntries(moves.map((move) => [String(move.elementIndex), `${move.role} ${move.label}`.trim()]));
|
|
43
|
+
}
|
|
44
|
+
export function liveEvaluator(apiKey) {
|
|
45
|
+
return async (input) => {
|
|
46
|
+
const clickable = criteria(input.moves);
|
|
47
|
+
const response = await fetch('https://api.typesafe.ai/v1/systemone', {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
headers: {
|
|
50
|
+
authorization: `Bearer ${apiKey}`,
|
|
51
|
+
'content-type': 'application/json'
|
|
52
|
+
},
|
|
53
|
+
body: JSON.stringify({
|
|
54
|
+
model: 'jev-latest',
|
|
55
|
+
state: {
|
|
56
|
+
goal: input.goal,
|
|
57
|
+
...(input.app === undefined ? {} : { app: input.app }),
|
|
58
|
+
clickable
|
|
59
|
+
},
|
|
60
|
+
questions: {
|
|
61
|
+
move: {
|
|
62
|
+
type: 'choice',
|
|
63
|
+
instructions: 'What should we do next for the goal?',
|
|
64
|
+
criteria: {
|
|
65
|
+
click: 'Press one clickable control',
|
|
66
|
+
setValue: 'Pick a field for the caller to fill',
|
|
67
|
+
wait: 'The window is still loading',
|
|
68
|
+
done: 'The goal is already met',
|
|
69
|
+
blocked: 'Stop'
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
click_which: {
|
|
73
|
+
type: 'choice',
|
|
74
|
+
instructions: 'If the move is click, which control?',
|
|
75
|
+
criteria: clickable
|
|
76
|
+
},
|
|
77
|
+
setvalue_which: {
|
|
78
|
+
type: 'choice',
|
|
79
|
+
instructions: 'If the move is setValue, which field?',
|
|
80
|
+
criteria: clickable
|
|
81
|
+
},
|
|
82
|
+
goal_met: {
|
|
83
|
+
type: 'noul',
|
|
84
|
+
instructions: 'Is the goal already met?'
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
});
|
|
89
|
+
if (!response.ok) {
|
|
90
|
+
throw new Error(`TypeSafe HTTP ${response.status}`);
|
|
91
|
+
}
|
|
92
|
+
const body = (await response.json());
|
|
93
|
+
const answers = body.answers ?? {};
|
|
94
|
+
const move = answers.move?.choice;
|
|
95
|
+
if (move !== 'click' &&
|
|
96
|
+
move !== 'setValue' &&
|
|
97
|
+
move !== 'wait' &&
|
|
98
|
+
move !== 'done' &&
|
|
99
|
+
move !== 'blocked') {
|
|
100
|
+
return { move: 'blocked', blockedReason: 'no_candidate' };
|
|
101
|
+
}
|
|
102
|
+
const clickWhich = answers.click_which?.choice;
|
|
103
|
+
const setValueWhich = answers.setvalue_which?.choice;
|
|
104
|
+
const confidence = answers.move?.confidence ?? answers.click_which?.confidence;
|
|
105
|
+
const goalMet = answers.goal_met?.noul;
|
|
106
|
+
return {
|
|
107
|
+
move,
|
|
108
|
+
...(clickWhich === undefined ? {} : { clickWhich }),
|
|
109
|
+
...(setValueWhich === undefined ? {} : { setValueWhich }),
|
|
110
|
+
...(confidence === undefined ? {} : { confidence }),
|
|
111
|
+
...(goalMet === undefined ? {} : { goalMet })
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=evaluate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/intent/evaluate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type JevLogger = {
|
|
2
|
+
emit(record: Record<string, unknown>): void;
|
|
3
|
+
close(): Promise<void>;
|
|
4
|
+
};
|
|
5
|
+
export declare function hashGoal(goal: string): string;
|
|
6
|
+
export declare function createJevLogger(graphicalSessionId: string, env?: NodeJS.ProcessEnv): JevLogger;
|
|
7
|
+
export declare function createCliJevLogger(env?: NodeJS.ProcessEnv): JevLogger | undefined;
|
|
8
|
+
//# sourceMappingURL=log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/intent/log.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB,CAAA;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAID,wBAAgB,eAAe,CAC7B,kBAAkB,EAAE,MAAM,EAC1B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,SAAS,CAoBX;AAED,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,SAAS,GAAG,SAAS,CAG9F"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { JsonlFileWriter, diagnosticsDirectory } from '@crosshands/runtime';
|
|
3
|
+
import { localClientPaths } from '../local-client.js';
|
|
4
|
+
import { parseJevEnv } from './env.js';
|
|
5
|
+
export function hashGoal(goal) {
|
|
6
|
+
return createHash('sha256').update(goal).digest('hex');
|
|
7
|
+
}
|
|
8
|
+
const OMIT = new Set(['goal', 'apiKey', 'treeText', 'text', 'value', 'TYPESAFE_API_KEY']);
|
|
9
|
+
export function createJevLogger(graphicalSessionId, env = process.env) {
|
|
10
|
+
const writer = new JsonlFileWriter({
|
|
11
|
+
directory: diagnosticsDirectory(graphicalSessionId, { env }),
|
|
12
|
+
generation: `jev-${randomUUID()}`
|
|
13
|
+
});
|
|
14
|
+
writer.start();
|
|
15
|
+
return {
|
|
16
|
+
emit(record) {
|
|
17
|
+
const kind = record.kind;
|
|
18
|
+
if (typeof kind !== 'string')
|
|
19
|
+
return;
|
|
20
|
+
const goal = record.goal;
|
|
21
|
+
const rest = { ...record, kind, v: 1, ts: new Date().toISOString() };
|
|
22
|
+
for (const key of OMIT)
|
|
23
|
+
delete rest[key];
|
|
24
|
+
writer.emit({
|
|
25
|
+
...rest,
|
|
26
|
+
...(typeof goal === 'string' ? { goalSha256: hashGoal(goal) } : {})
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
close: () => writer.close()
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function createCliJevLogger(env = process.env) {
|
|
33
|
+
if (parseJevEnv(env).kind === 'off')
|
|
34
|
+
return undefined;
|
|
35
|
+
return createJevLogger(localClientPaths().identity.graphicalSessionId, env);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/intent/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAOtC,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAA;AAEzF,MAAM,UAAU,eAAe,CAC7B,kBAA0B,EAC1B,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,SAAS,EAAE,oBAAoB,CAAC,kBAAkB,EAAE,EAAE,GAAG,EAAE,CAAC;QAC5D,UAAU,EAAE,OAAO,UAAU,EAAE,EAAE;KAClC,CAAC,CAAA;IACF,MAAM,CAAC,KAAK,EAAE,CAAA;IACd,OAAO;QACL,IAAI,CAAC,MAAM;YACT,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;YACxB,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAM;YACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;YACxB,MAAM,IAAI,GAA4B,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAA;YAC7F,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;YACxC,MAAM,CAAC,IAAI,CAAC;gBACV,GAAG,IAAI;gBACP,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE,CAAC,CAAA;QACJ,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE;KAC5B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,SAAS,CAAA;IACrD,OAAO,eAAe,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;AAC7E,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type TreeMove = {
|
|
2
|
+
elementIndex: number;
|
|
3
|
+
role: string;
|
|
4
|
+
label: string;
|
|
5
|
+
line: string;
|
|
6
|
+
disabled: boolean;
|
|
7
|
+
clickable: boolean;
|
|
8
|
+
settable: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare function parseTreeMoves(treeText: string): TreeMove[];
|
|
11
|
+
export declare const JEV_CHOICE_CAP = 255;
|
|
12
|
+
export declare function clickableMoves(moves: readonly TreeMove[]): TreeMove[];
|
|
13
|
+
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/intent/tree.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAgED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CA2B3D;AAED,eAAO,MAAM,cAAc,MAAM,CAAA;AAEjC,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAIrE"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
const ROW_START = /^(\t*)(\d+) (.+)$/;
|
|
2
|
+
const MULTI_WORD_ROLES = [
|
|
3
|
+
'search text field',
|
|
4
|
+
'text field',
|
|
5
|
+
'text area',
|
|
6
|
+
'menu button',
|
|
7
|
+
'pop up button',
|
|
8
|
+
'popup button',
|
|
9
|
+
'radio button',
|
|
10
|
+
'check box',
|
|
11
|
+
'combo box',
|
|
12
|
+
'disclosure triangle',
|
|
13
|
+
'standard window',
|
|
14
|
+
'scroll area',
|
|
15
|
+
'split group',
|
|
16
|
+
'outline row',
|
|
17
|
+
'table row'
|
|
18
|
+
];
|
|
19
|
+
const CLICKABLE_ROLE = new Set([
|
|
20
|
+
'button',
|
|
21
|
+
'link',
|
|
22
|
+
'checkbox',
|
|
23
|
+
'check box',
|
|
24
|
+
'radio button',
|
|
25
|
+
'radio',
|
|
26
|
+
'tab',
|
|
27
|
+
'menu button',
|
|
28
|
+
'pop up button',
|
|
29
|
+
'popup button',
|
|
30
|
+
'combo box',
|
|
31
|
+
'disclosure triangle'
|
|
32
|
+
]);
|
|
33
|
+
const SETTABLE_ROLE = new Set(['text field', 'search text field', 'text area', 'combo box']);
|
|
34
|
+
function isHeaderOrFooter(line) {
|
|
35
|
+
if (line.length === 0)
|
|
36
|
+
return true;
|
|
37
|
+
if (line.startsWith('App='))
|
|
38
|
+
return true;
|
|
39
|
+
if (line.startsWith('Window:'))
|
|
40
|
+
return true;
|
|
41
|
+
if (line.startsWith('The focused UI element'))
|
|
42
|
+
return true;
|
|
43
|
+
if (line.startsWith('No UI element'))
|
|
44
|
+
return true;
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
function roleAndLabel(body) {
|
|
48
|
+
const lower = body.toLowerCase();
|
|
49
|
+
const multi = MULTI_WORD_ROLES.find((role) => lower.startsWith(role) && (body.length === role.length || /[\s,(]/.test(body[role.length])));
|
|
50
|
+
if (multi !== undefined) {
|
|
51
|
+
return {
|
|
52
|
+
role: body.slice(0, multi.length),
|
|
53
|
+
label: body.slice(multi.length).replace(/^[\s,]+/, '')
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const comma = body.indexOf(',');
|
|
57
|
+
const head = (comma === -1 ? body : body.slice(0, comma)).trim();
|
|
58
|
+
const space = head.indexOf(' ');
|
|
59
|
+
if (space === -1)
|
|
60
|
+
return { role: head, label: '' };
|
|
61
|
+
return { role: head.slice(0, space), label: head.slice(space + 1).trim() };
|
|
62
|
+
}
|
|
63
|
+
export function parseTreeMoves(treeText) {
|
|
64
|
+
const rows = [];
|
|
65
|
+
for (const line of treeText.split('\n')) {
|
|
66
|
+
const match = ROW_START.exec(line);
|
|
67
|
+
if (match !== null && match[2] !== undefined && match[3] !== undefined) {
|
|
68
|
+
rows.push({ elementIndex: Number(match[2]), body: match[3] });
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const previous = rows[rows.length - 1];
|
|
72
|
+
if (previous !== undefined && !isHeaderOrFooter(line))
|
|
73
|
+
previous.body += `\n${line}`;
|
|
74
|
+
}
|
|
75
|
+
return rows.map((row) => {
|
|
76
|
+
const { role, label } = roleAndLabel(row.body);
|
|
77
|
+
const disabled = /\(disabled\)/.test(row.body);
|
|
78
|
+
const roleKey = role.toLowerCase();
|
|
79
|
+
const settable = /\(settable\)/.test(row.body) || SETTABLE_ROLE.has(roleKey);
|
|
80
|
+
const clickable = !disabled && (CLICKABLE_ROLE.has(roleKey) || settable);
|
|
81
|
+
return {
|
|
82
|
+
elementIndex: row.elementIndex,
|
|
83
|
+
role,
|
|
84
|
+
label,
|
|
85
|
+
line: `${row.elementIndex} ${row.body}`,
|
|
86
|
+
disabled,
|
|
87
|
+
clickable,
|
|
88
|
+
settable
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
export const JEV_CHOICE_CAP = 255;
|
|
93
|
+
export function clickableMoves(moves) {
|
|
94
|
+
const selected = moves.filter((move) => move.clickable);
|
|
95
|
+
if (selected.length <= JEV_CHOICE_CAP)
|
|
96
|
+
return selected;
|
|
97
|
+
return selected.slice(0, JEV_CHOICE_CAP);
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/intent/tree.ts"],"names":[],"mappings":"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"}
|
package/dist/local-client.d.ts
CHANGED
|
@@ -13,5 +13,6 @@ export type ProductionClientOptions = {
|
|
|
13
13
|
spawnBroker?: (entrypoint: string) => void | Promise<void>;
|
|
14
14
|
paths?: LocalClientPaths;
|
|
15
15
|
};
|
|
16
|
+
export declare function brokerSpawnEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
16
17
|
export declare function createProductionBrokerClient(options?: ProductionClientOptions): Promise<CliBrokerClient>;
|
|
17
18
|
//# sourceMappingURL=local-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-client.d.ts","sourceRoot":"","sources":["../src/local-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-client.d.ts","sourceRoot":"","sources":["../src/local-client.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,cAAc,EAGd,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAA;AAG5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,oBAAoB,CAAA;IAC9B,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;CAC5C,CAAA;AAED,wBAAgB,gBAAgB,IAAI,gBAAgB,CA2BnD;AAwDD,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1D,KAAK,CAAC,EAAE,gBAAgB,CAAA;CACzB,CAAA;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAOxE;AAkBD,wBAAsB,4BAA4B,CAChD,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,eAAe,CAAC,CAqC1B"}
|