pi-radar 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -10
- package/dist/extension/baseline.js +343 -361
- package/dist/extension/radar-children.js +108 -218
- package/dist/extension/radar-client.js +103 -15
- package/dist/extension/radar-execution.js +26 -17
- package/dist/extension/radar-inspection.js +0 -45
- package/dist/extension/radar-launch.js +24 -185
- package/dist/extension/radar-publication.js +26 -17
- package/dist/extension/radar-runtime.js +1 -1
- package/dist/index.js +317 -488
- package/extension/generated-contracts.ts +362 -13
- package/extension/radar-children.ts +60 -155
- package/extension/radar-client.ts +130 -19
- package/extension/radar-inspection.ts +2 -77
- package/extension/radar-launch.ts +52 -391
- package/extension/radar-publication.ts +36 -53
- package/extension/radar-runtime.ts +1 -1
- package/package.json +1 -1
- package/schema/public/v1/observation-get-response.deserialize.schema.json +5 -25
- package/schema/public/v1/observation-get-response.serialize.schema.json +7 -29
- package/schema/public/v1/observation-snapshot.deserialize.schema.json +5 -25
- package/schema/public/v1/observation-snapshot.serialize.schema.json +7 -29
- package/schema/public/v1/spawn-list-page.deserialize.schema.json +40 -17
- package/schema/public/v1/spawn-list-page.serialize.schema.json +40 -17
- package/schema/public/v1/subject-assignment-acquire.deserialize.schema.json +78 -0
- package/schema/public/v1/subject-assignment-acquire.serialize.schema.json +79 -0
- package/schema/public/v1/subject-assignment-publish.deserialize.schema.json +310 -0
- package/schema/public/v1/subject-assignment-publish.serialize.schema.json +310 -0
- package/schema/public/v1/subject-assignment-retire.deserialize.schema.json +22 -0
- package/schema/public/v1/subject-assignment-retire.serialize.schema.json +22 -0
- package/schema/public/v1/subject-child-get-params.deserialize.schema.json +18 -0
- package/schema/public/v1/subject-child-get-params.serialize.schema.json +18 -0
- package/schema/public/v1/subject-children-params.deserialize.schema.json +51 -0
- package/schema/public/v1/subject-children-params.serialize.schema.json +54 -0
- package/schema/public/v1/subject-get-params.deserialize.schema.json +14 -0
- package/schema/public/v1/subject-get-params.serialize.schema.json +14 -0
- package/schema/public/v1/subject-get-result.deserialize.schema.json +566 -0
- package/schema/public/v1/subject-get-result.serialize.schema.json +573 -0
- package/schema/public/v1/subject-list-params.deserialize.schema.json +38 -0
- package/schema/public/v1/subject-list-params.serialize.schema.json +43 -0
- package/schema/public/v1/subject-list-result.deserialize.schema.json +575 -0
- package/schema/public/v1/subject-list-result.serialize.schema.json +583 -0
|
@@ -318,7 +318,7 @@ type PendingPublish = {
|
|
|
318
318
|
|
|
319
319
|
type ChannelRecord = {
|
|
320
320
|
version: typeof RADAR_PUBLICATION_VERSION;
|
|
321
|
-
|
|
321
|
+
target_id: string;
|
|
322
322
|
channel: RadarChannel;
|
|
323
323
|
publisher: RadarPublisherIdentity;
|
|
324
324
|
writer?: { handle: string; generation: number };
|
|
@@ -353,10 +353,11 @@ type ContextRecord = {
|
|
|
353
353
|
diagnostic?: string;
|
|
354
354
|
};
|
|
355
355
|
|
|
356
|
-
/** What a managed child tells its owner: which
|
|
356
|
+
/** What a managed child tells its owner: which subject to address, once granted. */
|
|
357
357
|
export type RadarChildBinding = {
|
|
358
358
|
version: typeof RADAR_PUBLICATION_VERSION;
|
|
359
359
|
registration_id: string;
|
|
360
|
+
subject_id?: string;
|
|
360
361
|
incarnation: string;
|
|
361
362
|
run: string;
|
|
362
363
|
owner: string;
|
|
@@ -571,36 +572,6 @@ function pendingAt(
|
|
|
571
572
|
return { sequence, snapshot, lease_ms: lease, observed_at: observed };
|
|
572
573
|
}
|
|
573
574
|
|
|
574
|
-
const CONTEXT_PENDING_KEYS = "lease_ms,observed_at,sequence,session";
|
|
575
|
-
const CONTEXT_ACCEPTED_KEYS = "lease_ms,observed_at,sent_at,sequence,session";
|
|
576
|
-
// Records written before session-bound management also carry a launch-identity
|
|
577
|
-
// marker. It is read past and never used: the attached subject is the identity.
|
|
578
|
-
const CONTEXT_PENDING_LEGACY_KEYS = "launch_identity,lease_ms,observed_at,sequence,session";
|
|
579
|
-
const CONTEXT_ACCEPTED_LEGACY_KEYS = "launch_identity,lease_ms,observed_at,sent_at,sequence,session";
|
|
580
|
-
|
|
581
|
-
/** The reported session, or `undefined` when the field is not one of the two. */
|
|
582
|
-
function sessionAt(value: unknown): string | null | undefined {
|
|
583
|
-
if (typeof value !== "object" || value === null) return undefined;
|
|
584
|
-
const found = (value as Record<string, unknown>).session;
|
|
585
|
-
if (found === null) return null;
|
|
586
|
-
return typeof found === "string" ? found : undefined;
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
function contextReportAt(
|
|
590
|
-
value: unknown,
|
|
591
|
-
keys: string,
|
|
592
|
-
legacyKeys: string,
|
|
593
|
-
): ContextReport | undefined {
|
|
594
|
-
if (!exactKeys(value, keys) && !exactKeys(value, legacyKeys)) return undefined;
|
|
595
|
-
const sequence = numberAt(value, "sequence");
|
|
596
|
-
const lease = numberAt(value, "lease_ms");
|
|
597
|
-
const observed = textAt(value, "observed_at");
|
|
598
|
-
const session = sessionAt(value);
|
|
599
|
-
if (sequence === undefined || sequence < 1) return undefined;
|
|
600
|
-
if (lease === undefined || observed === undefined || session === undefined)
|
|
601
|
-
return undefined;
|
|
602
|
-
return { sequence, session, lease_ms: lease, observed_at: observed };
|
|
603
|
-
}
|
|
604
575
|
|
|
605
576
|
export type RadarFactsWriter = Omit<RadarChannelWriter, "update"> & {
|
|
606
577
|
update(snapshot: RadarFactsSnapshot): void;
|
|
@@ -652,16 +623,21 @@ function createChannelWriter(input: ChannelWriterInput): RadarChannelWriter {
|
|
|
652
623
|
function blank(agentId: string): ChannelRecord {
|
|
653
624
|
return {
|
|
654
625
|
version: RADAR_PUBLICATION_VERSION,
|
|
655
|
-
|
|
626
|
+
target_id: agentId,
|
|
656
627
|
channel,
|
|
657
628
|
publisher,
|
|
658
629
|
sequence: 0,
|
|
659
630
|
};
|
|
660
631
|
}
|
|
661
632
|
|
|
633
|
+
/** An assignment names a child subject; every other channel names a process. */
|
|
634
|
+
function addressed(target: string): { registration_id: string } | { subject_id: string } {
|
|
635
|
+
return channel === "assignment" ? { subject_id: target } : { registration_id: target };
|
|
636
|
+
}
|
|
637
|
+
|
|
662
638
|
function loadRecord(): ChannelRecord {
|
|
663
639
|
const value = store.read(recordName);
|
|
664
|
-
const agentId = textAt(value, "
|
|
640
|
+
const agentId = textAt(value, "target_id");
|
|
665
641
|
const storedPublisher = recordAt(value, "publisher");
|
|
666
642
|
// A record written for another channel or publisher is not this writer's
|
|
667
643
|
// binding: adopting it would publish under someone else's identity.
|
|
@@ -689,7 +665,7 @@ function createChannelWriter(input: ChannelWriterInput): RadarChannelWriter {
|
|
|
689
665
|
const sentAt = numberAt(acceptedValue, "sent_at");
|
|
690
666
|
return {
|
|
691
667
|
version: RADAR_PUBLICATION_VERSION,
|
|
692
|
-
|
|
668
|
+
target_id: agentId,
|
|
693
669
|
channel,
|
|
694
670
|
publisher,
|
|
695
671
|
...(handle !== undefined && generation !== undefined
|
|
@@ -757,18 +733,14 @@ function createChannelWriter(input: ChannelWriterInput): RadarChannelWriter {
|
|
|
757
733
|
// identical immutable content that was persisted with it.
|
|
758
734
|
const agentId = await input.subject(recovering);
|
|
759
735
|
if (agentId === undefined) return false;
|
|
760
|
-
if (record.
|
|
736
|
+
if (record.target_id !== agentId) {
|
|
761
737
|
// A different subject incarnation is a different channel: the previous
|
|
762
738
|
// binding, sequence and unresolved request do not apply to it, so the
|
|
763
739
|
// next drain publishes a complete snapshot instead of replaying one.
|
|
764
740
|
record = blank(agentId);
|
|
765
741
|
save();
|
|
766
742
|
}
|
|
767
|
-
const answer = await client.acquire({
|
|
768
|
-
registration_id: agentId,
|
|
769
|
-
channel,
|
|
770
|
-
publisher,
|
|
771
|
-
});
|
|
743
|
+
const answer = await client.acquire({...addressed(agentId), channel, publisher});
|
|
772
744
|
if (answer.ok === false) {
|
|
773
745
|
if (answer.code === "not_found") {
|
|
774
746
|
// The daemon has lost this subject. The identical immutable content is
|
|
@@ -805,15 +777,12 @@ function createChannelWriter(input: ChannelWriterInput): RadarChannelWriter {
|
|
|
805
777
|
async function send(pending: PendingPublish): Promise<void> {
|
|
806
778
|
const writer = record.writer;
|
|
807
779
|
if (writer === undefined) return;
|
|
808
|
-
const answer = await client.publish({
|
|
809
|
-
registration_id: record.registration_id,
|
|
810
|
-
channel,
|
|
780
|
+
const answer = await client.publish({...addressed(record.target_id), channel,
|
|
811
781
|
writer_handle: writer.handle,
|
|
812
782
|
sequence: pending.sequence,
|
|
813
783
|
lease_ms: pending.lease_ms,
|
|
814
784
|
observed_at: pending.observed_at,
|
|
815
|
-
snapshot: pending.snapshot,
|
|
816
|
-
});
|
|
785
|
+
snapshot: pending.snapshot,});
|
|
817
786
|
if (answer.ok === true) {
|
|
818
787
|
recovering = false;
|
|
819
788
|
record.sequence = Math.max(record.sequence, answer.value.sequence);
|
|
@@ -919,10 +888,9 @@ function createChannelWriter(input: ChannelWriterInput): RadarChannelWriter {
|
|
|
919
888
|
stopPump();
|
|
920
889
|
const writer = record.writer;
|
|
921
890
|
if (writer === undefined) return;
|
|
922
|
-
const agentId = record.
|
|
891
|
+
const agentId = record.target_id;
|
|
923
892
|
try {
|
|
924
|
-
void client
|
|
925
|
-
.retire({ registration_id: agentId, channel, writer_handle: writer.handle })
|
|
893
|
+
void client.retire({...addressed(agentId), channel, writer_handle: writer.handle})
|
|
926
894
|
.then((answer) => {
|
|
927
895
|
if (answer.ok === true) {
|
|
928
896
|
try {
|
|
@@ -970,6 +938,8 @@ type PresenceReporterInput = {
|
|
|
970
938
|
scheduler: RadarScheduler;
|
|
971
939
|
recordName: string;
|
|
972
940
|
registration(): Promise<RadarRegistration | undefined>;
|
|
941
|
+
/** The subject Radar granted this process's session, when it granted one. */
|
|
942
|
+
granted?(subjectId: string): void;
|
|
973
943
|
heartbeatMs: number;
|
|
974
944
|
};
|
|
975
945
|
|
|
@@ -1052,6 +1022,7 @@ function createPresenceReporter(input: PresenceReporterInput): RadarPresenceRepo
|
|
|
1052
1022
|
}
|
|
1053
1023
|
claim.registration_id = answer.value.registration_id;
|
|
1054
1024
|
claim.subject_id = answer.value.standing === "granted" ? answer.value.subject_id ?? undefined : undefined;
|
|
1025
|
+
if (claim.subject_id !== undefined) input.granted?.(claim.subject_id);
|
|
1055
1026
|
standing = answer.value.standing === "granted"
|
|
1056
1027
|
? { state: "managed", subject_id: claim.subject_id! }
|
|
1057
1028
|
: answer.value.standing === "duplicate"
|
|
@@ -1365,7 +1336,7 @@ function createRadarPublicationInner(
|
|
|
1365
1336
|
agentId = registered;
|
|
1366
1337
|
processRecord = { ...record, registration_id: agentId };
|
|
1367
1338
|
store.write(registrationName, processRecord);
|
|
1368
|
-
if (options.binding !== undefined) writeBinding(options.binding);
|
|
1339
|
+
if (options.binding !== undefined) writeBinding(options.binding, grantedSubject());
|
|
1369
1340
|
return agentId;
|
|
1370
1341
|
})();
|
|
1371
1342
|
try {
|
|
@@ -1375,16 +1346,23 @@ function createRadarPublicationInner(
|
|
|
1375
1346
|
}
|
|
1376
1347
|
}
|
|
1377
1348
|
|
|
1349
|
+
/** The subject Radar granted this process, once presence has been answered. */
|
|
1350
|
+
function grantedSubject(): string | undefined {
|
|
1351
|
+
const standing = presence.management();
|
|
1352
|
+
return standing?.state === "managed" ? standing.subject_id : undefined;
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1378
1355
|
function writeBinding(binding: {
|
|
1379
1356
|
key: string;
|
|
1380
1357
|
run: string;
|
|
1381
1358
|
owner: string;
|
|
1382
1359
|
label: string;
|
|
1383
|
-
}): void {
|
|
1360
|
+
}, subjectId?: string): void {
|
|
1384
1361
|
if (agentId === undefined) return;
|
|
1385
1362
|
store.write(`bindings/${binding.key}.json`, {
|
|
1386
1363
|
version: RADAR_PUBLICATION_VERSION,
|
|
1387
1364
|
registration_id: agentId,
|
|
1365
|
+
...(subjectId !== undefined ? { subject_id: subjectId } : {}),
|
|
1388
1366
|
incarnation,
|
|
1389
1367
|
run: binding.run,
|
|
1390
1368
|
owner: binding.owner,
|
|
@@ -1426,6 +1404,9 @@ function createRadarPublicationInner(
|
|
|
1426
1404
|
...(launchRegistrationId ? { registration_id: launchRegistrationId } : {}),
|
|
1427
1405
|
};
|
|
1428
1406
|
},
|
|
1407
|
+
granted: (subjectId) => {
|
|
1408
|
+
if (options.binding !== undefined) writeBinding(options.binding, subjectId);
|
|
1409
|
+
},
|
|
1429
1410
|
heartbeatMs: options.heartbeatMs ?? RADAR_HEARTBEAT_MS,
|
|
1430
1411
|
});
|
|
1431
1412
|
|
|
@@ -1460,8 +1441,7 @@ function createRadarPublicationInner(
|
|
|
1460
1441
|
channel: "assignment",
|
|
1461
1442
|
publisher: publisher("herdsman-owner", reportingOwner),
|
|
1462
1443
|
codec: assignmentCodec,
|
|
1463
|
-
//
|
|
1464
|
-
// registration_id from the child's sidecar is the whole correlation.
|
|
1444
|
+
// Radar owns this assignment across the child's process replacements.
|
|
1465
1445
|
subject: async () => target,
|
|
1466
1446
|
leaseMs: options.leaseMs ?? RADAR_LEASE_MS,
|
|
1467
1447
|
heartbeatMs: options.heartbeatMs ?? RADAR_HEARTBEAT_MS,
|
|
@@ -1482,6 +1462,7 @@ function createRadarPublicationInner(
|
|
|
1482
1462
|
return undefined;
|
|
1483
1463
|
}
|
|
1484
1464
|
const bound = textAt(value, "registration_id");
|
|
1465
|
+
const subjectId = textAt(value, "subject_id");
|
|
1485
1466
|
const boundIncarnation = textAt(value, "incarnation");
|
|
1486
1467
|
const run = textAt(value, "run");
|
|
1487
1468
|
const owner = textAt(value, "owner");
|
|
@@ -1491,6 +1472,7 @@ function createRadarPublicationInner(
|
|
|
1491
1472
|
// identity is ever used as a channel target.
|
|
1492
1473
|
if (
|
|
1493
1474
|
!isUuid(bound) ||
|
|
1475
|
+
(subjectId !== undefined && !isUuid(subjectId)) ||
|
|
1494
1476
|
!isUuid(boundIncarnation) ||
|
|
1495
1477
|
run === undefined ||
|
|
1496
1478
|
owner === undefined ||
|
|
@@ -1501,6 +1483,7 @@ function createRadarPublicationInner(
|
|
|
1501
1483
|
return {
|
|
1502
1484
|
version: RADAR_PUBLICATION_VERSION,
|
|
1503
1485
|
registration_id: bound,
|
|
1486
|
+
...(subjectId !== undefined ? { subject_id: subjectId } : {}),
|
|
1504
1487
|
incarnation: boundIncarnation,
|
|
1505
1488
|
run,
|
|
1506
1489
|
owner,
|
|
@@ -5,7 +5,7 @@ import type { RadarPublication } from "./radar-publication.ts";
|
|
|
5
5
|
|
|
6
6
|
/** The event channel through which Pi extensions obtain the baseline runtime. */
|
|
7
7
|
export const RADAR_RUNTIME_REQUEST = "pi-radar/runtime-request";
|
|
8
|
-
export const RADAR_RUNTIME_VERSION =
|
|
8
|
+
export const RADAR_RUNTIME_VERSION = 5 as const;
|
|
9
9
|
|
|
10
10
|
/** The sole baseline publisher's session-scoped runtime, shared with consumers. */
|
|
11
11
|
export type RadarRuntimeServices = {
|
package/package.json
CHANGED
|
@@ -732,7 +732,7 @@
|
|
|
732
732
|
"type": "array"
|
|
733
733
|
},
|
|
734
734
|
"context_usage": {
|
|
735
|
-
"description": "The percentage a
|
|
735
|
+
"description": "The percentage a background-task token states, percent sign included. It carries no\ncounts, so it is never presented as a typed window.",
|
|
736
736
|
"type": [
|
|
737
737
|
"string",
|
|
738
738
|
"null"
|
|
@@ -757,7 +757,7 @@
|
|
|
757
757
|
]
|
|
758
758
|
},
|
|
759
759
|
"label": {
|
|
760
|
-
"description": "A managed worker's runtime label: the name its owner and its siblings\nuse for it, and the only faithful source for a worker's name.
|
|
760
|
+
"description": "A managed worker's runtime label: the name its owner and its siblings\nuse for it, and the only faithful source for a worker's name. The backend's\nown agent name truncates it and its title welds it to the task.",
|
|
761
761
|
"type": [
|
|
762
762
|
"string",
|
|
763
763
|
"null"
|
|
@@ -893,12 +893,6 @@
|
|
|
893
893
|
},
|
|
894
894
|
"subject_id": {
|
|
895
895
|
"type": "string"
|
|
896
|
-
},
|
|
897
|
-
"successor": {
|
|
898
|
-
"type": [
|
|
899
|
-
"string",
|
|
900
|
-
"null"
|
|
901
|
-
]
|
|
902
896
|
}
|
|
903
897
|
},
|
|
904
898
|
"required": [
|
|
@@ -968,7 +962,7 @@
|
|
|
968
962
|
"type": "object"
|
|
969
963
|
},
|
|
970
964
|
"Location": {
|
|
971
|
-
"description": "
|
|
965
|
+
"description": "Backend-scoped runtime location: workspace, tab and pane identifiers.\n\nPane identity is a runtime location detail; it is never an agent identity.",
|
|
972
966
|
"properties": {
|
|
973
967
|
"pane_id": {
|
|
974
968
|
"type": "string"
|
|
@@ -1040,9 +1034,6 @@
|
|
|
1040
1034
|
"claim_id": {
|
|
1041
1035
|
"type": "string"
|
|
1042
1036
|
},
|
|
1043
|
-
"identity_unresolved": {
|
|
1044
|
-
"type": "boolean"
|
|
1045
|
-
},
|
|
1046
1037
|
"metadata": {
|
|
1047
1038
|
"$ref": "#/$defs/ManagedMetadata"
|
|
1048
1039
|
},
|
|
@@ -1060,19 +1051,12 @@
|
|
|
1060
1051
|
},
|
|
1061
1052
|
"subject_id": {
|
|
1062
1053
|
"type": "string"
|
|
1063
|
-
},
|
|
1064
|
-
"successor": {
|
|
1065
|
-
"type": [
|
|
1066
|
-
"string",
|
|
1067
|
-
"null"
|
|
1068
|
-
]
|
|
1069
1054
|
}
|
|
1070
1055
|
},
|
|
1071
1056
|
"required": [
|
|
1072
1057
|
"subject_id",
|
|
1073
1058
|
"claim_id",
|
|
1074
1059
|
"process",
|
|
1075
|
-
"identity_unresolved",
|
|
1076
1060
|
"metadata",
|
|
1077
1061
|
"state"
|
|
1078
1062
|
],
|
|
@@ -1631,9 +1615,6 @@
|
|
|
1631
1615
|
"channel": {
|
|
1632
1616
|
"$ref": "#/$defs/Channel"
|
|
1633
1617
|
},
|
|
1634
|
-
"registration_id": {
|
|
1635
|
-
"type": "string"
|
|
1636
|
-
},
|
|
1637
1618
|
"snapshot": {
|
|
1638
1619
|
"anyOf": [
|
|
1639
1620
|
{
|
|
@@ -1655,7 +1636,6 @@
|
|
|
1655
1636
|
},
|
|
1656
1637
|
"required": [
|
|
1657
1638
|
"version",
|
|
1658
|
-
"registration_id",
|
|
1659
1639
|
"channel",
|
|
1660
1640
|
"writer"
|
|
1661
1641
|
],
|
|
@@ -2464,7 +2444,7 @@
|
|
|
2464
2444
|
]
|
|
2465
2445
|
},
|
|
2466
2446
|
"Tab": {
|
|
2467
|
-
"description": "A
|
|
2447
|
+
"description": "A tab within a workspace; shown as location detail, not a tree level.",
|
|
2468
2448
|
"properties": {
|
|
2469
2449
|
"label": {
|
|
2470
2450
|
"type": [
|
|
@@ -2690,7 +2670,7 @@
|
|
|
2690
2670
|
]
|
|
2691
2671
|
},
|
|
2692
2672
|
"Workspace": {
|
|
2693
|
-
"description": "A
|
|
2673
|
+
"description": "A workspace: the first display grouping for the fleet tree.",
|
|
2694
2674
|
"properties": {
|
|
2695
2675
|
"label": {
|
|
2696
2676
|
"type": [
|
|
@@ -758,7 +758,7 @@
|
|
|
758
758
|
"type": "array"
|
|
759
759
|
},
|
|
760
760
|
"context_usage": {
|
|
761
|
-
"description": "The percentage a
|
|
761
|
+
"description": "The percentage a background-task token states, percent sign included. It carries no\ncounts, so it is never presented as a typed window.",
|
|
762
762
|
"type": [
|
|
763
763
|
"string",
|
|
764
764
|
"null"
|
|
@@ -783,7 +783,7 @@
|
|
|
783
783
|
]
|
|
784
784
|
},
|
|
785
785
|
"label": {
|
|
786
|
-
"description": "A managed worker's runtime label: the name its owner and its siblings\nuse for it, and the only faithful source for a worker's name.
|
|
786
|
+
"description": "A managed worker's runtime label: the name its owner and its siblings\nuse for it, and the only faithful source for a worker's name. The backend's\nown agent name truncates it and its title welds it to the task.",
|
|
787
787
|
"type": [
|
|
788
788
|
"string",
|
|
789
789
|
"null"
|
|
@@ -941,12 +941,6 @@
|
|
|
941
941
|
},
|
|
942
942
|
"subject_id": {
|
|
943
943
|
"type": "string"
|
|
944
|
-
},
|
|
945
|
-
"successor": {
|
|
946
|
-
"type": [
|
|
947
|
-
"string",
|
|
948
|
-
"null"
|
|
949
|
-
]
|
|
950
944
|
}
|
|
951
945
|
},
|
|
952
946
|
"required": [
|
|
@@ -954,8 +948,7 @@
|
|
|
954
948
|
"bound_registration_id",
|
|
955
949
|
"process",
|
|
956
950
|
"state",
|
|
957
|
-
"session"
|
|
958
|
-
"successor"
|
|
951
|
+
"session"
|
|
959
952
|
],
|
|
960
953
|
"type": "object"
|
|
961
954
|
},
|
|
@@ -1026,7 +1019,7 @@
|
|
|
1026
1019
|
},
|
|
1027
1020
|
"Location": {
|
|
1028
1021
|
"additionalProperties": false,
|
|
1029
|
-
"description": "
|
|
1022
|
+
"description": "Backend-scoped runtime location: workspace, tab and pane identifiers.\n\nPane identity is a runtime location detail; it is never an agent identity.",
|
|
1030
1023
|
"properties": {
|
|
1031
1024
|
"pane_id": {
|
|
1032
1025
|
"type": "string"
|
|
@@ -1099,9 +1092,6 @@
|
|
|
1099
1092
|
"claim_id": {
|
|
1100
1093
|
"type": "string"
|
|
1101
1094
|
},
|
|
1102
|
-
"identity_unresolved": {
|
|
1103
|
-
"type": "boolean"
|
|
1104
|
-
},
|
|
1105
1095
|
"metadata": {
|
|
1106
1096
|
"$ref": "#/$defs/ManagedMetadata"
|
|
1107
1097
|
},
|
|
@@ -1119,24 +1109,16 @@
|
|
|
1119
1109
|
},
|
|
1120
1110
|
"subject_id": {
|
|
1121
1111
|
"type": "string"
|
|
1122
|
-
},
|
|
1123
|
-
"successor": {
|
|
1124
|
-
"type": [
|
|
1125
|
-
"string",
|
|
1126
|
-
"null"
|
|
1127
|
-
]
|
|
1128
1112
|
}
|
|
1129
1113
|
},
|
|
1130
1114
|
"required": [
|
|
1131
1115
|
"subject_id",
|
|
1132
1116
|
"claim_id",
|
|
1133
1117
|
"process",
|
|
1134
|
-
"identity_unresolved",
|
|
1135
1118
|
"metadata",
|
|
1136
1119
|
"child_close",
|
|
1137
1120
|
"state",
|
|
1138
|
-
"session"
|
|
1139
|
-
"successor"
|
|
1121
|
+
"session"
|
|
1140
1122
|
],
|
|
1141
1123
|
"type": "object"
|
|
1142
1124
|
},
|
|
@@ -1729,9 +1711,6 @@
|
|
|
1729
1711
|
"channel": {
|
|
1730
1712
|
"$ref": "#/$defs/Channel"
|
|
1731
1713
|
},
|
|
1732
|
-
"registration_id": {
|
|
1733
|
-
"type": "string"
|
|
1734
|
-
},
|
|
1735
1714
|
"snapshot": {
|
|
1736
1715
|
"anyOf": [
|
|
1737
1716
|
{
|
|
@@ -1753,7 +1732,6 @@
|
|
|
1753
1732
|
},
|
|
1754
1733
|
"required": [
|
|
1755
1734
|
"version",
|
|
1756
|
-
"registration_id",
|
|
1757
1735
|
"channel",
|
|
1758
1736
|
"writer"
|
|
1759
1737
|
],
|
|
@@ -2584,7 +2562,7 @@
|
|
|
2584
2562
|
},
|
|
2585
2563
|
"Tab": {
|
|
2586
2564
|
"additionalProperties": false,
|
|
2587
|
-
"description": "A
|
|
2565
|
+
"description": "A tab within a workspace; shown as location detail, not a tree level.",
|
|
2588
2566
|
"properties": {
|
|
2589
2567
|
"label": {
|
|
2590
2568
|
"type": [
|
|
@@ -2819,7 +2797,7 @@
|
|
|
2819
2797
|
},
|
|
2820
2798
|
"Workspace": {
|
|
2821
2799
|
"additionalProperties": false,
|
|
2822
|
-
"description": "A
|
|
2800
|
+
"description": "A workspace: the first display grouping for the fleet tree.",
|
|
2823
2801
|
"properties": {
|
|
2824
2802
|
"label": {
|
|
2825
2803
|
"type": [
|
|
@@ -732,7 +732,7 @@
|
|
|
732
732
|
"type": "array"
|
|
733
733
|
},
|
|
734
734
|
"context_usage": {
|
|
735
|
-
"description": "The percentage a
|
|
735
|
+
"description": "The percentage a background-task token states, percent sign included. It carries no\ncounts, so it is never presented as a typed window.",
|
|
736
736
|
"type": [
|
|
737
737
|
"string",
|
|
738
738
|
"null"
|
|
@@ -757,7 +757,7 @@
|
|
|
757
757
|
]
|
|
758
758
|
},
|
|
759
759
|
"label": {
|
|
760
|
-
"description": "A managed worker's runtime label: the name its owner and its siblings\nuse for it, and the only faithful source for a worker's name.
|
|
760
|
+
"description": "A managed worker's runtime label: the name its owner and its siblings\nuse for it, and the only faithful source for a worker's name. The backend's\nown agent name truncates it and its title welds it to the task.",
|
|
761
761
|
"type": [
|
|
762
762
|
"string",
|
|
763
763
|
"null"
|
|
@@ -893,12 +893,6 @@
|
|
|
893
893
|
},
|
|
894
894
|
"subject_id": {
|
|
895
895
|
"type": "string"
|
|
896
|
-
},
|
|
897
|
-
"successor": {
|
|
898
|
-
"type": [
|
|
899
|
-
"string",
|
|
900
|
-
"null"
|
|
901
|
-
]
|
|
902
896
|
}
|
|
903
897
|
},
|
|
904
898
|
"required": [
|
|
@@ -968,7 +962,7 @@
|
|
|
968
962
|
"type": "object"
|
|
969
963
|
},
|
|
970
964
|
"Location": {
|
|
971
|
-
"description": "
|
|
965
|
+
"description": "Backend-scoped runtime location: workspace, tab and pane identifiers.\n\nPane identity is a runtime location detail; it is never an agent identity.",
|
|
972
966
|
"properties": {
|
|
973
967
|
"pane_id": {
|
|
974
968
|
"type": "string"
|
|
@@ -1040,9 +1034,6 @@
|
|
|
1040
1034
|
"claim_id": {
|
|
1041
1035
|
"type": "string"
|
|
1042
1036
|
},
|
|
1043
|
-
"identity_unresolved": {
|
|
1044
|
-
"type": "boolean"
|
|
1045
|
-
},
|
|
1046
1037
|
"metadata": {
|
|
1047
1038
|
"$ref": "#/$defs/ManagedMetadata"
|
|
1048
1039
|
},
|
|
@@ -1060,19 +1051,12 @@
|
|
|
1060
1051
|
},
|
|
1061
1052
|
"subject_id": {
|
|
1062
1053
|
"type": "string"
|
|
1063
|
-
},
|
|
1064
|
-
"successor": {
|
|
1065
|
-
"type": [
|
|
1066
|
-
"string",
|
|
1067
|
-
"null"
|
|
1068
|
-
]
|
|
1069
1054
|
}
|
|
1070
1055
|
},
|
|
1071
1056
|
"required": [
|
|
1072
1057
|
"subject_id",
|
|
1073
1058
|
"claim_id",
|
|
1074
1059
|
"process",
|
|
1075
|
-
"identity_unresolved",
|
|
1076
1060
|
"metadata",
|
|
1077
1061
|
"state"
|
|
1078
1062
|
],
|
|
@@ -1496,9 +1480,6 @@
|
|
|
1496
1480
|
"channel": {
|
|
1497
1481
|
"$ref": "#/$defs/Channel"
|
|
1498
1482
|
},
|
|
1499
|
-
"registration_id": {
|
|
1500
|
-
"type": "string"
|
|
1501
|
-
},
|
|
1502
1483
|
"snapshot": {
|
|
1503
1484
|
"anyOf": [
|
|
1504
1485
|
{
|
|
@@ -1520,7 +1501,6 @@
|
|
|
1520
1501
|
},
|
|
1521
1502
|
"required": [
|
|
1522
1503
|
"version",
|
|
1523
|
-
"registration_id",
|
|
1524
1504
|
"channel",
|
|
1525
1505
|
"writer"
|
|
1526
1506
|
],
|
|
@@ -2329,7 +2309,7 @@
|
|
|
2329
2309
|
]
|
|
2330
2310
|
},
|
|
2331
2311
|
"Tab": {
|
|
2332
|
-
"description": "A
|
|
2312
|
+
"description": "A tab within a workspace; shown as location detail, not a tree level.",
|
|
2333
2313
|
"properties": {
|
|
2334
2314
|
"label": {
|
|
2335
2315
|
"type": [
|
|
@@ -2555,7 +2535,7 @@
|
|
|
2555
2535
|
]
|
|
2556
2536
|
},
|
|
2557
2537
|
"Workspace": {
|
|
2558
|
-
"description": "A
|
|
2538
|
+
"description": "A workspace: the first display grouping for the fleet tree.",
|
|
2559
2539
|
"properties": {
|
|
2560
2540
|
"label": {
|
|
2561
2541
|
"type": [
|