@cat-factory/contracts 0.6.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/LICENSE +21 -0
- package/dist/accounts.d.ts +103 -0
- package/dist/accounts.d.ts.map +1 -0
- package/dist/accounts.js +102 -0
- package/dist/accounts.js.map +1 -0
- package/dist/agent-config.d.ts +77 -0
- package/dist/agent-config.d.ts.map +1 -0
- package/dist/agent-config.js +78 -0
- package/dist/agent-config.js.map +1 -0
- package/dist/api-keys.d.ts +44 -0
- package/dist/api-keys.d.ts.map +1 -0
- package/dist/api-keys.js +49 -0
- package/dist/api-keys.js.map +1 -0
- package/dist/auth.d.ts +24 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +15 -0
- package/dist/auth.js.map +1 -0
- package/dist/board-scan.d.ts +89 -0
- package/dist/board-scan.d.ts.map +1 -0
- package/dist/board-scan.js +122 -0
- package/dist/board-scan.js.map +1 -0
- package/dist/bootstrap.d.ts +168 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +148 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/clarity.d.ts +75 -0
- package/dist/clarity.d.ts.map +1 -0
- package/dist/clarity.js +66 -0
- package/dist/clarity.js.map +1 -0
- package/dist/companion.d.ts +32 -0
- package/dist/companion.d.ts.map +1 -0
- package/dist/companion.js +43 -0
- package/dist/companion.js.map +1 -0
- package/dist/consensus.d.ts +195 -0
- package/dist/consensus.d.ts.map +1 -0
- package/dist/consensus.js +164 -0
- package/dist/consensus.js.map +1 -0
- package/dist/documents.d.ts +197 -0
- package/dist/documents.d.ts.map +1 -0
- package/dist/documents.js +161 -0
- package/dist/documents.js.map +1 -0
- package/dist/entities.d.ts +1691 -0
- package/dist/entities.d.ts.map +1 -0
- package/dist/entities.js +853 -0
- package/dist/entities.js.map +1 -0
- package/dist/environments.d.ts +426 -0
- package/dist/environments.d.ts.map +1 -0
- package/dist/environments.js +190 -0
- package/dist/environments.js.map +1 -0
- package/dist/events.d.ts +98 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +2 -0
- package/dist/events.js.map +1 -0
- package/dist/fragment-library.d.ts +123 -0
- package/dist/fragment-library.d.ts.map +1 -0
- package/dist/fragment-library.js +88 -0
- package/dist/fragment-library.js.map +1 -0
- package/dist/github.d.ts +215 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js +204 -0
- package/dist/github.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/iteration-cap.d.ts +17 -0
- package/dist/iteration-cap.d.ts.map +1 -0
- package/dist/iteration-cap.js +25 -0
- package/dist/iteration-cap.js.map +1 -0
- package/dist/localModels.d.ts +54 -0
- package/dist/localModels.d.ts.map +1 -0
- package/dist/localModels.js +79 -0
- package/dist/localModels.js.map +1 -0
- package/dist/merge.d.ts +106 -0
- package/dist/merge.d.ts.map +1 -0
- package/dist/merge.js +129 -0
- package/dist/merge.js.map +1 -0
- package/dist/model-defaults.d.ts +23 -0
- package/dist/model-defaults.d.ts.map +1 -0
- package/dist/model-defaults.js +34 -0
- package/dist/model-defaults.js.map +1 -0
- package/dist/notifications.d.ts +136 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +125 -0
- package/dist/notifications.js.map +1 -0
- package/dist/observability.d.ts +271 -0
- package/dist/observability.d.ts.map +1 -0
- package/dist/observability.js +152 -0
- package/dist/observability.js.map +1 -0
- package/dist/personal-subscriptions.d.ts +66 -0
- package/dist/personal-subscriptions.d.ts.map +1 -0
- package/dist/personal-subscriptions.js +70 -0
- package/dist/personal-subscriptions.js.map +1 -0
- package/dist/primitives.d.ts +57 -0
- package/dist/primitives.d.ts.map +1 -0
- package/dist/primitives.js +66 -0
- package/dist/primitives.js.map +1 -0
- package/dist/provisioning.d.ts +46 -0
- package/dist/provisioning.d.ts.map +1 -0
- package/dist/provisioning.js +107 -0
- package/dist/provisioning.js.map +1 -0
- package/dist/recurring.d.ts +117 -0
- package/dist/recurring.d.ts.map +1 -0
- package/dist/recurring.js +99 -0
- package/dist/recurring.js.map +1 -0
- package/dist/release.d.ts +60 -0
- package/dist/release.d.ts.map +1 -0
- package/dist/release.js +75 -0
- package/dist/release.js.map +1 -0
- package/dist/requests.d.ts +451 -0
- package/dist/requests.d.ts.map +1 -0
- package/dist/requests.js +231 -0
- package/dist/requests.js.map +1 -0
- package/dist/requirements.d.ts +127 -0
- package/dist/requirements.d.ts.map +1 -0
- package/dist/requirements.js +137 -0
- package/dist/requirements.js.map +1 -0
- package/dist/runners.d.ts +387 -0
- package/dist/runners.d.ts.map +1 -0
- package/dist/runners.js +117 -0
- package/dist/runners.js.map +1 -0
- package/dist/sandbox.d.ts +300 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +243 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/service-fragment-defaults.d.ts +16 -0
- package/dist/service-fragment-defaults.d.ts.map +1 -0
- package/dist/service-fragment-defaults.js +23 -0
- package/dist/service-fragment-defaults.js.map +1 -0
- package/dist/services.d.ts +81 -0
- package/dist/services.d.ts.map +1 -0
- package/dist/services.js +77 -0
- package/dist/services.js.map +1 -0
- package/dist/slack.d.ts +104 -0
- package/dist/slack.d.ts.map +1 -0
- package/dist/slack.js +98 -0
- package/dist/slack.js.map +1 -0
- package/dist/snapshot.d.ts +522 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +104 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/spec.d.ts +174 -0
- package/dist/spec.d.ts.map +1 -0
- package/dist/spec.js +173 -0
- package/dist/spec.js.map +1 -0
- package/dist/tasks.d.ts +150 -0
- package/dist/tasks.d.ts.map +1 -0
- package/dist/tasks.js +146 -0
- package/dist/tasks.js.map +1 -0
- package/dist/testing.d.ts +67 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +64 -0
- package/dist/testing.js.map +1 -0
- package/dist/tracker.d.ts +18 -0
- package/dist/tracker.d.ts.map +1 -0
- package/dist/tracker.js +24 -0
- package/dist/tracker.js.map +1 -0
- package/dist/vendor-credentials.d.ts +37 -0
- package/dist/vendor-credentials.d.ts.map +1 -0
- package/dist/vendor-credentials.js +40 -0
- package/dist/vendor-credentials.js.map +1 -0
- package/dist/workspace-settings.d.ts +36 -0
- package/dist/workspace-settings.d.ts.map +1 -0
- package/dist/workspace-settings.js +41 -0
- package/dist/workspace-settings.js.map +1 -0
- package/package.json +31 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Ephemeral environment provider wire contracts. Every organization rolls its
|
|
4
|
+
// own preview/ephemeral-env tooling with bespoke internal auth, so rather than
|
|
5
|
+
// integrating against a fixed SaaS we let an org describe its *own* HTTP-based
|
|
6
|
+
// management API declaratively: a manifest of request templates for
|
|
7
|
+
// provision/status/teardown, the auth scheme for calling it, and a mapping from
|
|
8
|
+
// that API's (arbitrary) response shape onto a canonical environment handle.
|
|
9
|
+
//
|
|
10
|
+
// A single generic adapter in the worker interprets any manifest — there are no
|
|
11
|
+
// per-provider presets and no per-org code. After a "deployer" step provisions
|
|
12
|
+
// an environment, the resulting handle is surfaced to downstream tester agents
|
|
13
|
+
// so they can run against the live URL.
|
|
14
|
+
//
|
|
15
|
+
// Secret handling: the manifest references credentials by *logical key* only —
|
|
16
|
+
// never values. The actual per-tenant secret values are supplied separately at
|
|
17
|
+
// registration, stored encrypted-at-rest in D1, and resolved in-memory at call
|
|
18
|
+
// time. Nothing here ever carries a raw secret on the wire.
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
/**
|
|
21
|
+
* A reference to a credential by logical key. Resolves against the workspace's
|
|
22
|
+
* encrypted secret bundle (supplied at registration), not an env var.
|
|
23
|
+
*/
|
|
24
|
+
export const environmentSecretRefSchema = v.object({
|
|
25
|
+
key: v.pipe(v.string(), v.regex(/^[A-Za-z0-9_.-]+$/), v.minLength(1), v.maxLength(64)),
|
|
26
|
+
});
|
|
27
|
+
const nonEmpty = v.pipe(v.string(), v.minLength(1));
|
|
28
|
+
const urlString = v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(2000));
|
|
29
|
+
/**
|
|
30
|
+
* How the worker authenticates to the org's *management* API (the one we call to
|
|
31
|
+
* provision/status/teardown). Covers the common schemes; each references its
|
|
32
|
+
* secret(s) by logical key.
|
|
33
|
+
*/
|
|
34
|
+
export const environmentAuthSchemeSchema = v.variant('type', [
|
|
35
|
+
v.object({ type: v.literal('none') }),
|
|
36
|
+
v.object({
|
|
37
|
+
type: v.literal('api_key'),
|
|
38
|
+
headerName: nonEmpty,
|
|
39
|
+
secretRef: environmentSecretRefSchema,
|
|
40
|
+
/** Optional prefix prepended to the secret value, e.g. `Token `. */
|
|
41
|
+
valuePrefix: v.optional(v.string()),
|
|
42
|
+
}),
|
|
43
|
+
v.object({ type: v.literal('bearer'), secretRef: environmentSecretRefSchema }),
|
|
44
|
+
v.object({
|
|
45
|
+
type: v.literal('basic'),
|
|
46
|
+
usernameSecretRef: environmentSecretRefSchema,
|
|
47
|
+
passwordSecretRef: environmentSecretRefSchema,
|
|
48
|
+
}),
|
|
49
|
+
v.object({
|
|
50
|
+
type: v.literal('oauth2_client_credentials'),
|
|
51
|
+
tokenUrl: urlString,
|
|
52
|
+
clientIdSecretRef: environmentSecretRefSchema,
|
|
53
|
+
clientSecretSecretRef: environmentSecretRefSchema,
|
|
54
|
+
scope: v.optional(v.string()),
|
|
55
|
+
audience: v.optional(v.string()),
|
|
56
|
+
}),
|
|
57
|
+
v.object({
|
|
58
|
+
type: v.literal('custom_headers'),
|
|
59
|
+
headers: v.array(v.object({ name: nonEmpty, secretRef: environmentSecretRefSchema })),
|
|
60
|
+
}),
|
|
61
|
+
]);
|
|
62
|
+
export const environmentHttpMethodSchema = v.picklist(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']);
|
|
63
|
+
/**
|
|
64
|
+
* One HTTP call against the management API. Fully generic: any method, an
|
|
65
|
+
* arbitrary path appended to the manifest `baseUrl`, optional query/headers and
|
|
66
|
+
* a body, all supporting `{{var}}` interpolation. Variables come from a bounded
|
|
67
|
+
* namespace: `{{input.*}}` (provision inputs) and `{{provision.*}}` (fields
|
|
68
|
+
* extracted from an earlier provision response, available to status/teardown).
|
|
69
|
+
*/
|
|
70
|
+
export const environmentRequestTemplateSchema = v.object({
|
|
71
|
+
method: environmentHttpMethodSchema,
|
|
72
|
+
pathTemplate: v.pipe(v.string(), v.maxLength(2000)),
|
|
73
|
+
query: v.optional(v.array(v.object({ key: v.string(), value: v.string() }))),
|
|
74
|
+
headers: v.optional(v.array(v.object({ name: nonEmpty, value: v.string() }))),
|
|
75
|
+
bodyTemplate: v.optional(v.string()),
|
|
76
|
+
/** Per-call timeout (ms). Bounded; defaults applied by the adapter. */
|
|
77
|
+
timeoutMs: v.optional(v.pipe(v.number(), v.minValue(1), v.maxValue(60000))),
|
|
78
|
+
});
|
|
79
|
+
/** The lifecycle states a provisioned environment moves through. */
|
|
80
|
+
export const environmentStatusSchema = v.picklist([
|
|
81
|
+
'provisioning',
|
|
82
|
+
'ready',
|
|
83
|
+
'failed',
|
|
84
|
+
'expired',
|
|
85
|
+
'tearing_down',
|
|
86
|
+
'torn_down',
|
|
87
|
+
]);
|
|
88
|
+
export const environmentAccessSchemeSchema = v.picklist([
|
|
89
|
+
'none',
|
|
90
|
+
'bearer',
|
|
91
|
+
'basic',
|
|
92
|
+
'custom_header',
|
|
93
|
+
]);
|
|
94
|
+
/**
|
|
95
|
+
* How to read the *provisioned environment's own* access credentials out of the
|
|
96
|
+
* management API's response. These are per-environment, ephemeral creds the
|
|
97
|
+
* tester uses to reach the env — distinct from the management-API auth above.
|
|
98
|
+
*/
|
|
99
|
+
export const environmentAccessMappingSchema = v.object({
|
|
100
|
+
scheme: environmentAccessSchemeSchema,
|
|
101
|
+
tokenPath: v.optional(v.string()),
|
|
102
|
+
usernamePath: v.optional(v.string()),
|
|
103
|
+
passwordPath: v.optional(v.string()),
|
|
104
|
+
headerName: v.optional(v.string()),
|
|
105
|
+
headerValuePath: v.optional(v.string()),
|
|
106
|
+
});
|
|
107
|
+
/**
|
|
108
|
+
* Maps an arbitrary self-rolled response onto the canonical handle via dot-path
|
|
109
|
+
* field extraction (e.g. `data.url`). `statusMap` translates the provider's own
|
|
110
|
+
* status strings onto our lifecycle states.
|
|
111
|
+
*/
|
|
112
|
+
export const environmentResponseMappingSchema = v.object({
|
|
113
|
+
urlPath: v.optional(v.string()),
|
|
114
|
+
statusPath: v.optional(v.string()),
|
|
115
|
+
statusMap: v.optional(v.array(v.object({ from: v.string(), to: environmentStatusSchema }))),
|
|
116
|
+
expiresAtPath: v.optional(v.string()),
|
|
117
|
+
externalIdPath: v.optional(v.string()),
|
|
118
|
+
access: v.optional(environmentAccessMappingSchema),
|
|
119
|
+
});
|
|
120
|
+
/** The full declarative description of an org's ephemeral-env management API. */
|
|
121
|
+
export const environmentManifestSchema = v.object({
|
|
122
|
+
providerId: v.pipe(v.string(), v.regex(/^[a-z0-9-]+$/), v.minLength(1), v.maxLength(64)),
|
|
123
|
+
label: v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(120)),
|
|
124
|
+
/** Management API root; provision/status/teardown paths are appended to it. */
|
|
125
|
+
baseUrl: urlString,
|
|
126
|
+
auth: environmentAuthSchemeSchema,
|
|
127
|
+
provision: environmentRequestTemplateSchema,
|
|
128
|
+
/** Optional: polled to observe async provisioning progress. */
|
|
129
|
+
status: v.optional(environmentRequestTemplateSchema),
|
|
130
|
+
/** Optional: called to destroy the environment (manual or on TTL expiry). */
|
|
131
|
+
teardown: v.optional(environmentRequestTemplateSchema),
|
|
132
|
+
response: environmentResponseMappingSchema,
|
|
133
|
+
/** Fallback TTL (ms) when the response carries no explicit expiry. */
|
|
134
|
+
defaultTtlMs: v.optional(v.pipe(v.number(), v.minValue(60000))),
|
|
135
|
+
});
|
|
136
|
+
/** Resolved access creds for a provisioned env, as surfaced to a tester agent. */
|
|
137
|
+
export const environmentAccessHandleSchema = v.object({
|
|
138
|
+
scheme: environmentAccessSchemeSchema,
|
|
139
|
+
token: v.optional(v.string()),
|
|
140
|
+
username: v.optional(v.string()),
|
|
141
|
+
password: v.optional(v.string()),
|
|
142
|
+
headerName: v.optional(v.string()),
|
|
143
|
+
headerValue: v.optional(v.string()),
|
|
144
|
+
});
|
|
145
|
+
/** A provisioned environment, as exposed to clients and downstream agents. */
|
|
146
|
+
export const environmentHandleSchema = v.object({
|
|
147
|
+
id: v.string(),
|
|
148
|
+
workspaceId: v.string(),
|
|
149
|
+
blockId: v.nullable(v.string()),
|
|
150
|
+
executionId: v.nullable(v.string()),
|
|
151
|
+
providerId: v.string(),
|
|
152
|
+
externalId: v.nullable(v.string()),
|
|
153
|
+
url: v.nullable(v.string()),
|
|
154
|
+
status: environmentStatusSchema,
|
|
155
|
+
/** Present only on the dedicated access endpoint / in agent context. */
|
|
156
|
+
access: v.optional(environmentAccessHandleSchema),
|
|
157
|
+
createdAt: v.number(),
|
|
158
|
+
expiresAt: v.nullable(v.number()),
|
|
159
|
+
lastError: v.nullable(v.string()),
|
|
160
|
+
});
|
|
161
|
+
/** A workspace's provider binding, as exposed to clients (never secret values). */
|
|
162
|
+
export const environmentConnectionSchema = v.object({
|
|
163
|
+
providerId: v.string(),
|
|
164
|
+
label: v.string(),
|
|
165
|
+
baseUrl: v.string(),
|
|
166
|
+
connectedAt: v.number(),
|
|
167
|
+
/** Which secret keys are set (names only), so the UI can show completeness. */
|
|
168
|
+
secretKeys: v.array(v.string()),
|
|
169
|
+
});
|
|
170
|
+
// ---- Request bodies -------------------------------------------------------
|
|
171
|
+
/**
|
|
172
|
+
* Register (or replace) a workspace's environment provider. The org supplies the
|
|
173
|
+
* actual per-tenant secret values here (write-only); they are encrypted and
|
|
174
|
+
* stored in D1 and never returned. Every `secretRef.key` in the manifest must
|
|
175
|
+
* have a matching entry in `secrets`.
|
|
176
|
+
*/
|
|
177
|
+
export const registerEnvironmentProviderSchema = v.object({
|
|
178
|
+
manifest: environmentManifestSchema,
|
|
179
|
+
secrets: v.record(v.string(), v.string()),
|
|
180
|
+
});
|
|
181
|
+
/** Rotate/replace the per-tenant secret bundle without re-sending the manifest. */
|
|
182
|
+
export const updateEnvironmentSecretsSchema = v.object({
|
|
183
|
+
secrets: v.record(v.string(), v.string()),
|
|
184
|
+
});
|
|
185
|
+
/** Manually provision an environment (outside a pipeline run). */
|
|
186
|
+
export const provisionEnvironmentSchema = v.object({
|
|
187
|
+
blockId: v.optional(v.pipe(v.string(), v.minLength(1))),
|
|
188
|
+
inputs: v.optional(v.record(v.string(), v.string())),
|
|
189
|
+
});
|
|
190
|
+
//# sourceMappingURL=environments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environments.js","sourceRoot":"","sources":["../src/environments.ts"],"names":[],"mappings":"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"}
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { Block, ExecutionInstance } from './entities.js';
|
|
2
|
+
import type { BootstrapJob } from './bootstrap.js';
|
|
3
|
+
import type { Notification } from './notifications.js';
|
|
4
|
+
import type { LlmCallActivity } from './observability.js';
|
|
5
|
+
import type { RequirementReview } from './requirements.js';
|
|
6
|
+
import type { ConsensusSession } from './consensus.js';
|
|
7
|
+
import type { ClarityReview } from './clarity.js';
|
|
8
|
+
export type WorkspaceEvent =
|
|
9
|
+
/**
|
|
10
|
+
* A run advanced. Carries the updated instance and its server-rolled block, so
|
|
11
|
+
* the client patches both caches without a refetch. `block` is null only if the
|
|
12
|
+
* block vanished between the transition and the publish.
|
|
13
|
+
*/
|
|
14
|
+
{
|
|
15
|
+
type: 'execution';
|
|
16
|
+
instance: ExecutionInstance;
|
|
17
|
+
block: Block | null;
|
|
18
|
+
at: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A structural board change the per-instance event can't express (a module
|
|
22
|
+
* materialised, a run cancelled). The client responds with a full refresh.
|
|
23
|
+
*/
|
|
24
|
+
| {
|
|
25
|
+
type: 'board';
|
|
26
|
+
reason: string;
|
|
27
|
+
at: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A repo-bootstrap run advanced. Carries the updated job (with live `subtasks`)
|
|
31
|
+
* and its provisional/linked service frame, so the client patches the board
|
|
32
|
+
* card and its progress without a refetch. `block` is null only if the frame
|
|
33
|
+
* vanished between the transition and the publish.
|
|
34
|
+
*/
|
|
35
|
+
| {
|
|
36
|
+
type: 'bootstrap';
|
|
37
|
+
job: BootstrapJob;
|
|
38
|
+
block: Block | null;
|
|
39
|
+
at: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A human-actionable notification was raised or resolved (a PR needs review, a
|
|
43
|
+
* pipeline finished and wants confirmation, CI fixing gave up). The client
|
|
44
|
+
* upserts it into its notifications store and surfaces/clears the board badge.
|
|
45
|
+
*/
|
|
46
|
+
| {
|
|
47
|
+
type: 'notification';
|
|
48
|
+
notification: Notification;
|
|
49
|
+
at: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* One container-agent LLM call completed at the proxy. Carries a COMPACT per-call
|
|
53
|
+
* summary (no prompt/response bodies) so an open "Model activity" panel updates
|
|
54
|
+
* live and an evicted-but-alive durable driver is visibly distinct from a wedged
|
|
55
|
+
* agent — the proxy records calls independently of the execution driver, so these
|
|
56
|
+
* keep arriving even while the run's poll loop is frozen. The drill-down lazy-loads
|
|
57
|
+
* the full bodies for an expanded row from the persisted metrics endpoint.
|
|
58
|
+
*/
|
|
59
|
+
| {
|
|
60
|
+
type: 'llmCall';
|
|
61
|
+
call: LlmCallActivity;
|
|
62
|
+
at: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* A block's requirements review changed status (the async incorporate +
|
|
66
|
+
* re-review cycle started, produced new findings, converged, or hit its cap).
|
|
67
|
+
* Carries the updated review so an open review window / inspector reflects the
|
|
68
|
+
* transition live without a refetch. The user is summoned back only via a
|
|
69
|
+
* `notification` event when input is needed; this event is for live state, not
|
|
70
|
+
* a summons.
|
|
71
|
+
*/
|
|
72
|
+
| {
|
|
73
|
+
type: 'requirements';
|
|
74
|
+
review: RequirementReview;
|
|
75
|
+
at: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* A consensus session advanced (a participant contributed, a round completed,
|
|
79
|
+
* the synthesis landed, or it failed). Carries the updated session transcript
|
|
80
|
+
* so an open Consensus Session window reflects the multi-model process live
|
|
81
|
+
* without a refetch.
|
|
82
|
+
*/
|
|
83
|
+
| {
|
|
84
|
+
type: 'consensus';
|
|
85
|
+
session: ConsensusSession;
|
|
86
|
+
at: number;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* A block's clarity (bug-report triage) review changed status — the clarity mirror of
|
|
90
|
+
* the `requirements` event. Carries the updated review so an open review window /
|
|
91
|
+
* inspector reflects the transition live without a refetch.
|
|
92
|
+
*/
|
|
93
|
+
| {
|
|
94
|
+
type: 'clarity';
|
|
95
|
+
review: ClarityReview;
|
|
96
|
+
at: number;
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAOjD,MAAM,MAAM,cAAc;AACxB;;;;GAIG;AACD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AACrF;;;GAGG;GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAC/C;;;;;GAKG;GACD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAC3E;;;;GAIG;GACD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAClE;;;;;;;GAOG;GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AACxD;;;;;;;GAOG;GACD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AACjE;;;;;GAKG;GACD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAC9D;;;;GAIG;GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA"}
|
package/dist/events.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
/** Which scope owns a managed fragment / source: an account, or a workspace. */
|
|
3
|
+
export declare const fragmentOwnerKindSchema: v.PicklistSchema<["account", "workspace"], undefined>;
|
|
4
|
+
export type FragmentOwnerKind = v.InferOutput<typeof fragmentOwnerKindSchema>;
|
|
5
|
+
/** The three tiers a resolved fragment can originate from, lowest-precedence first. */
|
|
6
|
+
export declare const fragmentTierSchema: v.PicklistSchema<["builtin", "account", "workspace"], undefined>;
|
|
7
|
+
export type FragmentTier = v.InferOutput<typeof fragmentTierSchema>;
|
|
8
|
+
/** Create a hand-authored fragment at a tier. `id` defaults to a slug of the title. */
|
|
9
|
+
export declare const createPromptFragmentSchema: v.ObjectSchema<{
|
|
10
|
+
readonly id: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
11
|
+
readonly title: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
|
|
12
|
+
readonly category: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 100, undefined>]>, undefined>;
|
|
13
|
+
readonly summary: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
14
|
+
readonly body: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 20000, undefined>]>;
|
|
15
|
+
readonly tags: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>, undefined>, undefined>;
|
|
16
|
+
readonly appliesTo: v.OptionalSchema<v.ObjectSchema<{
|
|
17
|
+
readonly blockTypes: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["frontend", "service", "api", "database", "queue", "integration", "external", "environment"], undefined>, undefined>, undefined>;
|
|
18
|
+
readonly agentKinds: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, undefined>;
|
|
19
|
+
}, undefined>, undefined>;
|
|
20
|
+
/** Semver of the body; defaults to `1.0.0`. */
|
|
21
|
+
readonly version: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>, undefined>;
|
|
22
|
+
}, undefined>;
|
|
23
|
+
export type CreatePromptFragmentInput = v.InferOutput<typeof createPromptFragmentSchema>;
|
|
24
|
+
/** Edit a fragment's body/metadata. Every field is optional (a partial patch). */
|
|
25
|
+
export declare const updatePromptFragmentSchema: v.ObjectSchema<{
|
|
26
|
+
readonly title: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
27
|
+
readonly category: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 100, undefined>]>, undefined>;
|
|
28
|
+
readonly summary: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
|
|
29
|
+
readonly body: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 20000, undefined>]>, undefined>;
|
|
30
|
+
readonly tags: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>, undefined>, undefined>;
|
|
31
|
+
readonly appliesTo: v.OptionalSchema<v.ObjectSchema<{
|
|
32
|
+
readonly blockTypes: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["frontend", "service", "api", "database", "queue", "integration", "external", "environment"], undefined>, undefined>, undefined>;
|
|
33
|
+
readonly agentKinds: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, undefined>;
|
|
34
|
+
}, undefined>, undefined>;
|
|
35
|
+
readonly version: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>, undefined>;
|
|
36
|
+
}, undefined>;
|
|
37
|
+
export type UpdatePromptFragmentInput = v.InferOutput<typeof updatePromptFragmentSchema>;
|
|
38
|
+
/** A repo a tier links as a source of Markdown guideline files. */
|
|
39
|
+
export declare const fragmentSourceSchema: v.ObjectSchema<{
|
|
40
|
+
readonly id: v.StringSchema<undefined>;
|
|
41
|
+
readonly ownerKind: v.PicklistSchema<["account", "workspace"], undefined>;
|
|
42
|
+
readonly ownerId: v.StringSchema<undefined>;
|
|
43
|
+
readonly repoOwner: v.StringSchema<undefined>;
|
|
44
|
+
readonly repoName: v.StringSchema<undefined>;
|
|
45
|
+
readonly gitRef: v.StringSchema<undefined>;
|
|
46
|
+
readonly dirPath: v.StringSchema<undefined>;
|
|
47
|
+
/** Digest of the source tree at the last successful sync; null if never synced. */
|
|
48
|
+
readonly lastSyncedSha: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
49
|
+
readonly lastSyncedAt: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
|
|
50
|
+
readonly createdAt: v.NumberSchema<undefined>;
|
|
51
|
+
}, undefined>;
|
|
52
|
+
export type FragmentSource = v.InferOutput<typeof fragmentSourceSchema>;
|
|
53
|
+
/** Link a repo directory as a fragment source. */
|
|
54
|
+
export declare const linkFragmentSourceSchema: v.ObjectSchema<{
|
|
55
|
+
readonly repoOwner: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 100, undefined>]>;
|
|
56
|
+
readonly repoName: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
|
|
57
|
+
/** Git ref to read; defaults to the repo's default branch (`HEAD`). */
|
|
58
|
+
readonly gitRef: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
59
|
+
/** Subtree to read (e.g. `guidelines`); defaults to the repo root. */
|
|
60
|
+
readonly dirPath: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 300, undefined>]>, undefined>;
|
|
61
|
+
}, undefined>;
|
|
62
|
+
export type LinkFragmentSourceInput = v.InferOutput<typeof linkFragmentSourceSchema>;
|
|
63
|
+
/** Outcome of resyncing a source: counts of changed/removed/unchanged files. */
|
|
64
|
+
export declare const fragmentSyncResultSchema: v.ObjectSchema<{
|
|
65
|
+
readonly upserted: v.NumberSchema<undefined>;
|
|
66
|
+
readonly tombstoned: v.NumberSchema<undefined>;
|
|
67
|
+
readonly unchanged: v.NumberSchema<undefined>;
|
|
68
|
+
readonly lastSyncedSha: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
69
|
+
}, undefined>;
|
|
70
|
+
export type FragmentSyncResult = v.InferOutput<typeof fragmentSyncResultSchema>;
|
|
71
|
+
/** Cheap "check for changes" result (no writes); powers the resync badge. */
|
|
72
|
+
export declare const fragmentSourceStatusSchema: v.ObjectSchema<{
|
|
73
|
+
readonly changed: v.BooleanSchema<undefined>;
|
|
74
|
+
readonly changedCount: v.NumberSchema<undefined>;
|
|
75
|
+
readonly lastSyncedSha: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
76
|
+
readonly remoteSha: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
77
|
+
}, undefined>;
|
|
78
|
+
export type FragmentSourceStatus = v.InferOutput<typeof fragmentSourceStatusSchema>;
|
|
79
|
+
/** A fragment as seen after the three tiers are merged for a workspace. */
|
|
80
|
+
export declare const resolvedFragmentSchema: v.ObjectSchema<{
|
|
81
|
+
readonly id: v.StringSchema<undefined>;
|
|
82
|
+
readonly version: v.StringSchema<undefined>;
|
|
83
|
+
readonly title: v.StringSchema<undefined>;
|
|
84
|
+
readonly category: v.StringSchema<undefined>;
|
|
85
|
+
readonly summary: v.StringSchema<undefined>;
|
|
86
|
+
readonly body: v.StringSchema<undefined>;
|
|
87
|
+
readonly appliesTo: v.OptionalSchema<v.ObjectSchema<{
|
|
88
|
+
readonly blockTypes: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["frontend", "service", "api", "database", "queue", "integration", "external", "environment"], undefined>, undefined>, undefined>;
|
|
89
|
+
readonly agentKinds: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, undefined>;
|
|
90
|
+
}, undefined>, undefined>;
|
|
91
|
+
readonly tags: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
92
|
+
readonly source: v.OptionalSchema<v.ObjectSchema<{
|
|
93
|
+
readonly sourceId: v.StringSchema<undefined>;
|
|
94
|
+
readonly path: v.StringSchema<undefined>;
|
|
95
|
+
readonly sha: v.StringSchema<undefined>;
|
|
96
|
+
}, undefined>, undefined>;
|
|
97
|
+
/** Which tier this resolved entry came from after override-by-id. */
|
|
98
|
+
readonly tier: v.PicklistSchema<["builtin", "account", "workspace"], undefined>;
|
|
99
|
+
}, undefined>;
|
|
100
|
+
export type ResolvedFragment = v.InferOutput<typeof resolvedFragmentSchema>;
|
|
101
|
+
/** The merged catalog as served by `GET /workspaces/:id/prompt-fragments/resolved`. */
|
|
102
|
+
export declare const resolvedFragmentCatalogSchema: v.ArraySchema<v.ObjectSchema<{
|
|
103
|
+
readonly id: v.StringSchema<undefined>;
|
|
104
|
+
readonly version: v.StringSchema<undefined>;
|
|
105
|
+
readonly title: v.StringSchema<undefined>;
|
|
106
|
+
readonly category: v.StringSchema<undefined>;
|
|
107
|
+
readonly summary: v.StringSchema<undefined>;
|
|
108
|
+
readonly body: v.StringSchema<undefined>;
|
|
109
|
+
readonly appliesTo: v.OptionalSchema<v.ObjectSchema<{
|
|
110
|
+
readonly blockTypes: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["frontend", "service", "api", "database", "queue", "integration", "external", "environment"], undefined>, undefined>, undefined>;
|
|
111
|
+
readonly agentKinds: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>, undefined>, undefined>;
|
|
112
|
+
}, undefined>, undefined>;
|
|
113
|
+
readonly tags: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
114
|
+
readonly source: v.OptionalSchema<v.ObjectSchema<{
|
|
115
|
+
readonly sourceId: v.StringSchema<undefined>;
|
|
116
|
+
readonly path: v.StringSchema<undefined>;
|
|
117
|
+
readonly sha: v.StringSchema<undefined>;
|
|
118
|
+
}, undefined>, undefined>;
|
|
119
|
+
/** Which tier this resolved entry came from after override-by-id. */
|
|
120
|
+
readonly tier: v.PicklistSchema<["builtin", "account", "workspace"], undefined>;
|
|
121
|
+
}, undefined>, undefined>;
|
|
122
|
+
export type ResolvedFragmentCatalog = v.InferOutput<typeof resolvedFragmentCatalogSchema>;
|
|
123
|
+
//# sourceMappingURL=fragment-library.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fragment-library.d.ts","sourceRoot":"","sources":["../src/fragment-library.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAa5B,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,uDAAuC,CAAA;AAC3E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,kEAAkD,CAAA;AACjF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AASnE,uFAAuF;AACvF,eAAO,MAAM,0BAA0B;;;;;;;;;;;IAQrC,+CAA+C;;aAE/C,CAAA;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAExF,kFAAkF;AAClF,eAAO,MAAM,0BAA0B;;;;;;;;;;;aAQrC,CAAA;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAExF,mEAAmE;AACnE,eAAO,MAAM,oBAAoB;;;;;;;;IAQ/B,mFAAmF;;;;aAInF,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE,kDAAkD;AAClD,eAAO,MAAM,wBAAwB;;;IAGnC,uEAAuE;;IAEvE,sEAAsE;;aAEtE,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEpF,gFAAgF;AAChF,eAAO,MAAM,wBAAwB;;;;;aAKnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/E,6EAA6E;AAC7E,eAAO,MAAM,0BAA0B;;;;;aAKrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF,2EAA2E;AAC3E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;IAEjC,qEAAqE;;aAErE,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E,uFAAuF;AACvF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;IANxC,qEAAqE;;yBAMK,CAAA;AAC5E,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import { agentKindSchema, blockTypeSchema } from './primitives.js';
|
|
3
|
+
import { promptFragmentSchema } from './entities.js';
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Wire contracts for the tenant-scoped prompt-fragment library (ADR 0006). A
|
|
6
|
+
// resolved catalog for a workspace is the merge of three tiers — built-in,
|
|
7
|
+
// account, workspace — later tiers overriding earlier ones by stable id. Teams
|
|
8
|
+
// curate fragments by hand or link a repo of Markdown guidelines; the catalog is
|
|
9
|
+
// then selected from per run. These shapes back the management UI and the
|
|
10
|
+
// resolved read the run path uses.
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
/** Which scope owns a managed fragment / source: an account, or a workspace. */
|
|
13
|
+
export const fragmentOwnerKindSchema = v.picklist(['account', 'workspace']);
|
|
14
|
+
/** The three tiers a resolved fragment can originate from, lowest-precedence first. */
|
|
15
|
+
export const fragmentTierSchema = v.picklist(['builtin', 'account', 'workspace']);
|
|
16
|
+
const appliesToSchema = v.object({
|
|
17
|
+
blockTypes: v.optional(v.array(blockTypeSchema)),
|
|
18
|
+
agentKinds: v.optional(v.array(agentKindSchema)),
|
|
19
|
+
});
|
|
20
|
+
const tagsSchema = v.array(v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(40)));
|
|
21
|
+
/** Create a hand-authored fragment at a tier. `id` defaults to a slug of the title. */
|
|
22
|
+
export const createPromptFragmentSchema = v.object({
|
|
23
|
+
id: v.optional(v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(200))),
|
|
24
|
+
title: v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(200)),
|
|
25
|
+
category: v.optional(v.pipe(v.string(), v.trim(), v.maxLength(100))),
|
|
26
|
+
summary: v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(500)),
|
|
27
|
+
body: v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(20000)),
|
|
28
|
+
tags: v.optional(tagsSchema),
|
|
29
|
+
appliesTo: v.optional(appliesToSchema),
|
|
30
|
+
/** Semver of the body; defaults to `1.0.0`. */
|
|
31
|
+
version: v.optional(v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(40))),
|
|
32
|
+
});
|
|
33
|
+
/** Edit a fragment's body/metadata. Every field is optional (a partial patch). */
|
|
34
|
+
export const updatePromptFragmentSchema = v.object({
|
|
35
|
+
title: v.optional(v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(200))),
|
|
36
|
+
category: v.optional(v.pipe(v.string(), v.trim(), v.maxLength(100))),
|
|
37
|
+
summary: v.optional(v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(500))),
|
|
38
|
+
body: v.optional(v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(20000))),
|
|
39
|
+
tags: v.optional(tagsSchema),
|
|
40
|
+
appliesTo: v.optional(appliesToSchema),
|
|
41
|
+
version: v.optional(v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(40))),
|
|
42
|
+
});
|
|
43
|
+
/** A repo a tier links as a source of Markdown guideline files. */
|
|
44
|
+
export const fragmentSourceSchema = v.object({
|
|
45
|
+
id: v.string(),
|
|
46
|
+
ownerKind: fragmentOwnerKindSchema,
|
|
47
|
+
ownerId: v.string(),
|
|
48
|
+
repoOwner: v.string(),
|
|
49
|
+
repoName: v.string(),
|
|
50
|
+
gitRef: v.string(),
|
|
51
|
+
dirPath: v.string(),
|
|
52
|
+
/** Digest of the source tree at the last successful sync; null if never synced. */
|
|
53
|
+
lastSyncedSha: v.nullable(v.string()),
|
|
54
|
+
lastSyncedAt: v.nullable(v.number()),
|
|
55
|
+
createdAt: v.number(),
|
|
56
|
+
});
|
|
57
|
+
/** Link a repo directory as a fragment source. */
|
|
58
|
+
export const linkFragmentSourceSchema = v.object({
|
|
59
|
+
repoOwner: v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(100)),
|
|
60
|
+
repoName: v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(200)),
|
|
61
|
+
/** Git ref to read; defaults to the repo's default branch (`HEAD`). */
|
|
62
|
+
gitRef: v.optional(v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(200))),
|
|
63
|
+
/** Subtree to read (e.g. `guidelines`); defaults to the repo root. */
|
|
64
|
+
dirPath: v.optional(v.pipe(v.string(), v.trim(), v.maxLength(300))),
|
|
65
|
+
});
|
|
66
|
+
/** Outcome of resyncing a source: counts of changed/removed/unchanged files. */
|
|
67
|
+
export const fragmentSyncResultSchema = v.object({
|
|
68
|
+
upserted: v.number(),
|
|
69
|
+
tombstoned: v.number(),
|
|
70
|
+
unchanged: v.number(),
|
|
71
|
+
lastSyncedSha: v.nullable(v.string()),
|
|
72
|
+
});
|
|
73
|
+
/** Cheap "check for changes" result (no writes); powers the resync badge. */
|
|
74
|
+
export const fragmentSourceStatusSchema = v.object({
|
|
75
|
+
changed: v.boolean(),
|
|
76
|
+
changedCount: v.number(),
|
|
77
|
+
lastSyncedSha: v.nullable(v.string()),
|
|
78
|
+
remoteSha: v.nullable(v.string()),
|
|
79
|
+
});
|
|
80
|
+
/** A fragment as seen after the three tiers are merged for a workspace. */
|
|
81
|
+
export const resolvedFragmentSchema = v.object({
|
|
82
|
+
...promptFragmentSchema.entries,
|
|
83
|
+
/** Which tier this resolved entry came from after override-by-id. */
|
|
84
|
+
tier: fragmentTierSchema,
|
|
85
|
+
});
|
|
86
|
+
/** The merged catalog as served by `GET /workspaces/:id/prompt-fragments/resolved`. */
|
|
87
|
+
export const resolvedFragmentCatalogSchema = v.array(resolvedFragmentSchema);
|
|
88
|
+
//# sourceMappingURL=fragment-library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fragment-library.js","sourceRoot":"","sources":["../src/fragment-library.ts"],"names":[],"mappings":"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"}
|