@datalayer/core 1.2.20 → 1.2.22
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/lib/api/evals/client.d.ts +6 -6
- package/lib/api/evals/client.js +5 -5
- package/lib/api/evals/status.d.ts +3 -3
- package/lib/api/evals/status.js +3 -3
- package/lib/api/evals/types.d.ts +9 -9
- package/lib/api/iam/secrets.js +2 -2
- package/lib/api/iam/servicePrincipals.js +1 -1
- package/lib/api/iam/trials.js +1 -1
- package/lib/api/orchestration/generated.d.ts +12 -12
- package/lib/api/orchestration/generated.js +1 -1
- package/lib/api/orchestration/index.d.ts +2 -2
- package/lib/api/orchestration/index.js +2 -2
- package/lib/api/orchestration/lifecycle.d.ts +1 -1
- package/lib/api/orchestration/lifecycle.js +1 -1
- package/lib/api/scheduler/client.d.ts +1 -1
- package/lib/api/scheduler/client.js +1 -1
- package/lib/api/scheduler/types.d.ts +1 -1
- package/lib/api/spacer/comments.d.ts +1 -1
- package/lib/api/spacer/comments.js +1 -1
- package/lib/api/spacer/spaces.d.ts +1 -1
- package/lib/api/spacer/spaces.js +1 -1
- package/lib/client/mixins/IAMMixin.js +1 -1
- package/lib/hooks/useCache.js +2 -2
- package/lib/models/Secret.d.ts +1 -1
- package/lib/models/Secret.js +1 -1
- package/lib/models/StartedBy.d.ts +1 -1
- package/lib/models/StartedBy.js +1 -1
- package/lib/models/UserDTO.d.ts +1 -0
- package/lib/models/UserDTO.js +2 -1
- package/lib/state/substates/NavigationState.d.ts +6 -0
- package/lib/state/substates/NavigationState.js +42 -1
- package/lib/views/secrets/SecretNew.js +1 -1
- package/package.json +1 -1
- package/scripts/generate-orchestration-types.py +12 -12
|
@@ -15,7 +15,7 @@ export type ListEvalsetsQuery = {
|
|
|
15
15
|
run_environment?: EvalRunEnvironment;
|
|
16
16
|
category?: EvalsetCategory;
|
|
17
17
|
q?: string;
|
|
18
|
-
/** Only the benchmarks reading this dataset (B5-12
|
|
18
|
+
/** Only the benchmarks reading this dataset (B5-12). */
|
|
19
19
|
dataset?: string;
|
|
20
20
|
/** …and pinned to this revision of it: one revision is not evidence about another. */
|
|
21
21
|
revision?: string;
|
|
@@ -68,8 +68,8 @@ export declare const previewEvalsetPublication: (options: EvalsClientOptions, ev
|
|
|
68
68
|
/**
|
|
69
69
|
* Publish the package: the immutable snapshot of the definition, the data, the
|
|
70
70
|
* subjects, the environment, the results, the report, the evidence and the
|
|
71
|
-
* evaluators
|
|
72
|
-
*
|
|
71
|
+
* evaluators. Refused with `detail.problems` where something stands in the
|
|
72
|
+
* way of publishing it.
|
|
73
73
|
*/
|
|
74
74
|
export declare const publishEvalsetPackage: (options: EvalsClientOptions, evalsetId: string, body?: {
|
|
75
75
|
launch_ids?: string[];
|
|
@@ -118,13 +118,13 @@ export declare const getPublicEvalsetLeaderboard: (options: EvalsClientOptions,
|
|
|
118
118
|
*/
|
|
119
119
|
export declare const getSubjectUsage: (options: EvalsClientOptions, subjectRef: string) => Promise<SubjectUsageResponse>;
|
|
120
120
|
/**
|
|
121
|
-
* Whether anything will run the account's benchmarks (B5-12
|
|
121
|
+
* Whether anything will run the account's benchmarks (B5-12):
|
|
122
122
|
* the executor, whether a worker polls the benchmark queue, and the account's
|
|
123
123
|
* own queued and running launches.
|
|
124
124
|
*/
|
|
125
125
|
export declare const getBenchmarkCompute: (options: EvalsClientOptions) => Promise<BenchmarkComputeResponse>;
|
|
126
126
|
/**
|
|
127
|
-
* What benchmark work a sandbox is doing (B5-12
|
|
127
|
+
* What benchmark work a sandbox is doing (B5-12).
|
|
128
128
|
*
|
|
129
129
|
* The ref is a pool slot's name (`benchmark-<run>-slot-<n>`) or the snapshot
|
|
130
130
|
* a sandbox was restored from. A sandbox of nobody's benchmark answers
|
|
@@ -132,7 +132,7 @@ export declare const getBenchmarkCompute: (options: EvalsClientOptions) => Promi
|
|
|
132
132
|
*/
|
|
133
133
|
export declare const getSandboxProvenance: (options: EvalsClientOptions, sandboxRef: string) => Promise<SandboxProvenanceResponse>;
|
|
134
134
|
/**
|
|
135
|
-
* Find things across the caller's benchmarks (B5-11
|
|
135
|
+
* Find things across the caller's benchmarks (B5-11): benchmarks,
|
|
136
136
|
* launches, tasks, reports and investigations, each row keeping its kind and
|
|
137
137
|
* what it belongs to.
|
|
138
138
|
*
|
package/lib/api/evals/client.js
CHANGED
|
@@ -58,8 +58,8 @@ export const previewEvalsetPublication = (options, evalsetId, query = {}) => eva
|
|
|
58
58
|
/**
|
|
59
59
|
* Publish the package: the immutable snapshot of the definition, the data, the
|
|
60
60
|
* subjects, the environment, the results, the report, the evidence and the
|
|
61
|
-
* evaluators
|
|
62
|
-
*
|
|
61
|
+
* evaluators. Refused with `detail.problems` where something stands in the
|
|
62
|
+
* way of publishing it.
|
|
63
63
|
*/
|
|
64
64
|
export const publishEvalsetPackage = (options, evalsetId, body = {}) => evalsRequest(options, `/evalsets/${segment(evalsetId)}/publications`, {
|
|
65
65
|
method: 'POST',
|
|
@@ -97,13 +97,13 @@ export const getPublicEvalsetLeaderboard = (options, evalsetId) => evalsRequest(
|
|
|
97
97
|
*/
|
|
98
98
|
export const getSubjectUsage = (options, subjectRef) => evalsRequest(options, `/subjects/${subjectRef.split('/').map(encodeURIComponent).join('/')}/usage`);
|
|
99
99
|
/**
|
|
100
|
-
* Whether anything will run the account's benchmarks (B5-12
|
|
100
|
+
* Whether anything will run the account's benchmarks (B5-12):
|
|
101
101
|
* the executor, whether a worker polls the benchmark queue, and the account's
|
|
102
102
|
* own queued and running launches.
|
|
103
103
|
*/
|
|
104
104
|
export const getBenchmarkCompute = (options) => evalsRequest(options, '/compute/operations');
|
|
105
105
|
/**
|
|
106
|
-
* What benchmark work a sandbox is doing (B5-12
|
|
106
|
+
* What benchmark work a sandbox is doing (B5-12).
|
|
107
107
|
*
|
|
108
108
|
* The ref is a pool slot's name (`benchmark-<run>-slot-<n>`) or the snapshot
|
|
109
109
|
* a sandbox was restored from. A sandbox of nobody's benchmark answers
|
|
@@ -111,7 +111,7 @@ export const getBenchmarkCompute = (options) => evalsRequest(options, '/compute/
|
|
|
111
111
|
*/
|
|
112
112
|
export const getSandboxProvenance = (options, sandboxRef) => evalsRequest(options, `/sandboxes/${sandboxRef.split('/').map(encodeURIComponent).join('/')}/provenance`);
|
|
113
113
|
/**
|
|
114
|
-
* Find things across the caller's benchmarks (B5-11
|
|
114
|
+
* Find things across the caller's benchmarks (B5-11): benchmarks,
|
|
115
115
|
* launches, tasks, reports and investigations, each row keeping its kind and
|
|
116
116
|
* what it belongs to.
|
|
117
117
|
*
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* time (`queued`, `init`, `pending`, `running`, `completed`, `failed`,
|
|
6
6
|
* `error`, `success`, `done`, …). This is the same mapping as
|
|
7
7
|
* `agent_runtimes.evals.status` in Python: every word a writer has used maps
|
|
8
|
-
* onto the product vocabulary
|
|
8
|
+
* onto the product vocabulary, and "finished" is
|
|
9
9
|
* answered once. A word nobody has used maps to itself, lower-cased, so it is
|
|
10
10
|
* visible rather than misread.
|
|
11
11
|
*
|
|
@@ -17,9 +17,9 @@ export declare const CASE_STATUSES: readonly ["waiting", "provisioning", "runnin
|
|
|
17
17
|
export type CaseStatus = (typeof CASE_STATUSES)[number];
|
|
18
18
|
export declare const TERMINAL_RUN_STATUSES: ReadonlySet<string>;
|
|
19
19
|
export declare const TERMINAL_CASE_STATUSES: ReadonlySet<string>;
|
|
20
|
-
/** The
|
|
20
|
+
/** The product word for a run status, whatever a writer wrote. */
|
|
21
21
|
export declare const normalizeRunStatus: (value: unknown) => RunStatus | string;
|
|
22
|
-
/** The
|
|
22
|
+
/** The product word for a case status. */
|
|
23
23
|
export declare const normalizeCaseStatus: (value: unknown) => CaseStatus | string;
|
|
24
24
|
/** Whether a run with this status is over. */
|
|
25
25
|
export declare const isTerminalRunStatus: (value: unknown) => boolean;
|
package/lib/api/evals/status.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* time (`queued`, `init`, `pending`, `running`, `completed`, `failed`,
|
|
14
14
|
* `error`, `success`, `done`, …). This is the same mapping as
|
|
15
15
|
* `agent_runtimes.evals.status` in Python: every word a writer has used maps
|
|
16
|
-
* onto the product vocabulary
|
|
16
|
+
* onto the product vocabulary, and "finished" is
|
|
17
17
|
* answered once. A word nobody has used maps to itself, lower-cased, so it is
|
|
18
18
|
* visible rather than misread.
|
|
19
19
|
*
|
|
@@ -106,12 +106,12 @@ const word = (value) => String(value ?? '')
|
|
|
106
106
|
.trim()
|
|
107
107
|
.toLowerCase()
|
|
108
108
|
.replace(/[-\s]/g, '_');
|
|
109
|
-
/** The
|
|
109
|
+
/** The product word for a run status, whatever a writer wrote. */
|
|
110
110
|
export const normalizeRunStatus = (value) => {
|
|
111
111
|
const key = word(value);
|
|
112
112
|
return LEGACY_RUN_STATUS[key] ?? key;
|
|
113
113
|
};
|
|
114
|
-
/** The
|
|
114
|
+
/** The product word for a case status. */
|
|
115
115
|
export const normalizeCaseStatus = (value) => {
|
|
116
116
|
const key = word(value);
|
|
117
117
|
return LEGACY_CASE_STATUS[key] ?? key;
|
package/lib/api/evals/types.d.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
export type EvalRunEnvironment = 'ui' | 'sdk';
|
|
18
18
|
/** Fixed cases replayed (`batch`) or live events evaluated (`interactive`). */
|
|
19
19
|
export type EvalKind = 'batch' | 'interactive';
|
|
20
|
-
/** What a benchmark measures, the closed list
|
|
20
|
+
/** What a benchmark measures, the closed list the benchmark pages render by. */
|
|
21
21
|
export type EvalsetCategory = 'data' | 'coding' | 'tool-use' | 'model' | 'visual' | 'performance';
|
|
22
22
|
/** The dataset revision a benchmark reads; contents holds the revision. */
|
|
23
23
|
export interface DatasetRef {
|
|
@@ -285,7 +285,7 @@ export interface LaunchPlanResponse {
|
|
|
285
285
|
/**
|
|
286
286
|
* How run mode, run environment and execution target relate, stated by
|
|
287
287
|
* the service so the wizard explains it inline rather than failing after
|
|
288
|
-
* submission
|
|
288
|
+
* submission.
|
|
289
289
|
*/
|
|
290
290
|
run_mode_constraint: string;
|
|
291
291
|
problems: LaunchPlanProblem[];
|
|
@@ -466,7 +466,7 @@ export interface EvalsetPackageItem {
|
|
|
466
466
|
uid: string;
|
|
467
467
|
label: string;
|
|
468
468
|
}
|
|
469
|
-
/** What stands in the way of a publication
|
|
469
|
+
/** What stands in the way of a publication. */
|
|
470
470
|
export interface EvalsetPackageProblem {
|
|
471
471
|
code: string;
|
|
472
472
|
detail: string;
|
|
@@ -636,7 +636,7 @@ export interface SubjectUsage {
|
|
|
636
636
|
active_launches: SubjectLaunch[];
|
|
637
637
|
totals: SubjectTotals;
|
|
638
638
|
}
|
|
639
|
-
/** What a search made of the words somebody typed (B5-11
|
|
639
|
+
/** What a search made of the words somebody typed (B5-11). */
|
|
640
640
|
export interface EvalsSearchQuery {
|
|
641
641
|
raw: string;
|
|
642
642
|
/** What is left to look for by name, once the words that mean something else are taken out. */
|
|
@@ -676,7 +676,7 @@ export interface SubjectUsageResponse {
|
|
|
676
676
|
usage: SubjectUsage;
|
|
677
677
|
}
|
|
678
678
|
/**
|
|
679
|
-
* What benchmark work a sandbox is doing (B5-12
|
|
679
|
+
* What benchmark work a sandbox is doing (B5-12).
|
|
680
680
|
*
|
|
681
681
|
* A pool slot's sandbox is named after the run it serves, and a sandbox
|
|
682
682
|
* restored from a task's snapshot is found by that snapshot; either way the
|
|
@@ -723,7 +723,7 @@ export interface SandboxProvenanceResponse {
|
|
|
723
723
|
provenance: SandboxProvenance;
|
|
724
724
|
}
|
|
725
725
|
/**
|
|
726
|
-
* Whether anything will run the account's benchmarks (B5-12
|
|
726
|
+
* Whether anything will run the account's benchmarks (B5-12).
|
|
727
727
|
*
|
|
728
728
|
* A launch at `queued` looks the same whether the queue is busy or nothing
|
|
729
729
|
* polls it. `serving` is the difference. The depth is the account's own
|
|
@@ -1050,7 +1050,7 @@ export interface EvalsetVersionResponse {
|
|
|
1050
1050
|
}
|
|
1051
1051
|
export type InvestigationScope = 'case' | 'run' | 'launch' | 'window';
|
|
1052
1052
|
export type InvestigationStatus = 'open' | 'closed';
|
|
1053
|
-
/** The restored sandbox
|
|
1053
|
+
/** The restored sandbox. */
|
|
1054
1054
|
export type SandboxState = 'available' | 'restoring' | 'running' | 'expired' | 'none';
|
|
1055
1055
|
/** The work a person does on a benchmark result: one per task, run, launch or window. */
|
|
1056
1056
|
export interface EvalInvestigation {
|
|
@@ -1165,7 +1165,7 @@ export interface EvalsSharingResponse extends SuccessResponse {
|
|
|
1165
1165
|
};
|
|
1166
1166
|
}
|
|
1167
1167
|
/**
|
|
1168
|
-
* How far a record reaches (
|
|
1168
|
+
* How far a record reaches (B5-09), narrowest
|
|
1169
1169
|
* first. Derived from the grants and the public flag rather than stored, so it
|
|
1170
1170
|
* cannot disagree with who may actually read the thing.
|
|
1171
1171
|
*/
|
|
@@ -1178,7 +1178,7 @@ export interface EvalsPermissionsResponse extends SuccessResponse {
|
|
|
1178
1178
|
/** The widest thing that is true of this record. */
|
|
1179
1179
|
visibility: EvalsVisibility;
|
|
1180
1180
|
}
|
|
1181
|
-
/** The states of a report
|
|
1181
|
+
/** The states of a report, in the order a report goes through them. */
|
|
1182
1182
|
export type ReportState = 'draft' | 'in_review' | 'approved' | 'published_private' | 'published_public' | 'superseded';
|
|
1183
1183
|
/** A report over runs of one benchmark: its document and its state. */
|
|
1184
1184
|
export interface EvalReport {
|
package/lib/api/iam/secrets.js
CHANGED
|
@@ -36,8 +36,8 @@ export const createSecret = async (token, data, baseUrl = DEFAULT_SERVICE_URLS.I
|
|
|
36
36
|
variant: data.variant || 'generic',
|
|
37
37
|
name: data.name,
|
|
38
38
|
description: data.description || '',
|
|
39
|
-
// As it is. A secret has one representation end to end (
|
|
40
|
-
//
|
|
39
|
+
// As it is. A secret has one representation end to end (E3-05):
|
|
40
|
+
// this used to base64-encode, and nothing on the read side undid
|
|
41
41
|
// it, so a build secret arrived at its build encoded and opened nothing.
|
|
42
42
|
value: data.value,
|
|
43
43
|
};
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
6
|
* Service principals: a deployed LOOP application as a principal of its
|
|
7
|
-
* own (
|
|
7
|
+
* own (I-02).
|
|
8
8
|
*
|
|
9
9
|
* The service agents' kin — a key that is exchanged for an hour's token, an
|
|
10
10
|
* audit that names it — with two differences: a person may own one, not only
|
package/lib/api/iam/trials.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
/**
|
|
10
10
|
* The anonymous trial: running the public benchmark before signing up
|
|
11
|
-
* (
|
|
11
|
+
* (B2-14).
|
|
12
12
|
*
|
|
13
13
|
* A visitor with no account asks for a trial and gets a principal of its
|
|
14
14
|
* own with one benchmark it may run, a few credits and a short expiry. The
|
|
@@ -11,7 +11,7 @@ export interface Acknowledgement {
|
|
|
11
11
|
checkpointId?: string | null;
|
|
12
12
|
detail?: string | null;
|
|
13
13
|
}
|
|
14
|
-
/** The five milestones
|
|
14
|
+
/** The five acknowledgement milestones, in the order they are reached. */
|
|
15
15
|
export type AcknowledgementKind = 'received' | 'accepted' | 'started' | 'checkpointed' | 'completed';
|
|
16
16
|
/** What a caller must present to be let in. */
|
|
17
17
|
export interface AgentAuthentication {
|
|
@@ -148,11 +148,11 @@ export interface ArtifactProvenance {
|
|
|
148
148
|
contentHash?: string | null;
|
|
149
149
|
traceId?: string | null;
|
|
150
150
|
}
|
|
151
|
-
/** Where an artifact stands against the commit rule
|
|
151
|
+
/** Where an artifact stands against the commit rule: the first attempt to commit wins. */
|
|
152
152
|
export type ArtifactStatus = 'registered' | 'committed' | 'superseded';
|
|
153
|
-
/** What an artifact is,
|
|
153
|
+
/** What an artifact is, one of nine kinds. */
|
|
154
154
|
export type ArtifactType = 'notebook' | 'report' | 'dataset' | 'cell-output' | 'file' | 'evaluation' | 'execution-log' | 'sandbox-snapshot' | 'json';
|
|
155
|
-
/** One dispatch of an execution to a worker
|
|
155
|
+
/** One dispatch of an execution to a worker. */
|
|
156
156
|
export interface Attempt {
|
|
157
157
|
attemptId: string;
|
|
158
158
|
executionId: string;
|
|
@@ -227,7 +227,7 @@ export interface CommandAnswer {
|
|
|
227
227
|
execution: Execution;
|
|
228
228
|
success?: boolean;
|
|
229
229
|
}
|
|
230
|
-
/** The twelve commands of
|
|
230
|
+
/** The twelve commands of the orchestration lifecycle. */
|
|
231
231
|
export type CommandName = 'agents.discover' | 'agents.create' | 'agents.attach' | 'executions.delegate' | 'executions.steer' | 'executions.pause' | 'executions.resume' | 'executions.cancel' | 'executions.checkpoint' | 'executions.collect' | 'executions.terminate' | 'executions.subscribe';
|
|
232
232
|
/** Whether a worker may only read the reference, or also write it. */
|
|
233
233
|
export type ContextAccess = 'read-only' | 'writable';
|
|
@@ -272,7 +272,7 @@ export interface DelegateAnswer {
|
|
|
272
272
|
execution: Execution;
|
|
273
273
|
success?: boolean;
|
|
274
274
|
}
|
|
275
|
-
/** The bounds a tree is created under,
|
|
275
|
+
/** The bounds a tree is created under, with the decided defaults. */
|
|
276
276
|
export interface DelegationLimits {
|
|
277
277
|
maxDepth?: number;
|
|
278
278
|
maxChildrenPerParent?: number;
|
|
@@ -588,7 +588,7 @@ export interface ReportAnswer {
|
|
|
588
588
|
execution: Execution;
|
|
589
589
|
success?: boolean;
|
|
590
590
|
}
|
|
591
|
-
/** How a failed attempt is tried again:
|
|
591
|
+
/** How a failed attempt is tried again: two retries, backing off. */
|
|
592
592
|
export interface RetryPolicy {
|
|
593
593
|
maxRetries?: number;
|
|
594
594
|
initialBackoffSeconds?: number;
|
|
@@ -604,7 +604,7 @@ export interface RuntimeRequirements {
|
|
|
604
604
|
/** A Datalayer runtime environment name, when it runs on one. */
|
|
605
605
|
environment?: string | null;
|
|
606
606
|
}
|
|
607
|
-
/** The W3C context that makes one tree one trace (
|
|
607
|
+
/** The W3C context that makes one tree one trace (O0-11). */
|
|
608
608
|
export interface Trace {
|
|
609
609
|
traceparent?: string | null;
|
|
610
610
|
tracestate?: string | null;
|
|
@@ -649,9 +649,9 @@ export interface WorkerAnswer {
|
|
|
649
649
|
success?: boolean;
|
|
650
650
|
worker: Worker;
|
|
651
651
|
}
|
|
652
|
-
/** A lifecycle operation a worker supports, named as
|
|
652
|
+
/** A lifecycle operation a worker supports, named as the orchestration lifecycle names it. */
|
|
653
653
|
export type WorkerOperation = 'delegate' | 'steer' | 'pause' | 'resume' | 'cancel' | 'checkpoint' | 'collect' | 'terminate' | 'subscribe';
|
|
654
|
-
/** The lifecycle
|
|
654
|
+
/** The lifecycle: what a state accepts, and where it leads. */
|
|
655
655
|
export interface OrchestrationLifecycle {
|
|
656
656
|
readonly initial: ExecutionState;
|
|
657
657
|
readonly states: readonly ExecutionState[];
|
|
@@ -668,9 +668,9 @@ export interface OrchestrationCommand {
|
|
|
668
668
|
readonly mutating: boolean;
|
|
669
669
|
}
|
|
670
670
|
export declare const ORCHESTRATION_COMMANDS: readonly OrchestrationCommand[];
|
|
671
|
-
/** The five milestones
|
|
671
|
+
/** The five milestones, in the order they are reached. */
|
|
672
672
|
export declare const ORCHESTRATION_ACKNOWLEDGEMENT_ORDER: readonly AcknowledgementKind[];
|
|
673
|
-
/** The default limits
|
|
673
|
+
/** The default limits, read from the models' own defaults. */
|
|
674
674
|
export interface OrchestrationLimits {
|
|
675
675
|
readonly delegation: DelegationLimits;
|
|
676
676
|
readonly retry: RetryPolicy;
|
|
@@ -91,7 +91,7 @@ export const ORCHESTRATION_COMMANDS = [
|
|
|
91
91
|
{ name: 'executions.terminate', mutating: true },
|
|
92
92
|
{ name: 'executions.subscribe', mutating: false },
|
|
93
93
|
];
|
|
94
|
-
/** The five milestones
|
|
94
|
+
/** The five milestones, in the order they are reached. */
|
|
95
95
|
export const ORCHESTRATION_ACKNOWLEDGEMENT_ORDER = ['received', 'accepted', 'started', 'checkpointed', 'completed'];
|
|
96
96
|
export const ORCHESTRATION_LIMITS = {
|
|
97
97
|
delegation: {
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* work it is delegating, supervising, steering, recovering or stopping.
|
|
4
4
|
*
|
|
5
5
|
* Every type here is generated from the pydantic models in
|
|
6
|
-
* `datalayer_core/orchestration`, which are the source of truth
|
|
7
|
-
*
|
|
6
|
+
* `datalayer_core/orchestration`, which are the source of truth,
|
|
7
|
+
* and from the control plane's OpenAPI
|
|
8
8
|
* document for the answers it wraps them in and the operations it serves.
|
|
9
9
|
* Regenerate with `npm run generate:orchestration`;
|
|
10
10
|
* `npm run check:orchestration-generated` is the gate that fails when the
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* work it is delegating, supervising, steering, recovering or stopping.
|
|
8
8
|
*
|
|
9
9
|
* Every type here is generated from the pydantic models in
|
|
10
|
-
* `datalayer_core/orchestration`, which are the source of truth
|
|
11
|
-
*
|
|
10
|
+
* `datalayer_core/orchestration`, which are the source of truth,
|
|
11
|
+
* and from the control plane's OpenAPI
|
|
12
12
|
* document for the answers it wraps them in and the operations it serves.
|
|
13
13
|
* Regenerate with `npm run generate:orchestration`;
|
|
14
14
|
* `npm run check:orchestration-generated` is the gate that fails when the
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The canonical execution lifecycle (
|
|
2
|
+
* The canonical execution lifecycle (O0-02).
|
|
3
3
|
*
|
|
4
4
|
* The states and the moves between them are not written here: they are
|
|
5
5
|
* generated from `datalayer_core/orchestration/lifecycle.py`, which is the
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Distributed under the terms of the Modified BSD License.
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
|
-
* The canonical execution lifecycle (
|
|
6
|
+
* The canonical execution lifecycle (O0-02).
|
|
7
7
|
*
|
|
8
8
|
* The states and the moves between them are not written here: they are
|
|
9
9
|
* generated from `datalayer_core/orchestration/lifecycle.py`, which is the
|
|
@@ -17,7 +17,7 @@ export declare const listSchedules: (options: SchedulerClientOptions, query?: {
|
|
|
17
17
|
/** One schedule. */
|
|
18
18
|
export declare const getSchedule: (options: SchedulerClientOptions, scheduleUid: string) => Promise<ScheduleResponse>;
|
|
19
19
|
/**
|
|
20
|
-
* Create the one schedule a target has, or replace it (
|
|
20
|
+
* Create the one schedule a target has, or replace it (B2-16):
|
|
21
21
|
* a schedule is unique per owner and target, so upserting is how a person
|
|
22
22
|
* changes an `evalset` schedule's cron or configuration too.
|
|
23
23
|
*/
|
|
@@ -24,7 +24,7 @@ export const listSchedules = (options, query = {}) => schedulerRequest(options,
|
|
|
24
24
|
/** One schedule. */
|
|
25
25
|
export const getSchedule = (options, scheduleUid) => schedulerRequest(options, `/schedules/${scheduleSegment(scheduleUid)}`);
|
|
26
26
|
/**
|
|
27
|
-
* Create the one schedule a target has, or replace it (
|
|
27
|
+
* Create the one schedule a target has, or replace it (B2-16):
|
|
28
28
|
* a schedule is unique per owner and target, so upserting is how a person
|
|
29
29
|
* changes an `evalset` schedule's cron or configuration too.
|
|
30
30
|
*/
|
|
@@ -33,7 +33,7 @@ export interface ScheduleRecord {
|
|
|
33
33
|
creation_ts_dt?: string;
|
|
34
34
|
last_update_ts_dt?: string;
|
|
35
35
|
}
|
|
36
|
-
/** What an `evalset` schedule's `config_json_t` holds (
|
|
36
|
+
/** What an `evalset` schedule's `config_json_t` holds (B2-16). */
|
|
37
37
|
export interface EvalsetScheduleConfig {
|
|
38
38
|
/** Empty means every live experiment of the evalset, resolved at run time. */
|
|
39
39
|
experiment_ids?: string[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Comments on documents and notebooks (
|
|
2
|
+
* Comments on documents and notebooks (B4-01).
|
|
3
3
|
*
|
|
4
4
|
* A thread is its first comment, about one anchor — the highlighted text, a
|
|
5
5
|
* report's evidence block, a cell, a task, a data point — and a reply names
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Distributed under the terms of the Modified BSD License.
|
|
8
8
|
*/
|
|
9
9
|
/**
|
|
10
|
-
* Comments on documents and notebooks (
|
|
10
|
+
* Comments on documents and notebooks (B4-01).
|
|
11
11
|
*
|
|
12
12
|
* A thread is its first comment, about one anchor — the highlighted text, a
|
|
13
13
|
* report's evidence block, a cell, a task, a data point — and a reply names
|
|
@@ -55,7 +55,7 @@ export interface WorkspaceSearchResponse {
|
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* Search the caller's own workspace: notebooks, documents, datasets, files
|
|
58
|
-
* (
|
|
58
|
+
* (B5-11).
|
|
59
59
|
*
|
|
60
60
|
* Scoped by the service to what this person may open — never other people's
|
|
61
61
|
* public items, which the Library's own search answers. An empty query lists
|
package/lib/api/spacer/spaces.js
CHANGED
|
@@ -34,7 +34,7 @@ export const getManagedSpace = async (options, kind, accountUid) => {
|
|
|
34
34
|
};
|
|
35
35
|
/**
|
|
36
36
|
* Search the caller's own workspace: notebooks, documents, datasets, files
|
|
37
|
-
* (
|
|
37
|
+
* (B5-11).
|
|
38
38
|
*
|
|
39
39
|
* Scoped by the service to what this person may open — never other people's
|
|
40
40
|
* public items, which the Library's own search answers. An empty query lists
|
|
@@ -46,7 +46,7 @@ export function IAMMixin(Base) {
|
|
|
46
46
|
email_s: response.profile.email_s || response.profile.email,
|
|
47
47
|
first_name_t: response.profile.first_name_t || response.profile.first_name || '',
|
|
48
48
|
last_name_t: response.profile.last_name_t || response.profile.last_name || '',
|
|
49
|
-
//
|
|
49
|
+
// The avatar's URL when the profile has one; without, the user's avatarUrl is ''.
|
|
50
50
|
avatar_url_s: response.profile.avatar_url_s || response.profile.avatar_url,
|
|
51
51
|
};
|
|
52
52
|
}
|
package/lib/hooks/useCache.js
CHANGED
|
@@ -1271,7 +1271,7 @@ export const useCache = ({ loginRoute = '/login' } = {}) => {
|
|
|
1271
1271
|
tags: Array.isArray(raw_evalset.tags_ss) ? raw_evalset.tags_ss : [],
|
|
1272
1272
|
/*
|
|
1273
1273
|
* What the runs of a benchmark say about it, projected onto its
|
|
1274
|
-
* library card whenever a run moves (
|
|
1274
|
+
* library card whenever a run moves (B2-10 and B1-09).
|
|
1275
1275
|
*
|
|
1276
1276
|
* These were dropped here, so a card in the Library or on the home
|
|
1277
1277
|
* page could show a name and a description and nothing that would
|
|
@@ -1297,7 +1297,7 @@ export const useCache = ({ loginRoute = '/login' } = {}) => {
|
|
|
1297
1297
|
};
|
|
1298
1298
|
};
|
|
1299
1299
|
/**
|
|
1300
|
-
* A published environment version as a library artifact (
|
|
1300
|
+
* A published environment version as a library artifact (E2-16).
|
|
1301
1301
|
*
|
|
1302
1302
|
* Keyed on the version uid, so one published version is one card, and read
|
|
1303
1303
|
* from the publication's immutable snapshot: its name, title, README (the
|
package/lib/models/Secret.d.ts
CHANGED
|
@@ -144,7 +144,7 @@ export declare class SecretDTO {
|
|
|
144
144
|
get variant(): ISecretVariant;
|
|
145
145
|
get name(): string;
|
|
146
146
|
get description(): string;
|
|
147
|
-
/** The value as its owner wrote it (
|
|
147
|
+
/** The value as its owner wrote it (E3-05). */
|
|
148
148
|
get value(): string;
|
|
149
149
|
/**
|
|
150
150
|
* Update this secret.
|
package/lib/models/Secret.js
CHANGED
|
@@ -74,7 +74,7 @@ export class SecretDTO {
|
|
|
74
74
|
this._checkDeleted();
|
|
75
75
|
return this._data.description_t;
|
|
76
76
|
}
|
|
77
|
-
/** The value as its owner wrote it (
|
|
77
|
+
/** The value as its owner wrote it (E3-05). */
|
|
78
78
|
get value() {
|
|
79
79
|
this._checkDeleted();
|
|
80
80
|
return this._data.value_s;
|
|
@@ -50,7 +50,7 @@ export declare const startedBy: (metadata: UsageMetadata) => StartedBy;
|
|
|
50
50
|
* The words a search box matches on for this row.
|
|
51
51
|
*
|
|
52
52
|
* "agent" matches every agent-started runtime, the client id matches one
|
|
53
|
-
* client, and "you" matches your own — so the filter
|
|
53
|
+
* client, and "you" matches your own — so the filter asked for is the
|
|
54
54
|
* search box that is already there rather than a second control beside it.
|
|
55
55
|
*/
|
|
56
56
|
export declare const startedBySearchTerms: (metadata: UsageMetadata) => string;
|
package/lib/models/StartedBy.js
CHANGED
|
@@ -65,7 +65,7 @@ export const startedBy = (metadata) => {
|
|
|
65
65
|
* The words a search box matches on for this row.
|
|
66
66
|
*
|
|
67
67
|
* "agent" matches every agent-started runtime, the client id matches one
|
|
68
|
-
* client, and "you" matches your own — so the filter
|
|
68
|
+
* client, and "you" matches your own — so the filter asked for is the
|
|
69
69
|
* search box that is already there rather than a second control beside it.
|
|
70
70
|
*/
|
|
71
71
|
export const startedBySearchTerms = (metadata) => {
|
package/lib/models/UserDTO.d.ts
CHANGED
|
@@ -68,6 +68,7 @@ export declare class UserDTO {
|
|
|
68
68
|
get firstName(): string;
|
|
69
69
|
get lastName(): string;
|
|
70
70
|
get displayName(): string;
|
|
71
|
+
/** The avatar's URL, or `''` when the profile has none: a person without a picture is still a user. */
|
|
71
72
|
get avatarUrl(): string;
|
|
72
73
|
get avatarIcon(): string | undefined;
|
|
73
74
|
get banner(): string | undefined;
|
package/lib/models/UserDTO.js
CHANGED
|
@@ -40,8 +40,9 @@ export class UserDTO {
|
|
|
40
40
|
get displayName() {
|
|
41
41
|
return `${this.firstName} ${this.lastName}`.trim();
|
|
42
42
|
}
|
|
43
|
+
/** The avatar's URL, or `''` when the profile has none: a person without a picture is still a user. */
|
|
43
44
|
get avatarUrl() {
|
|
44
|
-
return this._data.avatar_url_s;
|
|
45
|
+
return this._data.avatar_url_s ?? '';
|
|
45
46
|
}
|
|
46
47
|
get avatarIcon() {
|
|
47
48
|
return this._data.avatar_icon_s;
|
|
@@ -70,6 +70,12 @@ export type NavigationState = {
|
|
|
70
70
|
* through or on a page that belongs to no shell.
|
|
71
71
|
*/
|
|
72
72
|
export declare function isRememberableRoute(route: string): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Whether a page is a hosted application, run at its address, rather than a
|
|
75
|
+
* page of the Apps shell. It is visited, not returned to: the Apps shell
|
|
76
|
+
* never reopens on one, and one remembered before is dropped on load.
|
|
77
|
+
*/
|
|
78
|
+
export declare function isHostedAppRoute(route: string): boolean;
|
|
73
79
|
/**
|
|
74
80
|
* Whether a page belongs to no shell: the settings, the documentation and
|
|
75
81
|
* the decks.
|
|
@@ -199,7 +199,48 @@ export function isRememberableRoute(route) {
|
|
|
199
199
|
'/oauth',
|
|
200
200
|
'/join',
|
|
201
201
|
].some(prefix => path === prefix || path.startsWith(`${prefix}/`)) &&
|
|
202
|
-
!isShellNeutralRoute(route)
|
|
202
|
+
!isShellNeutralRoute(route) &&
|
|
203
|
+
!isHostedAppRoute(route));
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* The Apps shell's own pages under `/apps/<section>`. Any other first segment
|
|
207
|
+
* is an application's hosted address (`/apps/<slug>`, its preview at
|
|
208
|
+
* `/apps/<slug>/preview/<version>`).
|
|
209
|
+
*/
|
|
210
|
+
const APPS_SHELL_SECTIONS = new Set([
|
|
211
|
+
'activity',
|
|
212
|
+
'agents',
|
|
213
|
+
'apps',
|
|
214
|
+
'components',
|
|
215
|
+
'connections',
|
|
216
|
+
'contents',
|
|
217
|
+
'context',
|
|
218
|
+
'deployments',
|
|
219
|
+
'evalsets',
|
|
220
|
+
'examples',
|
|
221
|
+
'home',
|
|
222
|
+
'models',
|
|
223
|
+
'readiness',
|
|
224
|
+
'reports',
|
|
225
|
+
'rules',
|
|
226
|
+
'runs',
|
|
227
|
+
'shared',
|
|
228
|
+
'skills',
|
|
229
|
+
'usage',
|
|
230
|
+
'workspace',
|
|
231
|
+
]);
|
|
232
|
+
/**
|
|
233
|
+
* Whether a page is a hosted application, run at its address, rather than a
|
|
234
|
+
* page of the Apps shell. It is visited, not returned to: the Apps shell
|
|
235
|
+
* never reopens on one, and one remembered before is dropped on load.
|
|
236
|
+
*/
|
|
237
|
+
export function isHostedAppRoute(route) {
|
|
238
|
+
const segments = pathOf(route).split('/').filter(Boolean);
|
|
239
|
+
return (segments[0] === 'apps' &&
|
|
240
|
+
segments.length >= 2 &&
|
|
241
|
+
!APPS_SHELL_SECTIONS.has(segments[1]) &&
|
|
242
|
+
(segments.length === 2 ||
|
|
243
|
+
(segments.length === 4 && segments[2] === 'preview')));
|
|
203
244
|
}
|
|
204
245
|
/**
|
|
205
246
|
* Whether a page belongs to no shell: the settings, the documentation and
|
|
@@ -77,7 +77,7 @@ export const SecretNew = ({ secretsListRoute = '/settings/secrets', } = {}) => {
|
|
|
77
77
|
name: formValues.name,
|
|
78
78
|
description: formValues.description,
|
|
79
79
|
// As it is: a secret has one representation end to end
|
|
80
|
-
// (
|
|
80
|
+
// (E3-05). This used to `btoa` and nothing on the read
|
|
81
81
|
// side undid it, so a build secret arrived at its build encoded and
|
|
82
82
|
// opened nothing.
|
|
83
83
|
value: formValues.value,
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
Generate deterministic TypeScript types from the canonical orchestration models.
|
|
7
7
|
|
|
8
8
|
The pydantic models in ``datalayer_core/orchestration`` are the source of
|
|
9
|
-
truth
|
|
9
|
+
truth and ``src/api/orchestration/generated.ts``
|
|
10
10
|
is what they say, in TypeScript, for the browser and the app. This is the
|
|
11
11
|
``generate-contents-types.py`` and ``generate-mcp-types.py`` pattern with two
|
|
12
12
|
documents rather than one:
|
|
@@ -24,19 +24,19 @@ documents rather than one:
|
|
|
24
24
|
What is written:
|
|
25
25
|
|
|
26
26
|
- one ``interface`` per model and one ``type`` per shared vocabulary, camel
|
|
27
|
-
case on the wire because the
|
|
27
|
+
case on the wire because the model is written that way
|
|
28
28
|
and because a browser that has to convert is a browser that can convert
|
|
29
29
|
wrongly;
|
|
30
30
|
- ``ORCHESTRATION_LIFECYCLE``: the states, the terminal states and the
|
|
31
|
-
transition table
|
|
31
|
+
transition table, so the TypeScript state machine (O0-02)
|
|
32
32
|
reads the same data the Python one does rather than a copy of it;
|
|
33
33
|
- ``ORCHESTRATION_COMMANDS``: the twelve commands and which of them mutate,
|
|
34
|
-
so that "every mutating command carries an idempotency key"
|
|
34
|
+
so that "every mutating command carries an idempotency key" is one
|
|
35
35
|
fact in one place;
|
|
36
|
-
- ``ORCHESTRATION_ACKNOWLEDGEMENT_ORDER``: the five milestones
|
|
36
|
+
- ``ORCHESTRATION_ACKNOWLEDGEMENT_ORDER``: the five milestones, in
|
|
37
37
|
order, because "has it reached acceptance yet" is a comparison;
|
|
38
|
-
- ``ORCHESTRATION_LIMITS``: the default depth, fan-out and retry limits
|
|
39
|
-
|
|
38
|
+
- ``ORCHESTRATION_LIMITS``: the default depth, fan-out and retry limits,
|
|
39
|
+
read from the models' own defaults;
|
|
40
40
|
- ``ORCHESTRATION_FIELDS``: which fields each model has, and which model
|
|
41
41
|
each nested one holds. TypeScript
|
|
42
42
|
types vanish at runtime and ``src/**/__tests__`` is outside the tsconfig,
|
|
@@ -630,7 +630,7 @@ def _api(paths: dict[str, Any]) -> list[str]:
|
|
|
630
630
|
|
|
631
631
|
def _lifecycle() -> list[str]:
|
|
632
632
|
"""
|
|
633
|
-
Render the lifecycle
|
|
633
|
+
Render the lifecycle as data (O0-02).
|
|
634
634
|
|
|
635
635
|
Returns
|
|
636
636
|
-------
|
|
@@ -651,7 +651,7 @@ def _lifecycle() -> list[str]:
|
|
|
651
651
|
"transitions": transitions,
|
|
652
652
|
}
|
|
653
653
|
return [
|
|
654
|
-
"/** The lifecycle
|
|
654
|
+
"/** The lifecycle: what a state accepts, and where it leads. */",
|
|
655
655
|
"export interface OrchestrationLifecycle {",
|
|
656
656
|
f"{INDENT}readonly initial: ExecutionState;",
|
|
657
657
|
f"{INDENT}readonly states: readonly ExecutionState[];",
|
|
@@ -693,7 +693,7 @@ def _commands() -> list[str]:
|
|
|
693
693
|
"ORCHESTRATION_COMMANDS", "readonly OrchestrationCommand[]", commands
|
|
694
694
|
),
|
|
695
695
|
"",
|
|
696
|
-
"/** The five milestones
|
|
696
|
+
"/** The five milestones, in the order they are reached. */",
|
|
697
697
|
*_declare(
|
|
698
698
|
"ORCHESTRATION_ACKNOWLEDGEMENT_ORDER",
|
|
699
699
|
"readonly AcknowledgementKind[]",
|
|
@@ -705,7 +705,7 @@ def _commands() -> list[str]:
|
|
|
705
705
|
|
|
706
706
|
def _limits() -> list[str]:
|
|
707
707
|
"""
|
|
708
|
-
Render the default delegation and retry limits
|
|
708
|
+
Render the default delegation and retry limits.
|
|
709
709
|
|
|
710
710
|
Returns
|
|
711
711
|
-------
|
|
@@ -717,7 +717,7 @@ def _limits() -> list[str]:
|
|
|
717
717
|
"retry": RetryPolicy().to_wire(),
|
|
718
718
|
}
|
|
719
719
|
return [
|
|
720
|
-
"/** The default limits
|
|
720
|
+
"/** The default limits, read from the models' own defaults. */",
|
|
721
721
|
"export interface OrchestrationLimits {",
|
|
722
722
|
f"{INDENT}readonly delegation: DelegationLimits;",
|
|
723
723
|
f"{INDENT}readonly retry: RetryPolicy;",
|