@cat-factory/contracts 0.223.0 → 0.225.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/dist/agent-gating.d.ts.map +1 -1
- package/dist/agent-gating.js +14 -0
- package/dist/agent-gating.js.map +1 -1
- package/dist/binary-modalities.d.ts +61 -0
- package/dist/binary-modalities.d.ts.map +1 -1
- package/dist/binary-modalities.js +84 -0
- package/dist/binary-modalities.js.map +1 -1
- package/dist/debug-api.d.ts +9 -0
- package/dist/debug-api.d.ts.map +1 -1
- package/dist/debug-api.js +6 -0
- package/dist/debug-api.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +5 -0
- package/dist/errors.js.map +1 -1
- package/dist/execution.d.ts +147 -2
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +74 -1
- package/dist/execution.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/merge.d.ts +2210 -157
- package/dist/merge.d.ts.map +1 -1
- package/dist/merge.js +83 -0
- package/dist/merge.js.map +1 -1
- package/dist/observability.d.ts +71 -0
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +47 -0
- package/dist/observability.js.map +1 -1
- package/dist/pr-report.d.ts +351 -1
- package/dist/pr-report.d.ts.map +1 -1
- package/dist/pr-report.js +164 -1
- package/dist/pr-report.js.map +1 -1
- package/dist/reproduction.js +1 -1
- package/dist/reproduction.js.map +1 -1
- package/dist/requests.d.ts +8 -0
- package/dist/requests.d.ts.map +1 -1
- package/dist/requests.js +9 -0
- package/dist/requests.js.map +1 -1
- package/dist/routes/agent-runs.d.ts +10 -0
- package/dist/routes/agent-runs.d.ts.map +1 -1
- package/dist/routes/bug-hunt.d.ts +10 -0
- package/dist/routes/bug-hunt.d.ts.map +1 -1
- package/dist/routes/debug-api.d.ts +4 -0
- package/dist/routes/debug-api.d.ts.map +1 -1
- package/dist/routes/execution.d.ts +44 -0
- package/dist/routes/execution.d.ts.map +1 -1
- package/dist/routes/human-review.d.ts +5 -0
- package/dist/routes/human-review.d.ts.map +1 -1
- package/dist/routes/human-test.d.ts +25 -0
- package/dist/routes/human-test.d.ts.map +1 -1
- package/dist/routes/index.d.ts +1 -0
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +1 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/merge.d.ts +3109 -157
- package/dist/routes/merge.d.ts.map +1 -1
- package/dist/routes/tutorial.d.ts +149 -0
- package/dist/routes/tutorial.d.ts.map +1 -0
- package/dist/routes/tutorial.js +46 -0
- package/dist/routes/tutorial.js.map +1 -0
- package/dist/routes/visual-confirm.d.ts +15 -0
- package/dist/routes/visual-confirm.d.ts.map +1 -1
- package/dist/routes/workspace-members.d.ts +5 -5
- package/dist/routes/workspaces.d.ts +1008 -4
- package/dist/routes/workspaces.d.ts.map +1 -1
- package/dist/snapshot.d.ts +510 -1
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +9 -0
- package/dist/snapshot.js.map +1 -1
- package/dist/tutorial.d.ts +69 -0
- package/dist/tutorial.d.ts.map +1 -0
- package/dist/tutorial.js +83 -0
- package/dist/tutorial.js.map +1 -0
- package/dist/workspace-members.d.ts +6 -5
- package/dist/workspace-members.d.ts.map +1 -1
- package/dist/workspace-members.js +2 -1
- package/dist/workspace-members.js.map +1 -1
- package/package.json +1 -1
package/dist/snapshot.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
2
|
import { blockSchema, budgetCapsSchema, pipelineSchema, spendStatusSchema, workspaceSchema, } from './entities.js';
|
|
3
3
|
import { executionInstanceSchema } from './execution.js';
|
|
4
|
+
import { tutorialProgressSchema } from './tutorial.js';
|
|
4
5
|
import { userSettingsSchema } from './user-settings.js';
|
|
5
6
|
import { bootstrapJobSchema } from './bootstrap.js';
|
|
6
7
|
import { envConfigRepairJobSchema } from './env-config-repair.js';
|
|
@@ -100,6 +101,14 @@ export const workspaceSnapshotSchema = v.object({
|
|
|
100
101
|
* so the budget screen can render the current value without a separate fetch.
|
|
101
102
|
*/
|
|
102
103
|
userSettings: v.optional(userSettingsSchema),
|
|
104
|
+
/**
|
|
105
|
+
* The signed-in caller's in-app tutorial progress. Carried here rather than fetched, for the
|
|
106
|
+
* same reason `userSettings` is: it is read on EVERY board load (the launch prompt and the
|
|
107
|
+
* contextual offer both need it before the first render), and a separate request would let the
|
|
108
|
+
* prompt decide whether to appear against a copy it has not reconciled yet. Absent ⇒ no store is
|
|
109
|
+
* wired on this facade, and the SPA keeps using its browser-persisted copy alone.
|
|
110
|
+
*/
|
|
111
|
+
tutorialProgress: v.optional(tutorialProgressSchema),
|
|
103
112
|
/**
|
|
104
113
|
* Operator hard ceilings on the account/user budget tiers (from the deployment env
|
|
105
114
|
* vars). Attached so the budget configuration screens can show the hard limit and
|
package/dist/snapshot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
/**
|
|
3
|
+
* A tour id, as a bounded-shape slug.
|
|
4
|
+
*
|
|
5
|
+
* The shape is a CONSTRAINT rather than a description, and it is load-bearing twice over. It is
|
|
6
|
+
* what stops a client writing unbounded junk into a row it owns, and — because a tour id is a
|
|
7
|
+
* metric DIMENSION on the event route — it is the first half of keeping that dimension bounded
|
|
8
|
+
* (the second half is the distinct-value cap in `TutorialTelemetryService`, since a shape alone
|
|
9
|
+
* still admits infinitely many values). It matches the SPA's own anchor-id rule, so a tour a
|
|
10
|
+
* consumer deployment contributes passes as long as it follows the documented convention.
|
|
11
|
+
*/
|
|
12
|
+
export declare const tutorialTourIdSchema: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "A tour id must be lowercase kebab-case, at most 64 characters.">]>;
|
|
13
|
+
/**
|
|
14
|
+
* How many ids one of the sets below may hold. A ceiling on a row the client is trusted to
|
|
15
|
+
* compose, sized far above any real catalog (the built-ins ship 13) so it can only ever be hit
|
|
16
|
+
* by a bug or by abuse, and refused rather than silently truncated.
|
|
17
|
+
*/
|
|
18
|
+
export declare const MAX_TUTORIAL_TOUR_IDS = 200;
|
|
19
|
+
/** The user's answer to the launch prompt. Null = never answered, which is a real state. */
|
|
20
|
+
export declare const tutorialDecisionSchema: v.PicklistSchema<["accepted", "declined"], undefined>;
|
|
21
|
+
export type TutorialDecision = v.InferOutput<typeof tutorialDecisionSchema>;
|
|
22
|
+
/** One user's tutorial progress, across every browser they sign in from. */
|
|
23
|
+
export declare const tutorialProgressSchema: v.ObjectSchema<{
|
|
24
|
+
/**
|
|
25
|
+
* The saved launch-prompt answer, or null when they have never answered. Only an explicit
|
|
26
|
+
* answer stops the prompt returning, so the three states are distinct and none may be
|
|
27
|
+
* collapsed into a boolean.
|
|
28
|
+
*/
|
|
29
|
+
readonly decision: v.NullableSchema<v.PicklistSchema<["accepted", "declined"], undefined>, undefined>;
|
|
30
|
+
/** Tours finished (reached the last step's Done). */
|
|
31
|
+
readonly completedTourIds: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "A tour id must be lowercase kebab-case, at most 64 characters.">]>, undefined>, v.MaxLengthAction<string[], 200, undefined>]>;
|
|
32
|
+
/** Tours the contextual offer has already been spent on, so it is never made twice. */
|
|
33
|
+
readonly nudgedTourIds: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "A tour id must be lowercase kebab-case, at most 64 characters.">]>, undefined>, v.MaxLengthAction<string[], 200, undefined>]>;
|
|
34
|
+
}, undefined>;
|
|
35
|
+
export type TutorialProgress = v.InferOutput<typeof tutorialProgressSchema>;
|
|
36
|
+
/** What a user with no row yet has. */
|
|
37
|
+
export declare const DEFAULT_TUTORIAL_PROGRESS: TutorialProgress;
|
|
38
|
+
/**
|
|
39
|
+
* A progress write. Every field is optional, and the two id sets are MERGED rather than
|
|
40
|
+
* replaced — see `TutorialProgressService.merge` for why that is the whole concurrency story
|
|
41
|
+
* here. Clearing is `DELETE`, not an empty array.
|
|
42
|
+
*/
|
|
43
|
+
export declare const updateTutorialProgressSchema: v.ObjectSchema<{
|
|
44
|
+
readonly decision: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["accepted", "declined"], undefined>, undefined>, undefined>;
|
|
45
|
+
readonly completedTourIds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "A tour id must be lowercase kebab-case, at most 64 characters.">]>, undefined>, v.MaxLengthAction<string[], 200, undefined>]>, undefined>;
|
|
46
|
+
readonly nudgedTourIds: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "A tour id must be lowercase kebab-case, at most 64 characters.">]>, undefined>, v.MaxLengthAction<string[], 200, undefined>]>, undefined>;
|
|
47
|
+
}, undefined>;
|
|
48
|
+
export type UpdateTutorialProgressInput = v.InferOutput<typeof updateTutorialProgressSchema>;
|
|
49
|
+
/**
|
|
50
|
+
* The three points of the funnel, and deliberately only three.
|
|
51
|
+
*
|
|
52
|
+
* `started` and `completed` are what answer the question the tutorial initiative could not
|
|
53
|
+
* answer about itself: the catalogue made every walkthrough reachable, but whether one is
|
|
54
|
+
* REACHED was unmeasured, so every further slice was a guess. `abandoned` is the third because
|
|
55
|
+
* a tour people start and drop halfway is a different problem from one nobody opens, and the
|
|
56
|
+
* two are indistinguishable from a start count alone.
|
|
57
|
+
*
|
|
58
|
+
* Nothing here identifies the user or the workspace, and nothing is stored: an event increments
|
|
59
|
+
* a counter dimensioned by tour id and is gone. That is the whole reason this can be a plain
|
|
60
|
+
* fire-and-forget POST rather than a consent-gated telemetry surface.
|
|
61
|
+
*/
|
|
62
|
+
export declare const tutorialEventSchema: v.PicklistSchema<["started", "completed", "abandoned"], undefined>;
|
|
63
|
+
export type TutorialEvent = v.InferOutput<typeof tutorialEventSchema>;
|
|
64
|
+
export declare const recordTutorialEventSchema: v.ObjectSchema<{
|
|
65
|
+
readonly event: v.PicklistSchema<["started", "completed", "abandoned"], undefined>;
|
|
66
|
+
readonly tourId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "A tour id must be lowercase kebab-case, at most 64 characters.">]>;
|
|
67
|
+
}, undefined>;
|
|
68
|
+
export type RecordTutorialEventInput = v.InferOutput<typeof recordTutorialEventSchema>;
|
|
69
|
+
//# sourceMappingURL=tutorial.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tutorial.d.ts","sourceRoot":"","sources":["../src/tutorial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAiB5B;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,iJAGhC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAA;AAIxC,4FAA4F;AAC5F,eAAO,MAAM,sBAAsB,uDAAuC,CAAA;AAC1E,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB;IACjC;;;;OAIG;;IAEH,qDAAqD;;IAErD,uFAAuF;;aAEvF,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,uCAAuC;AACvC,eAAO,MAAM,yBAAyB,EAAE,gBAIvC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,4BAA4B;;;;aAIvC,CAAA;AACF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAE5F;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,oEAAoD,CAAA;AACpF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAErE,eAAO,MAAM,yBAAyB;;;aAGpC,CAAA;AACF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAA"}
|
package/dist/tutorial.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// The in-app tutorial's SERVER-side state and its funnel events.
|
|
4
|
+
//
|
|
5
|
+
// The tutorial itself lives entirely in the SPA (`frontend/app/app/utils/tutorial.ts` and the
|
|
6
|
+
// `tutorialTours` slot); the backend knows nothing about which tours exist and deliberately keeps
|
|
7
|
+
// it that way. It stores two things a browser cannot:
|
|
8
|
+
//
|
|
9
|
+
// - PROGRESS, per signed-in user, so "which walkthroughs have I finished" and "have I already
|
|
10
|
+
// been offered this one" follow the PERSON rather than the browser profile. Client-persisted
|
|
11
|
+
// only, a second machine re-asks the launch question and re-makes every contextual offer.
|
|
12
|
+
// - EVENTS, which are not stored at all: they increment the operational counters that answer
|
|
13
|
+
// whether the tutorial is being found and finished. Nothing about a single user's path is
|
|
14
|
+
// retained (see `tutorialEventSchema`).
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/**
|
|
17
|
+
* A tour id, as a bounded-shape slug.
|
|
18
|
+
*
|
|
19
|
+
* The shape is a CONSTRAINT rather than a description, and it is load-bearing twice over. It is
|
|
20
|
+
* what stops a client writing unbounded junk into a row it owns, and — because a tour id is a
|
|
21
|
+
* metric DIMENSION on the event route — it is the first half of keeping that dimension bounded
|
|
22
|
+
* (the second half is the distinct-value cap in `TutorialTelemetryService`, since a shape alone
|
|
23
|
+
* still admits infinitely many values). It matches the SPA's own anchor-id rule, so a tour a
|
|
24
|
+
* consumer deployment contributes passes as long as it follows the documented convention.
|
|
25
|
+
*/
|
|
26
|
+
export const tutorialTourIdSchema = v.pipe(v.string(), v.regex(/^[a-z0-9-]{1,64}$/, 'A tour id must be lowercase kebab-case, at most 64 characters.'));
|
|
27
|
+
/**
|
|
28
|
+
* How many ids one of the sets below may hold. A ceiling on a row the client is trusted to
|
|
29
|
+
* compose, sized far above any real catalog (the built-ins ship 13) so it can only ever be hit
|
|
30
|
+
* by a bug or by abuse, and refused rather than silently truncated.
|
|
31
|
+
*/
|
|
32
|
+
export const MAX_TUTORIAL_TOUR_IDS = 200;
|
|
33
|
+
const tourIdSet = v.pipe(v.array(tutorialTourIdSchema), v.maxLength(MAX_TUTORIAL_TOUR_IDS));
|
|
34
|
+
/** The user's answer to the launch prompt. Null = never answered, which is a real state. */
|
|
35
|
+
export const tutorialDecisionSchema = v.picklist(['accepted', 'declined']);
|
|
36
|
+
/** One user's tutorial progress, across every browser they sign in from. */
|
|
37
|
+
export const tutorialProgressSchema = v.object({
|
|
38
|
+
/**
|
|
39
|
+
* The saved launch-prompt answer, or null when they have never answered. Only an explicit
|
|
40
|
+
* answer stops the prompt returning, so the three states are distinct and none may be
|
|
41
|
+
* collapsed into a boolean.
|
|
42
|
+
*/
|
|
43
|
+
decision: v.nullable(tutorialDecisionSchema),
|
|
44
|
+
/** Tours finished (reached the last step's Done). */
|
|
45
|
+
completedTourIds: tourIdSet,
|
|
46
|
+
/** Tours the contextual offer has already been spent on, so it is never made twice. */
|
|
47
|
+
nudgedTourIds: tourIdSet,
|
|
48
|
+
});
|
|
49
|
+
/** What a user with no row yet has. */
|
|
50
|
+
export const DEFAULT_TUTORIAL_PROGRESS = {
|
|
51
|
+
decision: null,
|
|
52
|
+
completedTourIds: [],
|
|
53
|
+
nudgedTourIds: [],
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* A progress write. Every field is optional, and the two id sets are MERGED rather than
|
|
57
|
+
* replaced — see `TutorialProgressService.merge` for why that is the whole concurrency story
|
|
58
|
+
* here. Clearing is `DELETE`, not an empty array.
|
|
59
|
+
*/
|
|
60
|
+
export const updateTutorialProgressSchema = v.object({
|
|
61
|
+
decision: v.optional(v.nullable(tutorialDecisionSchema)),
|
|
62
|
+
completedTourIds: v.optional(tourIdSet),
|
|
63
|
+
nudgedTourIds: v.optional(tourIdSet),
|
|
64
|
+
});
|
|
65
|
+
/**
|
|
66
|
+
* The three points of the funnel, and deliberately only three.
|
|
67
|
+
*
|
|
68
|
+
* `started` and `completed` are what answer the question the tutorial initiative could not
|
|
69
|
+
* answer about itself: the catalogue made every walkthrough reachable, but whether one is
|
|
70
|
+
* REACHED was unmeasured, so every further slice was a guess. `abandoned` is the third because
|
|
71
|
+
* a tour people start and drop halfway is a different problem from one nobody opens, and the
|
|
72
|
+
* two are indistinguishable from a start count alone.
|
|
73
|
+
*
|
|
74
|
+
* Nothing here identifies the user or the workspace, and nothing is stored: an event increments
|
|
75
|
+
* a counter dimensioned by tour id and is gone. That is the whole reason this can be a plain
|
|
76
|
+
* fire-and-forget POST rather than a consent-gated telemetry surface.
|
|
77
|
+
*/
|
|
78
|
+
export const tutorialEventSchema = v.picklist(['started', 'completed', 'abandoned']);
|
|
79
|
+
export const recordTutorialEventSchema = v.object({
|
|
80
|
+
event: tutorialEventSchema,
|
|
81
|
+
tourId: tutorialTourIdSchema,
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=tutorial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tutorial.js","sourceRoot":"","sources":["../src/tutorial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,8EAA8E;AAC9E,iEAAiE;AACjE,EAAE;AACF,8FAA8F;AAC9F,kGAAkG;AAClG,sDAAsD;AACtD,EAAE;AACF,+FAA+F;AAC/F,gGAAgG;AAChG,6FAA6F;AAC7F,8FAA8F;AAC9F,6FAA6F;AAC7F,2CAA2C;AAC3C,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CACxC,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,gEAAgE,CAAC,CAC/F,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAExC,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAA;AAE3F,4FAA4F;AAC5F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAA;AAG1E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC5C,qDAAqD;IACrD,gBAAgB,EAAE,SAAS;IAC3B,uFAAuF;IACvF,aAAa,EAAE,SAAS;CACzB,CAAC,CAAA;AAGF,uCAAuC;AACvC,MAAM,CAAC,MAAM,yBAAyB,GAAqB;IACzD,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,EAAE;IACpB,aAAa,EAAE,EAAE;CAClB,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACxD,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;IACvC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;CACrC,CAAC,CAAA;AAGF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAA;AAGpF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,KAAK,EAAE,mBAAmB;IAC1B,MAAM,EAAE,oBAAoB;CAC7B,CAAC,CAAA"}
|
|
@@ -5,7 +5,8 @@ import * as v from 'valibot';
|
|
|
5
5
|
* would add no expressive power (`{viewer, admin}` ≡ `admin`). Fixed pre-1.0
|
|
6
6
|
* (no custom roles); each maps onto a permission set via the kernel catalog.
|
|
7
7
|
*/
|
|
8
|
-
export declare const
|
|
8
|
+
export declare const WORKSPACE_ROLES: readonly ['admin', 'member', 'viewer'];
|
|
9
|
+
export declare const workspaceRoleSchema: v.PicklistSchema<readonly ["admin", "member", "viewer"], undefined>;
|
|
9
10
|
export type WorkspaceRole = v.InferOutput<typeof workspaceRoleSchema>;
|
|
10
11
|
/**
|
|
11
12
|
* The seven-permission capability catalog a workspace role resolves to. Kept at
|
|
@@ -32,7 +33,7 @@ export type WorkspaceAccessMode = v.InferOutput<typeof workspaceAccessModeSchema
|
|
|
32
33
|
export declare const workspaceMemberSchema: v.ObjectSchema<{
|
|
33
34
|
readonly workspaceId: v.StringSchema<undefined>;
|
|
34
35
|
readonly userId: v.StringSchema<undefined>;
|
|
35
|
-
readonly role: v.PicklistSchema<["admin", "member", "viewer"], undefined>;
|
|
36
|
+
readonly role: v.PicklistSchema<readonly ["admin", "member", "viewer"], undefined>;
|
|
36
37
|
readonly createdAt: v.NumberSchema<undefined>;
|
|
37
38
|
/** Who granted this membership; null for system grants (creator auto-enroll). */
|
|
38
39
|
readonly addedBy: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
@@ -49,7 +50,7 @@ export type WorkspaceMember = v.InferOutput<typeof workspaceMemberSchema>;
|
|
|
49
50
|
* lacks. Optional on the wire: absent ⇒ dev-open (auth disabled) ⇒ the SPA allows all.
|
|
50
51
|
*/
|
|
51
52
|
export declare const workspaceAccessSchema: v.ObjectSchema<{
|
|
52
|
-
readonly role: v.PicklistSchema<["admin", "member", "viewer"], undefined>;
|
|
53
|
+
readonly role: v.PicklistSchema<readonly ["admin", "member", "viewer"], undefined>;
|
|
53
54
|
readonly permissions: v.ArraySchema<v.PicklistSchema<["workspace.read", "board.write", "runs.execute", "settings.manage", "integrations.manage", "secrets.manage", "members.manage"], undefined>, undefined>;
|
|
54
55
|
}, undefined>;
|
|
55
56
|
export type WorkspaceAccess = v.InferOutput<typeof workspaceAccessSchema>;
|
|
@@ -60,12 +61,12 @@ export type WorkspaceAccess = v.InferOutput<typeof workspaceAccessSchema>;
|
|
|
60
61
|
*/
|
|
61
62
|
export declare const addWorkspaceMemberSchema: v.ObjectSchema<{
|
|
62
63
|
readonly userId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
63
|
-
readonly role: v.PicklistSchema<["admin", "member", "viewer"], undefined>;
|
|
64
|
+
readonly role: v.PicklistSchema<readonly ["admin", "member", "viewer"], undefined>;
|
|
64
65
|
}, undefined>;
|
|
65
66
|
export type AddWorkspaceMemberInput = v.InferOutput<typeof addWorkspaceMemberSchema>;
|
|
66
67
|
/** Change an existing member's workspace role. */
|
|
67
68
|
export declare const setWorkspaceMemberRoleSchema: v.ObjectSchema<{
|
|
68
|
-
readonly role: v.PicklistSchema<["admin", "member", "viewer"], undefined>;
|
|
69
|
+
readonly role: v.PicklistSchema<readonly ["admin", "member", "viewer"], undefined>;
|
|
69
70
|
}, undefined>;
|
|
70
71
|
export type SetWorkspaceMemberRoleInput = v.InferOutput<typeof setWorkspaceMemberRoleSchema>;
|
|
71
72
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-members.d.ts","sourceRoot":"","sources":["../src/workspace-members.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAc5B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"workspace-members.d.ts","sourceRoot":"","sources":["../src/workspace-members.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAc5B;;;;;GAKG;AACH,eAAO,MAAM,eAAe,YAAI,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAA;AAErE,eAAO,MAAM,mBAAmB,qEAA8B,CAAA;AAC9D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAErE;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,8JAuBpC,CAAA;AACF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEjF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,wDAAwC,CAAA;AAC9E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEjF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB;;;;;IAKhC,iFAAiF;;IAEjF,qFAAqF;;;;aAIrF,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB;;;aAGhC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAIzE;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;aAGnC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEpF,kDAAkD;AAClD,eAAO,MAAM,4BAA4B;;aAEvC,CAAA;AACF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAE5F;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;aAEvC,CAAA;AACF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,4BAA4B,CAAC,CAAA"}
|
|
@@ -16,7 +16,8 @@ import * as v from 'valibot';
|
|
|
16
16
|
* would add no expressive power (`{viewer, admin}` ≡ `admin`). Fixed pre-1.0
|
|
17
17
|
* (no custom roles); each maps onto a permission set via the kernel catalog.
|
|
18
18
|
*/
|
|
19
|
-
export const
|
|
19
|
+
export const WORKSPACE_ROLES = ['admin', 'member', 'viewer'];
|
|
20
|
+
export const workspaceRoleSchema = v.picklist(WORKSPACE_ROLES);
|
|
20
21
|
/**
|
|
21
22
|
* The seven-permission capability catalog a workspace role resolves to. Kept at
|
|
22
23
|
* exactly the number of distinct route groups the surface has, so every route maps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-members.js","sourceRoot":"","sources":["../src/workspace-members.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,+EAA+E;AAC/E,0EAA0E;AAC1E,EAAE;AACF,iFAAiF;AACjF,gEAAgE;AAChE,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"workspace-members.js","sourceRoot":"","sources":["../src/workspace-members.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,+EAA+E;AAC/E,0EAA0E;AAC1E,EAAE;AACF,iFAAiF;AACjF,gEAAgE;AAChE,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAA;AAErE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;AAG9D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,QAAQ,CAAC;IAClD,mFAAmF;IACnF,qFAAqF;IACrF,yBAAyB;IACzB,gBAAgB;IAChB,iFAAiF;IACjF,8DAA8D;IAC9D,aAAa;IACb,qFAAqF;IACrF,uEAAuE;IACvE,cAAc;IACd,oFAAoF;IACpF,mFAAmF;IACnF,wDAAwD;IACxD,iBAAiB;IACjB,8EAA8E;IAC9E,4EAA4E;IAC5E,0CAA0C;IAC1C,qBAAqB;IACrB,kFAAkF;IAClF,gBAAgB;IAChB,oDAAoD;IACpD,gBAAgB;CACjB,CAAC,CAAA;AAGF;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;AAG9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,IAAI,EAAE,mBAAmB;IACzB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,iFAAiF;IACjF,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,qFAAqF;IACrF,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;CAC9C,CAAC,CAAA;AAGF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC;CAChD,CAAC,CAAA;AAGF,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAI,EAAE,mBAAmB;CAC1B,CAAC,CAAA;AAGF,kDAAkD;AAClD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,IAAI,EAAE,mBAAmB;CAC1B,CAAC,CAAA;AAGF;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,UAAU,EAAE,yBAAyB;CACtC,CAAC,CAAA"}
|