@oneharness/sdk 0.4.2 → 0.4.4
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.
|
@@ -2165,6 +2165,201 @@
|
|
|
2165
2165
|
"tool_ms"
|
|
2166
2166
|
]
|
|
2167
2167
|
},
|
|
2168
|
+
{
|
|
2169
|
+
"type": "object",
|
|
2170
|
+
"properties": {
|
|
2171
|
+
"duration_ms": {
|
|
2172
|
+
"type": [
|
|
2173
|
+
"integer",
|
|
2174
|
+
"null"
|
|
2175
|
+
],
|
|
2176
|
+
"format": "uint128",
|
|
2177
|
+
"minimum": 0
|
|
2178
|
+
},
|
|
2179
|
+
"events": {
|
|
2180
|
+
"description": "Best-effort normalized tool-call events; `null` when the harness exposes\nno machine-readable trace.",
|
|
2181
|
+
"type": [
|
|
2182
|
+
"array",
|
|
2183
|
+
"null"
|
|
2184
|
+
],
|
|
2185
|
+
"items": {
|
|
2186
|
+
"type": "object",
|
|
2187
|
+
"properties": {
|
|
2188
|
+
"duration_ms": {
|
|
2189
|
+
"type": "null"
|
|
2190
|
+
},
|
|
2191
|
+
"finished_at": {
|
|
2192
|
+
"type": "null"
|
|
2193
|
+
},
|
|
2194
|
+
"index": {
|
|
2195
|
+
"type": "integer",
|
|
2196
|
+
"minimum": 0
|
|
2197
|
+
},
|
|
2198
|
+
"input": true,
|
|
2199
|
+
"kind": {
|
|
2200
|
+
"type": "string"
|
|
2201
|
+
},
|
|
2202
|
+
"name": {
|
|
2203
|
+
"type": [
|
|
2204
|
+
"string",
|
|
2205
|
+
"null"
|
|
2206
|
+
]
|
|
2207
|
+
},
|
|
2208
|
+
"output": {
|
|
2209
|
+
"type": [
|
|
2210
|
+
"string",
|
|
2211
|
+
"null"
|
|
2212
|
+
]
|
|
2213
|
+
},
|
|
2214
|
+
"started_at": {
|
|
2215
|
+
"type": "null"
|
|
2216
|
+
},
|
|
2217
|
+
"status": {
|
|
2218
|
+
"type": "null"
|
|
2219
|
+
},
|
|
2220
|
+
"tool_call_id": {
|
|
2221
|
+
"type": [
|
|
2222
|
+
"string",
|
|
2223
|
+
"null"
|
|
2224
|
+
]
|
|
2225
|
+
}
|
|
2226
|
+
},
|
|
2227
|
+
"required": [
|
|
2228
|
+
"kind",
|
|
2229
|
+
"name",
|
|
2230
|
+
"input",
|
|
2231
|
+
"output",
|
|
2232
|
+
"index"
|
|
2233
|
+
]
|
|
2234
|
+
}
|
|
2235
|
+
},
|
|
2236
|
+
"exit_code": {
|
|
2237
|
+
"type": [
|
|
2238
|
+
"integer",
|
|
2239
|
+
"null"
|
|
2240
|
+
],
|
|
2241
|
+
"format": "int32"
|
|
2242
|
+
},
|
|
2243
|
+
"failure_kind": {
|
|
2244
|
+
"description": "Best-effort classified failure reason (see [`FailureKind`]); `null` when\nunclassified.",
|
|
2245
|
+
"anyOf": [
|
|
2246
|
+
{
|
|
2247
|
+
"$ref": "#/$defs/FailureKind"
|
|
2248
|
+
},
|
|
2249
|
+
{
|
|
2250
|
+
"type": "null"
|
|
2251
|
+
}
|
|
2252
|
+
]
|
|
2253
|
+
},
|
|
2254
|
+
"finished_at": {
|
|
2255
|
+
"type": "null"
|
|
2256
|
+
},
|
|
2257
|
+
"harness": {
|
|
2258
|
+
"description": "Canonical harness id (e.g. `claude-code`).",
|
|
2259
|
+
"type": "string"
|
|
2260
|
+
},
|
|
2261
|
+
"history_id": {
|
|
2262
|
+
"description": "Globally unique, time-ordered record id. This is also the cursor accepted\nby `history watch --after` and the exact id accepted by history lookup.",
|
|
2263
|
+
"type": "string",
|
|
2264
|
+
"maxLength": 36,
|
|
2265
|
+
"minLength": 36,
|
|
2266
|
+
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
|
|
2267
|
+
},
|
|
2268
|
+
"labels": {
|
|
2269
|
+
"description": "Caller-supplied metadata used to select related task-graph records.\nOmitted on the wire when empty for additive compatibility.",
|
|
2270
|
+
"$ref": "#/$defs/HistoryLabels"
|
|
2271
|
+
},
|
|
2272
|
+
"model": {
|
|
2273
|
+
"description": "The effective top-level model for the run, if any.",
|
|
2274
|
+
"type": [
|
|
2275
|
+
"string",
|
|
2276
|
+
"null"
|
|
2277
|
+
]
|
|
2278
|
+
},
|
|
2279
|
+
"model_ms": false,
|
|
2280
|
+
"name": {
|
|
2281
|
+
"description": "The human-meaningful session name (see [`session_name`]); repeated on\nevery record so a reader can resolve a session by name from any line.",
|
|
2282
|
+
"type": "string"
|
|
2283
|
+
},
|
|
2284
|
+
"permission_mode": {
|
|
2285
|
+
"description": "The normalized approval mode requested for the run.",
|
|
2286
|
+
"$ref": "#/$defs/PermissionMode"
|
|
2287
|
+
},
|
|
2288
|
+
"project": {
|
|
2289
|
+
"description": "The project directory the run operated in (the real path, not the\non-disk slug), so the list view can show where a session ran.",
|
|
2290
|
+
"type": "string"
|
|
2291
|
+
},
|
|
2292
|
+
"prompt": {
|
|
2293
|
+
"description": "The prompt this harness run received (its own, on a batch run; else the\nrun's single prompt).",
|
|
2294
|
+
"type": "string"
|
|
2295
|
+
},
|
|
2296
|
+
"schema_version": {
|
|
2297
|
+
"type": "string",
|
|
2298
|
+
"const": "0.3"
|
|
2299
|
+
},
|
|
2300
|
+
"session": {
|
|
2301
|
+
"description": "The oneharness session id this run belongs to (the history file's stem).",
|
|
2302
|
+
"type": "string"
|
|
2303
|
+
},
|
|
2304
|
+
"session_id": {
|
|
2305
|
+
"description": "The harness's own continuation id, when it exposed one; `null` otherwise.",
|
|
2306
|
+
"type": [
|
|
2307
|
+
"string",
|
|
2308
|
+
"null"
|
|
2309
|
+
]
|
|
2310
|
+
},
|
|
2311
|
+
"started_at": false,
|
|
2312
|
+
"status": {
|
|
2313
|
+
"$ref": "#/$defs/Status"
|
|
2314
|
+
},
|
|
2315
|
+
"text": {
|
|
2316
|
+
"description": "Best-effort final assistant text; `null` when extraction was impossible.",
|
|
2317
|
+
"type": [
|
|
2318
|
+
"string",
|
|
2319
|
+
"null"
|
|
2320
|
+
]
|
|
2321
|
+
},
|
|
2322
|
+
"text_source": {
|
|
2323
|
+
"description": "How `text` was extracted; `null` when absent.",
|
|
2324
|
+
"type": [
|
|
2325
|
+
"string",
|
|
2326
|
+
"null"
|
|
2327
|
+
]
|
|
2328
|
+
},
|
|
2329
|
+
"time_to_first_token_ms": false,
|
|
2330
|
+
"timestamp": {
|
|
2331
|
+
"description": "RFC3339 UTC instant the record was written (append time).",
|
|
2332
|
+
"type": "string"
|
|
2333
|
+
},
|
|
2334
|
+
"tool_ms": false,
|
|
2335
|
+
"usage": {
|
|
2336
|
+
"description": "Best-effort token/cost accounting (every field `null` when unreported).",
|
|
2337
|
+
"$ref": "#/$defs/Usage"
|
|
2338
|
+
}
|
|
2339
|
+
},
|
|
2340
|
+
"required": [
|
|
2341
|
+
"schema_version",
|
|
2342
|
+
"history_id",
|
|
2343
|
+
"session",
|
|
2344
|
+
"name",
|
|
2345
|
+
"project",
|
|
2346
|
+
"timestamp",
|
|
2347
|
+
"harness",
|
|
2348
|
+
"model",
|
|
2349
|
+
"prompt",
|
|
2350
|
+
"permission_mode",
|
|
2351
|
+
"status",
|
|
2352
|
+
"exit_code",
|
|
2353
|
+
"duration_ms",
|
|
2354
|
+
"finished_at",
|
|
2355
|
+
"text",
|
|
2356
|
+
"text_source",
|
|
2357
|
+
"usage",
|
|
2358
|
+
"session_id",
|
|
2359
|
+
"events",
|
|
2360
|
+
"failure_kind"
|
|
2361
|
+
]
|
|
2362
|
+
},
|
|
2168
2363
|
{
|
|
2169
2364
|
"type": "object",
|
|
2170
2365
|
"properties": {
|
|
@@ -3153,6 +3348,7 @@
|
|
|
3153
3348
|
"minimum": 0
|
|
3154
3349
|
},
|
|
3155
3350
|
"events": {
|
|
3351
|
+
"description": "Best-effort normalized tool-call events; `null` when the harness exposes\nno machine-readable trace.",
|
|
3156
3352
|
"type": [
|
|
3157
3353
|
"array",
|
|
3158
3354
|
"null"
|
|
@@ -3160,6 +3356,12 @@
|
|
|
3160
3356
|
"items": {
|
|
3161
3357
|
"type": "object",
|
|
3162
3358
|
"properties": {
|
|
3359
|
+
"duration_ms": {
|
|
3360
|
+
"type": "null"
|
|
3361
|
+
},
|
|
3362
|
+
"finished_at": {
|
|
3363
|
+
"type": "null"
|
|
3364
|
+
},
|
|
3163
3365
|
"index": {
|
|
3164
3366
|
"type": "integer",
|
|
3165
3367
|
"minimum": 0
|
|
@@ -3179,6 +3381,18 @@
|
|
|
3179
3381
|
"string",
|
|
3180
3382
|
"null"
|
|
3181
3383
|
]
|
|
3384
|
+
},
|
|
3385
|
+
"started_at": {
|
|
3386
|
+
"type": "null"
|
|
3387
|
+
},
|
|
3388
|
+
"status": {
|
|
3389
|
+
"type": "null"
|
|
3390
|
+
},
|
|
3391
|
+
"tool_call_id": {
|
|
3392
|
+
"type": [
|
|
3393
|
+
"string",
|
|
3394
|
+
"null"
|
|
3395
|
+
]
|
|
3182
3396
|
}
|
|
3183
3397
|
},
|
|
3184
3398
|
"required": [
|
|
@@ -3209,10 +3423,7 @@
|
|
|
3209
3423
|
]
|
|
3210
3424
|
},
|
|
3211
3425
|
"finished_at": {
|
|
3212
|
-
"type":
|
|
3213
|
-
"string",
|
|
3214
|
-
"null"
|
|
3215
|
-
]
|
|
3426
|
+
"type": "null"
|
|
3216
3427
|
},
|
|
3217
3428
|
"harness": {
|
|
3218
3429
|
"description": "Canonical harness id (e.g. `claude-code`).",
|
|
@@ -3236,14 +3447,7 @@
|
|
|
3236
3447
|
"null"
|
|
3237
3448
|
]
|
|
3238
3449
|
},
|
|
3239
|
-
"model_ms":
|
|
3240
|
-
"type": [
|
|
3241
|
-
"integer",
|
|
3242
|
-
"null"
|
|
3243
|
-
],
|
|
3244
|
-
"format": "uint128",
|
|
3245
|
-
"minimum": 0
|
|
3246
|
-
},
|
|
3450
|
+
"model_ms": false,
|
|
3247
3451
|
"name": {
|
|
3248
3452
|
"description": "The human-meaningful session name (see [`session_name`]); repeated on\nevery record so a reader can resolve a session by name from any line.",
|
|
3249
3453
|
"type": "string"
|
|
@@ -3262,10 +3466,7 @@
|
|
|
3262
3466
|
},
|
|
3263
3467
|
"schema_version": {
|
|
3264
3468
|
"type": "string",
|
|
3265
|
-
"
|
|
3266
|
-
"0.1",
|
|
3267
|
-
"0.2"
|
|
3268
|
-
]
|
|
3469
|
+
"const": "0.3"
|
|
3269
3470
|
},
|
|
3270
3471
|
"session": {
|
|
3271
3472
|
"description": "The oneharness session id this run belongs to (the history file's stem).",
|
|
@@ -3278,13 +3479,7 @@
|
|
|
3278
3479
|
"null"
|
|
3279
3480
|
]
|
|
3280
3481
|
},
|
|
3281
|
-
"started_at":
|
|
3282
|
-
"description": "UTC invocation bounds and monotonic time attribution. The provider/tool\nsplit is conservative when a transcript has tool calls but lacks native\nboundaries: the observed invocation interval is attributed to the union\nof those calls, never double-counted.",
|
|
3283
|
-
"type": [
|
|
3284
|
-
"string",
|
|
3285
|
-
"null"
|
|
3286
|
-
]
|
|
3287
|
-
},
|
|
3482
|
+
"started_at": false,
|
|
3288
3483
|
"status": {
|
|
3289
3484
|
"$ref": "#/$defs/Status"
|
|
3290
3485
|
},
|
|
@@ -3302,26 +3497,12 @@
|
|
|
3302
3497
|
"null"
|
|
3303
3498
|
]
|
|
3304
3499
|
},
|
|
3305
|
-
"time_to_first_token_ms":
|
|
3306
|
-
"type": [
|
|
3307
|
-
"integer",
|
|
3308
|
-
"null"
|
|
3309
|
-
],
|
|
3310
|
-
"format": "uint128",
|
|
3311
|
-
"minimum": 0
|
|
3312
|
-
},
|
|
3500
|
+
"time_to_first_token_ms": false,
|
|
3313
3501
|
"timestamp": {
|
|
3314
3502
|
"description": "RFC3339 UTC instant the record was written (append time).",
|
|
3315
3503
|
"type": "string"
|
|
3316
3504
|
},
|
|
3317
|
-
"tool_ms":
|
|
3318
|
-
"type": [
|
|
3319
|
-
"integer",
|
|
3320
|
-
"null"
|
|
3321
|
-
],
|
|
3322
|
-
"format": "uint128",
|
|
3323
|
-
"minimum": 0
|
|
3324
|
-
},
|
|
3505
|
+
"tool_ms": false,
|
|
3325
3506
|
"usage": {
|
|
3326
3507
|
"description": "Best-effort token/cost accounting (every field `null` when unreported).",
|
|
3327
3508
|
"$ref": "#/$defs/Usage"
|
|
@@ -3341,6 +3522,7 @@
|
|
|
3341
3522
|
"status",
|
|
3342
3523
|
"exit_code",
|
|
3343
3524
|
"duration_ms",
|
|
3525
|
+
"finished_at",
|
|
3344
3526
|
"text",
|
|
3345
3527
|
"text_source",
|
|
3346
3528
|
"usage",
|
|
@@ -3348,30 +3530,238 @@
|
|
|
3348
3530
|
"events",
|
|
3349
3531
|
"failure_kind"
|
|
3350
3532
|
]
|
|
3351
|
-
}
|
|
3352
|
-
]
|
|
3353
|
-
},
|
|
3354
|
-
"PermissionMode": {
|
|
3355
|
-
"description": "The unified approval mode, from least to most autonomy. A harness may not\nsupport every value (see [`crate::domain::harness::HarnessSpec::mode`]); the\ncommand layer refuses an unsupported one before spawning, never silently\ndowngrading it.",
|
|
3356
|
-
"oneOf": [
|
|
3357
|
-
{
|
|
3358
|
-
"description": "No mutations — the agent may read but not edit files or run commands —\n*without* the plan workflow: it just does whatever read-only work the task\nallows. Mapped to each harness's strongest per-run no-mutation enforcement\n(Codex's read-only sandbox, Claude's deny rules, Copilot's `--deny-tool`,\nCursor's `ask` mode). The enforced counterpart to [`Self::Plan`].",
|
|
3359
|
-
"type": "string",
|
|
3360
|
-
"const": "read-only"
|
|
3361
|
-
},
|
|
3362
|
-
{
|
|
3363
|
-
"description": "Read and propose only — like [`Self::ReadOnly`], but additionally engages\nthe harness's *plan* workflow: research the task and write a plan rather\nthan act. Supported only where a native plan mode exists (Claude/Qwen/\nCursor/Copilot, OpenCode's `plan` agent); harnesses with no plan workflow\n(Codex, Goose, Crush) reject it — use [`Self::ReadOnly`] for those.",
|
|
3364
|
-
"type": "string",
|
|
3365
|
-
"const": "plan"
|
|
3366
|
-
},
|
|
3367
|
-
{
|
|
3368
|
-
"description": "The harness's normal ask flow, mapped to its cleanest *non-interactive*\nvariant so a headless run never blocks waiting for input (Claude's\n`dontAsk` deny-and-continue, Goose's fail-closed `approve`, Copilot's\nauto-deny). Where no such variant exists the harness's [`ModeHeadless`]\nis [`ModeHeadless::Hangs`].",
|
|
3369
|
-
"type": "string",
|
|
3370
|
-
"const": "default"
|
|
3371
3533
|
},
|
|
3372
3534
|
{
|
|
3373
|
-
"
|
|
3374
|
-
"
|
|
3535
|
+
"type": "object",
|
|
3536
|
+
"properties": {
|
|
3537
|
+
"duration_ms": {
|
|
3538
|
+
"type": [
|
|
3539
|
+
"integer",
|
|
3540
|
+
"null"
|
|
3541
|
+
],
|
|
3542
|
+
"format": "uint128",
|
|
3543
|
+
"minimum": 0
|
|
3544
|
+
},
|
|
3545
|
+
"events": {
|
|
3546
|
+
"type": [
|
|
3547
|
+
"array",
|
|
3548
|
+
"null"
|
|
3549
|
+
],
|
|
3550
|
+
"items": {
|
|
3551
|
+
"type": "object",
|
|
3552
|
+
"properties": {
|
|
3553
|
+
"index": {
|
|
3554
|
+
"type": "integer",
|
|
3555
|
+
"minimum": 0
|
|
3556
|
+
},
|
|
3557
|
+
"input": true,
|
|
3558
|
+
"kind": {
|
|
3559
|
+
"type": "string"
|
|
3560
|
+
},
|
|
3561
|
+
"name": {
|
|
3562
|
+
"type": [
|
|
3563
|
+
"string",
|
|
3564
|
+
"null"
|
|
3565
|
+
]
|
|
3566
|
+
},
|
|
3567
|
+
"output": {
|
|
3568
|
+
"type": [
|
|
3569
|
+
"string",
|
|
3570
|
+
"null"
|
|
3571
|
+
]
|
|
3572
|
+
}
|
|
3573
|
+
},
|
|
3574
|
+
"required": [
|
|
3575
|
+
"kind",
|
|
3576
|
+
"name",
|
|
3577
|
+
"input",
|
|
3578
|
+
"output",
|
|
3579
|
+
"index"
|
|
3580
|
+
]
|
|
3581
|
+
}
|
|
3582
|
+
},
|
|
3583
|
+
"exit_code": {
|
|
3584
|
+
"type": [
|
|
3585
|
+
"integer",
|
|
3586
|
+
"null"
|
|
3587
|
+
],
|
|
3588
|
+
"format": "int32"
|
|
3589
|
+
},
|
|
3590
|
+
"failure_kind": {
|
|
3591
|
+
"description": "Best-effort classified failure reason (see [`FailureKind`]); `null` when\nunclassified.",
|
|
3592
|
+
"anyOf": [
|
|
3593
|
+
{
|
|
3594
|
+
"$ref": "#/$defs/FailureKind"
|
|
3595
|
+
},
|
|
3596
|
+
{
|
|
3597
|
+
"type": "null"
|
|
3598
|
+
}
|
|
3599
|
+
]
|
|
3600
|
+
},
|
|
3601
|
+
"finished_at": {
|
|
3602
|
+
"type": [
|
|
3603
|
+
"string",
|
|
3604
|
+
"null"
|
|
3605
|
+
]
|
|
3606
|
+
},
|
|
3607
|
+
"harness": {
|
|
3608
|
+
"description": "Canonical harness id (e.g. `claude-code`).",
|
|
3609
|
+
"type": "string"
|
|
3610
|
+
},
|
|
3611
|
+
"history_id": {
|
|
3612
|
+
"description": "Globally unique, time-ordered record id. This is also the cursor accepted\nby `history watch --after` and the exact id accepted by history lookup.",
|
|
3613
|
+
"type": "string",
|
|
3614
|
+
"maxLength": 36,
|
|
3615
|
+
"minLength": 36,
|
|
3616
|
+
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
|
|
3617
|
+
},
|
|
3618
|
+
"labels": {
|
|
3619
|
+
"description": "Caller-supplied metadata used to select related task-graph records.\nOmitted on the wire when empty for additive compatibility.",
|
|
3620
|
+
"$ref": "#/$defs/HistoryLabels"
|
|
3621
|
+
},
|
|
3622
|
+
"model": {
|
|
3623
|
+
"description": "The effective top-level model for the run, if any.",
|
|
3624
|
+
"type": [
|
|
3625
|
+
"string",
|
|
3626
|
+
"null"
|
|
3627
|
+
]
|
|
3628
|
+
},
|
|
3629
|
+
"model_ms": {
|
|
3630
|
+
"type": [
|
|
3631
|
+
"integer",
|
|
3632
|
+
"null"
|
|
3633
|
+
],
|
|
3634
|
+
"format": "uint128",
|
|
3635
|
+
"minimum": 0
|
|
3636
|
+
},
|
|
3637
|
+
"name": {
|
|
3638
|
+
"description": "The human-meaningful session name (see [`session_name`]); repeated on\nevery record so a reader can resolve a session by name from any line.",
|
|
3639
|
+
"type": "string"
|
|
3640
|
+
},
|
|
3641
|
+
"permission_mode": {
|
|
3642
|
+
"description": "The normalized approval mode requested for the run.",
|
|
3643
|
+
"$ref": "#/$defs/PermissionMode"
|
|
3644
|
+
},
|
|
3645
|
+
"project": {
|
|
3646
|
+
"description": "The project directory the run operated in (the real path, not the\non-disk slug), so the list view can show where a session ran.",
|
|
3647
|
+
"type": "string"
|
|
3648
|
+
},
|
|
3649
|
+
"prompt": {
|
|
3650
|
+
"description": "The prompt this harness run received (its own, on a batch run; else the\nrun's single prompt).",
|
|
3651
|
+
"type": "string"
|
|
3652
|
+
},
|
|
3653
|
+
"schema_version": {
|
|
3654
|
+
"type": "string",
|
|
3655
|
+
"enum": [
|
|
3656
|
+
"0.1",
|
|
3657
|
+
"0.2"
|
|
3658
|
+
]
|
|
3659
|
+
},
|
|
3660
|
+
"session": {
|
|
3661
|
+
"description": "The oneharness session id this run belongs to (the history file's stem).",
|
|
3662
|
+
"type": "string"
|
|
3663
|
+
},
|
|
3664
|
+
"session_id": {
|
|
3665
|
+
"description": "The harness's own continuation id, when it exposed one; `null` otherwise.",
|
|
3666
|
+
"type": [
|
|
3667
|
+
"string",
|
|
3668
|
+
"null"
|
|
3669
|
+
]
|
|
3670
|
+
},
|
|
3671
|
+
"started_at": {
|
|
3672
|
+
"description": "UTC invocation bounds and monotonic time attribution. The provider/tool\nsplit is conservative when a transcript has tool calls but lacks native\nboundaries: the observed invocation interval is attributed to the union\nof those calls, never double-counted.",
|
|
3673
|
+
"type": [
|
|
3674
|
+
"string",
|
|
3675
|
+
"null"
|
|
3676
|
+
]
|
|
3677
|
+
},
|
|
3678
|
+
"status": {
|
|
3679
|
+
"$ref": "#/$defs/Status"
|
|
3680
|
+
},
|
|
3681
|
+
"text": {
|
|
3682
|
+
"description": "Best-effort final assistant text; `null` when extraction was impossible.",
|
|
3683
|
+
"type": [
|
|
3684
|
+
"string",
|
|
3685
|
+
"null"
|
|
3686
|
+
]
|
|
3687
|
+
},
|
|
3688
|
+
"text_source": {
|
|
3689
|
+
"description": "How `text` was extracted; `null` when absent.",
|
|
3690
|
+
"type": [
|
|
3691
|
+
"string",
|
|
3692
|
+
"null"
|
|
3693
|
+
]
|
|
3694
|
+
},
|
|
3695
|
+
"time_to_first_token_ms": {
|
|
3696
|
+
"type": [
|
|
3697
|
+
"integer",
|
|
3698
|
+
"null"
|
|
3699
|
+
],
|
|
3700
|
+
"format": "uint128",
|
|
3701
|
+
"minimum": 0
|
|
3702
|
+
},
|
|
3703
|
+
"timestamp": {
|
|
3704
|
+
"description": "RFC3339 UTC instant the record was written (append time).",
|
|
3705
|
+
"type": "string"
|
|
3706
|
+
},
|
|
3707
|
+
"tool_ms": {
|
|
3708
|
+
"type": [
|
|
3709
|
+
"integer",
|
|
3710
|
+
"null"
|
|
3711
|
+
],
|
|
3712
|
+
"format": "uint128",
|
|
3713
|
+
"minimum": 0
|
|
3714
|
+
},
|
|
3715
|
+
"usage": {
|
|
3716
|
+
"description": "Best-effort token/cost accounting (every field `null` when unreported).",
|
|
3717
|
+
"$ref": "#/$defs/Usage"
|
|
3718
|
+
}
|
|
3719
|
+
},
|
|
3720
|
+
"required": [
|
|
3721
|
+
"schema_version",
|
|
3722
|
+
"history_id",
|
|
3723
|
+
"session",
|
|
3724
|
+
"name",
|
|
3725
|
+
"project",
|
|
3726
|
+
"timestamp",
|
|
3727
|
+
"harness",
|
|
3728
|
+
"model",
|
|
3729
|
+
"prompt",
|
|
3730
|
+
"permission_mode",
|
|
3731
|
+
"status",
|
|
3732
|
+
"exit_code",
|
|
3733
|
+
"duration_ms",
|
|
3734
|
+
"text",
|
|
3735
|
+
"text_source",
|
|
3736
|
+
"usage",
|
|
3737
|
+
"session_id",
|
|
3738
|
+
"events",
|
|
3739
|
+
"failure_kind"
|
|
3740
|
+
]
|
|
3741
|
+
}
|
|
3742
|
+
]
|
|
3743
|
+
},
|
|
3744
|
+
"PermissionMode": {
|
|
3745
|
+
"description": "The unified approval mode, from least to most autonomy. A harness may not\nsupport every value (see [`crate::domain::harness::HarnessSpec::mode`]); the\ncommand layer refuses an unsupported one before spawning, never silently\ndowngrading it.",
|
|
3746
|
+
"oneOf": [
|
|
3747
|
+
{
|
|
3748
|
+
"description": "No mutations — the agent may read but not edit files or run commands —\n*without* the plan workflow: it just does whatever read-only work the task\nallows. Mapped to each harness's strongest per-run no-mutation enforcement\n(Codex's read-only sandbox, Claude's deny rules, Copilot's `--deny-tool`,\nCursor's `ask` mode). The enforced counterpart to [`Self::Plan`].",
|
|
3749
|
+
"type": "string",
|
|
3750
|
+
"const": "read-only"
|
|
3751
|
+
},
|
|
3752
|
+
{
|
|
3753
|
+
"description": "Read and propose only — like [`Self::ReadOnly`], but additionally engages\nthe harness's *plan* workflow: research the task and write a plan rather\nthan act. Supported only where a native plan mode exists (Claude/Qwen/\nCursor/Copilot, OpenCode's `plan` agent); harnesses with no plan workflow\n(Codex, Goose, Crush) reject it — use [`Self::ReadOnly`] for those.",
|
|
3754
|
+
"type": "string",
|
|
3755
|
+
"const": "plan"
|
|
3756
|
+
},
|
|
3757
|
+
{
|
|
3758
|
+
"description": "The harness's normal ask flow, mapped to its cleanest *non-interactive*\nvariant so a headless run never blocks waiting for input (Claude's\n`dontAsk` deny-and-continue, Goose's fail-closed `approve`, Copilot's\nauto-deny). Where no such variant exists the harness's [`ModeHeadless`]\nis [`ModeHeadless::Hangs`].",
|
|
3759
|
+
"type": "string",
|
|
3760
|
+
"const": "default"
|
|
3761
|
+
},
|
|
3762
|
+
{
|
|
3763
|
+
"description": "Auto-approve file edits, still gate shell/commands. (Claude's\n`acceptEdits`, Qwen's `auto-edit`.)",
|
|
3764
|
+
"type": "string",
|
|
3375
3765
|
"const": "edit"
|
|
3376
3766
|
},
|
|
3377
3767
|
{
|
|
@@ -3967,6 +4357,201 @@
|
|
|
3967
4357
|
"tool_ms"
|
|
3968
4358
|
]
|
|
3969
4359
|
},
|
|
4360
|
+
{
|
|
4361
|
+
"type": "object",
|
|
4362
|
+
"properties": {
|
|
4363
|
+
"duration_ms": {
|
|
4364
|
+
"type": [
|
|
4365
|
+
"integer",
|
|
4366
|
+
"null"
|
|
4367
|
+
],
|
|
4368
|
+
"format": "uint128",
|
|
4369
|
+
"minimum": 0
|
|
4370
|
+
},
|
|
4371
|
+
"events": {
|
|
4372
|
+
"description": "Best-effort normalized tool-call events; `null` when the harness exposes\nno machine-readable trace.",
|
|
4373
|
+
"type": [
|
|
4374
|
+
"array",
|
|
4375
|
+
"null"
|
|
4376
|
+
],
|
|
4377
|
+
"items": {
|
|
4378
|
+
"type": "object",
|
|
4379
|
+
"properties": {
|
|
4380
|
+
"duration_ms": {
|
|
4381
|
+
"type": "null"
|
|
4382
|
+
},
|
|
4383
|
+
"finished_at": {
|
|
4384
|
+
"type": "null"
|
|
4385
|
+
},
|
|
4386
|
+
"index": {
|
|
4387
|
+
"type": "integer",
|
|
4388
|
+
"minimum": 0
|
|
4389
|
+
},
|
|
4390
|
+
"input": true,
|
|
4391
|
+
"kind": {
|
|
4392
|
+
"type": "string"
|
|
4393
|
+
},
|
|
4394
|
+
"name": {
|
|
4395
|
+
"type": [
|
|
4396
|
+
"string",
|
|
4397
|
+
"null"
|
|
4398
|
+
]
|
|
4399
|
+
},
|
|
4400
|
+
"output": {
|
|
4401
|
+
"type": [
|
|
4402
|
+
"string",
|
|
4403
|
+
"null"
|
|
4404
|
+
]
|
|
4405
|
+
},
|
|
4406
|
+
"started_at": {
|
|
4407
|
+
"type": "null"
|
|
4408
|
+
},
|
|
4409
|
+
"status": {
|
|
4410
|
+
"type": "null"
|
|
4411
|
+
},
|
|
4412
|
+
"tool_call_id": {
|
|
4413
|
+
"type": [
|
|
4414
|
+
"string",
|
|
4415
|
+
"null"
|
|
4416
|
+
]
|
|
4417
|
+
}
|
|
4418
|
+
},
|
|
4419
|
+
"required": [
|
|
4420
|
+
"kind",
|
|
4421
|
+
"name",
|
|
4422
|
+
"input",
|
|
4423
|
+
"output",
|
|
4424
|
+
"index"
|
|
4425
|
+
]
|
|
4426
|
+
}
|
|
4427
|
+
},
|
|
4428
|
+
"exit_code": {
|
|
4429
|
+
"type": [
|
|
4430
|
+
"integer",
|
|
4431
|
+
"null"
|
|
4432
|
+
],
|
|
4433
|
+
"format": "int32"
|
|
4434
|
+
},
|
|
4435
|
+
"failure_kind": {
|
|
4436
|
+
"description": "Best-effort classified failure reason (see [`FailureKind`]); `null` when\nunclassified.",
|
|
4437
|
+
"anyOf": [
|
|
4438
|
+
{
|
|
4439
|
+
"$ref": "#/$defs/FailureKind"
|
|
4440
|
+
},
|
|
4441
|
+
{
|
|
4442
|
+
"type": "null"
|
|
4443
|
+
}
|
|
4444
|
+
]
|
|
4445
|
+
},
|
|
4446
|
+
"finished_at": {
|
|
4447
|
+
"type": "null"
|
|
4448
|
+
},
|
|
4449
|
+
"harness": {
|
|
4450
|
+
"description": "Canonical harness id (e.g. `claude-code`).",
|
|
4451
|
+
"type": "string"
|
|
4452
|
+
},
|
|
4453
|
+
"history_id": {
|
|
4454
|
+
"description": "Globally unique, time-ordered record id. This is also the cursor accepted\nby `history watch --after` and the exact id accepted by history lookup.",
|
|
4455
|
+
"type": "string",
|
|
4456
|
+
"maxLength": 36,
|
|
4457
|
+
"minLength": 36,
|
|
4458
|
+
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
|
|
4459
|
+
},
|
|
4460
|
+
"labels": {
|
|
4461
|
+
"description": "Caller-supplied metadata used to select related task-graph records.\nOmitted on the wire when empty for additive compatibility.",
|
|
4462
|
+
"$ref": "#/$defs/HistoryLabels"
|
|
4463
|
+
},
|
|
4464
|
+
"model": {
|
|
4465
|
+
"description": "The effective top-level model for the run, if any.",
|
|
4466
|
+
"type": [
|
|
4467
|
+
"string",
|
|
4468
|
+
"null"
|
|
4469
|
+
]
|
|
4470
|
+
},
|
|
4471
|
+
"model_ms": false,
|
|
4472
|
+
"name": {
|
|
4473
|
+
"description": "The human-meaningful session name (see [`session_name`]); repeated on\nevery record so a reader can resolve a session by name from any line.",
|
|
4474
|
+
"type": "string"
|
|
4475
|
+
},
|
|
4476
|
+
"permission_mode": {
|
|
4477
|
+
"description": "The normalized approval mode requested for the run.",
|
|
4478
|
+
"$ref": "#/$defs/PermissionMode"
|
|
4479
|
+
},
|
|
4480
|
+
"project": {
|
|
4481
|
+
"description": "The project directory the run operated in (the real path, not the\non-disk slug), so the list view can show where a session ran.",
|
|
4482
|
+
"type": "string"
|
|
4483
|
+
},
|
|
4484
|
+
"prompt": {
|
|
4485
|
+
"description": "The prompt this harness run received (its own, on a batch run; else the\nrun's single prompt).",
|
|
4486
|
+
"type": "string"
|
|
4487
|
+
},
|
|
4488
|
+
"schema_version": {
|
|
4489
|
+
"type": "string",
|
|
4490
|
+
"const": "0.3"
|
|
4491
|
+
},
|
|
4492
|
+
"session": {
|
|
4493
|
+
"description": "The oneharness session id this run belongs to (the history file's stem).",
|
|
4494
|
+
"type": "string"
|
|
4495
|
+
},
|
|
4496
|
+
"session_id": {
|
|
4497
|
+
"description": "The harness's own continuation id, when it exposed one; `null` otherwise.",
|
|
4498
|
+
"type": [
|
|
4499
|
+
"string",
|
|
4500
|
+
"null"
|
|
4501
|
+
]
|
|
4502
|
+
},
|
|
4503
|
+
"started_at": false,
|
|
4504
|
+
"status": {
|
|
4505
|
+
"$ref": "#/$defs/Status"
|
|
4506
|
+
},
|
|
4507
|
+
"text": {
|
|
4508
|
+
"description": "Best-effort final assistant text; `null` when extraction was impossible.",
|
|
4509
|
+
"type": [
|
|
4510
|
+
"string",
|
|
4511
|
+
"null"
|
|
4512
|
+
]
|
|
4513
|
+
},
|
|
4514
|
+
"text_source": {
|
|
4515
|
+
"description": "How `text` was extracted; `null` when absent.",
|
|
4516
|
+
"type": [
|
|
4517
|
+
"string",
|
|
4518
|
+
"null"
|
|
4519
|
+
]
|
|
4520
|
+
},
|
|
4521
|
+
"time_to_first_token_ms": false,
|
|
4522
|
+
"timestamp": {
|
|
4523
|
+
"description": "RFC3339 UTC instant the record was written (append time).",
|
|
4524
|
+
"type": "string"
|
|
4525
|
+
},
|
|
4526
|
+
"tool_ms": false,
|
|
4527
|
+
"usage": {
|
|
4528
|
+
"description": "Best-effort token/cost accounting (every field `null` when unreported).",
|
|
4529
|
+
"$ref": "#/$defs/Usage"
|
|
4530
|
+
}
|
|
4531
|
+
},
|
|
4532
|
+
"required": [
|
|
4533
|
+
"schema_version",
|
|
4534
|
+
"history_id",
|
|
4535
|
+
"session",
|
|
4536
|
+
"name",
|
|
4537
|
+
"project",
|
|
4538
|
+
"timestamp",
|
|
4539
|
+
"harness",
|
|
4540
|
+
"model",
|
|
4541
|
+
"prompt",
|
|
4542
|
+
"permission_mode",
|
|
4543
|
+
"status",
|
|
4544
|
+
"exit_code",
|
|
4545
|
+
"duration_ms",
|
|
4546
|
+
"finished_at",
|
|
4547
|
+
"text",
|
|
4548
|
+
"text_source",
|
|
4549
|
+
"usage",
|
|
4550
|
+
"session_id",
|
|
4551
|
+
"events",
|
|
4552
|
+
"failure_kind"
|
|
4553
|
+
]
|
|
4554
|
+
},
|
|
3970
4555
|
{
|
|
3971
4556
|
"type": "object",
|
|
3972
4557
|
"properties": {
|