@cat-factory/contracts 0.308.1 → 0.309.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-presentation.d.ts +16 -2
- package/dist/agent-presentation.d.ts.map +1 -1
- package/dist/agent-presentation.js +7 -0
- package/dist/agent-presentation.js.map +1 -1
- package/dist/entities.d.ts +1 -1
- package/dist/pipeline-purpose-vocabulary.d.ts +8 -3
- package/dist/pipeline-purpose-vocabulary.d.ts.map +1 -1
- package/dist/pipeline-purpose-vocabulary.js +14 -2
- package/dist/pipeline-purpose-vocabulary.js.map +1 -1
- package/dist/pipeline-purpose.d.ts +20 -12
- package/dist/pipeline-purpose.d.ts.map +1 -1
- package/dist/pipeline-purpose.js +79 -23
- package/dist/pipeline-purpose.js.map +1 -1
- package/dist/requests.d.ts +2 -2
- package/dist/routes/pipelines.d.ts +8 -8
- package/dist/routes/workspaces.d.ts +4 -4
- package/dist/snapshot.d.ts +2 -2
- package/dist/visual-pipeline.d.ts +24 -1
- package/dist/visual-pipeline.d.ts.map +1 -1
- package/dist/visual-pipeline.js +44 -3
- package/dist/visual-pipeline.js.map +1 -1
- package/package.json +1 -1
|
@@ -67,6 +67,13 @@ export declare const agentPresentationSchema: v.ObjectSchema<{
|
|
|
67
67
|
* builder will SAVE (`purposeAllowsAgentCategory`), so a kind that opts out of a purpose
|
|
68
68
|
* stays editable in a stored pipeline that already uses it.
|
|
69
69
|
*
|
|
70
|
+
* `build` and `bugfix` are read as ONE purpose here, one way (`classifierSuits`): naming
|
|
71
|
+
* `build` also offers the kind to every bugfix palette, because the two are the same work and
|
|
72
|
+
* differ only in the task type their pipelines are offered to. So there is deliberately no way
|
|
73
|
+
* to declare "general builds but not defect work": that is not a distinction about the kind's
|
|
74
|
+
* work, which is all this list may express. Naming `bugfix` alone is a claim about the
|
|
75
|
+
* defect-report context specifically and does NOT buy the kind into `build`.
|
|
76
|
+
*
|
|
70
77
|
* An EMPTY list is refused rather than accepted, because the reader treats "declared nothing"
|
|
71
78
|
* and "declared an empty list" as the same thing (the category alone decides, so the kind is
|
|
72
79
|
* offered at every purpose that section admits) and that is the exact inverse of what an author
|
|
@@ -76,7 +83,7 @@ export declare const agentPresentationSchema: v.ObjectSchema<{
|
|
|
76
83
|
* deliberately reads as no declaration: that one is a retired vocabulary member outliving the
|
|
77
84
|
* bundle reading it, not a statement someone typed.
|
|
78
85
|
*/
|
|
79
|
-
readonly purposes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>, v.MinLengthAction<("build" | "document" | "planning" | "research" | "review")[], 1, undefined>]>, undefined>;
|
|
86
|
+
readonly purposes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>, undefined>, v.MinLengthAction<("bugfix" | "build" | "document" | "planning" | "research" | "review")[], 1, undefined>]>, undefined>;
|
|
80
87
|
/**
|
|
81
88
|
* How specialist this kind is ({@link AGENT_TIERS}). The palette and the model-preset
|
|
82
89
|
* override list show the selected tier and everything below it, so a kind declared
|
|
@@ -141,6 +148,13 @@ export declare const customAgentKindSchema: v.ObjectSchema<{
|
|
|
141
148
|
* builder will SAVE (`purposeAllowsAgentCategory`), so a kind that opts out of a purpose
|
|
142
149
|
* stays editable in a stored pipeline that already uses it.
|
|
143
150
|
*
|
|
151
|
+
* `build` and `bugfix` are read as ONE purpose here, one way (`classifierSuits`): naming
|
|
152
|
+
* `build` also offers the kind to every bugfix palette, because the two are the same work and
|
|
153
|
+
* differ only in the task type their pipelines are offered to. So there is deliberately no way
|
|
154
|
+
* to declare "general builds but not defect work": that is not a distinction about the kind's
|
|
155
|
+
* work, which is all this list may express. Naming `bugfix` alone is a claim about the
|
|
156
|
+
* defect-report context specifically and does NOT buy the kind into `build`.
|
|
157
|
+
*
|
|
144
158
|
* An EMPTY list is refused rather than accepted, because the reader treats "declared nothing"
|
|
145
159
|
* and "declared an empty list" as the same thing (the category alone decides, so the kind is
|
|
146
160
|
* offered at every purpose that section admits) and that is the exact inverse of what an author
|
|
@@ -150,7 +164,7 @@ export declare const customAgentKindSchema: v.ObjectSchema<{
|
|
|
150
164
|
* deliberately reads as no declaration: that one is a retired vocabulary member outliving the
|
|
151
165
|
* bundle reading it, not a statement someone typed.
|
|
152
166
|
*/
|
|
153
|
-
readonly purposes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>, v.MinLengthAction<("build" | "document" | "planning" | "research" | "review")[], 1, undefined>]>, undefined>;
|
|
167
|
+
readonly purposes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>, undefined>, v.MinLengthAction<("bugfix" | "build" | "document" | "planning" | "research" | "review")[], 1, undefined>]>, undefined>;
|
|
154
168
|
/**
|
|
155
169
|
* How specialist this kind is ({@link AGENT_TIERS}). The palette and the model-preset
|
|
156
170
|
* override list show the selected tier and everything below it, so a kind declared
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-presentation.d.ts","sourceRoot":"","sources":["../src/agent-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAa5B,0FAA0F;AAC1F,eAAO,MAAM,mBAAmB,qFAO9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAIrE;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAErE;AAaD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,YAAI,OAAO,EAAE,cAAc,EAAE,UAAU,CAAU,CAAA;AACzE,eAAO,MAAM,eAAe,6EAA0B,CAAA;AACtD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAA0B,CAAA;AAE3D;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAEhG;AAED,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB;IAClC,4CAA4C;;IAE5C,2CAA2C;;IAE3C,uCAAuC;;IAEvC;;;;;OAKG;;IAEH,gGAAgG;;IAEhG
|
|
1
|
+
{"version":3,"file":"agent-presentation.d.ts","sourceRoot":"","sources":["../src/agent-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAa5B,0FAA0F;AAC1F,eAAO,MAAM,mBAAmB,qFAO9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAIrE;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAErE;AAaD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,YAAI,OAAO,EAAE,cAAc,EAAE,UAAU,CAAU,CAAA;AACzE,eAAO,MAAM,eAAe,6EAA0B,CAAA;AACtD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAA0B,CAAA;AAE3D;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAEhG;AAED,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB;IAClC,4CAA4C;;IAE5C,2CAA2C;;IAE3C,uCAAuC;;IAEvC;;;;;OAKG;;IAEH,gGAAgG;;IAEhG;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;;IAEH;;;;;OAKG;;IAEH;;;;;;;;OAQG;;IAEH;;;;;;;;;;;;;OAaG;;aAEH,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAE7E;6DAC6D;AAC7D,eAAO,MAAM,qBAAqB;;;QA/EhC,4CAA4C;;QAE5C,2CAA2C;;QAE3C,uCAAuC;;QAEvC;;;;;WAKG;;QAEH,gGAAgG;;QAEhG;;;;;;;;;;;;;;;;;;;;;;;;;WAyBG;;QAEH;;;;;WAKG;;QAEH;;;;;;;;WAQG;;QAEH;;;;;;;;;;;;;WAaG;;;IAUH,oEAAoE;;IAEpE;;;;;;;;;;;;;;OAcG;;IAEH;;;;;;;;;;;;;;OAcG;;aAEH,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB;;;;;aAKjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA"}
|
|
@@ -97,6 +97,13 @@ export const agentPresentationSchema = v.object({
|
|
|
97
97
|
* builder will SAVE (`purposeAllowsAgentCategory`), so a kind that opts out of a purpose
|
|
98
98
|
* stays editable in a stored pipeline that already uses it.
|
|
99
99
|
*
|
|
100
|
+
* `build` and `bugfix` are read as ONE purpose here, one way (`classifierSuits`): naming
|
|
101
|
+
* `build` also offers the kind to every bugfix palette, because the two are the same work and
|
|
102
|
+
* differ only in the task type their pipelines are offered to. So there is deliberately no way
|
|
103
|
+
* to declare "general builds but not defect work": that is not a distinction about the kind's
|
|
104
|
+
* work, which is all this list may express. Naming `bugfix` alone is a claim about the
|
|
105
|
+
* defect-report context specifically and does NOT buy the kind into `build`.
|
|
106
|
+
*
|
|
100
107
|
* An EMPTY list is refused rather than accepted, because the reader treats "declared nothing"
|
|
101
108
|
* and "declared an empty list" as the same thing (the category alone decides, so the kind is
|
|
102
109
|
* offered at every purpose that section admits) and that is the exact inverse of what an author
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-presentation.js","sourceRoot":"","sources":["../src/agent-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,8EAA8E;AAC9E,gFAAgF;AAChF,qFAAqF;AACrF,uFAAuF;AACvF,sFAAsF;AACtF,mFAAmF;AACnF,8EAA8E;AAE9E,0FAA0F;AAC1F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC5C,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;CACR,CAAC,CAAA;AAGF,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAEpF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACtC,CAAC;AAED,8EAA8E;AAC9E,mFAAmF;AACnF,2EAA2E;AAC3E,mFAAmF;AACnF,sEAAsE;AACtE,EAAE;AACF,oFAAoF;AACpF,mFAAmF;AACnF,6DAA6D;AAC7D,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAU,CAAA;AACzE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAGtD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAc,cAAc,CAAA;AAE3D;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAkC,EAAE,KAAgB;IACrF,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACtF,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,4CAA4C;IAC5C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACpE,2CAA2C;IAC3C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1D,uCAAuC;IACvC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC1D;;;;;OAKG;IACH,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3E,gGAAgG;IAChG,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACzC
|
|
1
|
+
{"version":3,"file":"agent-presentation.js","sourceRoot":"","sources":["../src/agent-presentation.ts"],"names":[],"mappings":"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"}
|
package/dist/entities.d.ts
CHANGED
|
@@ -1594,7 +1594,7 @@ export declare const pipelineSchema: v.ObjectSchema<{
|
|
|
1594
1594
|
* member it reads. Narrow with `isPipelinePurpose` (or `classifierFor`, which states what an
|
|
1595
1595
|
* unnameable classifier means) before indexing anything by it.
|
|
1596
1596
|
*/
|
|
1597
|
-
readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
1597
|
+
readonly purpose: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
1598
1598
|
/**
|
|
1599
1599
|
* When true the pipeline is INTERNAL: the platform starts it by id for a flow of its own, and no
|
|
1600
1600
|
* user-facing surface offers it. It is filtered out of the workspace snapshot, the pipeline list,
|
|
@@ -4,7 +4,12 @@ import * as v from 'valibot';
|
|
|
4
4
|
* builder and stamped on every built-in preset, it is the classifier the SPA filters on:
|
|
5
5
|
*
|
|
6
6
|
* - `build` produces or changes application code (the default for engineering
|
|
7
|
-
* pipelines: full builds,
|
|
7
|
+
* pipelines: full builds, refactors, dependency updates, …).
|
|
8
|
+
* - `bugfix` fixes a REPORTED DEFECT: it ships code exactly as `build` does, and it is
|
|
9
|
+
* built around a report to investigate, triage and reproduce, so it is offered
|
|
10
|
+
* to a `bug` task and withheld from a `feature` one. The two are otherwise the
|
|
11
|
+
* same classifier, which is why the palette and the save gate treat them alike
|
|
12
|
+
* and only `pipelineAllowedForTaskType` tells them apart.
|
|
8
13
|
* - `document` authors or updates documentation (a PRD/RFC/runbook, business rules, …);
|
|
9
14
|
* a `document` task offers ONLY these.
|
|
10
15
|
* - `review` reviews existing code / a pull request and reports findings; writes no code.
|
|
@@ -19,8 +24,8 @@ import * as v from 'valibot';
|
|
|
19
24
|
* modules both build a `Set` at evaluation time resolves to an empty one on whichever side
|
|
20
25
|
* loses the race.
|
|
21
26
|
*/
|
|
22
|
-
export declare const PIPELINE_PURPOSES: readonly ['build', 'document', 'review', 'research', 'planning'];
|
|
23
|
-
export declare const pipelinePurposeSchema: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
27
|
+
export declare const PIPELINE_PURPOSES: readonly ['build', 'bugfix', 'document', 'review', 'research', 'planning'];
|
|
28
|
+
export declare const pipelinePurposeSchema: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
24
29
|
export type PipelinePurpose = v.InferOutput<typeof pipelinePurposeSchema>;
|
|
25
30
|
/**
|
|
26
31
|
* Whether a value is a purpose THIS BUILD knows, DERIVED from the picklist for the same reason
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-purpose-vocabulary.d.ts","sourceRoot":"","sources":["../src/pipeline-purpose-vocabulary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B
|
|
1
|
+
{"version":3,"file":"pipeline-purpose-vocabulary.d.ts","sourceRoot":"","sources":["../src/pipeline-purpose-vocabulary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,iBAAiB,YAC5B,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,UAAU,EACV,UAAU,CACF,CAAA;AACV,eAAO,MAAM,qBAAqB,yGAAgC,CAAA;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAIzE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,eAAe,CAEzE"}
|
|
@@ -4,7 +4,12 @@ import * as v from 'valibot';
|
|
|
4
4
|
* builder and stamped on every built-in preset, it is the classifier the SPA filters on:
|
|
5
5
|
*
|
|
6
6
|
* - `build` produces or changes application code (the default for engineering
|
|
7
|
-
* pipelines: full builds,
|
|
7
|
+
* pipelines: full builds, refactors, dependency updates, …).
|
|
8
|
+
* - `bugfix` fixes a REPORTED DEFECT: it ships code exactly as `build` does, and it is
|
|
9
|
+
* built around a report to investigate, triage and reproduce, so it is offered
|
|
10
|
+
* to a `bug` task and withheld from a `feature` one. The two are otherwise the
|
|
11
|
+
* same classifier, which is why the palette and the save gate treat them alike
|
|
12
|
+
* and only `pipelineAllowedForTaskType` tells them apart.
|
|
8
13
|
* - `document` authors or updates documentation (a PRD/RFC/runbook, business rules, …);
|
|
9
14
|
* a `document` task offers ONLY these.
|
|
10
15
|
* - `review` reviews existing code / a pull request and reports findings; writes no code.
|
|
@@ -19,7 +24,14 @@ import * as v from 'valibot';
|
|
|
19
24
|
* modules both build a `Set` at evaluation time resolves to an empty one on whichever side
|
|
20
25
|
* loses the race.
|
|
21
26
|
*/
|
|
22
|
-
export const PIPELINE_PURPOSES = [
|
|
27
|
+
export const PIPELINE_PURPOSES = [
|
|
28
|
+
'build',
|
|
29
|
+
'bugfix',
|
|
30
|
+
'document',
|
|
31
|
+
'review',
|
|
32
|
+
'research',
|
|
33
|
+
'planning',
|
|
34
|
+
];
|
|
23
35
|
export const pipelinePurposeSchema = v.picklist(PIPELINE_PURPOSES);
|
|
24
36
|
const PIPELINE_PURPOSE_SET = new Set(pipelinePurposeSchema.options);
|
|
25
37
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-purpose-vocabulary.js","sourceRoot":"","sources":["../src/pipeline-purpose-vocabulary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B
|
|
1
|
+
{"version":3,"file":"pipeline-purpose-vocabulary.js","sourceRoot":"","sources":["../src/pipeline-purpose-vocabulary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,UAAU;IACV,UAAU;CACF,CAAA;AACV,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;AAGlE,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAExF;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACxC,CAAC"}
|
|
@@ -16,9 +16,10 @@ import type { BlockLevel, TaskType } from './primitives.js';
|
|
|
16
16
|
export * from './pipeline-purpose-vocabulary.js';
|
|
17
17
|
/**
|
|
18
18
|
* Whether a pipeline of `purpose` may use an agent kind in `category`: the builder's SAVE
|
|
19
|
-
* gate. A
|
|
20
|
-
* (`build`) and Testing (`test`) categories, the two that
|
|
21
|
-
* Uncategorized kinds (no `category`) are always allowed,
|
|
19
|
+
* gate. A code-shipping pipeline ({@link CODE_SHIPPING_PURPOSES}) may use anything; every other
|
|
20
|
+
* purpose refuses the Implementation (`build`) and Testing (`test`) categories, the two that
|
|
21
|
+
* contradict the classifier outright. Uncategorized kinds (no `category`) are always allowed,
|
|
22
|
+
* the caller showing them regardless.
|
|
22
23
|
*
|
|
23
24
|
* For what the palette OFFERS, see {@link purposeSuggestsAgentCategory}: it narrows further,
|
|
24
25
|
* and the difference is what keeps a stored pipeline editable after this file gets an opinion
|
|
@@ -78,6 +79,10 @@ export interface AgentPurposeRelevance {
|
|
|
78
79
|
* has to fix it. An AUTHORED empty list never reaches here at all: `agentPresentationSchema`
|
|
79
80
|
* refuses one at registration, so this reading cannot double as a way of saying "offer me
|
|
80
81
|
* nowhere", which is what someone typing `purposes: []` means and the opposite of what it does.
|
|
82
|
+
*
|
|
83
|
+
* A declaration is matched through {@link classifierSuits}, so declaring `build` also answers for
|
|
84
|
+
* `bugfix`: the two members are the same work, and without that the new one would silently empty
|
|
85
|
+
* out a bugfix palette.
|
|
81
86
|
*/
|
|
82
87
|
export declare function purposeSuggestsAgentKind(purpose: Pipeline['purpose'], kind: AgentPurposeRelevance): boolean;
|
|
83
88
|
/**
|
|
@@ -96,8 +101,9 @@ export declare function purposeSuggestsAgentKind(purpose: Pipeline['purpose'], k
|
|
|
96
101
|
* {@link pipelineAllowedForTaskType} draws, and for the same reason.
|
|
97
102
|
*
|
|
98
103
|
* Unlike the pickers' gate this narrows a list somebody is BROWSING rather than one they are about
|
|
99
|
-
* to run from, so it may be exact where that one is permissive: two known purposes
|
|
100
|
-
*
|
|
104
|
+
* to run from, so it may be exact where that one is permissive: two known purposes mix only where
|
|
105
|
+
* {@link classifierSuits} says they are the same work, and the caller states how many rows the dial
|
|
106
|
+
* is holding back and offers the way out of it.
|
|
101
107
|
*/
|
|
102
108
|
export declare function pipelineMatchesPurpose(pipeline: Pick<Pipeline, 'purpose'>, purpose: Pipeline['purpose'] | null | undefined): boolean;
|
|
103
109
|
/**
|
|
@@ -107,9 +113,11 @@ export declare function pipelineMatchesPurpose(pipeline: Pick<Pipeline, 'purpose
|
|
|
107
113
|
*
|
|
108
114
|
* - `document` → only `document` pipelines (it authors a document; nothing else applies).
|
|
109
115
|
* - `review` → only `review` pipelines (it reviews an existing PR and opens none).
|
|
110
|
-
* - `
|
|
111
|
-
*
|
|
112
|
-
*
|
|
116
|
+
* - `bug` → everything EXCEPT `document` / `review` / `planning` ({@link BUG_PURPOSES}). It ships
|
|
117
|
+
* code, so offering it a document-authoring or PR-review preset was noise in the one picker
|
|
118
|
+
* people use most.
|
|
119
|
+
* - `feature` → the same, minus `bugfix` ({@link FEATURE_PURPOSES}): a preset that investigates a
|
|
120
|
+
* defect report and reproduces it has neither input on a feature.
|
|
113
121
|
* - anything else, including a CUSTOM (namespaced) type and an undefined `taskType`, is
|
|
114
122
|
* unrestricted — a deployment's own task type has no purpose mapping we could infer.
|
|
115
123
|
*
|
|
@@ -121,10 +129,10 @@ export declare function pipelineMatchesPurpose(pipeline: Pick<Pipeline, 'purpose
|
|
|
121
129
|
* task is actively wrong — running it would author no document and open a code PR nobody asked
|
|
122
130
|
* for. A purpose this build cannot name is hidden there: guessing costs more than an absence
|
|
123
131
|
* the user resolves by picking a preset the build does know.
|
|
124
|
-
* - `feature` / `bug` merely EXCLUDE the known purposes that
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
132
|
+
* - `feature` / `bug` merely EXCLUDE the known purposes that do not fit, so an unnameable one
|
|
133
|
+
* stays visible. It is not known-wrong for a feature, and hiding it would take a deployment's
|
|
134
|
+
* own pipeline out of the picker people use most the moment its classifier outlives the bundle
|
|
135
|
+
* reading it, with nothing on screen to explain the absence.
|
|
128
136
|
*
|
|
129
137
|
* Composed with the launch-availability / block-level / visual-frame filters at each picker.
|
|
130
138
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-purpose.d.ts","sourceRoot":"","sources":["../src/pipeline-purpose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAmB,MAAM,yBAAyB,CAAA;AAC7E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAC1F,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE3D;;;;;;;;;;GAUG;AACH,cAAc,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"pipeline-purpose.d.ts","sourceRoot":"","sources":["../src/pipeline-purpose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAmB,MAAM,yBAAyB,CAAA;AAC7E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAC1F,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE3D;;;;;;;;;;GAUG;AACH,cAAc,kCAAkC,CAAA;AA4FhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC5B,QAAQ,EAAE,aAAa,GACtB,OAAO,CAIT;AAiCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC5B,QAAQ,EAAE,aAAa,GACtB,OAAO,CAIT;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,iFAAiF;IACjF,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;CACtC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC5B,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAOT;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EACnC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS,GAC9C,OAAO,CAMT;AA4BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EACnC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAC7B,OAAO,CAST;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EACnC,UAAU,EAAE,UAAU,GAAG,SAAS,GACjC,OAAO,CAIT"}
|
package/dist/pipeline-purpose.js
CHANGED
|
@@ -36,6 +36,10 @@ export * from './pipeline-purpose-vocabulary.js';
|
|
|
36
36
|
// compatibility (asserted in the tests): the palette may hide what the save gate
|
|
37
37
|
// tolerates, never the reverse, which would offer a kind that cannot then be saved.
|
|
38
38
|
//
|
|
39
|
+
// `build` and `bugfix` are ONE classifier to three of those four surfaces: the same work, split
|
|
40
|
+
// only so the pickers can tell them apart. {@link classifierSuits} states that relation once, so a
|
|
41
|
+
// palette and a library looking at the same draft cannot answer it differently.
|
|
42
|
+
//
|
|
39
43
|
// Every pipeline carries one: `purpose` is mandatory at every write boundary (the entity, the
|
|
40
44
|
// create request, the seed spec and therefore every `PipelineRegistry` registration), and the row
|
|
41
45
|
// mapper resolves the pre-mandatory NULLs the back-fill missed. So none of these predicates has an
|
|
@@ -44,8 +48,14 @@ export * from './pipeline-purpose-vocabulary.js';
|
|
|
44
48
|
// What they DO all take is a value TYPED as a member and only DECLARED to be one. See
|
|
45
49
|
// {@link classifierFor} for what an unrecognised value means and why they read it default-OPEN.
|
|
46
50
|
// ---------------------------------------------------------------------------
|
|
47
|
-
/** The agent-palette categories hidden from a
|
|
51
|
+
/** The agent-palette categories hidden from a pipeline that ships no code (runs no tests either). */
|
|
48
52
|
const NON_BUILD_HIDDEN_CATEGORIES = ['build', 'test'];
|
|
53
|
+
/**
|
|
54
|
+
* The purposes that SHIP CODE, and so have a use for every palette category. `bugfix` is here
|
|
55
|
+
* beside `build` because the two differ only in what they are offered TO ({@link
|
|
56
|
+
* pipelineAllowedForTaskType}): a bug fix designs, implements, tests and merges like any change.
|
|
57
|
+
*/
|
|
58
|
+
const CODE_SHIPPING_PURPOSES = ['build', 'bugfix'];
|
|
49
59
|
/**
|
|
50
60
|
* The purpose to narrow BY, or `null` for "this build has nothing to narrow by".
|
|
51
61
|
*
|
|
@@ -66,11 +76,33 @@ const NON_BUILD_HIDDEN_CATEGORIES = ['build', 'test'];
|
|
|
66
76
|
function classifierFor(purpose) {
|
|
67
77
|
return purpose && isPipelinePurpose(purpose) ? purpose : null;
|
|
68
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Whether something classified `own` suits a context being judged AT `classifier`: exact match,
|
|
81
|
+
* plus the single relation "`build` satisfies `bugfix`", one way.
|
|
82
|
+
*
|
|
83
|
+
* The two members are the same WORK (a bug fix designs, implements, tests and merges exactly as a
|
|
84
|
+
* build does), and are split only so the pickers can withhold a defect-report preset from a feature
|
|
85
|
+
* task ({@link pipelineAllowedForTaskType}). So anything classified `build` is at home in a bugfix
|
|
86
|
+
* context: every palette kind whose `purposes` list predates the member (the Bug Investigator
|
|
87
|
+
* declares `build`, most absurdly of all), and the whole build ladder in the saved-pipeline library
|
|
88
|
+
* of a bugfix draft, which would otherwise open holding two rows.
|
|
89
|
+
*
|
|
90
|
+
* The reverse does NOT hold: naming `bugfix` claims the defect-report context specifically and says
|
|
91
|
+
* nothing about a general build.
|
|
92
|
+
*
|
|
93
|
+
* ONE definition, read by both surfaces that narrow by purpose ({@link purposeSuggestsAgentKind},
|
|
94
|
+
* {@link pipelineMatchesPurpose}), because the palette and the library answering the same question
|
|
95
|
+
* differently is what a user reads as one of them being broken.
|
|
96
|
+
*/
|
|
97
|
+
function classifierSuits(own, classifier) {
|
|
98
|
+
return own === classifier || (classifier === 'bugfix' && own === 'build');
|
|
99
|
+
}
|
|
69
100
|
/**
|
|
70
101
|
* Whether a pipeline of `purpose` may use an agent kind in `category`: the builder's SAVE
|
|
71
|
-
* gate. A
|
|
72
|
-
* (`build`) and Testing (`test`) categories, the two that
|
|
73
|
-
* Uncategorized kinds (no `category`) are always allowed,
|
|
102
|
+
* gate. A code-shipping pipeline ({@link CODE_SHIPPING_PURPOSES}) may use anything; every other
|
|
103
|
+
* purpose refuses the Implementation (`build`) and Testing (`test`) categories, the two that
|
|
104
|
+
* contradict the classifier outright. Uncategorized kinds (no `category`) are always allowed,
|
|
105
|
+
* the caller showing them regardless.
|
|
74
106
|
*
|
|
75
107
|
* For what the palette OFFERS, see {@link purposeSuggestsAgentCategory}: it narrows further,
|
|
76
108
|
* and the difference is what keeps a stored pipeline editable after this file gets an opinion
|
|
@@ -80,7 +112,7 @@ function classifierFor(purpose) {
|
|
|
80
112
|
*/
|
|
81
113
|
export function purposeAllowsAgentCategory(purpose, category) {
|
|
82
114
|
const classifier = classifierFor(purpose);
|
|
83
|
-
if (classifier === null || classifier
|
|
115
|
+
if (classifier === null || CODE_SHIPPING_PURPOSES.includes(classifier))
|
|
84
116
|
return true;
|
|
85
117
|
return !NON_BUILD_HIDDEN_CATEGORIES.includes(category);
|
|
86
118
|
}
|
|
@@ -94,6 +126,9 @@ export function purposeAllowsAgentCategory(purpose, category) {
|
|
|
94
126
|
const PURPOSE_SUGGESTED_CATEGORIES = {
|
|
95
127
|
// Ships product code: every category is in play.
|
|
96
128
|
build: { review: true, design: true, build: true, test: true, docs: true, gates: true },
|
|
129
|
+
// Ships product code too, so the same row. What differs is the task type it is offered to,
|
|
130
|
+
// which this table does not decide.
|
|
131
|
+
bugfix: { review: true, design: true, build: true, test: true, docs: true, gates: true },
|
|
97
132
|
// Authors a document: researched, drafted, reviewed and merged like any change, but
|
|
98
133
|
// nothing is implemented or tested.
|
|
99
134
|
document: { review: true, design: true, build: false, test: false, docs: true, gates: true },
|
|
@@ -154,6 +189,10 @@ export function purposeSuggestsAgentCategory(purpose, category) {
|
|
|
154
189
|
* has to fix it. An AUTHORED empty list never reaches here at all: `agentPresentationSchema`
|
|
155
190
|
* refuses one at registration, so this reading cannot double as a way of saying "offer me
|
|
156
191
|
* nowhere", which is what someone typing `purposes: []` means and the opposite of what it does.
|
|
192
|
+
*
|
|
193
|
+
* A declaration is matched through {@link classifierSuits}, so declaring `build` also answers for
|
|
194
|
+
* `bugfix`: the two members are the same work, and without that the new one would silently empty
|
|
195
|
+
* out a bugfix palette.
|
|
157
196
|
*/
|
|
158
197
|
export function purposeSuggestsAgentKind(purpose, kind) {
|
|
159
198
|
const classifier = classifierFor(purpose);
|
|
@@ -162,7 +201,9 @@ export function purposeSuggestsAgentKind(purpose, kind) {
|
|
|
162
201
|
if (kind.category && !purposeSuggestsAgentCategory(purpose, kind.category))
|
|
163
202
|
return false;
|
|
164
203
|
const declared = kind.purposes?.filter((p) => isPipelinePurpose(p)) ?? [];
|
|
165
|
-
|
|
204
|
+
if (declared.length === 0)
|
|
205
|
+
return true;
|
|
206
|
+
return declared.some((p) => classifierSuits(p, classifier));
|
|
166
207
|
}
|
|
167
208
|
/**
|
|
168
209
|
* Whether `pipeline` belongs in a library being browsed AT `purpose`: the builder's saved-pipeline
|
|
@@ -180,8 +221,9 @@ export function purposeSuggestsAgentKind(purpose, kind) {
|
|
|
180
221
|
* {@link pipelineAllowedForTaskType} draws, and for the same reason.
|
|
181
222
|
*
|
|
182
223
|
* Unlike the pickers' gate this narrows a list somebody is BROWSING rather than one they are about
|
|
183
|
-
* to run from, so it may be exact where that one is permissive: two known purposes
|
|
184
|
-
*
|
|
224
|
+
* to run from, so it may be exact where that one is permissive: two known purposes mix only where
|
|
225
|
+
* {@link classifierSuits} says they are the same work, and the caller states how many rows the dial
|
|
226
|
+
* is holding back and offers the way out of it.
|
|
185
227
|
*/
|
|
186
228
|
export function pipelineMatchesPurpose(pipeline, purpose) {
|
|
187
229
|
const classifier = classifierFor(purpose);
|
|
@@ -190,21 +232,32 @@ export function pipelineMatchesPurpose(pipeline, purpose) {
|
|
|
190
232
|
const own = classifierFor(pipeline.purpose);
|
|
191
233
|
if (own === null)
|
|
192
234
|
return true;
|
|
193
|
-
return own
|
|
235
|
+
return classifierSuits(own, classifier);
|
|
194
236
|
}
|
|
195
237
|
/**
|
|
196
|
-
* The purposes a
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
238
|
+
* The purposes a `bug` task may be offered. It ships code, so a `document` or `review` pipeline is
|
|
239
|
+
* meaningless for it — the reverse of the narrowing those task types already got. `research` is
|
|
240
|
+
* included because reaching for a spike before committing to an approach is a legitimate move on
|
|
241
|
+
* work someone has not yet scoped; `planning` is not, being initiative-level work that the
|
|
242
|
+
* block-level gate refuses anyway.
|
|
201
243
|
*
|
|
202
244
|
* Applied as a DENY list (everything not named here is hidden) rather than an allow list, which is
|
|
203
245
|
* the one place this narrowing differs in direction from `document` / `review` — see
|
|
204
246
|
* {@link pipelineAllowedForTaskType} for why a classifier this build cannot NAME has to stay
|
|
205
247
|
* visible here.
|
|
206
248
|
*/
|
|
207
|
-
const
|
|
249
|
+
const BUG_PURPOSES = ['build', 'bugfix', 'research'];
|
|
250
|
+
/**
|
|
251
|
+
* The purposes a `feature` task may be offered: {@link BUG_PURPOSES} minus `bugfix`.
|
|
252
|
+
*
|
|
253
|
+
* A bugfix preset is built around a DEFECT REPORT — it investigates one against the codebase,
|
|
254
|
+
* triages it with a human for fixability, and writes a failing reproduction test before anything
|
|
255
|
+
* is fixed. On a feature there is no report to investigate and nothing red to make green, so the
|
|
256
|
+
* front half of such a run has no input and the reproduction proof it exists to produce is
|
|
257
|
+
* vacuous. That is a narrowing in the same spirit as the document / review ones, drawn one notch
|
|
258
|
+
* finer because both sides of it ship code.
|
|
259
|
+
*/
|
|
260
|
+
const FEATURE_PURPOSES = BUG_PURPOSES.filter((p) => p !== 'bugfix');
|
|
208
261
|
/**
|
|
209
262
|
* Whether `pipeline` should be offered when starting a task of `taskType` — the pickers' gate.
|
|
210
263
|
*
|
|
@@ -212,9 +265,11 @@ const PROGRAMMATIC_PURPOSES = ['build', 'research'];
|
|
|
212
265
|
*
|
|
213
266
|
* - `document` → only `document` pipelines (it authors a document; nothing else applies).
|
|
214
267
|
* - `review` → only `review` pipelines (it reviews an existing PR and opens none).
|
|
215
|
-
* - `
|
|
216
|
-
*
|
|
217
|
-
*
|
|
268
|
+
* - `bug` → everything EXCEPT `document` / `review` / `planning` ({@link BUG_PURPOSES}). It ships
|
|
269
|
+
* code, so offering it a document-authoring or PR-review preset was noise in the one picker
|
|
270
|
+
* people use most.
|
|
271
|
+
* - `feature` → the same, minus `bugfix` ({@link FEATURE_PURPOSES}): a preset that investigates a
|
|
272
|
+
* defect report and reproduces it has neither input on a feature.
|
|
218
273
|
* - anything else, including a CUSTOM (namespaced) type and an undefined `taskType`, is
|
|
219
274
|
* unrestricted — a deployment's own task type has no purpose mapping we could infer.
|
|
220
275
|
*
|
|
@@ -226,10 +281,10 @@ const PROGRAMMATIC_PURPOSES = ['build', 'research'];
|
|
|
226
281
|
* task is actively wrong — running it would author no document and open a code PR nobody asked
|
|
227
282
|
* for. A purpose this build cannot name is hidden there: guessing costs more than an absence
|
|
228
283
|
* the user resolves by picking a preset the build does know.
|
|
229
|
-
* - `feature` / `bug` merely EXCLUDE the known purposes that
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
*
|
|
284
|
+
* - `feature` / `bug` merely EXCLUDE the known purposes that do not fit, so an unnameable one
|
|
285
|
+
* stays visible. It is not known-wrong for a feature, and hiding it would take a deployment's
|
|
286
|
+
* own pipeline out of the picker people use most the moment its classifier outlives the bundle
|
|
287
|
+
* reading it, with nothing on screen to explain the absence.
|
|
233
288
|
*
|
|
234
289
|
* Composed with the launch-availability / block-level / visual-frame filters at each picker.
|
|
235
290
|
*/
|
|
@@ -240,7 +295,8 @@ export function pipelineAllowedForTaskType(pipeline, taskType) {
|
|
|
240
295
|
return pipeline.purpose === 'review';
|
|
241
296
|
if (taskType === 'feature' || taskType === 'bug') {
|
|
242
297
|
const own = classifierFor(pipeline.purpose);
|
|
243
|
-
|
|
298
|
+
const offered = taskType === 'bug' ? BUG_PURPOSES : FEATURE_PURPOSES;
|
|
299
|
+
return own === null || offered.includes(own);
|
|
244
300
|
}
|
|
245
301
|
return true;
|
|
246
302
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-purpose.js","sourceRoot":"","sources":["../src/pipeline-purpose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAE7E,OAAO,EAAE,iBAAiB,EAAwB,MAAM,kCAAkC,CAAA;AAG1F;;;;;;;;;;GAUG;AACH,cAAc,kCAAkC,CAAA;AAEhD,8EAA8E;AAC9E,6EAA6E;AAC7E,EAAE;AACF,+EAA+E;AAC/E,qFAAqF;AACrF,uEAAuE;AACvE,oFAAoF;AACpF,qFAAqF;AACrF,uFAAuF;AACvF,8CAA8C;AAC9C,oFAAoF;AACpF,6DAA6D;AAC7D,mFAAmF;AACnF,8DAA8D;AAC9D,EAAE;AACF,wFAAwF;AACxF,mFAAmF;AACnF,qFAAqF;AACrF,sFAAsF;AACtF,mFAAmF;AACnF,qFAAqF;AACrF,iFAAiF;AACjF,oFAAoF;AACpF,EAAE;AACF,8FAA8F;AAC9F,kGAAkG;AAClG,mGAAmG;AACnG,uDAAuD;AACvD,EAAE;AACF,sFAAsF;AACtF,gGAAgG;AAChG,8EAA8E;AAE9E,
|
|
1
|
+
{"version":3,"file":"pipeline-purpose.js","sourceRoot":"","sources":["../src/pipeline-purpose.ts"],"names":[],"mappings":"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"}
|
package/dist/requests.d.ts
CHANGED
|
@@ -2885,7 +2885,7 @@ export declare const createPipelineSchema: v.ObjectSchema<{
|
|
|
2885
2885
|
* builder's dial defaults to `build`, so a caller who has not thought about it still states the
|
|
2886
2886
|
* classifier it would have behaved as.
|
|
2887
2887
|
*/
|
|
2888
|
-
readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
2888
|
+
readonly purpose: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
2889
2889
|
}, undefined>;
|
|
2890
2890
|
export type CreatePipelineInput = v.InferOutput<typeof createPipelineSchema>;
|
|
2891
2891
|
/**
|
|
@@ -2980,7 +2980,7 @@ export declare const updatePipelineSchema: v.ObjectSchema<{
|
|
|
2980
2980
|
/** Change how the pipeline may be launched (see {@link createPipelineSchema}). Optional. */
|
|
2981
2981
|
readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
|
|
2982
2982
|
/** Change the pipeline's use-case classifier (see {@link createPipelineSchema}). Optional. */
|
|
2983
|
-
readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>;
|
|
2983
|
+
readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>, undefined>;
|
|
2984
2984
|
}, undefined>;
|
|
2985
2985
|
export type UpdatePipelineInput = v.InferOutput<typeof updatePipelineSchema>;
|
|
2986
2986
|
/** Clone any pipeline (built-in or custom) into a new, editable copy. */
|
|
@@ -112,7 +112,7 @@ export declare const listPipelinesContract: {
|
|
|
112
112
|
readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
113
113
|
readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
114
114
|
readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
|
|
115
|
-
readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
115
|
+
readonly purpose: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
116
116
|
readonly internal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
117
117
|
readonly isDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
118
118
|
readonly isUnattendedDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
@@ -203,7 +203,7 @@ export declare const createPipelineContract: {
|
|
|
203
203
|
}, undefined>, undefined>, undefined>, undefined>;
|
|
204
204
|
readonly labels: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>, undefined>, undefined>;
|
|
205
205
|
readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
|
|
206
|
-
readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
206
|
+
readonly purpose: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
207
207
|
}, undefined>;
|
|
208
208
|
readonly responsesByStatusCode: {
|
|
209
209
|
readonly '4xx': v.ObjectSchema<{
|
|
@@ -314,7 +314,7 @@ export declare const createPipelineContract: {
|
|
|
314
314
|
readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
315
315
|
readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
316
316
|
readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
|
|
317
|
-
readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
317
|
+
readonly purpose: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
318
318
|
readonly internal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
319
319
|
readonly isDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
320
320
|
readonly isUnattendedDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
@@ -441,7 +441,7 @@ export declare const clonePipelineContract: {
|
|
|
441
441
|
readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
442
442
|
readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
443
443
|
readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
|
|
444
|
-
readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
444
|
+
readonly purpose: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
445
445
|
readonly internal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
446
446
|
readonly isDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
447
447
|
readonly isUnattendedDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
@@ -566,7 +566,7 @@ export declare const reseedPipelineContract: {
|
|
|
566
566
|
readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
567
567
|
readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
568
568
|
readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
|
|
569
|
-
readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
569
|
+
readonly purpose: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
570
570
|
readonly internal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
571
571
|
readonly isDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
572
572
|
readonly isUnattendedDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
@@ -662,7 +662,7 @@ export declare const updatePipelineContract: {
|
|
|
662
662
|
}, undefined>, undefined>, undefined>, undefined>;
|
|
663
663
|
readonly labels: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>, undefined>, undefined>;
|
|
664
664
|
readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
|
|
665
|
-
readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>;
|
|
665
|
+
readonly purpose: v.OptionalSchema<v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>, undefined>;
|
|
666
666
|
}, undefined>;
|
|
667
667
|
readonly responsesByStatusCode: {
|
|
668
668
|
readonly '4xx': v.ObjectSchema<{
|
|
@@ -773,7 +773,7 @@ export declare const updatePipelineContract: {
|
|
|
773
773
|
readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
774
774
|
readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
775
775
|
readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
|
|
776
|
-
readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
776
|
+
readonly purpose: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
777
777
|
readonly internal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
778
778
|
readonly isDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
779
779
|
readonly isUnattendedDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
@@ -903,7 +903,7 @@ export declare const organizePipelineContract: {
|
|
|
903
903
|
readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
904
904
|
readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
905
905
|
readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
|
|
906
|
-
readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
906
|
+
readonly purpose: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
907
907
|
readonly internal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
908
908
|
readonly isDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
909
909
|
readonly isUnattendedDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
@@ -550,7 +550,7 @@ export declare const createWorkspaceContract: {
|
|
|
550
550
|
readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
551
551
|
readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
552
552
|
readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
|
|
553
|
-
readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
553
|
+
readonly purpose: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
554
554
|
readonly internal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
555
555
|
readonly isDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
556
556
|
readonly isUnattendedDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
@@ -3186,7 +3186,7 @@ export declare const createWorkspaceContract: {
|
|
|
3186
3186
|
readonly color: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>;
|
|
3187
3187
|
readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
3188
3188
|
readonly category: v.OptionalSchema<v.PicklistSchema<["review", "design", "build", "test", "docs", "gates"], undefined>, undefined>;
|
|
3189
|
-
readonly purposes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>, v.MinLengthAction<("build" | "document" | "planning" | "research" | "review")[], 1, undefined>]>, undefined>;
|
|
3189
|
+
readonly purposes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>, undefined>, v.MinLengthAction<("bugfix" | "build" | "document" | "planning" | "research" | "review")[], 1, undefined>]>, undefined>;
|
|
3190
3190
|
readonly tier: v.OptionalSchema<v.PicklistSchema<readonly ["basic", "intermediate", "advanced"], undefined>, undefined>;
|
|
3191
3191
|
readonly resultView: v.OptionalSchema<v.UnionSchema<[v.PicklistSchema<readonly ["outcome", "requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "binary-candidates", "judge", "pr-review", "ralph-loop"], undefined>, v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "Consumer id must be <namespace>:<name> (lowercase a-z0-9, dash-separated)">]>], undefined>, undefined>;
|
|
3192
3192
|
readonly internal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
@@ -4096,7 +4096,7 @@ export declare const getWorkspaceContract: {
|
|
|
4096
4096
|
readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
4097
4097
|
readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
4098
4098
|
readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
|
|
4099
|
-
readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
4099
|
+
readonly purpose: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
4100
4100
|
readonly internal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
4101
4101
|
readonly isDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
4102
4102
|
readonly isUnattendedDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
@@ -6732,7 +6732,7 @@ export declare const getWorkspaceContract: {
|
|
|
6732
6732
|
readonly color: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>;
|
|
6733
6733
|
readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
6734
6734
|
readonly category: v.OptionalSchema<v.PicklistSchema<["review", "design", "build", "test", "docs", "gates"], undefined>, undefined>;
|
|
6735
|
-
readonly purposes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>, v.MinLengthAction<("build" | "document" | "planning" | "research" | "review")[], 1, undefined>]>, undefined>;
|
|
6735
|
+
readonly purposes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>, undefined>, v.MinLengthAction<("bugfix" | "build" | "document" | "planning" | "research" | "review")[], 1, undefined>]>, undefined>;
|
|
6736
6736
|
readonly tier: v.OptionalSchema<v.PicklistSchema<readonly ["basic", "intermediate", "advanced"], undefined>, undefined>;
|
|
6737
6737
|
readonly resultView: v.OptionalSchema<v.UnionSchema<[v.PicklistSchema<readonly ["outcome", "requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "binary-candidates", "judge", "pr-review", "ralph-loop"], undefined>, v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "Consumer id must be <namespace>:<name> (lowercase a-z0-9, dash-separated)">]>], undefined>, undefined>;
|
|
6738
6738
|
readonly internal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
package/dist/snapshot.d.ts
CHANGED
|
@@ -488,7 +488,7 @@ export declare const workspaceSnapshotSchema: v.ObjectSchema<{
|
|
|
488
488
|
readonly version: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
489
489
|
readonly public: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
490
490
|
readonly availability: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"one-off", undefined>, v.LiteralSchema<"recurring", undefined>, v.LiteralSchema<"both", undefined>], undefined>, undefined>;
|
|
491
|
-
readonly purpose: v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>;
|
|
491
|
+
readonly purpose: v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>;
|
|
492
492
|
readonly internal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
493
493
|
readonly isDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
494
494
|
readonly isUnattendedDefault: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
@@ -3259,7 +3259,7 @@ export declare const workspaceSnapshotSchema: v.ObjectSchema<{
|
|
|
3259
3259
|
readonly color: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 40, undefined>]>;
|
|
3260
3260
|
readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
|
|
3261
3261
|
readonly category: v.OptionalSchema<v.PicklistSchema<["review", "design", "build", "test", "docs", "gates"], undefined>, undefined>;
|
|
3262
|
-
readonly purposes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.PicklistSchema<readonly ["build", "document", "review", "research", "planning"], undefined>, undefined>, v.MinLengthAction<("build" | "document" | "planning" | "research" | "review")[], 1, undefined>]>, undefined>;
|
|
3262
|
+
readonly purposes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.PicklistSchema<readonly ["build", "bugfix", "document", "review", "research", "planning"], undefined>, undefined>, v.MinLengthAction<("bugfix" | "build" | "document" | "planning" | "research" | "review")[], 1, undefined>]>, undefined>;
|
|
3263
3263
|
readonly tier: v.OptionalSchema<v.PicklistSchema<readonly ["basic", "intermediate", "advanced"], undefined>, undefined>;
|
|
3264
3264
|
readonly resultView: v.OptionalSchema<v.UnionSchema<[v.PicklistSchema<readonly ["outcome", "requirements-review", "clarity-review", "brainstorm", "tester", "human-test", "visual-confirm", "gate", "consensus-session", "generic-structured", "service-spec", "follow-ups", "merger", "initiative-tracker", "initiative-planning", "doc-interview", "fork-decision", "binary-candidates", "judge", "pr-review", "ralph-loop"], undefined>, v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "Consumer id must be <namespace>:<name> (lowercase a-z0-9, dash-separated)">]>], undefined>, undefined>;
|
|
3265
3265
|
readonly internal: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type RunServiceScope } from './step-conditions.js';
|
|
1
2
|
import type { Block, Pipeline } from './entities.js';
|
|
2
3
|
/**
|
|
3
4
|
* The agent kind that drives a real browser against a running frontend and captures a
|
|
@@ -13,8 +14,30 @@ export declare const UI_TESTER_AGENT_KIND = "tester-ui";
|
|
|
13
14
|
export declare const VISUAL_CONFIRM_AGENT_KIND = "visual-confirmation";
|
|
14
15
|
/** The visual step kinds: a pipeline carrying any of these is a "visual" pipeline. */
|
|
15
16
|
export declare const VISUAL_STEP_KINDS: readonly ["tester-ui", "visual-confirmation"];
|
|
16
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Whether a pipeline includes any visual step (`tester-ui` / `visual-confirmation`) AT ALL,
|
|
19
|
+
* conditional ones included. The question for a caller asking whether the pipeline could ever
|
|
20
|
+
* drive a browser (run start resolves the frontend bindings off it). A caller deciding whether
|
|
21
|
+
* a pipeline may run HERE wants {@link pipelineRunsVisualStep} instead.
|
|
22
|
+
*/
|
|
17
23
|
export declare function pipelineHasVisualStep(pipeline: Pick<Pipeline, 'agentKinds'>): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Whether a run of `scope` would actually REACH a visual step: the steps that are enabled and
|
|
26
|
+
* whose run condition (`stepOptions[i].condition`) the scope admits. This is the question the
|
|
27
|
+
* frame gate below has to ask, and it is NOT the same as "does the pipeline list one".
|
|
28
|
+
*
|
|
29
|
+
* Since the build ladder carries the CONDITIONAL tester pair, every build preset lists a
|
|
30
|
+
* `tester-ui` scoped to `serviceScope: 'frontend'`. On a backend service that step is skipped
|
|
31
|
+
* before it dispatches, so the pipeline demands no UI and the run starts fine — which is exactly
|
|
32
|
+
* what run admission concludes, filtering the chain through the same two rules before it reaches
|
|
33
|
+
* the frame gate. Asking the coarse question there instead hides every build rung from every
|
|
34
|
+
* picker on every non-frontend service.
|
|
35
|
+
*
|
|
36
|
+
* An UNRESOLVABLE scope (neither half set: a block under no service frame) admits every
|
|
37
|
+
* condition, the fail-safe direction `stepConditionSatisfied` takes throughout: the visual step
|
|
38
|
+
* would run, so the frame gate gets to refuse it rather than a condition quietly excusing it.
|
|
39
|
+
*/
|
|
40
|
+
export declare function pipelineRunsVisualStep(pipeline: Pick<Pipeline, 'agentKinds' | 'enabled' | 'stepOptions'>, scope: RunServiceScope): boolean;
|
|
18
41
|
/**
|
|
19
42
|
* Whether a visual pipeline may run on a task under `frame`. A visual step needs a UI to
|
|
20
43
|
* exercise, which exists when the enclosing frame is either:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-pipeline.d.ts","sourceRoot":"","sources":["../src/visual-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"visual-pipeline.d.ts","sourceRoot":"","sources":["../src/visual-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAA0B,MAAM,sBAAsB,CAAA;AACnF,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAoBpD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,cAAc,CAAA;AAE/C;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,wBAAwB,CAAA;AAE9D,sFAAsF;AACtF,eAAO,MAAM,iBAAiB,+CAA6D,CAAA;AAY3F;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,OAAO,CAErF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,aAAa,CAAC,EAClE,KAAK,EAAE,eAAe,GACrB,OAAO,CAOT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,SAAS,GAAG,IAAI,EACpD,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAClE,OAAO,CAWT;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,gBAAgB,CAAC,EAAE,GAClE,MAAM,EAAE,CAcV"}
|
package/dist/visual-pipeline.js
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import { resolveFrontendServePort } from './frontend.js';
|
|
2
|
+
import { stepConditionSatisfied } from './step-conditions.js';
|
|
2
3
|
// ---------------------------------------------------------------------------
|
|
3
4
|
// Visual-pipeline gating (shared by the SPA surface + the backend run-start gate).
|
|
4
5
|
//
|
|
5
6
|
// A "visual" pipeline exercises a rendered UI — it either drives a real browser
|
|
6
7
|
// against a running frontend (`tester-ui`) or parks for a human to review the
|
|
7
8
|
// captured screenshots vs the task's reference designs (`visual-confirmation`).
|
|
8
|
-
// Such a
|
|
9
|
+
// Such a step only makes sense where there IS a UI to exercise: a `frontend`
|
|
9
10
|
// frame (it owns the app under test), or a frame a `frontend` frame links to (the
|
|
10
11
|
// linked frontend is the UI a change to that service is validated through). The SPA
|
|
11
12
|
// uses these predicates to surface visual pipelines only where they can run; the
|
|
12
13
|
// backend gates a run start on the SAME rule so the guarantee holds server-side.
|
|
14
|
+
//
|
|
15
|
+
// What a pipeline LISTS and what a run REACHES are two questions, and the gate wants the
|
|
16
|
+
// second: a visual step scoped to a frontend service (`stepOptions[i].condition`) excuses
|
|
17
|
+
// itself from a backend run before it dispatches, which is what lets one build preset carry
|
|
18
|
+
// both testers. See `pipelineRunsVisualStep`.
|
|
13
19
|
// ---------------------------------------------------------------------------
|
|
14
20
|
/**
|
|
15
21
|
* The agent kind that drives a real browser against a running frontend and captures a
|
|
@@ -25,9 +31,44 @@ export const UI_TESTER_AGENT_KIND = 'tester-ui';
|
|
|
25
31
|
export const VISUAL_CONFIRM_AGENT_KIND = 'visual-confirmation';
|
|
26
32
|
/** The visual step kinds: a pipeline carrying any of these is a "visual" pipeline. */
|
|
27
33
|
export const VISUAL_STEP_KINDS = [UI_TESTER_AGENT_KIND, VISUAL_CONFIRM_AGENT_KIND];
|
|
28
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Whether an agent kind drives a rendered UI. Reads {@link VISUAL_STEP_KINDS} rather than
|
|
36
|
+
* re-spelling the disjunction, so a third visual kind added to that list is seen by both
|
|
37
|
+
* predicates below instead of leaving the frame gate quietly offering a UI-driving pipeline on a
|
|
38
|
+
* frame with no UI.
|
|
39
|
+
*/
|
|
40
|
+
function isVisualStepKind(kind) {
|
|
41
|
+
return VISUAL_STEP_KINDS.includes(kind);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Whether a pipeline includes any visual step (`tester-ui` / `visual-confirmation`) AT ALL,
|
|
45
|
+
* conditional ones included. The question for a caller asking whether the pipeline could ever
|
|
46
|
+
* drive a browser (run start resolves the frontend bindings off it). A caller deciding whether
|
|
47
|
+
* a pipeline may run HERE wants {@link pipelineRunsVisualStep} instead.
|
|
48
|
+
*/
|
|
29
49
|
export function pipelineHasVisualStep(pipeline) {
|
|
30
|
-
return pipeline.agentKinds.some(
|
|
50
|
+
return pipeline.agentKinds.some(isVisualStepKind);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Whether a run of `scope` would actually REACH a visual step: the steps that are enabled and
|
|
54
|
+
* whose run condition (`stepOptions[i].condition`) the scope admits. This is the question the
|
|
55
|
+
* frame gate below has to ask, and it is NOT the same as "does the pipeline list one".
|
|
56
|
+
*
|
|
57
|
+
* Since the build ladder carries the CONDITIONAL tester pair, every build preset lists a
|
|
58
|
+
* `tester-ui` scoped to `serviceScope: 'frontend'`. On a backend service that step is skipped
|
|
59
|
+
* before it dispatches, so the pipeline demands no UI and the run starts fine — which is exactly
|
|
60
|
+
* what run admission concludes, filtering the chain through the same two rules before it reaches
|
|
61
|
+
* the frame gate. Asking the coarse question there instead hides every build rung from every
|
|
62
|
+
* picker on every non-frontend service.
|
|
63
|
+
*
|
|
64
|
+
* An UNRESOLVABLE scope (neither half set: a block under no service frame) admits every
|
|
65
|
+
* condition, the fail-safe direction `stepConditionSatisfied` takes throughout: the visual step
|
|
66
|
+
* would run, so the frame gate gets to refuse it rather than a condition quietly excusing it.
|
|
67
|
+
*/
|
|
68
|
+
export function pipelineRunsVisualStep(pipeline, scope) {
|
|
69
|
+
return pipeline.agentKinds.some((kind, i) => isVisualStepKind(kind) &&
|
|
70
|
+
pipeline.enabled?.[i] !== false &&
|
|
71
|
+
stepConditionSatisfied(pipeline.stepOptions?.[i]?.condition, scope));
|
|
31
72
|
}
|
|
32
73
|
/**
|
|
33
74
|
* Whether a visual pipeline may run on a task under `frame`. A visual step needs a UI to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-pipeline.js","sourceRoot":"","sources":["../src/visual-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"visual-pipeline.js","sourceRoot":"","sources":["../src/visual-pipeline.ts"],"names":[],"mappings":"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"}
|