@cat-factory/sandbox 0.10.13 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/baselines.d.ts +13 -1
- package/dist/baselines.d.ts.map +1 -1
- package/dist/baselines.js +15 -3
- package/dist/baselines.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/workspacePrompts.d.ts +34 -0
- package/dist/workspacePrompts.d.ts.map +1 -0
- package/dist/workspacePrompts.js +89 -0
- package/dist/workspacePrompts.js.map +1 -0
- package/package.json +5 -5
package/dist/baselines.d.ts
CHANGED
|
@@ -29,7 +29,19 @@ export interface SandboxAgentKindMeta {
|
|
|
29
29
|
export declare const SANDBOX_AGENT_KINDS: readonly SandboxAgentKindMeta[];
|
|
30
30
|
/** Metadata for a testable agent kind, or undefined if the kind is not in the catalog. */
|
|
31
31
|
export declare function sandboxKindMeta(agentKind: string): SandboxAgentKindMeta | undefined;
|
|
32
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* The current shipped system-prompt text + `id@vN` label for a catalog kind.
|
|
34
|
+
*
|
|
35
|
+
* The text is the BASE (track) prompt, deliberately WITHOUT the surface directives and trait
|
|
36
|
+
* guidance the platform appends. That is the same unit a workspace prompt override holds and the
|
|
37
|
+
* same unit the pipeline builder's editor shows, which is what makes a sandbox version and a
|
|
38
|
+
* workspace revision interchangeable — a candidate can be promoted to the live prompt, and a live
|
|
39
|
+
* prompt can be dropped into a matrix, with no reinterpretation of what the text means.
|
|
40
|
+
*
|
|
41
|
+
* The directives are re-applied at RUN time (`SandboxRunService`, via the same `systemPromptFor`
|
|
42
|
+
* override path production dispatch uses), so a candidate is still graded on what would actually
|
|
43
|
+
* be sent. Storing the composed text instead would double the guidance the moment it was promoted.
|
|
44
|
+
*/
|
|
33
45
|
export declare function baselinePromptText(meta: SandboxAgentKindMeta, registry: AgentKindRegistry): {
|
|
34
46
|
text: string;
|
|
35
47
|
label: string;
|
package/dist/baselines.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baselines.d.ts","sourceRoot":"","sources":["../src/baselines.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAWnD,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEvD,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAA;IACb,gFAAgF;IAChF,MAAM,EAAE,kBAAkB,CAAA;IAC1B,gEAAgE;IAChE,MAAM,EAAE,eAAe,CAAA;IACvB;;;;OAIG;IACH,YAAY,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAC3C;;;;OAIG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,4FAA4F;AAC5F,eAAO,MAAM,mBAAmB,EAAE,SAAS,oBAAoB,EA6C9D,CAAA;AAMD,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEnF;AAED
|
|
1
|
+
{"version":3,"file":"baselines.d.ts","sourceRoot":"","sources":["../src/baselines.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAWnD,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEvD,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAA;IACb,gFAAgF;IAChF,MAAM,EAAE,kBAAkB,CAAA;IAC1B,gEAAgE;IAChE,MAAM,EAAE,eAAe,CAAA;IACvB;;;;OAIG;IACH,YAAY,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAC3C;;;;OAIG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,4FAA4F;AAC5F,eAAO,MAAM,mBAAmB,EAAE,SAAS,oBAAoB,EA6C9D,CAAA;AAMD,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEnF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,iBAAiB,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASjC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,oBAAoB,EAAE,CAmB9F"}
|
package/dist/baselines.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PROMPT_VERSIONS, promptVersionLabel
|
|
1
|
+
import { baseSystemPromptFor, PROMPT_VERSIONS, promptVersionLabel } from '@cat-factory/agents';
|
|
2
2
|
/** The testable-kind catalog. Ordered for stable display (inline-first, then container). */
|
|
3
3
|
export const SANDBOX_AGENT_KINDS = [
|
|
4
4
|
{
|
|
@@ -51,14 +51,26 @@ const BY_KIND = new Map(SANDBOX_AGENT_KINDS.map((m) => [m.agentKind, m]));
|
|
|
51
51
|
export function sandboxKindMeta(agentKind) {
|
|
52
52
|
return BY_KIND.get(agentKind);
|
|
53
53
|
}
|
|
54
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* The current shipped system-prompt text + `id@vN` label for a catalog kind.
|
|
56
|
+
*
|
|
57
|
+
* The text is the BASE (track) prompt, deliberately WITHOUT the surface directives and trait
|
|
58
|
+
* guidance the platform appends. That is the same unit a workspace prompt override holds and the
|
|
59
|
+
* same unit the pipeline builder's editor shows, which is what makes a sandbox version and a
|
|
60
|
+
* workspace revision interchangeable — a candidate can be promoted to the live prompt, and a live
|
|
61
|
+
* prompt can be dropped into a matrix, with no reinterpretation of what the text means.
|
|
62
|
+
*
|
|
63
|
+
* The directives are re-applied at RUN time (`SandboxRunService`, via the same `systemPromptFor`
|
|
64
|
+
* override path production dispatch uses), so a candidate is still graded on what would actually
|
|
65
|
+
* be sent. Storing the composed text instead would double the guidance the moment it was promoted.
|
|
66
|
+
*/
|
|
55
67
|
export function baselinePromptText(meta, registry) {
|
|
56
68
|
if (meta.basePromptId && meta.basePromptId in PROMPT_VERSIONS) {
|
|
57
69
|
const versioned = PROMPT_VERSIONS[meta.basePromptId];
|
|
58
70
|
return { text: versioned.text, label: promptVersionLabel(versioned.id, versioned.version) };
|
|
59
71
|
}
|
|
60
72
|
return {
|
|
61
|
-
text:
|
|
73
|
+
text: baseSystemPromptFor(meta.agentKind, registry),
|
|
62
74
|
label: promptVersionLabel(meta.agentKind, 1),
|
|
63
75
|
};
|
|
64
76
|
}
|
package/dist/baselines.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baselines.js","sourceRoot":"","sources":["../src/baselines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"baselines.js","sourceRoot":"","sources":["../src/baselines.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { type SandboxTaskType, type Rubric, type RubricDimension, type ExpectationScore, HIGH_IMPACT_THRESHOLD, TRICKY_THRESHOLD, rubricFor, weightedTotal, scoreExpectations, renderExpectationBrief, } from './rubrics.js';
|
|
2
2
|
export { type SandboxAgentBucket, type SandboxAgentKindMeta, SANDBOX_AGENT_KINDS, sandboxKindMeta, baselinePromptText, listBaselines, } from './baselines.js';
|
|
3
3
|
export { type NewVersionFields, firstVersionFromBaseline, nextVersion, versionLabel, filterByLabels, } from './promptVersions.logic.js';
|
|
4
|
+
export { workspacePromptVersionId, workspacePromptLineageId, parseWorkspacePromptVersionId, workspacePromptVersions, sandboxPromptKinds, } from './workspacePrompts.js';
|
|
4
5
|
export { type ExpandDeps, cellCount, expandMatrix, isRunnableMatrix } from './matrix.logic.js';
|
|
5
6
|
export { type SuggestExperimentInput, type SandboxFixtureDefinition, type SandboxFixtureDifficulty, BUILTIN_SANDBOX_FIXTURES, builtinFixturesFor, builtinFixture, toSandboxFixture, listBuiltinFixtures, baselineVersionId, suggestExperiment, } from './fixtures.js';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,aAAa,GACd,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,KAAK,gBAAgB,EACrB,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAE9F,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,aAAa,GACd,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,KAAK,gBAAgB,EACrB,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,EAC7B,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAE9F,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
export { HIGH_IMPACT_THRESHOLD, TRICKY_THRESHOLD, rubricFor, weightedTotal, scoreExpectations, renderExpectationBrief, } from './rubrics.js';
|
|
7
7
|
export { SANDBOX_AGENT_KINDS, sandboxKindMeta, baselinePromptText, listBaselines, } from './baselines.js';
|
|
8
8
|
export { firstVersionFromBaseline, nextVersion, versionLabel, filterByLabels, } from './promptVersions.logic.js';
|
|
9
|
+
export { workspacePromptVersionId, workspacePromptLineageId, parseWorkspacePromptVersionId, workspacePromptVersions, sandboxPromptKinds, } from './workspacePrompts.js';
|
|
9
10
|
export { cellCount, expandMatrix, isRunnableMatrix } from './matrix.logic.js';
|
|
10
11
|
export { BUILTIN_SANDBOX_FIXTURES, builtinFixturesFor, builtinFixture, toSandboxFixture, listBuiltinFixtures, baselineVersionId, suggestExperiment, } from './fixtures.js';
|
|
11
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,kFAAkF;AAClF,mFAAmF;AACnF,sFAAsF;AACtF,kFAAkF;AAElF,OAAO,EAKL,qBAAqB,EACrB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,cAAc,CAAA;AAErB,OAAO,EAGL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,aAAa,GACd,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAEL,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAmB,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAE9F,OAAO,EAIL,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,kFAAkF;AAClF,mFAAmF;AACnF,sFAAsF;AACtF,kFAAkF;AAElF,OAAO,EAKL,qBAAqB,EACrB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,cAAc,CAAA;AAErB,OAAO,EAGL,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,aAAa,GACd,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAEL,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,EAC7B,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAmB,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAE9F,OAAO,EAIL,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { AgentPromptRevision, SandboxPromptVersion } from '@cat-factory/kernel';
|
|
2
|
+
/** The id a workspace revision is addressed by in the sandbox's prompt-version space. */
|
|
3
|
+
export declare function workspacePromptVersionId(agentKind: string, revision: number): string;
|
|
4
|
+
/** The lineage all of one kind's workspace revisions share, so the browser groups them. */
|
|
5
|
+
export declare function workspacePromptLineageId(agentKind: string): string;
|
|
6
|
+
/** Parse a {@link workspacePromptVersionId} back to its parts; null when it is not one. */
|
|
7
|
+
export declare function parseWorkspacePromptVersionId(id: string): {
|
|
8
|
+
agentKind: string;
|
|
9
|
+
revision: number;
|
|
10
|
+
} | null;
|
|
11
|
+
/**
|
|
12
|
+
* Project a workspace's agent-prompt revisions into synthetic {@link SandboxPromptVersion}s.
|
|
13
|
+
*
|
|
14
|
+
* Three rules, each with a silent failure mode if it were the other way:
|
|
15
|
+
*
|
|
16
|
+
* - **Only kinds the sandbox can actually run** ({@link SANDBOX_AGENT_KINDS}) are projected.
|
|
17
|
+
* Listing a prompt for a kind no experiment can exercise offers a matrix cell that can never
|
|
18
|
+
* be built.
|
|
19
|
+
* - **A revert revision (`text: null`) is skipped.** It means "follow the shipped prompt", so it
|
|
20
|
+
* has no text to run — and it is already represented by the shipped baseline row beside it.
|
|
21
|
+
* Projecting it would put an empty system prompt into a matrix.
|
|
22
|
+
* - **`version` is the workspace's own revision number**, not a sandbox-local counter, so the
|
|
23
|
+
* number a user reads here is the number the pipeline builder's history shows them. A parallel
|
|
24
|
+
* numbering would make "promote v3" and "restore v3" mean different things.
|
|
25
|
+
*
|
|
26
|
+
* `live` marks the row currently running, computed from the HEAD of each kind's log rather than
|
|
27
|
+
* from the highest projected row: a revert is the head and is not projected, so on a reverted kind
|
|
28
|
+
* nothing is live and inferring it from the highest number would point at a prompt that stopped
|
|
29
|
+
* running when someone went back to the built-in.
|
|
30
|
+
*/
|
|
31
|
+
export declare function workspacePromptVersions(revisions: readonly AgentPromptRevision[]): SandboxPromptVersion[];
|
|
32
|
+
/** The agent kinds the sandbox can run, for the batched revision read that feeds the projection. */
|
|
33
|
+
export declare function sandboxPromptKinds(agentKind?: string): string[];
|
|
34
|
+
//# sourceMappingURL=workspacePrompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspacePrompts.d.ts","sourceRoot":"","sources":["../src/workspacePrompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAepF,yFAAyF;AACzF,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED,2FAA2F;AAC3F,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,2FAA2F;AAC3F,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,MAAM,GACT;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMhD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,mBAAmB,EAAE,GACxC,oBAAoB,EAAE,CA+BxB;AAED,oGAAoG;AACpG,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAG/D"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { sandboxKindMeta, SANDBOX_AGENT_KINDS } from './baselines.js';
|
|
2
|
+
// The workspace's OWN agent prompts, projected into the sandbox's prompt-version vocabulary.
|
|
3
|
+
//
|
|
4
|
+
// The two features are the halves of one workflow: the sandbox is where a prompt is chosen, the
|
|
5
|
+
// pipeline builder's editor is where one is deployed. Without this projection the sandbox's only
|
|
6
|
+
// control is the prompt the PRODUCT ships — so on a workspace that has edited a kind, every
|
|
7
|
+
// experiment measures its candidate against text nobody there runs, silently and while looking
|
|
8
|
+
// entirely correct.
|
|
9
|
+
//
|
|
10
|
+
// These rows are SYNTHESIZED per request and never persisted, exactly like the shipped baselines:
|
|
11
|
+
// the workspace's revision log is the source of truth, so a prompt edited in the builder shows up
|
|
12
|
+
// here on the next read with no sync step that could fall behind.
|
|
13
|
+
/** The id a workspace revision is addressed by in the sandbox's prompt-version space. */
|
|
14
|
+
export function workspacePromptVersionId(agentKind, revision) {
|
|
15
|
+
return `workspace:${agentKind}:${revision}`;
|
|
16
|
+
}
|
|
17
|
+
/** The lineage all of one kind's workspace revisions share, so the browser groups them. */
|
|
18
|
+
export function workspacePromptLineageId(agentKind) {
|
|
19
|
+
return `workspace:${agentKind}`;
|
|
20
|
+
}
|
|
21
|
+
/** Parse a {@link workspacePromptVersionId} back to its parts; null when it is not one. */
|
|
22
|
+
export function parseWorkspacePromptVersionId(id) {
|
|
23
|
+
const parts = id.split(':');
|
|
24
|
+
if (parts.length !== 3 || parts[0] !== 'workspace')
|
|
25
|
+
return null;
|
|
26
|
+
const revision = Number(parts[2]);
|
|
27
|
+
if (!Number.isInteger(revision) || revision < 1)
|
|
28
|
+
return null;
|
|
29
|
+
return { agentKind: parts[1], revision };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Project a workspace's agent-prompt revisions into synthetic {@link SandboxPromptVersion}s.
|
|
33
|
+
*
|
|
34
|
+
* Three rules, each with a silent failure mode if it were the other way:
|
|
35
|
+
*
|
|
36
|
+
* - **Only kinds the sandbox can actually run** ({@link SANDBOX_AGENT_KINDS}) are projected.
|
|
37
|
+
* Listing a prompt for a kind no experiment can exercise offers a matrix cell that can never
|
|
38
|
+
* be built.
|
|
39
|
+
* - **A revert revision (`text: null`) is skipped.** It means "follow the shipped prompt", so it
|
|
40
|
+
* has no text to run — and it is already represented by the shipped baseline row beside it.
|
|
41
|
+
* Projecting it would put an empty system prompt into a matrix.
|
|
42
|
+
* - **`version` is the workspace's own revision number**, not a sandbox-local counter, so the
|
|
43
|
+
* number a user reads here is the number the pipeline builder's history shows them. A parallel
|
|
44
|
+
* numbering would make "promote v3" and "restore v3" mean different things.
|
|
45
|
+
*
|
|
46
|
+
* `live` marks the row currently running, computed from the HEAD of each kind's log rather than
|
|
47
|
+
* from the highest projected row: a revert is the head and is not projected, so on a reverted kind
|
|
48
|
+
* nothing is live and inferring it from the highest number would point at a prompt that stopped
|
|
49
|
+
* running when someone went back to the built-in.
|
|
50
|
+
*/
|
|
51
|
+
export function workspacePromptVersions(revisions) {
|
|
52
|
+
// The head of each kind's log — the revision that actually runs, revert included.
|
|
53
|
+
const headByKind = new Map();
|
|
54
|
+
for (const revision of revisions) {
|
|
55
|
+
const seen = headByKind.get(revision.agentKind);
|
|
56
|
+
if (!seen || revision.revision > seen.revision)
|
|
57
|
+
headByKind.set(revision.agentKind, revision);
|
|
58
|
+
}
|
|
59
|
+
return revisions
|
|
60
|
+
.filter((revision) => revision.text !== null && sandboxKindMeta(revision.agentKind))
|
|
61
|
+
.sort((a, b) => a.agentKind.localeCompare(b.agentKind) || b.revision - a.revision)
|
|
62
|
+
.map((revision) => {
|
|
63
|
+
const meta = sandboxKindMeta(revision.agentKind);
|
|
64
|
+
const head = headByKind.get(revision.agentKind);
|
|
65
|
+
return {
|
|
66
|
+
id: workspacePromptVersionId(revision.agentKind, revision.revision),
|
|
67
|
+
lineageId: workspacePromptLineageId(revision.agentKind),
|
|
68
|
+
agentKind: revision.agentKind,
|
|
69
|
+
name: meta?.label ?? revision.agentKind,
|
|
70
|
+
origin: 'workspace',
|
|
71
|
+
// Non-null by the filter above; the cast keeps the projection total without a `!`.
|
|
72
|
+
systemText: revision.text ?? '',
|
|
73
|
+
basePromptId: meta?.basePromptId ?? null,
|
|
74
|
+
version: revision.revision,
|
|
75
|
+
parentId: null,
|
|
76
|
+
labels: [],
|
|
77
|
+
...(head?.revision === revision.revision ? { live: true } : {}),
|
|
78
|
+
createdAt: revision.createdAt,
|
|
79
|
+
createdBy: revision.createdBy ?? null,
|
|
80
|
+
archivedAt: null,
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/** The agent kinds the sandbox can run, for the batched revision read that feeds the projection. */
|
|
85
|
+
export function sandboxPromptKinds(agentKind) {
|
|
86
|
+
const all = SANDBOX_AGENT_KINDS.map((meta) => meta.agentKind);
|
|
87
|
+
return agentKind ? all.filter((kind) => kind === agentKind) : all;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=workspacePrompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspacePrompts.js","sourceRoot":"","sources":["../src/workspacePrompts.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/sandbox",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Parallel prompt/model testing surface: versioned prompt candidates, experiment matrices, judge + objective grading. Isolated from the core product so it can be extracted.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@cat-factory/
|
|
28
|
-
"@cat-factory/
|
|
29
|
-
"@cat-factory/
|
|
30
|
-
"@cat-factory/
|
|
27
|
+
"@cat-factory/contracts": "0.191.0",
|
|
28
|
+
"@cat-factory/sandbox-fixtures": "0.7.222",
|
|
29
|
+
"@cat-factory/agents": "0.84.0",
|
|
30
|
+
"@cat-factory/kernel": "0.186.0"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"typescript": "7.0.2",
|