@testin-official/xagent 0.3.7
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 +157 -0
- package/dist/action/client.d.ts +13 -0
- package/dist/action/client.d.ts.map +1 -0
- package/dist/action/client.js +28 -0
- package/dist/action/client.js.map +1 -0
- package/dist/action/mcp-content.d.ts +2 -0
- package/dist/action/mcp-content.d.ts.map +1 -0
- package/dist/action/mcp-content.js +116 -0
- package/dist/action/mcp-content.js.map +1 -0
- package/dist/action/protocol.d.ts +36 -0
- package/dist/action/protocol.d.ts.map +1 -0
- package/dist/action/protocol.js +29 -0
- package/dist/action/protocol.js.map +1 -0
- package/dist/assets/contracts/app-list.schema.json +31 -0
- package/dist/assets/contracts/app-upload.schema.json +45 -0
- package/dist/assets/contracts/app.schema.json +18 -0
- package/dist/assets/contracts/authoring-attempt-create.schema.json +12 -0
- package/dist/assets/contracts/authoring-attempt.schema.json +56 -0
- package/dist/assets/contracts/authoring-complete.schema.json +13 -0
- package/dist/assets/contracts/authoring-draft-attempt-create.schema.json +12 -0
- package/dist/assets/contracts/authoring-observation.schema.json +28 -0
- package/dist/assets/contracts/authoring-revision-create.schema.json +13 -0
- package/dist/assets/contracts/authoring-revision.schema.json +19 -0
- package/dist/assets/contracts/authoring-session-create.schema.json +11 -0
- package/dist/assets/contracts/authoring-session.schema.json +54 -0
- package/dist/assets/contracts/canonical-script.schema.json +219 -0
- package/dist/assets/contracts/compat-script.schema.json +380 -0
- package/dist/assets/contracts/device-list.schema.json +19 -0
- package/dist/assets/contracts/error.schema.json +47 -0
- package/dist/assets/contracts/execution-target.schema.json +55 -0
- package/dist/assets/contracts/fixtures/authoring-attempt-create.valid.json +4 -0
- package/dist/assets/contracts/fixtures/authoring-attempt.passed.json +16 -0
- package/dist/assets/contracts/fixtures/authoring-draft-attempt-create.valid.json +10 -0
- package/dist/assets/contracts/fixtures/authoring-observation.valid.json +7 -0
- package/dist/assets/contracts/fixtures/authoring-revision.valid.json +16 -0
- package/dist/assets/contracts/fixtures/authoring-session.active.json +12 -0
- package/dist/assets/contracts/fixtures/canonical-script.valid.json +17 -0
- package/dist/assets/contracts/fixtures/ci-exit-status-cases.json +44 -0
- package/dist/assets/contracts/fixtures/command-mutual-exclusion-cases.json +20 -0
- package/dist/assets/contracts/fixtures/compat-script.all-platform-actions.yaml +227 -0
- package/dist/assets/contracts/fixtures/execution-target.both.invalid.json +7 -0
- package/dist/assets/contracts/fixtures/execution-target.concurrency-two.invalid.json +4 -0
- package/dist/assets/contracts/fixtures/execution-target.count-two.invalid.json +6 -0
- package/dist/assets/contracts/fixtures/execution-target.dynamic.valid.json +12 -0
- package/dist/assets/contracts/fixtures/execution-target.fixed.valid.json +4 -0
- package/dist/assets/contracts/fixtures/execution-target.multiple-devices.invalid.json +4 -0
- package/dist/assets/contracts/fixtures/execution-target.multiple-filters.invalid.json +7 -0
- package/dist/assets/contracts/fixtures/execution-target.strategy-all.invalid.json +6 -0
- package/dist/assets/contracts/fixtures/idempotency.conflict.json +26 -0
- package/dist/assets/contracts/fixtures/idempotency.same-request.json +26 -0
- package/dist/assets/contracts/fixtures/principal.personal.json +23 -0
- package/dist/assets/contracts/fixtures/principal.project-ci.json +20 -0
- package/dist/assets/contracts/fixtures/project-config.no-default.valid.json +9 -0
- package/dist/assets/contracts/fixtures/project-config.secret.invalid.json +10 -0
- package/dist/assets/contracts/fixtures/project-config.target-name.invalid.json +10 -0
- package/dist/assets/contracts/fixtures/project-config.valid.json +22 -0
- package/dist/assets/contracts/fixtures/public-script.all-cli-actions.yaml +39 -0
- package/dist/assets/contracts/fixtures/public-script.invalid.json +8 -0
- package/dist/assets/contracts/fixtures/public-script.valid.json +17 -0
- package/dist/assets/contracts/fixtures/run-create-v2.device-id.invalid.json +16 -0
- package/dist/assets/contracts/fixtures/run-create.personal-upload.valid.json +20 -0
- package/dist/assets/contracts/fixtures/run-create.single-device.json +19 -0
- package/dist/assets/contracts/fixtures/run-create.target.valid.json +22 -0
- package/dist/assets/contracts/fixtures/run.queued.json +19 -0
- package/dist/assets/contracts/fixtures/run.target.queued.json +38 -0
- package/dist/assets/contracts/fixtures/skill-catalog.valid.json +19 -0
- package/dist/assets/contracts/fixtures/skill-reference.valid.json +9 -0
- package/dist/assets/contracts/fixtures/skill.valid.json +10 -0
- package/dist/assets/contracts/fixtures/target-hash-cases.json +30 -0
- package/dist/assets/contracts/fixtures/target-preview.hash-mismatch.error.json +8 -0
- package/dist/assets/contracts/fixtures/target-preview.no-match.error.json +9 -0
- package/dist/assets/contracts/fixtures/target-preview.request.valid.json +9 -0
- package/dist/assets/contracts/fixtures/target-preview.success.json +18 -0
- package/dist/assets/contracts/fixtures/target-preview.unavailable.json +18 -0
- package/dist/assets/contracts/principal.schema.json +72 -0
- package/dist/assets/contracts/project-config.schema.json +23 -0
- package/dist/assets/contracts/public-script.schema.json +397 -0
- package/dist/assets/contracts/run-create-v2.schema.json +78 -0
- package/dist/assets/contracts/run-create.schema.json +70 -0
- package/dist/assets/contracts/run.schema.json +137 -0
- package/dist/assets/contracts/skill-catalog.schema.json +15 -0
- package/dist/assets/contracts/skill-reference.schema.json +17 -0
- package/dist/assets/contracts/skill-summary.schema.json +28 -0
- package/dist/assets/contracts/skill.schema.json +30 -0
- package/dist/assets/contracts/target-preview.schema.json +75 -0
- package/dist/assets/integrations/manifest.json +17 -0
- package/dist/assets/integrations/xagent-skill/SKILL.md +28 -0
- package/dist/assets/integrations/xagent-skill/agents/openai.yaml +4 -0
- package/dist/assets/integrations/xagent-skill/references/cli-mcp-interop.md +10 -0
- package/dist/assets/integrations/xagent-skill/references/host-adapters.md +9 -0
- package/dist/assets/integrations/xagent-skill/references/installation.md +10 -0
- package/dist/assets/integrations/xagent-skill/references/privacy.md +3 -0
- package/dist/assets/integrations/xagent-skill/references/routing.md +32 -0
- package/dist/assets/integrations/xagent-skill/scripts/install-cli.ps1 +5 -0
- package/dist/assets/integrations/xagent-skill/scripts/install-cli.sh +6 -0
- package/dist/assets/skills/xagent-analyze-failure/SKILL.md +13 -0
- package/dist/assets/skills/xagent-analyze-failure/agents/openai.yaml +4 -0
- package/dist/assets/skills/xagent-analyze-failure/references/failure-classification.md +20 -0
- package/dist/assets/skills/xagent-author-test/SKILL.md +19 -0
- package/dist/assets/skills/xagent-author-test/agents/openai.yaml +4 -0
- package/dist/assets/skills/xagent-author-test/references/authoring-workflow.md +41 -0
- package/dist/assets/skills/xagent-author-test/references/host-interaction-adapters.md +81 -0
- package/dist/assets/skills/xagent-author-test/references/interaction-modes.md +97 -0
- package/dist/assets/skills/xagent-author-test/references/interactive-steering.md +57 -0
- package/dist/assets/skills/xagent-author-test/references/script-actions.md +34 -0
- package/dist/assets/skills/xagent-author-test/references/script-format.md +100 -0
- package/dist/assets/skills/xagent-cli/SKILL.md +31 -0
- package/dist/assets/skills/xagent-cli/agents/openai.yaml +4 -0
- package/dist/assets/skills/xagent-cli/references/capability-routing.md +36 -0
- package/dist/assets/skills/xagent-cli/references/cli-commands.md +23 -0
- package/dist/assets/skills/xagent-cli/references/failure-routing.md +18 -0
- package/dist/assets/skills/xagent-cli/references/host-modes.md +21 -0
- package/dist/assets/skills/xagent-cli/references/mcp-tools.md +26 -0
- package/dist/assets/skills/xagent-cli/references/permissions.md +17 -0
- package/dist/assets/skills/xagent-explore-device/SKILL.md +26 -0
- package/dist/assets/skills/xagent-explore-device/agents/openai.yaml +4 -0
- package/dist/assets/skills/xagent-explore-device/references/actions.md +24 -0
- package/dist/assets/skills/xagent-explore-device/references/single-action-protocol.md +59 -0
- package/dist/assets/skills/xagent-explore-device/references/tool-adapters.md +32 -0
- package/dist/assets/skills/xagent-repair-test/SKILL.md +16 -0
- package/dist/assets/skills/xagent-repair-test/agents/openai.yaml +4 -0
- package/dist/assets/skills/xagent-repair-test/references/repair-workflow.md +21 -0
- package/dist/assets/skills/xagent-run-test/SKILL.md +16 -0
- package/dist/assets/skills/xagent-run-test/agents/openai.yaml +4 -0
- package/dist/assets/skills/xagent-run-test/references/execution-modes.md +23 -0
- package/dist/assets/skills/xagent-run-test/references/result-status.md +13 -0
- package/dist/assets/skills/xagent-test-report/SKILL.md +20 -0
- package/dist/assets/skills/xagent-test-report/agents/openai.yaml +4 -0
- package/dist/assets/skills/xagent-test-report/references/evidence-policy.md +20 -0
- package/dist/assets/skills/xagent-test-report/references/report-template.md +41 -0
- package/dist/assets/skills/xagent-test-report/references/result-classification.md +13 -0
- package/dist/authoring/draft-store.d.ts +19 -0
- package/dist/authoring/draft-store.d.ts.map +1 -0
- package/dist/authoring/draft-store.js +104 -0
- package/dist/authoring/draft-store.js.map +1 -0
- package/dist/authoring/session-lease.d.ts +64 -0
- package/dist/authoring/session-lease.d.ts.map +1 -0
- package/dist/authoring/session-lease.js +190 -0
- package/dist/authoring/session-lease.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +529 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/credentials.d.ts +16 -0
- package/dist/config/credentials.d.ts.map +1 -0
- package/dist/config/credentials.js +93 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/config/store.d.ts +37 -0
- package/dist/config/store.d.ts.map +1 -0
- package/dist/config/store.js +142 -0
- package/dist/config/store.js.map +1 -0
- package/dist/core/assets.d.ts +5 -0
- package/dist/core/assets.d.ts.map +1 -0
- package/dist/core/assets.js +46 -0
- package/dist/core/assets.js.map +1 -0
- package/dist/core/errors.d.ts +19 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +36 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/interrupt.d.ts +8 -0
- package/dist/core/interrupt.d.ts.map +1 -0
- package/dist/core/interrupt.js +54 -0
- package/dist/core/interrupt.js.map +1 -0
- package/dist/core/json.d.ts +5 -0
- package/dist/core/json.d.ts.map +1 -0
- package/dist/core/json.js +21 -0
- package/dist/core/json.js.map +1 -0
- package/dist/core/version.d.ts +8 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +8 -0
- package/dist/core/version.js.map +1 -0
- package/dist/integrations/manager.d.ts +12 -0
- package/dist/integrations/manager.d.ts.map +1 -0
- package/dist/integrations/manager.js +218 -0
- package/dist/integrations/manager.js.map +1 -0
- package/dist/integrations/routing.d.ts +105 -0
- package/dist/integrations/routing.d.ts.map +1 -0
- package/dist/integrations/routing.js +85 -0
- package/dist/integrations/routing.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +69 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +30 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +345 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/project/config.d.ts +15 -0
- package/dist/project/config.d.ts.map +1 -0
- package/dist/project/config.js +46 -0
- package/dist/project/config.js.map +1 -0
- package/dist/run/progress.d.ts +5 -0
- package/dist/run/progress.d.ts.map +1 -0
- package/dist/run/progress.js +29 -0
- package/dist/run/progress.js.map +1 -0
- package/dist/script/service.d.ts +42 -0
- package/dist/script/service.d.ts.map +1 -0
- package/dist/script/service.js +457 -0
- package/dist/script/service.js.map +1 -0
- package/dist/sdk/authoring.d.ts +19 -0
- package/dist/sdk/authoring.d.ts.map +1 -0
- package/dist/sdk/authoring.js +43 -0
- package/dist/sdk/authoring.js.map +1 -0
- package/dist/sdk/client.d.ts +49 -0
- package/dist/sdk/client.d.ts.map +1 -0
- package/dist/sdk/client.js +241 -0
- package/dist/sdk/client.js.map +1 -0
- package/dist/skills/catalog.d.ts +7 -0
- package/dist/skills/catalog.d.ts.map +1 -0
- package/dist/skills/catalog.js +59 -0
- package/dist/skills/catalog.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import Ajv2020Module from "ajv/dist/2020.js";
|
|
4
|
+
import { isMap, LineCounter, parseDocument } from "yaml";
|
|
5
|
+
import { contractRoot } from "../core/assets.js";
|
|
6
|
+
import { hashJson, sha256Text } from "../core/json.js";
|
|
7
|
+
export const PUBLIC_SCRIPT_SCHEMA_VERSION = "xagent-script/v1";
|
|
8
|
+
export const COMPAT_SCRIPT_SCHEMA_VERSION = "xagent-compat-script/v1";
|
|
9
|
+
export const CANONICAL_SCRIPT_SCHEMA_VERSION = "xagent-canonical/v1";
|
|
10
|
+
export const COMPILER_VERSION = "xagent-compiler/1";
|
|
11
|
+
let validators;
|
|
12
|
+
async function getValidators() {
|
|
13
|
+
if (!validators) {
|
|
14
|
+
validators = (async () => {
|
|
15
|
+
const root = await contractRoot();
|
|
16
|
+
const [publicSchema, compatSchema, canonicalSchema] = await Promise.all([
|
|
17
|
+
readFile(path.join(root, "public-script.schema.json"), "utf8").then(JSON.parse),
|
|
18
|
+
readFile(path.join(root, "compat-script.schema.json"), "utf8").then(JSON.parse),
|
|
19
|
+
readFile(path.join(root, "canonical-script.schema.json"), "utf8").then(JSON.parse),
|
|
20
|
+
]);
|
|
21
|
+
const Ajv2020 = Ajv2020Module;
|
|
22
|
+
const ajv = new Ajv2020({ allErrors: true, strict: false });
|
|
23
|
+
ajv.addSchema(publicSchema);
|
|
24
|
+
const topLevel = structuredClone(publicSchema);
|
|
25
|
+
delete topLevel.$id;
|
|
26
|
+
topLevel.properties.steps.items = true;
|
|
27
|
+
const actions = {};
|
|
28
|
+
for (const action of [
|
|
29
|
+
"install", "appLaunch", "uninstall", "click", "input", "scroll", "scroll_between", "drag",
|
|
30
|
+
"screenshot", "extract", "waitFor", "assert", "if", "appStop", "appClean", "set", "randomVar",
|
|
31
|
+
"for", "throw", "break", "press_key", "press_home",
|
|
32
|
+
"press_back", "press_enter",
|
|
33
|
+
]) {
|
|
34
|
+
const actionSchema = structuredClone(publicSchema.$defs[action]);
|
|
35
|
+
if (action === "if") {
|
|
36
|
+
actionSchema.properties.then.items = true;
|
|
37
|
+
actionSchema.properties.else.items = true;
|
|
38
|
+
}
|
|
39
|
+
if (action === "for")
|
|
40
|
+
actionSchema.properties.steps.items = true;
|
|
41
|
+
actions[action] = ajv.compile(actionSchema);
|
|
42
|
+
}
|
|
43
|
+
return { publicTopLevel: ajv.compile(topLevel), compat: ajv.compile(compatSchema), canonical: ajv.compile(canonicalSchema), actions };
|
|
44
|
+
})();
|
|
45
|
+
}
|
|
46
|
+
return validators;
|
|
47
|
+
}
|
|
48
|
+
function pathString(segments) {
|
|
49
|
+
return segments.reduce((result, segment) => typeof segment === "number" ? `${result}[${segment}]` : `${result}.${segment}`, "$<ROOT>").replace("$<ROOT>", "$");
|
|
50
|
+
}
|
|
51
|
+
function errorSegments(error) {
|
|
52
|
+
const segments = error.instancePath.split("/").slice(1).map((item) => /^\d+$/.test(item) ? Number(item) : item.replaceAll("~1", "/").replaceAll("~0", "~"));
|
|
53
|
+
if (error.keyword === "required") {
|
|
54
|
+
const missing = String(error.params.missingProperty ?? "");
|
|
55
|
+
segments.push(missing);
|
|
56
|
+
}
|
|
57
|
+
return segments;
|
|
58
|
+
}
|
|
59
|
+
function errorMessage(error) {
|
|
60
|
+
if (error.keyword === "required")
|
|
61
|
+
return `'${String(error.params.missingProperty)}' is a required property`;
|
|
62
|
+
return error.message ?? "schema validation failed";
|
|
63
|
+
}
|
|
64
|
+
function issueFromAjv(error, prefix = []) {
|
|
65
|
+
const segments = [...prefix, ...errorSegments(error)];
|
|
66
|
+
return { code: error.keyword, message: errorMessage(error), path: pathString(segments) };
|
|
67
|
+
}
|
|
68
|
+
function plain(value) {
|
|
69
|
+
if (Array.isArray(value))
|
|
70
|
+
return value.map(plain);
|
|
71
|
+
if (value !== null && typeof value === "object") {
|
|
72
|
+
return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, plain(v)]));
|
|
73
|
+
}
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
function locate(document, lineCounter, segments) {
|
|
77
|
+
let node;
|
|
78
|
+
const last = segments.at(-1);
|
|
79
|
+
const parent = segments.length ? document.getIn(segments.slice(0, -1), true) : document.contents;
|
|
80
|
+
if (typeof last === "string" && isMap(parent)) {
|
|
81
|
+
const pair = parent.items.find((item) => String(item.key?.value ?? item.key) === last);
|
|
82
|
+
node = pair?.key ?? parent;
|
|
83
|
+
}
|
|
84
|
+
else
|
|
85
|
+
node = document.getIn(segments, true) ?? parent;
|
|
86
|
+
const range = node?.range;
|
|
87
|
+
if (!range)
|
|
88
|
+
return {};
|
|
89
|
+
const position = lineCounter.linePos(range[0]);
|
|
90
|
+
return { line: position.line, column: position.col };
|
|
91
|
+
}
|
|
92
|
+
export async function parseYaml(content) {
|
|
93
|
+
const sourceHash = sha256Text(content);
|
|
94
|
+
const lineCounter = new LineCounter();
|
|
95
|
+
const document = parseDocument(content, { uniqueKeys: true, prettyErrors: false, lineCounter });
|
|
96
|
+
const syntaxIssues = document.errors.map((error) => ({
|
|
97
|
+
code: "yaml_syntax",
|
|
98
|
+
message: error.message,
|
|
99
|
+
path: "$",
|
|
100
|
+
}));
|
|
101
|
+
const value = plain(document.toJS());
|
|
102
|
+
const rawScript = value !== null && typeof value === "object" && !Array.isArray(value)
|
|
103
|
+
? value
|
|
104
|
+
: {};
|
|
105
|
+
const inputSchemaVersion = typeof rawScript.schema_version === "string" ? rawScript.schema_version : undefined;
|
|
106
|
+
if (syntaxIssues.length)
|
|
107
|
+
return { script: rawScript, inputSchemaVersion, sourceHash, issues: syntaxIssues, valid: false };
|
|
108
|
+
if (inputSchemaVersion === COMPAT_SCRIPT_SCHEMA_VERSION) {
|
|
109
|
+
const compatIssues = await compatValidationIssues(rawScript, document, lineCounter);
|
|
110
|
+
if (compatIssues.length)
|
|
111
|
+
return { script: rawScript, inputSchemaVersion, sourceHash, issues: compatIssues, valid: false };
|
|
112
|
+
let script;
|
|
113
|
+
try {
|
|
114
|
+
script = compileCompatScript(rawScript);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
118
|
+
return { script: rawScript, inputSchemaVersion, sourceHash, issues: [{ code: "compat_compile", message, path: "$" }], valid: false };
|
|
119
|
+
}
|
|
120
|
+
const issues = await validationIssues(script);
|
|
121
|
+
return { script, inputSchemaVersion, sourceHash, issues, valid: issues.length === 0 };
|
|
122
|
+
}
|
|
123
|
+
const issues = await validationIssues(rawScript, document, lineCounter);
|
|
124
|
+
return { script: rawScript, inputSchemaVersion, sourceHash, issues, valid: issues.length === 0 };
|
|
125
|
+
}
|
|
126
|
+
async function compatValidationIssues(script, document, lineCounter) {
|
|
127
|
+
const { compat } = await getValidators();
|
|
128
|
+
compat(script);
|
|
129
|
+
return deduplicate((compat.errors ?? []).map((error) => {
|
|
130
|
+
const segments = errorSegments(error);
|
|
131
|
+
return { ...issueFromAjv(error), ...locate(document, lineCounter, segments) };
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
const COMPAT_EDITOR_FIELDS = new Set([
|
|
135
|
+
"stepIdFront", "userText", "desc", "frontStepType", "descVisible", "isEdit", "actionLocked",
|
|
136
|
+
"children", "elseIfChildren", "elseChildren", "judge", "ai_content", "smartWaitDisplay",
|
|
137
|
+
"smart_wait_display", "postWaitCondition", "post_wait_condition", "stepIndex",
|
|
138
|
+
]);
|
|
139
|
+
const COMPAT_PUBLIC_ACTION_FIELDS = Object.fromEntries(Object.entries({
|
|
140
|
+
click: ["action", "target", "type", "duration"],
|
|
141
|
+
input: ["action", "text", "target", "clearFirst", "inputMode", "keyboardLayout"],
|
|
142
|
+
scroll: [
|
|
143
|
+
"action", "direction", "distance", "target", "condition", "maxSwipes", "scope",
|
|
144
|
+
"containerRole", "containerAnchor", "containerHint", "scrollAreaTarget", "untilScope",
|
|
145
|
+
"stopMode", "untilMatchMode", "spatialConstraints",
|
|
146
|
+
],
|
|
147
|
+
install: ["action", "appPackage"],
|
|
148
|
+
uninstall: ["action", "appPackage", "appName"],
|
|
149
|
+
appLaunch: ["action", "appPackage", "appName", "launchPath"],
|
|
150
|
+
appStop: ["action", "appPackage", "appName"],
|
|
151
|
+
appClean: ["action", "appPackage", "appName"],
|
|
152
|
+
waitFor: ["action", "time", "condition", "timeout"],
|
|
153
|
+
assert: ["action", "condition", "conditionType", "target", "text", "message"],
|
|
154
|
+
screenshot: ["action", "var"],
|
|
155
|
+
set: ["action", "varName", "value"],
|
|
156
|
+
press_back: ["action"],
|
|
157
|
+
press_home: ["action"],
|
|
158
|
+
}).map(([action, fields]) => [action, new Set([...fields, "description"])]));
|
|
159
|
+
function compatFrontType(step) {
|
|
160
|
+
const value = String(step.frontStepType ?? "").trim().toLowerCase();
|
|
161
|
+
if (value)
|
|
162
|
+
return value;
|
|
163
|
+
return ["if", "else-if", "else"].includes(String(step.action ?? "")) ? String(step.action) : "step";
|
|
164
|
+
}
|
|
165
|
+
function compatCondition(step, path) {
|
|
166
|
+
const value = String(step.userText ?? step.condition ?? "").trim();
|
|
167
|
+
if (!value)
|
|
168
|
+
throw new Error(`${path} 缺少 userText 或 condition`);
|
|
169
|
+
return value;
|
|
170
|
+
}
|
|
171
|
+
function compatDescription(step) {
|
|
172
|
+
const value = typeof step.desc === "string" ? step.desc.trim() : "";
|
|
173
|
+
return value ? { description: value } : {};
|
|
174
|
+
}
|
|
175
|
+
function compileCompatScript(script) {
|
|
176
|
+
const variables = script.variables ?? [];
|
|
177
|
+
let publicVariables;
|
|
178
|
+
if (Array.isArray(variables)) {
|
|
179
|
+
publicVariables = {};
|
|
180
|
+
variables.forEach((definition, index) => {
|
|
181
|
+
if (!definition || typeof definition !== "object" || Array.isArray(definition))
|
|
182
|
+
throw new Error(`variables[${index}] 必须是对象`);
|
|
183
|
+
const item = definition;
|
|
184
|
+
const key = String(item.key ?? "").trim();
|
|
185
|
+
if (!key)
|
|
186
|
+
throw new Error(`variables[${index}].key 不能为空`);
|
|
187
|
+
if (!("defaultValue" in item))
|
|
188
|
+
throw new Error(`variables[${index}] (${key}) 缺少 defaultValue,CLI 无法确定变量值`);
|
|
189
|
+
publicVariables[key] = structuredClone(item.defaultValue);
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
else if (variables && typeof variables === "object") {
|
|
193
|
+
publicVariables = structuredClone(variables);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
throw new Error("variables 必须是对象或数组");
|
|
197
|
+
}
|
|
198
|
+
const contentFields = script.content_fields && typeof script.content_fields === "object" && !Array.isArray(script.content_fields)
|
|
199
|
+
? script.content_fields
|
|
200
|
+
: {};
|
|
201
|
+
const packageId = script.package_id ?? contentFields.package_id;
|
|
202
|
+
return {
|
|
203
|
+
schema_version: PUBLIC_SCRIPT_SCHEMA_VERSION,
|
|
204
|
+
...(typeof script.name === "string" && script.name.trim() ? { name: script.name.trim() } : {}),
|
|
205
|
+
...(packageId !== undefined ? { package_id: packageId } : {}),
|
|
206
|
+
...(Object.keys(publicVariables).length ? { variables: publicVariables } : {}),
|
|
207
|
+
steps: compileCompatEditorSteps(script.steps, "steps"),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function compileCompatEditorSteps(nodes, path) {
|
|
211
|
+
if (!Array.isArray(nodes))
|
|
212
|
+
throw new Error(`${path} 必须是数组`);
|
|
213
|
+
const result = [];
|
|
214
|
+
for (let index = 0; index < nodes.length; index += 1) {
|
|
215
|
+
const raw = nodes[index];
|
|
216
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
217
|
+
throw new Error(`${path}[${index}] 必须是对象`);
|
|
218
|
+
const step = raw;
|
|
219
|
+
const frontType = compatFrontType(step);
|
|
220
|
+
if (frontType === "paragraph") {
|
|
221
|
+
result.push(...compileCompatEditorSteps(step.children ?? [], `${path}[${index}].children`));
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
if (frontType === "else-if" || frontType === "else")
|
|
225
|
+
throw new Error(`${path}[${index}] ${frontType} 前面缺少同级 if`);
|
|
226
|
+
if (frontType !== "if") {
|
|
227
|
+
result.push(compileCompatAction(step));
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
const elseIfBranches = Array.isArray(step.elseIfChildren) ? [...step.elseIfChildren] : [];
|
|
231
|
+
let elseBranch;
|
|
232
|
+
if (Array.isArray(step.elseChildren) && step.elseChildren.length) {
|
|
233
|
+
const first = step.elseChildren[0];
|
|
234
|
+
elseBranch = first && typeof first === "object" && compatFrontType(first) === "else"
|
|
235
|
+
? first
|
|
236
|
+
: { frontStepType: "else", children: step.elseChildren };
|
|
237
|
+
}
|
|
238
|
+
while (index + 1 < nodes.length) {
|
|
239
|
+
const sibling = nodes[index + 1];
|
|
240
|
+
if (!sibling || typeof sibling !== "object" || Array.isArray(sibling))
|
|
241
|
+
break;
|
|
242
|
+
const siblingType = compatFrontType(sibling);
|
|
243
|
+
if (siblingType === "else-if") {
|
|
244
|
+
elseIfBranches.push(sibling);
|
|
245
|
+
index += 1;
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (siblingType === "else") {
|
|
249
|
+
elseBranch = sibling;
|
|
250
|
+
index += 1;
|
|
251
|
+
}
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
const ifIndex = index;
|
|
255
|
+
let compiledElse = elseBranch
|
|
256
|
+
? compileCompatEditorSteps(elseBranch.children ?? [], `${path}[${ifIndex}].elseChildren`)
|
|
257
|
+
: undefined;
|
|
258
|
+
for (let branchIndex = elseIfBranches.length - 1; branchIndex >= 0; branchIndex -= 1) {
|
|
259
|
+
const branch = elseIfBranches[branchIndex];
|
|
260
|
+
const nested = {
|
|
261
|
+
action: "if",
|
|
262
|
+
condition: compatCondition(branch, `${path}[${ifIndex}].elseIfChildren[${branchIndex}]`),
|
|
263
|
+
then: compileCompatEditorSteps(branch.children ?? [], `${path}[${ifIndex}].elseIfChildren[${branchIndex}].children`),
|
|
264
|
+
...compatDescription(branch),
|
|
265
|
+
};
|
|
266
|
+
if (compiledElse?.length)
|
|
267
|
+
nested.else = compiledElse;
|
|
268
|
+
compiledElse = [nested];
|
|
269
|
+
}
|
|
270
|
+
const compiled = {
|
|
271
|
+
action: "if",
|
|
272
|
+
condition: compatCondition(step, `${path}[${ifIndex}]`),
|
|
273
|
+
then: compileCompatEditorSteps(step.children ?? [], `${path}[${ifIndex}].children`),
|
|
274
|
+
...compatDescription(step),
|
|
275
|
+
};
|
|
276
|
+
if (compiledElse?.length)
|
|
277
|
+
compiled.else = compiledElse;
|
|
278
|
+
result.push(compiled);
|
|
279
|
+
}
|
|
280
|
+
return result;
|
|
281
|
+
}
|
|
282
|
+
function compileCompatAction(source) {
|
|
283
|
+
const step = structuredClone(source);
|
|
284
|
+
if (!step.condition && step.judge && typeof step.judge.raw === "string" && step.judge.raw.trim())
|
|
285
|
+
step.condition = step.judge.raw.trim();
|
|
286
|
+
if (step.action === "click" && String(step.type ?? "").trim().toLowerCase() === "text")
|
|
287
|
+
delete step.type;
|
|
288
|
+
if (step.action === "input" && !step.text && step.content !== undefined)
|
|
289
|
+
step.text = step.content;
|
|
290
|
+
if (step.action === "input" && ["normal", "smart"].includes(step.inputMode))
|
|
291
|
+
delete step.inputMode;
|
|
292
|
+
if (step.action === "waitFor" && !step.condition && step.time === undefined)
|
|
293
|
+
step.condition = step.task ?? step.target;
|
|
294
|
+
if (step.action === "assert" && !step.condition && !step.target && step.task)
|
|
295
|
+
step.condition = step.task;
|
|
296
|
+
if (["appLaunch", "appStop", "appClean", "uninstall"].includes(step.action) && !step.appName)
|
|
297
|
+
step.appName = step.task ?? step.target;
|
|
298
|
+
if (step.action === "press_key" && !step.key)
|
|
299
|
+
step.key = step.content ?? step.task;
|
|
300
|
+
const aliases = {
|
|
301
|
+
from: ["from_target", "fromTarget", "fromName", "source"],
|
|
302
|
+
to: ["to_target", "toTarget", "toName", "dist", "destination"],
|
|
303
|
+
appPackage: ["packageName", "package_name"],
|
|
304
|
+
};
|
|
305
|
+
for (const [target, candidates] of Object.entries(aliases)) {
|
|
306
|
+
if (step[target] === undefined || step[target] === "") {
|
|
307
|
+
const alias = candidates.find((candidate) => step[candidate] !== undefined && step[candidate] !== "");
|
|
308
|
+
if (alias)
|
|
309
|
+
step[target] = step[alias];
|
|
310
|
+
}
|
|
311
|
+
candidates.forEach((candidate) => delete step[candidate]);
|
|
312
|
+
}
|
|
313
|
+
const description = compatDescription(source);
|
|
314
|
+
for (const key of Object.keys(step)) {
|
|
315
|
+
if (COMPAT_EDITOR_FIELDS.has(key) || key.endsWith("Ast"))
|
|
316
|
+
delete step[key];
|
|
317
|
+
}
|
|
318
|
+
if (step.action === "input" && step.text !== undefined)
|
|
319
|
+
delete step.content;
|
|
320
|
+
if (["click", "scroll"].includes(step.action))
|
|
321
|
+
["content", "task", "text", "element", "actionText"].forEach((key) => delete step[key]);
|
|
322
|
+
if (["appLaunch", "appStop", "appClean", "uninstall"].includes(step.action))
|
|
323
|
+
["task", "target"].forEach((key) => delete step[key]);
|
|
324
|
+
const compiled = { ...step, ...description };
|
|
325
|
+
const allowed = COMPAT_PUBLIC_ACTION_FIELDS[String(step.action ?? "")];
|
|
326
|
+
if (!allowed)
|
|
327
|
+
return compiled;
|
|
328
|
+
return Object.fromEntries(Object.entries(compiled).filter(([key]) => allowed.has(key)));
|
|
329
|
+
}
|
|
330
|
+
export async function validateScript(script) {
|
|
331
|
+
const { publicTopLevel: validator } = await getValidators();
|
|
332
|
+
const valid = validator(script);
|
|
333
|
+
return { valid: Boolean(valid), errors: validator.errors ?? [] };
|
|
334
|
+
}
|
|
335
|
+
async function validationIssues(script, document, lineCounter) {
|
|
336
|
+
const set = await getValidators();
|
|
337
|
+
const issues = [];
|
|
338
|
+
set.publicTopLevel(script);
|
|
339
|
+
for (const error of set.publicTopLevel.errors ?? []) {
|
|
340
|
+
const segments = errorSegments(error);
|
|
341
|
+
issues.push({ ...issueFromAjv(error), ...(document && lineCounter ? locate(document, lineCounter, segments) : {}) });
|
|
342
|
+
}
|
|
343
|
+
if (!script || typeof script !== "object" || Array.isArray(script) || !Array.isArray(script.steps))
|
|
344
|
+
return deduplicate(issues);
|
|
345
|
+
const visit = (steps, prefix, loopDepth = 0) => {
|
|
346
|
+
steps.forEach((raw, index) => {
|
|
347
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
348
|
+
return;
|
|
349
|
+
const step = raw;
|
|
350
|
+
const stepPrefix = [...prefix, index];
|
|
351
|
+
if (typeof step.action !== "string" || !step.action) {
|
|
352
|
+
const segments = [...stepPrefix, "action"];
|
|
353
|
+
issues.push({ code: "required", message: "action is required", path: pathString(segments), ...(document && lineCounter ? locate(document, lineCounter, segments) : {}) });
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const validator = set.actions[step.action];
|
|
357
|
+
if (!validator) {
|
|
358
|
+
const segments = [...stepPrefix, "action"];
|
|
359
|
+
issues.push({ code: "action_unsupported", message: `unsupported action: ${step.action}`, path: pathString(segments), ...(document && lineCounter ? locate(document, lineCounter, segments) : {}) });
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
if (step.action === "break" && loopDepth === 0) {
|
|
363
|
+
const segments = [...stepPrefix, "action"];
|
|
364
|
+
issues.push({ code: "break_outside_loop", message: "break is only valid inside for.steps", path: pathString(segments), ...(document && lineCounter ? locate(document, lineCounter, segments) : {}) });
|
|
365
|
+
}
|
|
366
|
+
validator(step);
|
|
367
|
+
for (const error of validator.errors ?? []) {
|
|
368
|
+
const relative = errorSegments(error);
|
|
369
|
+
const segments = [...stepPrefix, ...relative];
|
|
370
|
+
issues.push({ ...issueFromAjv(error, stepPrefix), ...(document && lineCounter ? locate(document, lineCounter, segments) : {}) });
|
|
371
|
+
}
|
|
372
|
+
if (step.action === "if") {
|
|
373
|
+
if (Array.isArray(step.then))
|
|
374
|
+
visit(step.then, [...stepPrefix, "then"], loopDepth);
|
|
375
|
+
if (Array.isArray(step.else))
|
|
376
|
+
visit(step.else, [...stepPrefix, "else"], loopDepth);
|
|
377
|
+
}
|
|
378
|
+
if (step.action === "for" && Array.isArray(step.steps))
|
|
379
|
+
visit(step.steps, [...stepPrefix, "steps"], loopDepth + 1);
|
|
380
|
+
});
|
|
381
|
+
};
|
|
382
|
+
visit(script.steps, ["steps"]);
|
|
383
|
+
return deduplicate(issues);
|
|
384
|
+
}
|
|
385
|
+
function deduplicate(issues) {
|
|
386
|
+
const seen = new Set();
|
|
387
|
+
return issues.filter((issue) => { const key = `${issue.code}\0${issue.path}\0${issue.message}`; if (seen.has(key))
|
|
388
|
+
return false; seen.add(key); return true; });
|
|
389
|
+
}
|
|
390
|
+
export async function compileScript(script, options = {}) {
|
|
391
|
+
const parsedIssues = await validationIssues(script);
|
|
392
|
+
const sourceHash = options.sourceHash ?? hashJson(script);
|
|
393
|
+
if (parsedIssues.length)
|
|
394
|
+
return { canonicalScript: null, sourceHash, canonicalHash: null, schemaVersion: PUBLIC_SCRIPT_SCHEMA_VERSION, compilerVersion: COMPILER_VERSION, issues: parsedIssues, valid: false };
|
|
395
|
+
const issues = [];
|
|
396
|
+
const resolvedPackage = String(options.appPackage ?? "").trim();
|
|
397
|
+
const resolvedDownloadUrl = String(options.appDownloadUrl ?? "").trim();
|
|
398
|
+
const compileSteps = (steps, prefix) => steps.map((raw, index) => {
|
|
399
|
+
let step = structuredClone(raw);
|
|
400
|
+
const current = `${prefix}[${index}]`;
|
|
401
|
+
const action = step.action;
|
|
402
|
+
const packageValue = String(step.appPackage ?? "").trim();
|
|
403
|
+
if (["install", "appLaunch", "uninstall", "appStop", "appClean"].includes(action) && resolvedPackage && packageValue && packageValue !== resolvedPackage) {
|
|
404
|
+
issues.push({ code: "package_scope_mismatch", message: `${action} appPackage does not match the package selected by package_id`, path: `${current}.appPackage` });
|
|
405
|
+
}
|
|
406
|
+
if (action === "install") {
|
|
407
|
+
if (!resolvedDownloadUrl)
|
|
408
|
+
issues.push({ code: "compile_context_required", message: "install requires a package download URL from package_id", path: `${current}.appDownloadUrl` });
|
|
409
|
+
else
|
|
410
|
+
step.appDownloadUrl = resolvedDownloadUrl;
|
|
411
|
+
}
|
|
412
|
+
if (action === "input") {
|
|
413
|
+
const layout = step.keyboardLayout;
|
|
414
|
+
delete step.keyboardLayout;
|
|
415
|
+
if (step.inputMode === "normal")
|
|
416
|
+
delete step.inputMode;
|
|
417
|
+
if (layout !== undefined) {
|
|
418
|
+
const input = structuredClone(step);
|
|
419
|
+
const targetLayout = layout === "numeric" ? "数字" : "字母";
|
|
420
|
+
step = {
|
|
421
|
+
action: "if",
|
|
422
|
+
condition: `当前输入键盘不是${targetLayout}布局`,
|
|
423
|
+
then: [
|
|
424
|
+
{ action: "click", target: "当前输入键盘的字母数字布局切换键", type: "click" },
|
|
425
|
+
input,
|
|
426
|
+
],
|
|
427
|
+
else: [structuredClone(input)],
|
|
428
|
+
...(typeof input.description === "string" ? { description: input.description } : {}),
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
if (action === "appLaunch") {
|
|
433
|
+
if (!step.appName && options.appName)
|
|
434
|
+
step.appName = options.appName;
|
|
435
|
+
if (!step.launchPath && options.launchPath)
|
|
436
|
+
step.launchPath = options.launchPath;
|
|
437
|
+
}
|
|
438
|
+
if (action === "if") {
|
|
439
|
+
step.then = compileSteps(step.then, `${current}.then`);
|
|
440
|
+
if (step.else)
|
|
441
|
+
step.else = compileSteps(step.else, `${current}.else`);
|
|
442
|
+
}
|
|
443
|
+
if (action === "for")
|
|
444
|
+
step.steps = compileSteps(step.steps, `${current}.steps`);
|
|
445
|
+
return step;
|
|
446
|
+
});
|
|
447
|
+
if (issues.length)
|
|
448
|
+
return { canonicalScript: null, sourceHash, canonicalHash: null, schemaVersion: PUBLIC_SCRIPT_SCHEMA_VERSION, compilerVersion: COMPILER_VERSION, issues, valid: false };
|
|
449
|
+
const canonical = { schema_version: CANONICAL_SCRIPT_SCHEMA_VERSION, version: 1, variables: { ...(script.variables ?? {}), ...(options.runtimeVariables ?? {}) }, steps: [{ action: "prepareDevice" }, ...compileSteps(script.steps, "$.steps")] };
|
|
450
|
+
const { canonical: validator } = await getValidators();
|
|
451
|
+
if (!validator(canonical)) {
|
|
452
|
+
const canonicalIssues = (validator.errors ?? []).map((error) => issueFromAjv(error));
|
|
453
|
+
return { canonicalScript: null, sourceHash, canonicalHash: null, schemaVersion: PUBLIC_SCRIPT_SCHEMA_VERSION, compilerVersion: COMPILER_VERSION, issues: canonicalIssues, valid: false };
|
|
454
|
+
}
|
|
455
|
+
return { canonicalScript: canonical, sourceHash, canonicalHash: hashJson(canonical), schemaVersion: PUBLIC_SCRIPT_SCHEMA_VERSION, compilerVersion: COMPILER_VERSION, issues: [], valid: true };
|
|
456
|
+
}
|
|
457
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/script/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { XAgentClient } from "./client.js";
|
|
2
|
+
export declare class AuthoringClient {
|
|
3
|
+
private readonly client;
|
|
4
|
+
constructor(client: XAgentClient);
|
|
5
|
+
listDevices(query?: Record<string, string | number | boolean | undefined>): Promise<Record<string, any>>;
|
|
6
|
+
createSession(deviceId: string, idempotencyKey: string): Promise<Record<string, any>>;
|
|
7
|
+
acquireDevice(deviceId: string, idempotencyKey: string): Promise<Record<string, any>>;
|
|
8
|
+
getSession(sessionId: string): Promise<Record<string, any>>;
|
|
9
|
+
renewSession(sessionId: string): Promise<Record<string, any>>;
|
|
10
|
+
createRevision(sessionId: string, script: Record<string, unknown>, source: "user" | "agent", idempotencyKey: string, baseRevisionId?: string): Promise<Record<string, any>>;
|
|
11
|
+
getRevision(sessionId: string, revisionId: string): Promise<Record<string, any>>;
|
|
12
|
+
observe(sessionId: string): Promise<Record<string, any>>;
|
|
13
|
+
executeStep(sessionId: string, revisionId: string, stepIndex: number, idempotencyKey: string): Promise<Record<string, any>>;
|
|
14
|
+
executeDraftStep(sessionId: string, script: Record<string, unknown>, stepIndex: number, idempotencyKey: string): Promise<Record<string, any>>;
|
|
15
|
+
getAttempt(attemptId: string): Promise<Record<string, any>>;
|
|
16
|
+
complete(sessionId: string, revisionId: string, idempotencyKey: string): Promise<Record<string, any>>;
|
|
17
|
+
cancel(sessionId: string, idempotencyKey: string): Promise<Record<string, any>>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=authoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authoring.d.ts","sourceRoot":"","sources":["../../src/sdk/authoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IACjD,WAAW,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAM;IAO7E,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAGtD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAGtD,UAAU,CAAC,SAAS,EAAE,MAAM;IAC5B,YAAY,CAAC,SAAS,EAAE,MAAM;IAG9B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;IAG5I,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IACjD,OAAO,CAAC,SAAS,EAAE,MAAM;IACzB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAG5F,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAG9G,UAAU,CAAC,SAAS,EAAE,MAAM;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAGtE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAGjD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export class AuthoringClient {
|
|
2
|
+
client;
|
|
3
|
+
constructor(client) {
|
|
4
|
+
this.client = client;
|
|
5
|
+
}
|
|
6
|
+
listDevices(query = {}) {
|
|
7
|
+
const params = new URLSearchParams();
|
|
8
|
+
for (const [key, value] of Object.entries(query))
|
|
9
|
+
if (value !== undefined)
|
|
10
|
+
params.set(key, String(value));
|
|
11
|
+
const suffix = params.toString() ? `?${params.toString()}` : "";
|
|
12
|
+
return this.client.request("GET", `/agent/api/developer/v1/devices${suffix}`);
|
|
13
|
+
}
|
|
14
|
+
createSession(deviceId, idempotencyKey) {
|
|
15
|
+
return this.client.request("POST", "/agent/api/developer/v1/authoring/sessions", { json: { device_id: deviceId }, idempotencyKey, timeoutMs: 90_000 });
|
|
16
|
+
}
|
|
17
|
+
acquireDevice(deviceId, idempotencyKey) {
|
|
18
|
+
return this.client.request("POST", "/agent/api/developer/v1/authoring/devices/acquire", { json: { device_id: deviceId }, idempotencyKey, timeoutMs: 90_000 });
|
|
19
|
+
}
|
|
20
|
+
getSession(sessionId) { return this.client.request("GET", `/agent/api/developer/v1/authoring/sessions/${encodeURIComponent(sessionId)}`); }
|
|
21
|
+
renewSession(sessionId) {
|
|
22
|
+
return this.client.request("POST", `/agent/api/developer/v1/authoring/sessions/${encodeURIComponent(sessionId)}/renew`, { json: {}, timeoutMs: 90_000 });
|
|
23
|
+
}
|
|
24
|
+
createRevision(sessionId, script, source, idempotencyKey, baseRevisionId) {
|
|
25
|
+
return this.client.request("POST", `/agent/api/developer/v1/authoring/sessions/${encodeURIComponent(sessionId)}/revisions`, { json: { script, source, base_revision_id: baseRevisionId ?? null }, idempotencyKey });
|
|
26
|
+
}
|
|
27
|
+
getRevision(sessionId, revisionId) { return this.client.request("GET", `/agent/api/developer/v1/authoring/sessions/${encodeURIComponent(sessionId)}/revisions/${encodeURIComponent(revisionId)}`); }
|
|
28
|
+
observe(sessionId) { return this.client.request("GET", `/agent/api/developer/v1/authoring/sessions/${encodeURIComponent(sessionId)}/observe`); }
|
|
29
|
+
executeStep(sessionId, revisionId, stepIndex, idempotencyKey) {
|
|
30
|
+
return this.client.request("POST", `/agent/api/developer/v1/authoring/sessions/${encodeURIComponent(sessionId)}/attempts`, { json: { revision_id: revisionId, step_index: stepIndex }, idempotencyKey, timeoutMs: 300_000 });
|
|
31
|
+
}
|
|
32
|
+
executeDraftStep(sessionId, script, stepIndex, idempotencyKey) {
|
|
33
|
+
return this.client.request("POST", `/agent/api/developer/v1/authoring/sessions/${encodeURIComponent(sessionId)}/draft-attempts`, { json: { script, step_index: stepIndex }, idempotencyKey, timeoutMs: 300_000 });
|
|
34
|
+
}
|
|
35
|
+
getAttempt(attemptId) { return this.client.request("GET", `/agent/api/developer/v1/authoring/attempts/${encodeURIComponent(attemptId)}`); }
|
|
36
|
+
complete(sessionId, revisionId, idempotencyKey) {
|
|
37
|
+
return this.client.request("POST", `/agent/api/developer/v1/authoring/sessions/${encodeURIComponent(sessionId)}/complete`, { json: { revision_id: revisionId }, idempotencyKey, timeoutMs: 90_000 });
|
|
38
|
+
}
|
|
39
|
+
cancel(sessionId, idempotencyKey) {
|
|
40
|
+
return this.client.request("POST", `/agent/api/developer/v1/authoring/sessions/${encodeURIComponent(sessionId)}/cancel`, { json: {}, idempotencyKey, timeoutMs: 90_000 });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=authoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authoring.js","sourceRoot":"","sources":["../../src/sdk/authoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { DeviceActionClient } from "../action/client.js";
|
|
2
|
+
import { AuthoringClient } from "./authoring.js";
|
|
3
|
+
type RequestOptions = {
|
|
4
|
+
json?: unknown;
|
|
5
|
+
body?: BodyInit;
|
|
6
|
+
headers?: Record<string, string>;
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
idempotencyKey?: string;
|
|
9
|
+
};
|
|
10
|
+
export type Principal = {
|
|
11
|
+
schema_version: string;
|
|
12
|
+
token_type: string;
|
|
13
|
+
eid: number;
|
|
14
|
+
project_id: number;
|
|
15
|
+
subject: {
|
|
16
|
+
type: string;
|
|
17
|
+
id: string;
|
|
18
|
+
};
|
|
19
|
+
capabilities: string[];
|
|
20
|
+
};
|
|
21
|
+
export declare class XAgentClient {
|
|
22
|
+
readonly baseUrl: string;
|
|
23
|
+
private readonly token;
|
|
24
|
+
readonly uploadBaseUrl?: string | undefined;
|
|
25
|
+
readonly timeoutMs: number;
|
|
26
|
+
readonly uploadTimeoutMs: number;
|
|
27
|
+
readonly authoring: AuthoringClient;
|
|
28
|
+
readonly action: DeviceActionClient;
|
|
29
|
+
constructor(baseUrl: string, token: string, uploadBaseUrl?: string | undefined, timeoutMs?: number, uploadTimeoutMs?: number);
|
|
30
|
+
getPrincipal(): Promise<Principal>;
|
|
31
|
+
listEffectiveSkills(): Promise<Record<string, any>>;
|
|
32
|
+
getEffectiveSkill(name: string): Promise<Record<string, any>>;
|
|
33
|
+
getEffectiveSkillReference(name: string, referencePath: string): Promise<Record<string, any>>;
|
|
34
|
+
createRun(request: Record<string, unknown>, idempotencyKey?: string): Promise<Record<string, any>>;
|
|
35
|
+
previewTarget(request: Record<string, unknown>): Promise<Record<string, any>>;
|
|
36
|
+
getRun(runId: string): Promise<Record<string, any>>;
|
|
37
|
+
cancelRun(runId: string): Promise<Record<string, any>>;
|
|
38
|
+
listApps(query?: Record<string, string | number | undefined>): Promise<Record<string, any>>;
|
|
39
|
+
getApp(packageId: number): Promise<Record<string, any>>;
|
|
40
|
+
releaseApp(uploadId: string): Promise<Record<string, any>>;
|
|
41
|
+
/** `signal` aborts the wait itself; the Run keeps going server-side unless the caller also cancels it. */
|
|
42
|
+
waitRun(runId: string, timeoutSeconds?: number, pollInterval?: number, onUpdate?: (run: Record<string, any>) => void, signal?: AbortSignal): Promise<Record<string, any>>;
|
|
43
|
+
request(method: string, route: string, options?: RequestOptions): Promise<Record<string, any>>;
|
|
44
|
+
uploadApp(apkPath: string, progress?: (current: number, total: number) => void): Promise<Record<string, any>>;
|
|
45
|
+
private directRequest;
|
|
46
|
+
private fetchRequest;
|
|
47
|
+
}
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/sdk/client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,KAAK,cAAc,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzI,MAAM,MAAM,SAAS,GAAG;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,qBAAa,YAAY;IAGX,QAAQ,CAAC,OAAO,EAAE,MAAM;IAAE,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAU,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM;IAAE,QAAQ,CAAC,SAAS;IAAW,QAAQ,CAAC,eAAe;IAF5J,QAAQ,CAAC,SAAS,kBAA6B;IAC/C,QAAQ,CAAC,MAAM,qBAAgC;gBAC1B,OAAO,EAAE,MAAM,EAAmB,KAAK,EAAE,MAAM,EAAW,aAAa,CAAC,EAAE,MAAM,YAAA,EAAW,SAAS,SAAS,EAAW,eAAe,SAAU;IAQtK,YAAY,IAAwE,OAAO,CAAC,SAAS,CAAC;IACtG,mBAAmB;IACnB,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAC9B,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAC9D,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,EAAE,MAAM;IACnE,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,MAAM;IACpB,SAAS,CAAC,KAAK,EAAE,MAAM;IACvB,QAAQ,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAM;IAMhE,MAAM,CAAC,SAAS,EAAE,MAAM;IAIxB,UAAU,CAAC,QAAQ,EAAE,MAAM;IAE3B,0GAA0G;IACpG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,SAAM,EAAE,YAAY,SAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAyBjK,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAkBlG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YA2CrG,aAAa;YAgBb,YAAY;CAe3B"}
|