@clemrig/factory 0.1.0 → 0.2.1
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/README.md +6 -17
- package/dist/app/doctor.d.ts +2 -4
- package/dist/app/doctor.js +6 -4
- package/dist/app/doctor.js.map +1 -1
- package/dist/app/factory.d.ts +2 -0
- package/dist/app/factory.js +13 -2
- package/dist/app/factory.js.map +1 -1
- package/dist/app/init.d.ts +1 -5
- package/dist/app/init.js +1 -13
- package/dist/app/init.js.map +1 -1
- package/dist/app/options.d.ts +17 -0
- package/dist/app/options.js +78 -0
- package/dist/app/options.js.map +1 -0
- package/dist/app/run.d.ts +4 -20
- package/dist/app/run.js +22 -93
- package/dist/app/run.js.map +1 -1
- package/dist/app/runs.d.ts +4 -32
- package/dist/app/runs.js +9 -61
- package/dist/app/runs.js.map +1 -1
- package/dist/cli/application.d.ts +1 -1
- package/dist/cli/application.js +1 -1
- package/dist/cli/args.js +2 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/doctor.d.ts +1 -1
- package/dist/cli/doctor.js +1 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/help.d.ts +1 -1
- package/dist/cli/help.js +1 -1
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +1 -1
- package/dist/cli/launcher.d.ts +1 -1
- package/dist/cli/launcher.js +4 -4
- package/dist/cli/launcher.js.map +1 -1
- package/dist/cli/reporter.d.ts +1 -1
- package/dist/cli/reporter.js +1 -2
- package/dist/cli/reporter.js.map +1 -1
- package/dist/cli/run.d.ts +1 -5
- package/dist/cli/run.js +24 -11
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/ui.d.ts +1 -1
- package/dist/cli/ui.js +10 -3
- package/dist/cli/ui.js.map +1 -1
- package/dist/index.d.ts +3 -7
- package/dist/index.js +3 -5
- package/dist/index.js.map +1 -1
- package/dist/system/factory.d.ts +1 -1
- package/dist/system/factory.js +1 -1
- package/dist/system/factory.js.map +1 -1
- package/dist/system/npm.d.ts +5 -0
- package/dist/system/npm.js +14 -0
- package/dist/system/npm.js.map +1 -0
- package/dist/system/templates.d.ts +1 -1
- package/dist/system/templates.js +1 -1
- package/package.json +7 -17
- package/dist/engine/metrics.d.ts +0 -45
- package/dist/engine/metrics.js +0 -60
- package/dist/engine/metrics.js.map +0 -1
- package/dist/engine/primitives.d.ts +0 -34
- package/dist/engine/primitives.js +0 -81
- package/dist/engine/primitives.js.map +0 -1
- package/dist/engine/profiles.d.ts +0 -53
- package/dist/engine/profiles.js +0 -117
- package/dist/engine/profiles.js.map +0 -1
- package/dist/engine/runner.d.ts +0 -13
- package/dist/engine/runner.js +0 -157
- package/dist/engine/runner.js.map +0 -1
- package/dist/engine/types.d.ts +0 -194
- package/dist/engine/types.js +0 -2
- package/dist/engine/types.js.map +0 -1
- package/dist/engine/workflow.d.ts +0 -18
- package/dist/engine/workflow.js +0 -196
- package/dist/engine/workflow.js.map +0 -1
- package/dist/system/process.d.ts +0 -21
- package/dist/system/process.js +0 -238
- package/dist/system/process.js.map +0 -1
- package/dist/system/runtimes/adapter.d.ts +0 -90
- package/dist/system/runtimes/adapter.js +0 -20
- package/dist/system/runtimes/adapter.js.map +0 -1
- package/dist/system/runtimes/agent-runtime.d.ts +0 -45
- package/dist/system/runtimes/agent-runtime.js +0 -184
- package/dist/system/runtimes/agent-runtime.js.map +0 -1
- package/dist/system/runtimes/claude-code.d.ts +0 -10
- package/dist/system/runtimes/claude-code.js +0 -383
- package/dist/system/runtimes/claude-code.js.map +0 -1
- package/dist/system/runtimes/inspect.d.ts +0 -25
- package/dist/system/runtimes/inspect.js +0 -129
- package/dist/system/runtimes/inspect.js.map +0 -1
- package/dist/system/runtimes/pi.d.ts +0 -7
- package/dist/system/runtimes/pi.js +0 -235
- package/dist/system/runtimes/pi.js.map +0 -1
- package/dist/system/runtimes/protocol.d.ts +0 -9
- package/dist/system/runtimes/protocol.js +0 -38
- package/dist/system/runtimes/protocol.js.map +0 -1
- package/dist/system/runtimes/registry.d.ts +0 -5
- package/dist/system/runtimes/registry.js +0 -5
- package/dist/system/runtimes/registry.js.map +0 -1
- package/dist/system/store.d.ts +0 -20
- package/dist/system/store.js +0 -126
- package/dist/system/store.js.map +0 -1
- package/dist/ui/server.d.ts +0 -8
- package/dist/ui/server.js +0 -111
- package/dist/ui/server.js.map +0 -1
- package/dist/ui/static/dashboard.js +0 -266
- package/dist/ui/static/follow.js +0 -67
- package/dist/ui/static/index.html +0 -20
- package/dist/ui/static/style.css +0 -166
- package/dist/ui/static/timeline.js +0 -180
package/dist/cli/args.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { OPTION_NAME } from "../app/options.js";
|
|
2
2
|
/** `--name value`, or `--name` alone for true; --json and --help never take a value. */
|
|
3
3
|
export function parseArgs(argv) {
|
|
4
4
|
const positional = [];
|
|
@@ -17,7 +17,7 @@ export function parseArgs(argv) {
|
|
|
17
17
|
else if (name === "help")
|
|
18
18
|
help = true;
|
|
19
19
|
else {
|
|
20
|
-
if (!
|
|
20
|
+
if (!OPTION_NAME.test(name))
|
|
21
21
|
throw new Error(`Invalid option ${arg}`);
|
|
22
22
|
if (Object.hasOwn(options, name))
|
|
23
23
|
throw new Error(`Duplicate option ${arg}`);
|
package/dist/cli/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAWhD,wFAAwF;AACxF,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,KAAK,MAAM;YAAE,IAAI,GAAG,IAAI,CAAC;aAC5B,IAAI,IAAI,KAAK,MAAM;YAAE,IAAI,GAAG,IAAI,CAAC;aACjC,CAAC;YACJ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;YACtE,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/D,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI;gBAAE,CAAC,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,MAAM;QACrC,UAAU;QACV,OAAO;QACP,IAAI;QACJ,IAAI;KACL,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,SAAS,CAAC,IAAe;IACvC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5E,CAAC"}
|
package/dist/cli/doctor.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Workflow } from "
|
|
1
|
+
import type { Workflow } from "@clemrig/flow";
|
|
2
2
|
/** `factory run <name>` followed by the workflow's input options. */
|
|
3
3
|
export declare function usage(workflow: Workflow): string;
|
|
4
4
|
/** Node, the factory and its workflows' prompts, then each runtime in use; no provider request. */
|
package/dist/cli/doctor.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { diagnose } from "../app/doctor.js";
|
|
2
|
-
import { isFlag } from "../
|
|
2
|
+
import { isFlag } from "../app/options.js";
|
|
3
3
|
/** `factory run <name>` followed by the workflow's input options. */
|
|
4
4
|
export function usage(workflow) {
|
|
5
5
|
const options = Object.entries(workflow.input?.shape ?? {}).map(([name, schema]) => {
|
package/dist/cli/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/help.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const help = "factory \u2014 workflows written in this repository's .factory/\n\n factory init create .factory/ here and install it\n factory doctor [--json] check Node, workflows, prompts and runtimes\n factory run WORKFLOW [--INPUT VALUE\u2026] [--max-cost-usd USD] [--json]\n factory status [RUN_ID] [--json] list this repository's runs, or show one\n factory ui [--port N] serve a live read-only dashboard on 127.0.0.1\n\nCommands other than init and help use the nearest .factory/ in the current directory\nor a parent, with the
|
|
1
|
+
export declare const help = "factory \u2014 workflows written in this repository's .factory/\n\n factory init create .factory/ here and install it\n factory doctor [--json] check Node, workflows, prompts and runtimes\n factory run WORKFLOW [--INPUT VALUE\u2026] [--max-cost-usd USD] [--json]\n factory status [RUN_ID] [--json] list this repository's runs, or show one\n factory ui [--port N] serve a live read-only dashboard on 127.0.0.1\n\nCommands other than init and help use the nearest .factory/ in the current directory\nor a parent, with the factory version installed there. factory doctor lists each\nworkflow's input options. .factory/.env is loaded; shell variables take precedence.\n--max-cost-usd fails the run once its agents' announced cost exceeds it, instead\nof the workflow's maxCostUsd. --json writes events, then the result, as JSON lines.\nCtrl-C stops a run, which ends failed; press it again to quit at once.\nExit codes: 0 completed, 1 error or failed run, 130 second Ctrl-C.\n";
|
package/dist/cli/help.js
CHANGED
|
@@ -7,7 +7,7 @@ export const help = `factory — workflows written in this repository's .factory
|
|
|
7
7
|
factory ui [--port N] serve a live read-only dashboard on 127.0.0.1
|
|
8
8
|
|
|
9
9
|
Commands other than init and help use the nearest .factory/ in the current directory
|
|
10
|
-
or a parent, with the
|
|
10
|
+
or a parent, with the factory version installed there. factory doctor lists each
|
|
11
11
|
workflow's input options. .factory/.env is loaded; shell variables take precedence.
|
|
12
12
|
--max-cost-usd fails the run once its agents' announced cost exceeds it, instead
|
|
13
13
|
of the workflow's maxCostUsd. --json writes events, then the result, as JSON lines.
|
package/dist/cli/init.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `factory init`: creates `.factory/` in `cwd` from the templates, pinned to this
|
|
3
|
-
*
|
|
3
|
+
* factory version, then installs it. An existing `.factory/` is refused untouched;
|
|
4
4
|
* a failed installation keeps the files.
|
|
5
5
|
*/
|
|
6
6
|
export declare function init(cwd: string): Promise<number>;
|
package/dist/cli/init.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createFactory, installFactory } from "../app/init.js";
|
|
2
2
|
/**
|
|
3
3
|
* `factory init`: creates `.factory/` in `cwd` from the templates, pinned to this
|
|
4
|
-
*
|
|
4
|
+
* factory version, then installs it. An existing `.factory/` is refused untouched;
|
|
5
5
|
* a failed installation keeps the files.
|
|
6
6
|
*/
|
|
7
7
|
export async function init(cwd) {
|
package/dist/cli/launcher.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The global `factory`: help and init run here; any other command runs with the
|
|
3
|
-
*
|
|
3
|
+
* factory version installed in the repository's `.factory/`.
|
|
4
4
|
*/
|
|
5
5
|
export declare function launch(argv: string[], cwd: string): Promise<number>;
|
package/dist/cli/launcher.js
CHANGED
|
@@ -15,19 +15,19 @@ function findFactory(cwd) {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* The `main` entry of the
|
|
19
|
-
* searches parent `node_modules`: a
|
|
18
|
+
* The `main` entry of the factory installed in `.factory/`. Node's resolution also
|
|
19
|
+
* searches parent `node_modules`: a factory found there is never used.
|
|
20
20
|
*/
|
|
21
21
|
function installedCore(factoryDir, cwd) {
|
|
22
22
|
if (!existsSync(join(factoryDir, "node_modules", "@clemrig", "factory", "package.json"))) {
|
|
23
23
|
const lock = existsSync(join(factoryDir, "package-lock.json"));
|
|
24
|
-
throw new Error(`The
|
|
24
|
+
throw new Error(`The factory is not installed in ${factoryDir}; run npm ${lock ? "ci" : "install"} --prefix ${relative(cwd, factoryDir)}`);
|
|
25
25
|
}
|
|
26
26
|
return createRequire(join(factoryDir, "package.json")).resolve("@clemrig/factory/cli");
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* The global `factory`: help and init run here; any other command runs with the
|
|
30
|
-
*
|
|
30
|
+
* factory version installed in the repository's `.factory/`.
|
|
31
31
|
*/
|
|
32
32
|
export async function launch(argv, cwd) {
|
|
33
33
|
try {
|
package/dist/cli/launcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/cli/launcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,4EAA4E;AAC5E,SAAS,WAAW,CAAC,GAAW;IAC9B,KAAK,IAAI,GAAG,GAAG,GAAG,GAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACzC,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YAAE,OAAO,UAAU,CAAC;QACpE,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG;YAAE,OAAO,SAAS,CAAC;IAC7C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,UAAkB,EAAE,GAAW;IACpD,IACE,CAAC,UAAU,CACT,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,CAAC,CACxE,EACD,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC/D,MAAM,IAAI,KAAK,CACb,
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/cli/launcher.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/reporter.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type RunEvent, type RunState } from "@clemrig/flow";
|
|
2
2
|
/** The run's duration, then its agents' tokens and estimated cost. */
|
|
3
3
|
export declare function metricsSummary(state: RunState, now?: number): string[];
|
|
4
4
|
/** Stage events and journal on stderr; results on stdout; JSON lines on stdout with --json. */
|
package/dist/cli/reporter.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { elapsedMs } from "
|
|
2
|
-
import { runtimeLabels } from "../engine/profiles.js";
|
|
1
|
+
import { elapsedMs, runtimeLabels, } from "@clemrig/flow";
|
|
3
2
|
function duration(ms) {
|
|
4
3
|
const seconds = Math.max(0, Math.floor(ms / 1000));
|
|
5
4
|
const hours = Math.floor(seconds / 3600);
|
package/dist/cli/reporter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/cli/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/cli/reporter.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/run.d.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import type { Factory } from "../app/factory.js";
|
|
2
2
|
import type { Arguments } from "./args.js";
|
|
3
3
|
import type { TerminalReporter } from "./reporter.js";
|
|
4
|
-
/**
|
|
5
|
-
* `factory run`: the run executes in the foreground. The first SIGINT or SIGTERM
|
|
6
|
-
* stops it before its next stage (child processes are stopped at once); a second
|
|
7
|
-
* one kills the child process groups and exits with 130.
|
|
8
|
-
*/
|
|
4
|
+
/** `factory run`: the run executes in the foreground, with the repository as the current directory. */
|
|
9
5
|
export declare function run(factory: Factory, args: Arguments, reporter: TerminalReporter): Promise<number>;
|
package/dist/cli/run.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
+
import { killChildProcesses } from "@clemrig/flow";
|
|
1
2
|
import { startRun } from "../app/run.js";
|
|
2
3
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Starts the run and waits for its end. The first SIGINT or SIGTERM stops it
|
|
5
|
+
* before its next stage (child processes are stopped at once); a second one
|
|
6
|
+
* kills the child process groups and exits with 130.
|
|
6
7
|
*/
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
if (!name)
|
|
10
|
-
throw new Error(`Usage: factory run WORKFLOW [--INPUT VALUE…]; workflows: ${[...factory.workflows.keys()].join(", ") || "none"}`);
|
|
11
|
-
const started = await startRun(factory, name, args.options, {
|
|
8
|
+
async function execute(factory, name, options, reporter) {
|
|
9
|
+
const started = await startRun(factory, name, options, {
|
|
12
10
|
onEvent: reporter.event,
|
|
13
11
|
});
|
|
14
12
|
for (const runtime of started.runtimes)
|
|
@@ -16,7 +14,7 @@ export async function run(factory, args, reporter) {
|
|
|
16
14
|
let interrupted = false;
|
|
17
15
|
const interrupt = (signal) => {
|
|
18
16
|
if (interrupted) {
|
|
19
|
-
|
|
17
|
+
killChildProcesses();
|
|
20
18
|
process.exit(130);
|
|
21
19
|
}
|
|
22
20
|
interrupted = true;
|
|
@@ -25,14 +23,29 @@ export async function run(factory, args, reporter) {
|
|
|
25
23
|
};
|
|
26
24
|
process.on("SIGINT", interrupt);
|
|
27
25
|
process.on("SIGTERM", interrupt);
|
|
28
|
-
let state;
|
|
29
26
|
try {
|
|
30
|
-
|
|
27
|
+
return await started.done;
|
|
31
28
|
}
|
|
32
29
|
finally {
|
|
33
30
|
process.off("SIGINT", interrupt);
|
|
34
31
|
process.off("SIGTERM", interrupt);
|
|
35
32
|
}
|
|
33
|
+
}
|
|
34
|
+
/** `factory run`: the run executes in the foreground, with the repository as the current directory. */
|
|
35
|
+
export async function run(factory, args, reporter) {
|
|
36
|
+
const name = args.positional[0];
|
|
37
|
+
if (!name)
|
|
38
|
+
throw new Error(`Usage: factory run WORKFLOW [--INPUT VALUE…]; workflows: ${[...factory.workflows.keys()].join(", ") || "none"}`);
|
|
39
|
+
// Relative paths in workflow code resolve in the repository, wherever the command was started.
|
|
40
|
+
const previous = process.cwd();
|
|
41
|
+
process.chdir(factory.dir);
|
|
42
|
+
let state;
|
|
43
|
+
try {
|
|
44
|
+
state = await execute(factory, name, args.options, reporter);
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
process.chdir(previous);
|
|
48
|
+
}
|
|
36
49
|
reporter.result(state);
|
|
37
50
|
return state.status === "completed" ? 0 : 1;
|
|
38
51
|
}
|
package/dist/cli/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAiB,MAAM,eAAe,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC;;;;GAIG;AACH,KAAK,UAAU,OAAO,CACpB,OAAgB,EAChB,IAAY,EACZ,OAA6B,EAC7B,QAA0B;IAE1B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;QACrD,OAAO,EAAE,QAAQ,CAAC,KAAK;KACxB,CAAC,CAAC;IACH,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ;QAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzE,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,MAAM,SAAS,GAAG,CAAC,MAAsB,EAAE,EAAE;QAC3C,IAAI,WAAW,EAAE,CAAC;YAChB,kBAAkB,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,WAAW,GAAG,IAAI,CAAC;QACnB,QAAQ,CAAC,MAAM,CACb,GAAG,MAAM,iEAAiE,CAC3E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;IAC5B,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,uGAAuG;AACvG,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,OAAgB,EAChB,IAAe,EACf,QAA0B;IAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI;QACP,MAAM,IAAI,KAAK,CACb,4DAA4D,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CACjH,CAAC;IACJ,+FAA+F;IAC/F,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IACD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC"}
|
package/dist/cli/ui.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Factory } from "../app/factory.js";
|
|
2
|
-
/** `factory ui`: serves the dashboard until Ctrl-C, on `port` or one the system chooses. */
|
|
2
|
+
/** `factory ui`: serves the dashboard of the repository's runs until Ctrl-C, on `port` or one the system chooses. */
|
|
3
3
|
export declare function ui(factory: Factory, port?: number): Promise<number>;
|
package/dist/cli/ui.js
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { basename } from "node:path";
|
|
2
|
+
import { startDashboard } from "@clemrig/flow-ui";
|
|
3
|
+
import { presentResult } from "../app/runs.js";
|
|
4
|
+
/** `factory ui`: serves the dashboard of the repository's runs until Ctrl-C, on `port` or one the system chooses. */
|
|
3
5
|
export async function ui(factory, port) {
|
|
4
|
-
const dashboard = await startDashboard(
|
|
6
|
+
const dashboard = await startDashboard({
|
|
7
|
+
runsDir: factory.runsDir,
|
|
8
|
+
title: "factory",
|
|
9
|
+
label: basename(factory.dir),
|
|
10
|
+
presentResult: (state) => presentResult(factory, state),
|
|
11
|
+
}, port);
|
|
5
12
|
process.stdout.write(`factory ui: ${dashboard.url} (read-only; Ctrl-C to stop)\n`);
|
|
6
13
|
await new Promise((resolve) => {
|
|
7
14
|
const stop = () => {
|
package/dist/cli/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qHAAqH;AACrH,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,OAAgB,EAAE,IAAa;IACtD,MAAM,SAAS,GAAG,MAAM,cAAc,CACpC;QACE,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;QAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC;KACxD,EACD,IAAI,CACL,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,eAAe,SAAS,CAAC,GAAG,gCAAgC,CAC7D,CAAC;IACF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IACxB,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Public API for writing workflows. A repository's `.factory/` imports only this
|
|
3
|
-
* module;
|
|
3
|
+
* module; it re-exports the engine's, `z` included, so that workflows, the
|
|
4
|
+
* factory and the engine share one Zod instance.
|
|
4
5
|
*/
|
|
5
|
-
export { z } from "
|
|
6
|
-
export type { AgentProfile } from "./engine/profiles.js";
|
|
7
|
-
export { agent, type Check, code, END, gate, node, pick, retry, schemaGate, step, } from "./engine/primitives.js";
|
|
8
|
-
export type { Log, RunState, Stage, StageContext, StageResult, WorkflowDefinition, } from "./engine/types.js";
|
|
9
|
-
export { defineWorkflow } from "./engine/workflow.js";
|
|
10
|
-
export { ProcessInterruptedError, runProcess } from "./system/process.js";
|
|
6
|
+
export { type AgentProfile, agent, type Check, code, defineWorkflow, END, gate, type Log, node, ProcessInterruptedError, pick, type RunState, retry, runProcess, type Stage, type StageContext, type StageResult, schemaGate, step, type WorkflowDefinition, z, } from "@clemrig/flow";
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Public API for writing workflows. A repository's `.factory/` imports only this
|
|
3
|
-
* module;
|
|
3
|
+
* module; it re-exports the engine's, `z` included, so that workflows, the
|
|
4
|
+
* factory and the engine share one Zod instance.
|
|
4
5
|
*/
|
|
5
|
-
export { z } from "
|
|
6
|
-
export { agent, code, END, gate, node, pick, retry, schemaGate, step, } from "./engine/primitives.js";
|
|
7
|
-
export { defineWorkflow } from "./engine/workflow.js";
|
|
8
|
-
export { ProcessInterruptedError, runProcess } from "./system/process.js";
|
|
6
|
+
export { agent, code, defineWorkflow, END, gate, node, ProcessInterruptedError, pick, retry, runProcess, schemaGate, step, z, } from "@clemrig/flow";
|
|
9
7
|
//# 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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEL,KAAK,EAEL,IAAI,EACJ,cAAc,EACd,GAAG,EACH,IAAI,EAEJ,IAAI,EACJ,uBAAuB,EACvB,IAAI,EAEJ,KAAK,EACL,UAAU,EAIV,UAAU,EACV,IAAI,EAEJ,CAAC,GACF,MAAM,eAAe,CAAC"}
|
package/dist/system/factory.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Workflow } from "@clemrig/flow";
|
|
2
2
|
/** A repository's `.factory/`: its workflows, where they work and where runs are kept. */
|
|
3
3
|
export interface Factory {
|
|
4
4
|
/** The repository: the directory that contains `.factory/`. */
|
package/dist/system/factory.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { pathToFileURL } from "node:url";
|
|
4
|
-
import { isWorkflow } from "
|
|
4
|
+
import { isWorkflow } from "@clemrig/flow";
|
|
5
5
|
/** A factory without workflows, to read runs when `factory.ts` cannot load. */
|
|
6
6
|
export function emptyFactory(factoryDir) {
|
|
7
7
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/system/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/system/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { runProcess } from "@clemrig/flow";
|
|
2
|
+
/** Installs the dependencies of the package in `dir`; `output` explains a failure. */
|
|
3
|
+
export async function npmInstall(dir) {
|
|
4
|
+
const install = await runProcess(["npm", "install", "--no-audit", "--no-fund"], dir, 600_000).catch((error) => ({
|
|
5
|
+
exitCode: 1,
|
|
6
|
+
stdout: "",
|
|
7
|
+
stderr: error instanceof Error ? error.message : String(error),
|
|
8
|
+
}));
|
|
9
|
+
return {
|
|
10
|
+
ok: install.exitCode === 0,
|
|
11
|
+
output: install.stderr || install.stdout,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=npm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/system/npm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW;IAEX,MAAM,OAAO,GAAG,MAAM,UAAU,CAC9B,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,EAC7C,GAAG,EACH,OAAO,CACR,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC;QAC3B,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KAC/D,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,QAAQ,KAAK,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;KACzC,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Creates `.factory/` in `cwd` from the package's templates, its `package.json`
|
|
3
|
-
* pinned to this
|
|
3
|
+
* pinned to this factory version. An existing `.factory/` is refused untouched.
|
|
4
4
|
*/
|
|
5
5
|
export declare function createFromTemplates(cwd: string): Promise<{
|
|
6
6
|
factoryDir: string;
|
package/dist/system/templates.js
CHANGED
|
@@ -4,7 +4,7 @@ import { join } from "node:path";
|
|
|
4
4
|
const root = new URL("../../", import.meta.url);
|
|
5
5
|
/**
|
|
6
6
|
* Creates `.factory/` in `cwd` from the package's templates, its `package.json`
|
|
7
|
-
* pinned to this
|
|
7
|
+
* pinned to this factory version. An existing `.factory/` is refused untouched.
|
|
8
8
|
*/
|
|
9
9
|
export async function createFromTemplates(cwd) {
|
|
10
10
|
const factoryDir = join(cwd, ".factory");
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clemrig/factory",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Write agent workflows in TypeScript inside any repository, run them in the terminal and watch them in a local dashboard",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "git+https://github.com/clementchesneau/clemrig-factory-v2.git"
|
|
8
|
+
"url": "git+https://github.com/clementchesneau/clemrig-factory-v2.git",
|
|
9
|
+
"directory": "packages/factory"
|
|
9
10
|
},
|
|
10
11
|
"type": "module",
|
|
11
12
|
"bin": {
|
|
@@ -30,25 +31,14 @@
|
|
|
30
31
|
"access": "public"
|
|
31
32
|
},
|
|
32
33
|
"scripts": {
|
|
33
|
-
"build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.build.json
|
|
34
|
-
"typecheck": "tsc --noEmit
|
|
35
|
-
"lint": "biome lint --error-on-warnings .",
|
|
36
|
-
"format": "biome format .",
|
|
37
|
-
"format:write": "biome format --write .",
|
|
34
|
+
"build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.build.json",
|
|
35
|
+
"typecheck": "tsc --noEmit",
|
|
38
36
|
"test": "vitest run",
|
|
39
37
|
"test:coverage": "vitest run --coverage",
|
|
40
|
-
"check": "npm run lint && npm run format && npm run typecheck && npm run test:coverage && npm run build",
|
|
41
38
|
"prepack": "npm run build"
|
|
42
39
|
},
|
|
43
40
|
"dependencies": {
|
|
44
|
-
"
|
|
45
|
-
|
|
46
|
-
"devDependencies": {
|
|
47
|
-
"@biomejs/biome": "2.5.15",
|
|
48
|
-
"@types/node": "24.19.1",
|
|
49
|
-
"@vitest/coverage-v8": "5.0.3",
|
|
50
|
-
"tsx": "4.23.15",
|
|
51
|
-
"typescript": "7.0.2",
|
|
52
|
-
"vitest": "5.0.3"
|
|
41
|
+
"@clemrig/flow": "0.2.0",
|
|
42
|
+
"@clemrig/flow-ui": "0.1.1"
|
|
53
43
|
}
|
|
54
44
|
}
|
package/dist/engine/metrics.d.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import type { RunState } from "./types.js";
|
|
2
|
-
/** Tokens of a model response or of an agent call. */
|
|
3
|
-
export interface TokenCounts {
|
|
4
|
-
input: number;
|
|
5
|
-
output: number;
|
|
6
|
-
cacheRead: number;
|
|
7
|
-
cacheWrite: number;
|
|
8
|
-
}
|
|
9
|
-
/** Tokens and the runtime's estimated cost. */
|
|
10
|
-
export interface AgentUsage extends TokenCounts {
|
|
11
|
-
costUsd: number;
|
|
12
|
-
}
|
|
13
|
-
export interface RunMetrics {
|
|
14
|
-
/** The run's total, the sum of its sessions; `responses` counts measured reports, `missing` unmeasured ones. */
|
|
15
|
-
usage: AgentUsage & {
|
|
16
|
-
responses: number;
|
|
17
|
-
missing: number;
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Per agent session, `<runtime>:<session>`: the latest total its runtime
|
|
21
|
-
* announced (Claude Code), or the sum of its responses (Pi). Absent from runs
|
|
22
|
-
* recorded before it existed.
|
|
23
|
-
*/
|
|
24
|
-
sessions?: Record<string, AgentUsage>;
|
|
25
|
-
}
|
|
26
|
-
/** A measure as the runtime reports it: one response (Pi), or its session's total so far (Claude Code). */
|
|
27
|
-
export interface UsageReport {
|
|
28
|
-
session: string;
|
|
29
|
-
scope: "response" | "session";
|
|
30
|
-
/** `undefined` when the runtime reported nothing measurable. */
|
|
31
|
-
usage: AgentUsage | undefined;
|
|
32
|
-
}
|
|
33
|
-
/** Tokens and cost of several measures together. */
|
|
34
|
-
export declare function sumUsage(measures: AgentUsage[]): AgentUsage;
|
|
35
|
-
export declare function emptyMetrics(): RunMetrics;
|
|
36
|
-
/**
|
|
37
|
-
* Records a measure as its runtime reports it: a session total replaces the
|
|
38
|
-
* previous one, a response adds to its session. The run's total is the sum of
|
|
39
|
-
* its sessions; nothing else is computed.
|
|
40
|
-
*/
|
|
41
|
-
export declare function recordUsage(metrics: RunMetrics, report: UsageReport): void;
|
|
42
|
-
/** Why a run past its budget must stop: its announced cost exceeds it, or a call announced none. */
|
|
43
|
-
export declare function budgetProblem(metrics: RunMetrics, maxCostUsd: number): string | undefined;
|
|
44
|
-
/** From creation to now while running, to the last update once completed or failed. */
|
|
45
|
-
export declare function elapsedMs(state: RunState, now?: number): number | null;
|
package/dist/engine/metrics.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
const fields = [
|
|
2
|
-
"input",
|
|
3
|
-
"output",
|
|
4
|
-
"cacheRead",
|
|
5
|
-
"cacheWrite",
|
|
6
|
-
"costUsd",
|
|
7
|
-
];
|
|
8
|
-
const noUsage = () => ({
|
|
9
|
-
input: 0,
|
|
10
|
-
output: 0,
|
|
11
|
-
cacheRead: 0,
|
|
12
|
-
cacheWrite: 0,
|
|
13
|
-
costUsd: 0,
|
|
14
|
-
});
|
|
15
|
-
/** Tokens and cost of several measures together. */
|
|
16
|
-
export function sumUsage(measures) {
|
|
17
|
-
const total = noUsage();
|
|
18
|
-
for (const measure of measures)
|
|
19
|
-
for (const field of fields)
|
|
20
|
-
total[field] += measure[field];
|
|
21
|
-
return total;
|
|
22
|
-
}
|
|
23
|
-
export function emptyMetrics() {
|
|
24
|
-
return { usage: { ...noUsage(), responses: 0, missing: 0 }, sessions: {} };
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Records a measure as its runtime reports it: a session total replaces the
|
|
28
|
-
* previous one, a response adds to its session. The run's total is the sum of
|
|
29
|
-
* its sessions; nothing else is computed.
|
|
30
|
-
*/
|
|
31
|
-
export function recordUsage(metrics, report) {
|
|
32
|
-
if (!report.usage) {
|
|
33
|
-
metrics.usage.missing++;
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
metrics.usage.responses++;
|
|
37
|
-
metrics.sessions ??= {};
|
|
38
|
-
const { sessions } = metrics;
|
|
39
|
-
const previous = sessions[report.session];
|
|
40
|
-
sessions[report.session] =
|
|
41
|
-
report.scope === "session" || !previous
|
|
42
|
-
? report.usage
|
|
43
|
-
: sumUsage([previous, report.usage]);
|
|
44
|
-
Object.assign(metrics.usage, sumUsage(Object.values(sessions)));
|
|
45
|
-
}
|
|
46
|
-
/** Why a run past its budget must stop: its announced cost exceeds it, or a call announced none. */
|
|
47
|
-
export function budgetProblem(metrics, maxCostUsd) {
|
|
48
|
-
if (metrics.usage.missing)
|
|
49
|
-
return `Budget of ${maxCostUsd} USD cannot be checked: an agent call announced no cost`;
|
|
50
|
-
if (metrics.usage.costUsd > maxCostUsd)
|
|
51
|
-
return `Budget exceeded: ${metrics.usage.costUsd.toFixed(6)} USD spent, maximum ${maxCostUsd.toFixed(6)} USD`;
|
|
52
|
-
return undefined;
|
|
53
|
-
}
|
|
54
|
-
/** From creation to now while running, to the last update once completed or failed. */
|
|
55
|
-
export function elapsedMs(state, now = Date.now()) {
|
|
56
|
-
const end = state.status === "running" ? now : Date.parse(state.updatedAt);
|
|
57
|
-
const elapsed = end - Date.parse(state.createdAt);
|
|
58
|
-
return Number.isFinite(elapsed) && elapsed >= 0 ? elapsed : null;
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=metrics.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/engine/metrics.ts"],"names":[],"mappings":"AAqCA,MAAM,MAAM,GAAG;IACb,OAAO;IACP,QAAQ;IACR,WAAW;IACX,YAAY;IACZ,SAAS;CACD,CAAC;AAEX,MAAM,OAAO,GAAG,GAAe,EAAE,CAAC,CAAC;IACjC,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,CAAC;IACZ,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,CAAC;CACX,CAAC,CAAC;AAEH,oDAAoD;AACpD,MAAM,UAAU,QAAQ,CAAC,QAAsB;IAC7C,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;IACxB,KAAK,MAAM,OAAO,IAAI,QAAQ;QAC5B,KAAK,MAAM,KAAK,IAAI,MAAM;YAAE,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,OAAmB,EAAE,MAAmB;IAClE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IAC1B,OAAO,CAAC,QAAQ,KAAK,EAAE,CAAC;IACxB,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;QACtB,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,QAAQ;YACrC,CAAC,CAAC,MAAM,CAAC,KAAK;YACd,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,aAAa,CAC3B,OAAmB,EACnB,UAAkB;IAElB,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO;QACvB,OAAO,aAAa,UAAU,yDAAyD,CAAC;IAC1F,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU;QACpC,OAAO,oBAAoB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAChH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,SAAS,CAAC,KAAe,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import type { AgentDeclaration, Edge, RetryEdge, Stage, StageContext, StageResult, WorkflowNode } from "./types.js";
|
|
3
|
-
type Awaitable<T> = T | Promise<T>;
|
|
4
|
-
export declare const END: null;
|
|
5
|
-
/** A correction route, taken at most `max` times per run. */
|
|
6
|
-
export declare function retry(to: string, max: number): RetryEdge;
|
|
7
|
-
/** Binds a stage to its routes; every declared outcome must be routed. */
|
|
8
|
-
export declare function node<O extends string>(stage: Stage<O>, on: Record<O, Edge>): WorkflowNode;
|
|
9
|
-
/** Selects explicit agent context from the run input and workflow data. */
|
|
10
|
-
export declare function pick(...keys: string[]): (context: StageContext) => Record<string, unknown>;
|
|
11
|
-
/** AGENT primitive: one structured request; its untrusted output waits for a gate. */
|
|
12
|
-
export declare function agent(options: AgentDeclaration & {
|
|
13
|
-
schema: z.ZodType;
|
|
14
|
-
context: (context: StageContext) => Awaitable<Record<string, unknown>>;
|
|
15
|
-
}): Stage<"ok">;
|
|
16
|
-
/** CODE primitive: deterministic work with named outcomes. */
|
|
17
|
-
export declare function code<O extends string = "ok">(outcomes: readonly O[], run: (context: StageContext) => Promise<StageResult<O>>): Stage<O>;
|
|
18
|
-
/** What a step records: data, or nothing. */
|
|
19
|
-
type StepData = Record<string, unknown> | void;
|
|
20
|
-
/** CODE primitive with a single successful outcome. */
|
|
21
|
-
export declare function step(run: (context: StageContext) => Promise<StepData>): Stage<"ok">;
|
|
22
|
-
/** GATE primitive: decides acceptance or correction from saved facts. */
|
|
23
|
-
export declare function gate<O extends string>(outcomes: readonly O[], run: (context: StageContext) => Promise<StageResult<O>>): Stage<O>;
|
|
24
|
-
export type Check<T> = (value: T, context: StageContext) => Awaitable<string | undefined | {
|
|
25
|
-
data: Record<string, unknown>;
|
|
26
|
-
}>;
|
|
27
|
-
/** GATE over the last agent output: schema, then business invariants; failures are corrections. */
|
|
28
|
-
export declare function schemaGate<S extends z.ZodType>(options: {
|
|
29
|
-
schema: S;
|
|
30
|
-
/** Data key of the validated output. */
|
|
31
|
-
into: string;
|
|
32
|
-
check?: Check<z.output<S>>;
|
|
33
|
-
}): Stage<"ok" | "invalid">;
|
|
34
|
-
export {};
|