@bastani/atomic 0.9.0-alpha.1 → 0.9.0-alpha.2
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/CHANGELOG.md +23 -0
- package/dist/builtin/cursor/CHANGELOG.md +6 -0
- package/dist/builtin/cursor/package.json +2 -2
- package/dist/builtin/intercom/CHANGELOG.md +6 -0
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/CHANGELOG.md +6 -0
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/subagents/CHANGELOG.md +6 -0
- package/dist/builtin/subagents/package.json +4 -4
- package/dist/builtin/web-access/CHANGELOG.md +6 -0
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +12 -0
- package/dist/builtin/workflows/README.md +189 -122
- package/dist/builtin/workflows/builtin/deep-research-codebase.ts +30 -27
- package/dist/builtin/workflows/builtin/goal-runner.ts +10 -17
- package/dist/builtin/workflows/builtin/goal.ts +39 -44
- package/dist/builtin/workflows/builtin/index.d.ts +1 -0
- package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +16 -17
- package/dist/builtin/workflows/builtin/open-claude-design.d.ts +1 -0
- package/dist/builtin/workflows/builtin/open-claude-design.ts +42 -50
- package/dist/builtin/workflows/builtin/ralph.ts +44 -41
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/src/authoring/typebox-defaults.d.ts +41 -0
- package/dist/builtin/workflows/src/authoring/typebox-defaults.ts +217 -0
- package/dist/builtin/workflows/src/authoring/workflow.ts +184 -0
- package/dist/builtin/workflows/src/authoring.d.ts +14 -66
- package/dist/builtin/workflows/src/engine/graph-inference.ts +100 -0
- package/dist/builtin/workflows/src/engine/options.ts +40 -0
- package/dist/builtin/workflows/src/engine/primitives/chain.ts +29 -0
- package/dist/builtin/workflows/src/engine/primitives/exit.ts +2 -0
- package/dist/builtin/workflows/src/engine/primitives/parallel.ts +47 -0
- package/dist/builtin/workflows/src/engine/primitives/task.ts +108 -0
- package/dist/builtin/workflows/src/engine/primitives/ui.ts +41 -0
- package/dist/builtin/workflows/src/engine/primitives/workflow.ts +159 -0
- package/dist/builtin/workflows/src/engine/replay.ts +8 -0
- package/dist/builtin/workflows/src/engine/run.ts +356 -0
- package/dist/builtin/workflows/src/engine/runtime.ts +160 -0
- package/dist/builtin/workflows/src/extension/workflow-module-loader.ts +9 -3
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +0 -18
- package/dist/builtin/workflows/src/index.ts +0 -2
- package/dist/builtin/workflows/src/runs/background/runner.ts +6 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +3 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-child-helpers.ts +4 -4
- package/dist/builtin/workflows/src/runs/foreground/executor-child-workflow.ts +1 -158
- package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-outputs.ts +2 -2
- package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-run.ts +1 -359
- package/dist/builtin/workflows/src/runs/foreground/executor-scheduler.ts +1 -1
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +2 -5
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +12 -4
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +4 -3
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +9 -2
- package/dist/builtin/workflows/src/runs/foreground/executor-task-context.ts +2 -132
- package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +2 -2
- package/dist/builtin/workflows/src/runs/shared/graph-inference.ts +2 -100
- package/dist/builtin/workflows/src/sdk-surface.ts +6 -9
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +9 -3
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +17 -3
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +3 -33
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +9 -81
- package/dist/builtin/workflows/src/shared/types.ts +25 -8
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +49 -0
- package/dist/builtin/workflows/src/shared/workflow-authoring-types.ts +84 -0
- package/dist/builtin/workflows/src/workflows/registry.ts +7 -3
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +6 -1
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-bash.d.ts.map +1 -1
- package/dist/core/agent-session-bash.js +0 -5
- package/dist/core/agent-session-bash.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +0 -2
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +0 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +0 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +0 -2
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +0 -2
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +0 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +0 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/atomic-guide-command.d.ts.map +1 -1
- package/dist/core/atomic-guide-command.js +1 -1
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/extensions/loader-core.d.ts +1 -3
- package/dist/core/extensions/loader-core.d.ts.map +1 -1
- package/dist/core/extensions/loader-core.js +13 -6
- package/dist/core/extensions/loader-core.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts +7 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +34 -2
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +2 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +2 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +0 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/model-registry-builtins.d.ts.map +1 -1
- package/dist/core/model-registry-builtins.js +6 -0
- package/dist/core/model-registry-builtins.js.map +1 -1
- package/dist/core/model-registry-schemas.d.ts +65 -13
- package/dist/core/model-registry-schemas.d.ts.map +1 -1
- package/dist/core/model-registry-schemas.js +10 -0
- package/dist/core/model-registry-schemas.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts +1 -0
- package/dist/core/resource-loader-core.d.ts.map +1 -1
- package/dist/core/resource-loader-core.js +2 -0
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-extensions.d.ts.map +1 -1
- package/dist/core/resource-loader-extensions.js +3 -3
- package/dist/core/resource-loader-extensions.js.map +1 -1
- package/dist/core/resource-loader-internals.d.ts +1 -0
- package/dist/core/resource-loader-internals.d.ts.map +1 -1
- package/dist/core/resource-loader-internals.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +6 -2
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/sdk-exports.d.ts +1 -1
- package/dist/core/sdk-exports.d.ts.map +1 -1
- package/dist/core/sdk-exports.js.map +1 -1
- package/dist/core/sdk-types.d.ts +0 -3
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +0 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-history.d.ts.map +1 -1
- package/dist/core/session-manager-history.js +2 -1
- package/dist/core/session-manager-history.js.map +1 -1
- package/dist/core/tools/bash.d.ts +0 -5
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +10 -11
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff-preserve.d.ts +18 -0
- package/dist/core/tools/edit-diff-preserve.d.ts.map +1 -0
- package/dist/core/tools/edit-diff-preserve.js +85 -0
- package/dist/core/tools/edit-diff-preserve.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +3 -2
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +15 -18
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/index.d.ts +0 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +0 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -2
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/model-search.d.ts +5 -0
- package/dist/modes/interactive/model-search.d.ts.map +1 -1
- package/dist/modes/interactive/model-search.js +9 -0
- package/dist/modes/interactive/model-search.js.map +1 -1
- package/dist/utils/shell.d.ts +1 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +12 -5
- package/dist/utils/shell.js.map +1 -1
- package/docs/custom-provider.md +4 -3
- package/docs/models.md +3 -2
- package/docs/packages.md +2 -2
- package/docs/quickstart.md +1 -1
- package/docs/sdk.md +2 -40
- package/docs/security.md +1 -1
- package/docs/workflows.md +238 -173
- package/package.json +5 -5
- package/dist/builtin/workflows/src/workflows/define-workflow.ts +0 -277
- package/dist/core/tools/bash-policy-compile.d.ts +0 -5
- package/dist/core/tools/bash-policy-compile.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-compile.js +0 -241
- package/dist/core/tools/bash-policy-compile.js.map +0 -1
- package/dist/core/tools/bash-policy-evaluate.d.ts +0 -3
- package/dist/core/tools/bash-policy-evaluate.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-evaluate.js +0 -92
- package/dist/core/tools/bash-policy-evaluate.js.map +0 -1
- package/dist/core/tools/bash-policy-format.d.ts +0 -5
- package/dist/core/tools/bash-policy-format.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-format.js +0 -49
- package/dist/core/tools/bash-policy-format.js.map +0 -1
- package/dist/core/tools/bash-policy-parser.d.ts +0 -4
- package/dist/core/tools/bash-policy-parser.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-parser.js +0 -155
- package/dist/core/tools/bash-policy-parser.js.map +0 -1
- package/dist/core/tools/bash-policy-segment.d.ts +0 -3
- package/dist/core/tools/bash-policy-segment.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-segment.js +0 -275
- package/dist/core/tools/bash-policy-segment.js.map +0 -1
- package/dist/core/tools/bash-policy-shell.d.ts +0 -11
- package/dist/core/tools/bash-policy-shell.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-shell.js +0 -267
- package/dist/core/tools/bash-policy-shell.js.map +0 -1
- package/dist/core/tools/bash-policy-types.d.ts +0 -146
- package/dist/core/tools/bash-policy-types.d.ts.map +0 -1
- package/dist/core/tools/bash-policy-types.js +0 -2
- package/dist/core/tools/bash-policy-types.js.map +0 -1
- package/dist/core/tools/bash-policy.d.ts +0 -6
- package/dist/core/tools/bash-policy.d.ts.map +0 -1
- package/dist/core/tools/bash-policy.js +0 -5
- package/dist/core/tools/bash-policy.js.map +0 -1
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
|
-
import type { WorkflowTaskResult } from "../src/shared/types.js";
|
|
2
|
+
import type { WorkflowParallelOptions, WorkflowTaskOptions, WorkflowTaskResult, WorkflowTaskStep } from "../src/shared/types.js";
|
|
3
3
|
import { reviewDecisionSchema } from "./goal-schemas.js";
|
|
4
4
|
import {
|
|
5
5
|
DEFAULT_BLOCKER_THRESHOLD,
|
|
6
6
|
DEFAULT_MAX_TURNS,
|
|
7
7
|
DEFAULT_REVIEW_QUORUM,
|
|
8
|
+
type GoalWorkflowInputs,
|
|
8
9
|
type GoalWorkflowOutputs,
|
|
9
10
|
type ReviewRecord,
|
|
10
11
|
} from "./goal-types.js";
|
|
@@ -63,22 +64,14 @@ function normalizeBranchInput(
|
|
|
63
64
|
);
|
|
64
65
|
return looksLikeSafeGitRef ? trimmed : fallback;
|
|
65
66
|
}
|
|
66
|
-
|
|
67
|
-
readonly inputs:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
readonly base_branch?: string;
|
|
71
|
-
};
|
|
72
|
-
task(name: string, options: object): Promise<WorkflowTaskResult>;
|
|
73
|
-
parallel(
|
|
74
|
-
steps: readonly object[],
|
|
75
|
-
options: { readonly task: string; readonly failFast: false },
|
|
76
|
-
): Promise<WorkflowTaskResult[]>;
|
|
67
|
+
type GoalRunnerContext = {
|
|
68
|
+
readonly inputs: GoalWorkflowInputs;
|
|
69
|
+
task(name: string, options: WorkflowTaskOptions): Promise<WorkflowTaskResult>;
|
|
70
|
+
parallel(steps: readonly WorkflowTaskStep[], options: WorkflowParallelOptions): Promise<WorkflowTaskResult[]>;
|
|
77
71
|
};
|
|
78
72
|
|
|
79
|
-
export async function runGoalWorkflow(ctx:
|
|
80
|
-
|
|
81
|
-
const inputs = goalContext.inputs;
|
|
73
|
+
export async function runGoalWorkflow(ctx: GoalRunnerContext): Promise<GoalWorkflowOutputs> {
|
|
74
|
+
const inputs = ctx.inputs;
|
|
82
75
|
const objective = inputs.objective.trim();
|
|
83
76
|
if (!objective) {
|
|
84
77
|
throw new Error("goal requires an objective input.");
|
|
@@ -169,7 +162,7 @@ export async function runGoalWorkflow(ctx: unknown): Promise<GoalWorkflowOutputs
|
|
|
169
162
|
|
|
170
163
|
let worker: WorkflowTaskResult;
|
|
171
164
|
try {
|
|
172
|
-
worker = await
|
|
165
|
+
worker = await ctx.task(`work-turn-${turn}`, {
|
|
173
166
|
prompt: workerPrompt,
|
|
174
167
|
reads: [ledgerPath, ...latestReviewArtifactPaths],
|
|
175
168
|
output: workTurnPath,
|
|
@@ -249,7 +242,7 @@ export async function runGoalWorkflow(ctx: unknown): Promise<GoalWorkflowOutputs
|
|
|
249
242
|
|
|
250
243
|
let reviewResults: WorkflowTaskResult[];
|
|
251
244
|
try {
|
|
252
|
-
reviewResults = await
|
|
245
|
+
reviewResults = await ctx.parallel(reviewerSteps, {
|
|
253
246
|
task: objective,
|
|
254
247
|
failFast: false,
|
|
255
248
|
});
|
|
@@ -7,50 +7,45 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { Type } from "typebox";
|
|
10
|
-
import {
|
|
10
|
+
import { workflow } from "../src/authoring/workflow.js";
|
|
11
11
|
import { runGoalWorkflow } from "./goal-runner.js";
|
|
12
12
|
import { DEFAULT_MAX_TURNS } from "./goal-types.js";
|
|
13
13
|
|
|
14
|
-
export default
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"
|
|
40
|
-
Type.Optional(
|
|
41
|
-
Type.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
.output("remaining_work", Type.Optional(Type.String({ description: "Remaining gaps or blockers when incomplete, or none." })))
|
|
53
|
-
.output("review_report", Type.Optional(Type.String({ description: "Compact report pointing to the latest reviewer decision artifacts used by the reducer." })))
|
|
54
|
-
.output("review_report_path", Type.Optional(Type.String({ description: "JSON artifact path for the latest reviewer decision round." })))
|
|
55
|
-
.run(runGoalWorkflow)
|
|
56
|
-
.compile();
|
|
14
|
+
export default workflow({
|
|
15
|
+
name: "goal",
|
|
16
|
+
description: "Goal Runner workflow with bounded LM turns, ledger artifacts, parallel reviewers, and reducer-gated completion.",
|
|
17
|
+
inputs: {
|
|
18
|
+
objective: Type.String({ description: "The objective for the Goal Runner workflow." }),
|
|
19
|
+
max_turns: Type.Number({
|
|
20
|
+
default: DEFAULT_MAX_TURNS,
|
|
21
|
+
description: "Maximum worker/review turns before Goal Runner stops as needs_human.",
|
|
22
|
+
}),
|
|
23
|
+
base_branch: Type.String({
|
|
24
|
+
default: "origin/main",
|
|
25
|
+
description: "Optional branch reviewers compare the current code delta against (default origin/main).",
|
|
26
|
+
}),
|
|
27
|
+
},
|
|
28
|
+
outputs: {
|
|
29
|
+
result: Type.Optional(Type.String({ description: "Final report with objective, status, receipts, turns, and remaining work." })),
|
|
30
|
+
status: Type.Optional(Type.Union(
|
|
31
|
+
[Type.Literal("complete"), Type.Literal("blocked"), Type.Literal("needs_human"), Type.Literal("active")],
|
|
32
|
+
{ description: "Final reducer status: complete, blocked, needs_human, or active if externally interrupted." },
|
|
33
|
+
)),
|
|
34
|
+
approved: Type.Optional(Type.Boolean({ description: "Whether the reducer reached complete." })),
|
|
35
|
+
goal_id: Type.Optional(Type.String({ description: "Per-run goal identifier stored in the ledger." })),
|
|
36
|
+
objective: Type.Optional(Type.String({ description: "Normalized goal objective used by the run." })),
|
|
37
|
+
ledger_path: Type.Optional(Type.String({ description: "OS-temp path to goal-ledger.json with receipts, reviewer decisions, blockers, and lifecycle events." })),
|
|
38
|
+
turns_completed: Type.Optional(Type.Number({ description: "Worker/review turns completed." })),
|
|
39
|
+
iterations_completed: Type.Optional(Type.Number({ description: "Worker/review turns completed, retained for status summaries." })),
|
|
40
|
+
receipts: Type.Optional(Type.Array(Type.Object({
|
|
41
|
+
turn: Type.Number(),
|
|
42
|
+
stage: Type.String(),
|
|
43
|
+
artifact_path: Type.String(),
|
|
44
|
+
summary: Type.String(),
|
|
45
|
+
}), { description: "Ledger receipt summaries and worker artifact paths." })),
|
|
46
|
+
remaining_work: Type.Optional(Type.String({ description: "Remaining gaps or blockers when incomplete, or none." })),
|
|
47
|
+
review_report: Type.Optional(Type.String({ description: "Compact report pointing to the latest reviewer decision artifacts used by the reducer." })),
|
|
48
|
+
review_report_path: Type.Optional(Type.String({ description: "JSON artifact path for the latest reviewer decision round." })),
|
|
49
|
+
},
|
|
50
|
+
run: async (ctx) => await runGoalWorkflow(ctx),
|
|
51
|
+
});
|
|
@@ -127,6 +127,7 @@ export type OpenClaudeDesignWorkflowOutputs = WorkflowOutputValues & {
|
|
|
127
127
|
readonly preview_file_url?: string;
|
|
128
128
|
readonly spec_path?: string;
|
|
129
129
|
readonly spec_file_url?: string;
|
|
130
|
+
readonly playwright_cli_status?: string;
|
|
130
131
|
};
|
|
131
132
|
export type OpenClaudeDesignWorkflowDefinition = WorkflowDefinition<
|
|
132
133
|
OpenClaudeDesignWorkflowInputs,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { WorkflowTaskResult, WorkflowTaskStep } from "../src/shared/types.js";
|
|
1
|
+
import type { WorkflowParallelOptions, WorkflowTaskOptions, WorkflowTaskResult, WorkflowTaskStep } from "../src/shared/types.js";
|
|
2
2
|
import {
|
|
3
3
|
ANTI_SLOP_RULES,
|
|
4
4
|
DEFAULT_MAX_REFINEMENTS,
|
|
@@ -18,24 +18,22 @@ import {
|
|
|
18
18
|
} from "./open-claude-design-utils.js";
|
|
19
19
|
import { exportOpenClaudeDesign, refineOpenClaudeDesign } from "./open-claude-design-phases.js";
|
|
20
20
|
|
|
21
|
+
type OpenClaudeDesignOutputs = {
|
|
22
|
+
readonly output_type?: string; readonly design_system?: string; readonly artifact?: string; readonly handoff?: string;
|
|
23
|
+
readonly approved_for_export?: boolean; readonly refinements_completed?: number; readonly import_context?: string; readonly run_id?: string;
|
|
24
|
+
readonly artifact_dir?: string; readonly preview_path?: string; readonly preview_file_url?: string; readonly spec_path?: string; readonly spec_file_url?: string;
|
|
25
|
+
readonly playwright_cli_status?: string;
|
|
26
|
+
};
|
|
27
|
+
|
|
21
28
|
type OpenClaudeDesignContext = {
|
|
22
|
-
readonly cwd
|
|
23
|
-
readonly inputs: {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
readonly output_type?: string;
|
|
27
|
-
readonly design_system?: string;
|
|
28
|
-
readonly max_refinements?: number;
|
|
29
|
-
};
|
|
30
|
-
task(name: string, options: object): Promise<WorkflowTaskResult>;
|
|
31
|
-
parallel(
|
|
32
|
-
steps: readonly WorkflowTaskStep[],
|
|
33
|
-
options: { readonly task: string },
|
|
34
|
-
): Promise<WorkflowTaskResult[]>;
|
|
29
|
+
readonly cwd?: string;
|
|
30
|
+
readonly inputs: { readonly prompt: string; readonly reference?: string; readonly output_type?: string; readonly design_system?: string; readonly max_refinements?: number };
|
|
31
|
+
task(name: string, options: WorkflowTaskOptions): Promise<WorkflowTaskResult>;
|
|
32
|
+
parallel(steps: readonly WorkflowTaskStep[], options: WorkflowParallelOptions): Promise<WorkflowTaskResult[]>;
|
|
35
33
|
};
|
|
36
34
|
|
|
37
|
-
export async function runOpenClaudeDesignWorkflow(ctx:
|
|
38
|
-
const designContext = ctx
|
|
35
|
+
export async function runOpenClaudeDesignWorkflow(ctx: OpenClaudeDesignContext): Promise<OpenClaudeDesignOutputs> {
|
|
36
|
+
const designContext = ctx;
|
|
39
37
|
|
|
40
38
|
// Initial deterministic setup step (no LLM): ensure the playwright-cli skill's
|
|
41
39
|
// `playwright-cli` command is installed before any design stage runs. Best-effort —
|
|
@@ -55,8 +53,9 @@ export async function runOpenClaudeDesignWorkflow(ctx: unknown): Promise<object>
|
|
|
55
53
|
DEFAULT_MAX_REFINEMENTS,
|
|
56
54
|
);
|
|
57
55
|
|
|
56
|
+
const workflowCwd = designContext.cwd ?? process.cwd();
|
|
58
57
|
const { runId, artifactDir, previewPath, specPath } = prepareArtifactDir(
|
|
59
|
-
|
|
58
|
+
workflowCwd,
|
|
60
59
|
);
|
|
61
60
|
const previewFileUrl = `file://${previewPath}`;
|
|
62
61
|
const specFileUrl = `file://${specPath}`;
|
|
@@ -32,6 +32,7 @@ export type OpenClaudeDesignWorkflowOutputs = WorkflowOutputValues & {
|
|
|
32
32
|
readonly preview_file_url?: string;
|
|
33
33
|
readonly spec_path?: string;
|
|
34
34
|
readonly spec_file_url?: string;
|
|
35
|
+
readonly playwright_cli_status?: string;
|
|
35
36
|
};
|
|
36
37
|
|
|
37
38
|
export type OpenClaudeDesignWorkflowDefinition = WorkflowDefinition<
|
|
@@ -18,21 +18,10 @@
|
|
|
18
18
|
* pre-export → impeccable `audit`
|
|
19
19
|
* forced-fix → impeccable `harden`
|
|
20
20
|
* exporter → impeccable `document` (rich HTML spec)
|
|
21
|
-
*
|
|
22
|
-
* The refinement loop has been re-shaped so that the artifact under review is
|
|
23
|
-
* a real HTML page on disk (`preview.html`). The workflow attempts to open it
|
|
24
|
-
* through the `playwright-cli` skill so the user can interactively review;
|
|
25
|
-
* when browser automation is unavailable, the file path is surfaced so the user
|
|
26
|
-
* can open it manually. Before any stage runs, an initial deterministic setup
|
|
27
|
-
* step ensures the playwright-cli skill's `playwright-cli` command is available
|
|
28
|
-
* (`npx --no-install playwright-cli --version`, then
|
|
29
|
-
* `npm install -g @playwright/cli@latest` when missing); it is best-effort and
|
|
30
|
-
* never blocks the run. The final exporter produces a rich `spec.html` that
|
|
31
|
-
* embeds the agreed-upon design alongside the implementation handoff.
|
|
32
21
|
*/
|
|
33
22
|
|
|
34
|
-
import { defineWorkflow } from "../src/workflows/define-workflow.js";
|
|
35
23
|
import { Type } from "typebox";
|
|
24
|
+
import { workflow } from "../src/authoring/workflow.js";
|
|
36
25
|
import { runOpenClaudeDesignWorkflow } from "./open-claude-design-runner.js";
|
|
37
26
|
import {
|
|
38
27
|
DEFAULT_MAX_REFINEMENTS,
|
|
@@ -40,41 +29,44 @@ import {
|
|
|
40
29
|
OUTPUT_TYPES,
|
|
41
30
|
} from "./open-claude-design-utils.js";
|
|
42
31
|
|
|
43
|
-
export default
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
32
|
+
export default workflow({
|
|
33
|
+
name: "open-claude-design",
|
|
34
|
+
description: "AI-powered design workflow: design-system onboarding → reference import → HTML generation → impeccable-driven refinement → quality gate → rich HTML handoff. Each stage delegates to a specific impeccable sub-skill; the user can iteratively review the generated HTML through the playwright-cli skill.",
|
|
35
|
+
inputs: {
|
|
36
|
+
prompt: Type.String({
|
|
37
|
+
description: "What to design (for example, a dashboard, page, component, or prototype).",
|
|
38
|
+
}),
|
|
39
|
+
reference: Type.Optional(Type.String({
|
|
40
|
+
description: "URL, file path, screenshot path, or design doc to import as a reference.",
|
|
41
|
+
})),
|
|
42
|
+
output_type: Type.Union(
|
|
43
|
+
[...OUTPUT_TYPES].map((value) => Type.Literal(value)),
|
|
44
|
+
{ default: DEFAULT_OUTPUT_TYPE, description: "Kind of design artifact to produce." },
|
|
45
|
+
),
|
|
46
|
+
design_system: Type.Optional(Type.String({
|
|
47
|
+
description:
|
|
48
|
+
"Path(s) or description of an existing design system (DESIGN.md, PRODUCT.md, etc.); skips onboarding when provided.",
|
|
49
|
+
})),
|
|
50
|
+
max_refinements: Type.Number({
|
|
51
|
+
default: DEFAULT_MAX_REFINEMENTS,
|
|
52
|
+
description: `Maximum critique/apply refinement iterations (default ${DEFAULT_MAX_REFINEMENTS}).`,
|
|
53
|
+
}),
|
|
54
|
+
},
|
|
55
|
+
outputs: {
|
|
56
|
+
output_type: Type.Optional(Type.String({ description: "Kind of design artifact produced." })),
|
|
57
|
+
design_system: Type.Optional(Type.String({ description: "Design system source used for generation: supplied input or project-derived design system." })),
|
|
58
|
+
artifact: Type.Optional(Type.String({ description: "Latest final design summary from the approved preview artifact." })),
|
|
59
|
+
handoff: Type.Optional(Type.String({ description: "Final rich HTML spec and implementation handoff summary." })),
|
|
60
|
+
approved_for_export: Type.Optional(Type.Boolean({ description: "Whether refinement completed before the final export gate." })),
|
|
61
|
+
refinements_completed: Type.Optional(Type.Number({ description: "Number of refinement iterations completed." })),
|
|
62
|
+
import_context: Type.Optional(Type.String({ description: "Reference-import context used during generation." })),
|
|
63
|
+
run_id: Type.Optional(Type.String({ description: "Per-run design workflow artifact identifier." })),
|
|
64
|
+
artifact_dir: Type.Optional(Type.String({ description: "Directory containing preview and spec artifacts." })),
|
|
65
|
+
preview_path: Type.Optional(Type.String({ description: "Absolute path to the generated preview.html file." })),
|
|
66
|
+
preview_file_url: Type.Optional(Type.String({ description: "file:// URL for the generated preview.html file." })),
|
|
67
|
+
spec_path: Type.Optional(Type.String({ description: "Absolute path to the generated spec.html file." })),
|
|
68
|
+
spec_file_url: Type.Optional(Type.String({ description: "file:// URL for the generated spec.html file." })),
|
|
69
|
+
playwright_cli_status: Type.Optional(Type.String({ description: "Outcome of the initial deterministic step that ensures the playwright-cli skill's `playwright-cli` command is installed." })),
|
|
70
|
+
},
|
|
71
|
+
run: async (ctx) => await runOpenClaudeDesignWorkflow(ctx),
|
|
72
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Builtin workflow: ralph */
|
|
2
2
|
|
|
3
|
-
import { defineWorkflow } from "../src/workflows/define-workflow.js";
|
|
4
3
|
import { Type } from "typebox";
|
|
4
|
+
import { workflow } from "../src/authoring/workflow.js";
|
|
5
5
|
import {
|
|
6
6
|
DEFAULT_MAX_LOOPS,
|
|
7
7
|
normalizeBranchInput,
|
|
@@ -9,46 +9,49 @@ import {
|
|
|
9
9
|
} from "./ralph-core.js";
|
|
10
10
|
import { runRalphWorkflow } from "./ralph-runner.js";
|
|
11
11
|
|
|
12
|
-
export default
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
12
|
+
export default workflow({
|
|
13
|
+
name: "ralph",
|
|
14
|
+
description: "Prompt-engineer → research → orchestrate → multi-model parallel review loop with bounded iteration.",
|
|
15
|
+
inputs: {
|
|
16
|
+
prompt: Type.String({ description: "The task or goal to research, execute, and refine." }),
|
|
17
|
+
max_loops: Type.Number({
|
|
18
|
+
default: DEFAULT_MAX_LOOPS,
|
|
19
|
+
description: `Maximum research/orchestrate/review iterations (default ${DEFAULT_MAX_LOOPS}).`,
|
|
20
|
+
}),
|
|
21
|
+
base_branch: Type.String({
|
|
22
|
+
default: "origin/main",
|
|
23
|
+
description: "Branch reviewers compare the current code delta against (default origin/main).",
|
|
24
|
+
}),
|
|
25
|
+
git_worktree_dir: Type.String({
|
|
26
|
+
default: "",
|
|
27
|
+
description:
|
|
28
|
+
"Optional Git worktree path. Must start inside a Git repo; absolute paths are used as-is, relative paths resolve from the repo root, existing Git worktrees from the invoking repository are reused/shared as-is, and missing paths are created from base_branch.",
|
|
29
|
+
}),
|
|
30
|
+
create_pr: Type.Boolean({
|
|
31
|
+
default: false,
|
|
32
|
+
description:
|
|
33
|
+
"Whether to run the final pull-request creation stage. Defaults to false; prompt text alone does not opt in. Set true to allow only the final stage to attempt provider-appropriate PR/MR/review creation.",
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
36
|
+
outputs: {
|
|
37
|
+
result: Type.Optional(Type.String({ description: "Final implementation report from the orchestrator stage." })),
|
|
38
|
+
plan: Type.Optional(Type.String({ description: "Latest transformed research question." })),
|
|
39
|
+
plan_path: Type.Optional(Type.String({ description: "Backward-compatible alias for research_path." })),
|
|
40
|
+
research: Type.Optional(Type.String({ description: "Latest research report text or artifact reference." })),
|
|
41
|
+
research_path: Type.Optional(Type.String({ description: "Path to the latest generated research artifact under research/." })),
|
|
42
|
+
implementation_notes_path: Type.Optional(Type.String({ description: "OS-temp notes file containing decisions, deviations, blockers, and validation notes." })),
|
|
43
|
+
qa_video_path: Type.Optional(Type.String({ description: "Absolute path to the reviewable QA end-to-end proof video recorded with playwright-cli for UI-applicable changes, when one was produced." })),
|
|
44
|
+
pr_report: Type.Optional(Type.String({ description: "Pull-request report emitted only when create_pr=true and the final pull-request stage runs." })),
|
|
45
|
+
approved: Type.Optional(Type.Boolean({ description: "Whether the reviewer loop approved before completion or optional final handoff." })),
|
|
46
|
+
iterations_completed: Type.Optional(Type.Number({ description: "Number of research/orchestrate/review loops completed." })),
|
|
47
|
+
review_report: Type.Optional(Type.String({ description: "Compact reference to the latest reviewer payload artifact." })),
|
|
48
|
+
review_report_path: Type.Optional(Type.String({ description: "JSON artifact path for the latest review round." })),
|
|
49
|
+
},
|
|
50
|
+
worktreeFromInputs: {
|
|
36
51
|
gitWorktreeDir: "git_worktree_dir",
|
|
37
52
|
baseBranch: "base_branch",
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.output("plan", Type.Optional(Type.String({ description: "Latest transformed research question." })))
|
|
41
|
-
.output("plan_path", Type.Optional(Type.String({ description: "Backward-compatible alias for research_path." })))
|
|
42
|
-
.output("research", Type.Optional(Type.String({ description: "Latest research report text or artifact reference." })))
|
|
43
|
-
.output("research_path", Type.Optional(Type.String({ description: "Path to the latest generated research artifact under research/." })))
|
|
44
|
-
.output("implementation_notes_path", Type.Optional(Type.String({ description: "OS-temp notes file containing decisions, deviations, blockers, and validation notes." })))
|
|
45
|
-
.output("qa_video_path", Type.Optional(Type.String({ description: "Absolute path to the reviewable QA end-to-end proof video recorded with playwright-cli for UI-applicable changes, when one was produced." })))
|
|
46
|
-
.output("pr_report", Type.Optional(Type.String({ description: "Pull-request report emitted only when create_pr=true and the final pull-request stage runs." })))
|
|
47
|
-
.output("approved", Type.Optional(Type.Boolean({ description: "Whether the reviewer loop approved before completion or optional final handoff." })))
|
|
48
|
-
.output("iterations_completed", Type.Optional(Type.Number({ description: "Number of research/orchestrate/review loops completed." })))
|
|
49
|
-
.output("review_report", Type.Optional(Type.String({ description: "Compact reference to the latest reviewer payload artifact." })))
|
|
50
|
-
.output("review_report_path", Type.Optional(Type.String({ description: "JSON artifact path for the latest review round." })))
|
|
51
|
-
.run(async (ctx) => {
|
|
53
|
+
},
|
|
54
|
+
run: async (ctx) => {
|
|
52
55
|
const workflowCtx = ctx;
|
|
53
56
|
const workflowStartCwd = workflowCtx.cwd ?? process.cwd();
|
|
54
57
|
const inputs = workflowCtx.inputs;
|
|
@@ -66,5 +69,5 @@ export default defineWorkflow("ralph")
|
|
|
66
69
|
workflowStartCwd,
|
|
67
70
|
createPr,
|
|
68
71
|
});
|
|
69
|
-
}
|
|
70
|
-
|
|
72
|
+
},
|
|
73
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/workflows",
|
|
3
|
-
"version": "0.9.0-alpha.
|
|
3
|
+
"version": "0.9.0-alpha.2",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension for multi-stage workflow authoring and execution.",
|
|
6
6
|
"contributors": [
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
},
|
|
84
84
|
"peerDependencies": {
|
|
85
85
|
"@bastani/atomic": "*",
|
|
86
|
-
"@earendil-works/pi-tui": "^0.79.
|
|
86
|
+
"@earendil-works/pi-tui": "^0.79.9"
|
|
87
87
|
},
|
|
88
88
|
"peerDependenciesMeta": {
|
|
89
89
|
"@bastani/atomic": {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type * as TypeBox from "typebox";
|
|
2
|
+
import type { TAny, TArray, TArrayOptions, TBoolean, TEnum, TEnumValue, TInteger, TIntersect, TIntersectOptions, TLiteral, TLiteralValue, TNull, TNumber, TNumberOptions, TObject, TObjectOptions, TOmit, TPartial, TPick, TProperties, TRequired, TSchema, TSchemaOptions, TString, TStringOptions, TTuple, TTupleOptions, TTypeScriptEnumLike, TTypeScriptEnumToEnumValues, TUnion, TUnknown } from "typebox";
|
|
3
|
+
import type { WorkflowSerializableValue } from "../shared/authoring-contract.js";
|
|
4
|
+
type TypeBoxDefaultOptions<TOptions> = TOptions & {
|
|
5
|
+
readonly default: WorkflowSerializableValue;
|
|
6
|
+
};
|
|
7
|
+
type TypeBoxDefaulted<TOptions extends {
|
|
8
|
+
readonly default: WorkflowSerializableValue;
|
|
9
|
+
}> = {
|
|
10
|
+
readonly default: TOptions["default"];
|
|
11
|
+
};
|
|
12
|
+
type TypeBoxKeysToLiterals<TKeys extends readonly PropertyKey[], TResult extends TLiteral[] = []> = TKeys extends readonly [infer TLeft extends PropertyKey, ...infer TRight extends PropertyKey[]] ? TLeft extends TLiteralValue ? TypeBoxKeysToLiterals<TRight, [...TResult, TLiteral<TLeft>]> : TypeBoxKeysToLiterals<TRight, TResult> : TResult;
|
|
13
|
+
type TypeBoxKeysToIndexer<TKeys extends readonly PropertyKey[]> = TUnion<TypeBoxKeysToLiterals<TKeys>>;
|
|
14
|
+
type TypeBoxRecord<TKey extends TSchema, TValue extends TSchema> = ReturnType<typeof TypeBox.Type.Record<TKey, TValue>>;
|
|
15
|
+
declare module "typebox" {
|
|
16
|
+
namespace Type {
|
|
17
|
+
function Any<const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(options: TOptions): TAny & TypeBoxDefaulted<TOptions>;
|
|
18
|
+
function Unknown<const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(options: TOptions): TUnknown & TypeBoxDefaulted<TOptions>;
|
|
19
|
+
function String<const TOptions extends TypeBoxDefaultOptions<TStringOptions>>(options: TOptions): TString & TypeBoxDefaulted<TOptions>;
|
|
20
|
+
function Number<const TOptions extends TypeBoxDefaultOptions<TNumberOptions>>(options: TOptions): TNumber & TypeBoxDefaulted<TOptions>;
|
|
21
|
+
function Integer<const TOptions extends TypeBoxDefaultOptions<TNumberOptions>>(options: TOptions): TInteger & TypeBoxDefaulted<TOptions>;
|
|
22
|
+
function Boolean<const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(options: TOptions): TBoolean & TypeBoxDefaulted<TOptions>;
|
|
23
|
+
function Literal<const TValue extends TLiteralValue, const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(value: TValue, options: TOptions): TLiteral<TValue> & TypeBoxDefaulted<TOptions>;
|
|
24
|
+
function Enum<const TValues extends TEnumValue[], const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(values: readonly [...TValues], options: TOptions): TEnum<TValues> & TypeBoxDefaulted<TOptions>;
|
|
25
|
+
function Enum<const TEnumLike extends TTypeScriptEnumLike, const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(value: TEnumLike, options: TOptions): TEnum<TTypeScriptEnumToEnumValues<TEnumLike>> & TypeBoxDefaulted<TOptions>;
|
|
26
|
+
function Array<const TItem extends TSchema, const TOptions extends TypeBoxDefaultOptions<TArrayOptions>>(items: TItem, options: TOptions): TArray<TItem> & TypeBoxDefaulted<TOptions>;
|
|
27
|
+
function Object<const TSchemaProperties extends TProperties, const TOptions extends TypeBoxDefaultOptions<TObjectOptions>>(properties: TSchemaProperties, options: TOptions): TObject<TSchemaProperties> & TypeBoxDefaulted<TOptions>;
|
|
28
|
+
function Partial<const TType extends TSchema, const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(type: TType, options: TOptions): TPartial<TType> & TypeBoxDefaulted<TOptions>;
|
|
29
|
+
function Pick<const TType extends TSchema, const TIndexer extends PropertyKey[], const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(type: TType, indexer: readonly [...TIndexer], options: TOptions): TPick<TType, TypeBoxKeysToIndexer<TIndexer>> & TypeBoxDefaulted<TOptions>;
|
|
30
|
+
function Pick<const TType extends TSchema, const TIndexer extends TSchema, const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(type: TType, indexer: TIndexer, options: TOptions): TPick<TType, TIndexer> & TypeBoxDefaulted<TOptions>;
|
|
31
|
+
function Omit<const TType extends TSchema, const TIndexer extends PropertyKey[], const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(type: TType, indexer: readonly [...TIndexer], options: TOptions): TOmit<TType, TypeBoxKeysToIndexer<TIndexer>> & TypeBoxDefaulted<TOptions>;
|
|
32
|
+
function Omit<const TType extends TSchema, const TIndexer extends TSchema, const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(type: TType, indexer: TIndexer, options: TOptions): TOmit<TType, TIndexer> & TypeBoxDefaulted<TOptions>;
|
|
33
|
+
function Required<const TType extends TSchema, const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(type: TType, options: TOptions): TRequired<TType> & TypeBoxDefaulted<TOptions>;
|
|
34
|
+
function Union<const TTypes extends TSchema[], const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(anyOf: [...TTypes], options: TOptions): TUnion<TTypes> & TypeBoxDefaulted<TOptions>;
|
|
35
|
+
function Intersect<const TTypes extends TSchema[], const TOptions extends TypeBoxDefaultOptions<TIntersectOptions>>(types: [...TTypes], options: TOptions): TIntersect<TTypes> & TypeBoxDefaulted<TOptions>;
|
|
36
|
+
function Record<const TKey extends TSchema, const TValue extends TSchema, const TOptions extends TypeBoxDefaultOptions<TObjectOptions>>(key: TKey, value: TValue, options: TOptions): TypeBoxRecord<TKey, TValue> & TypeBoxDefaulted<TOptions>;
|
|
37
|
+
function Tuple<const TTypes extends TSchema[], const TOptions extends TypeBoxDefaultOptions<TTupleOptions>>(types: [...TTypes], options: TOptions): TTuple<TTypes> & TypeBoxDefaulted<TOptions>;
|
|
38
|
+
function Null<const TOptions extends TypeBoxDefaultOptions<TSchemaOptions>>(options: TOptions): TNull & TypeBoxDefaulted<TOptions>;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export {};
|