aboutsummaryrefslogtreecommitdiff
path: root/test-suite/task-manifest.schema.json
diff options
context:
space:
mode:
authorTianren Dong <tianrendong.dtr@gmail.com>2026-05-13 07:29:41 -0400
committerTianren Dong <tianrendong.dtr@gmail.com>2026-05-13 07:29:41 -0400
commit4c54b05dc15b81e449dc8ac53da8bae536fa2798 (patch)
treef81c5e627dcc4dd81d2fe2fd3b2b584e72a73eca /test-suite/task-manifest.schema.json
parent5951b3fb04aaf53b875afe265a57a944d6fce641 (diff)
pi-chrome: snapshot pre-migration state
Diffstat (limited to 'test-suite/task-manifest.schema.json')
-rw-r--r--test-suite/task-manifest.schema.json59
1 files changed, 59 insertions, 0 deletions
diff --git a/test-suite/task-manifest.schema.json b/test-suite/task-manifest.schema.json
new file mode 100644
index 0000000..b8031fc
--- /dev/null
+++ b/test-suite/task-manifest.schema.json
@@ -0,0 +1,59 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "pi-chrome long-horizon task manifest",
+ "description": "BrowserGym-inspired task manifest: setup URL, deterministic seed, goal object, action subsets, reward contract, optional cheat recipe, and in-page validate hook.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": ["id", "taskId", "site", "startUrl", "setupUrl", "difficulty", "category", "goal", "goalObject", "grader", "actionSubsets", "maxSteps"],
+ "additionalProperties": true,
+ "properties": {
+ "id": { "type": "string" },
+ "taskId": { "type": "string" },
+ "site": { "type": "string" },
+ "seed": { "type": "integer" },
+ "startUrl": { "type": "string", "description": "Relative URL. $RUN_ID and $SEED should be replaced by runner for isolated deterministic state." },
+ "setupUrl": { "type": "string" },
+ "validateScript": { "type": "string" },
+ "cheatScript": { "type": "string" },
+ "viewport": { "type": "object", "properties": { "width": { "type": "integer" }, "height": { "type": "integer" } } },
+ "slowMoMs": { "type": "integer" },
+ "timeoutMs": { "type": "integer" },
+ "locale": { "type": ["string", "null"] },
+ "timezoneId": { "type": ["string", "null"] },
+ "difficulty": { "enum": ["L1", "L2", "L3"] },
+ "category": { "enum": ["enterprise-crud", "cross-page-memory", "cross-page-state-update", "task-completion"] },
+ "gradeSource": { "enum": ["page", "harness", "both"] },
+ "tags": { "type": "array", "items": { "type": "string" } },
+ "intent": { "type": "string" },
+ "goal": { "type": "string" },
+ "goalObject": { "type": "array", "items": { "type": "object" } },
+ "expectedActions": { "type": "object", "required": ["min", "max"], "properties": { "min": { "type": "integer" }, "max": { "type": "integer" } } },
+ "maxSteps": { "type": "integer" },
+ "humanBaseline": { "type": ["number", "null"], "minimum": 0, "maximum": 1 },
+ "actionSubsets": { "type": "array", "items": { "enum": ["chat", "infeas", "bid", "coord", "nav", "tab"] } },
+ "allowedActions": { "type": "array", "items": { "type": "string" } },
+ "requires": { "type": "array", "items": { "type": "string" } },
+ "rewardShape": { "enum": ["binary", "graded", "shaped"] },
+ "rubric": { "type": "array", "items": { "type": "object", "required": ["id", "weight", "description"], "properties": { "id": { "type": "string" }, "weight": { "type": "number" }, "description": { "type": "string" } } } },
+ "grader": {
+ "type": "object",
+ "required": ["type", "expression", "passValue"],
+ "properties": {
+ "type": { "enum": ["inPageProgrammatic"] },
+ "expression": { "type": "string", "description": "Should evaluate to BrowserGym-like validate object or legacy {v,r}." },
+ "passValue": { "type": "string" }
+ }
+ },
+ "browserGymLike": {
+ "type": "object",
+ "properties": {
+ "observation": { "type": "array", "items": { "type": "string" } },
+ "actionSpace": { "type": "array", "items": { "type": "string" } },
+ "reset": { "type": "string" },
+ "stepReturn": { "const": "obs,reward,terminated,truncated,info" }
+ }
+ }
+ }
+ }
+}