@clemrig/flow 0.0.0-stage → 0.2.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.
Files changed (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +55 -2
  3. package/dist/app/run.d.ts +38 -0
  4. package/dist/app/run.js +104 -0
  5. package/dist/app/run.js.map +1 -0
  6. package/dist/app/runs.d.ts +43 -0
  7. package/dist/app/runs.js +70 -0
  8. package/dist/app/runs.js.map +1 -0
  9. package/dist/engine/metrics.d.ts +45 -0
  10. package/dist/engine/metrics.js +60 -0
  11. package/dist/engine/metrics.js.map +1 -0
  12. package/dist/engine/primitives.d.ts +34 -0
  13. package/dist/engine/primitives.js +81 -0
  14. package/dist/engine/primitives.js.map +1 -0
  15. package/dist/engine/profiles.d.ts +53 -0
  16. package/dist/engine/profiles.js +117 -0
  17. package/dist/engine/profiles.js.map +1 -0
  18. package/dist/engine/runner.d.ts +13 -0
  19. package/dist/engine/runner.js +157 -0
  20. package/dist/engine/runner.js.map +1 -0
  21. package/dist/engine/types.d.ts +194 -0
  22. package/dist/engine/types.js +2 -0
  23. package/dist/engine/types.js.map +1 -0
  24. package/dist/engine/workflow.d.ts +24 -0
  25. package/dist/engine/workflow.js +179 -0
  26. package/dist/engine/workflow.js.map +1 -0
  27. package/dist/index.d.ts +16 -0
  28. package/dist/index.js +16 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/system/process.d.ts +27 -0
  31. package/dist/system/process.js +261 -0
  32. package/dist/system/process.js.map +1 -0
  33. package/dist/system/runtimes/adapter.d.ts +90 -0
  34. package/dist/system/runtimes/adapter.js +20 -0
  35. package/dist/system/runtimes/adapter.js.map +1 -0
  36. package/dist/system/runtimes/agent-runtime.d.ts +45 -0
  37. package/dist/system/runtimes/agent-runtime.js +184 -0
  38. package/dist/system/runtimes/agent-runtime.js.map +1 -0
  39. package/dist/system/runtimes/claude-code.d.ts +10 -0
  40. package/dist/system/runtimes/claude-code.js +383 -0
  41. package/dist/system/runtimes/claude-code.js.map +1 -0
  42. package/dist/system/runtimes/inspect.d.ts +27 -0
  43. package/dist/system/runtimes/inspect.js +131 -0
  44. package/dist/system/runtimes/inspect.js.map +1 -0
  45. package/dist/system/runtimes/pi.d.ts +7 -0
  46. package/dist/system/runtimes/pi.js +235 -0
  47. package/dist/system/runtimes/pi.js.map +1 -0
  48. package/dist/system/runtimes/protocol.d.ts +9 -0
  49. package/dist/system/runtimes/protocol.js +38 -0
  50. package/dist/system/runtimes/protocol.js.map +1 -0
  51. package/dist/system/runtimes/registry.d.ts +5 -0
  52. package/dist/system/runtimes/registry.js +5 -0
  53. package/dist/system/runtimes/registry.js.map +1 -0
  54. package/dist/system/store.d.ts +26 -0
  55. package/dist/system/store.js +157 -0
  56. package/dist/system/store.js.map +1 -0
  57. package/package.json +34 -4
@@ -0,0 +1,157 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { appendFile, mkdir, readdir, readFile, rename, rm, stat, writeFile, } from "node:fs/promises";
3
+ import { join, resolve } from "node:path";
4
+ const isRecord = (value) => !!value && typeof value === "object" && !Array.isArray(value);
5
+ function isRetryCounts(value) {
6
+ return (isRecord(value) &&
7
+ Object.values(value).every((count) => Number.isSafeInteger(count) && count >= 1));
8
+ }
9
+ const finiteNonnegative = (n) => typeof n === "number" && Number.isFinite(n) && n >= 0;
10
+ const isUsage = (value) => isRecord(value) &&
11
+ ["input", "output", "cacheRead", "cacheWrite", "costUsd"].every((key) => finiteNonnegative(value[key]));
12
+ function isRunMetrics(value) {
13
+ if (!isRecord(value) || !isUsage(value.usage))
14
+ return false;
15
+ const counts = value.usage;
16
+ return (["responses", "missing"].every((key) => Number.isSafeInteger(counts[key]) && finiteNonnegative(counts[key])) &&
17
+ (value.sessions === undefined ||
18
+ (isRecord(value.sessions) &&
19
+ Object.values(value.sessions).every(isUsage))));
20
+ }
21
+ /** Each runtime's version and connection, as text. */
22
+ const isRuntimes = (value) => isRecord(value) &&
23
+ Object.values(value).every((detail) => typeof detail === "string");
24
+ /** No run has this ID, or none can: unlike a read error, asking again will not find it. */
25
+ export class UnknownRunError extends Error {
26
+ constructor(message) {
27
+ super(message);
28
+ this.name = "UnknownRunError";
29
+ }
30
+ }
31
+ /** Whether `path` is a directory; `undefined` when nothing is there. */
32
+ export async function isDirectory(path) {
33
+ try {
34
+ return (await stat(path)).isDirectory();
35
+ }
36
+ catch (error) {
37
+ if (error.code === "ENOENT")
38
+ return undefined;
39
+ throw error;
40
+ }
41
+ }
42
+ /** `.flow/runs/` of `dir`: where runs are kept unless the caller chooses another directory. */
43
+ export function defaultRunsDir(dir) {
44
+ return resolve(dir, ".flow", "runs");
45
+ }
46
+ /** Creates `.flow/` in `dir`, with a `.gitignore` that keeps its private runs out of Git; an existing `.flow/` is left as it is. */
47
+ export async function createFlowDirectory(dir) {
48
+ const flowDir = join(dir, ".flow");
49
+ try {
50
+ await mkdir(flowDir);
51
+ }
52
+ catch (error) {
53
+ if (error.code !== "EEXIST")
54
+ throw error;
55
+ if (!(await isDirectory(flowDir)))
56
+ throw new Error(`.flow is not a directory: ${flowDir}`);
57
+ return;
58
+ }
59
+ await writeFile(join(flowDir, ".gitignore"), "*\n");
60
+ }
61
+ /** A new run ID: its creation time, then a random suffix, so that IDs sort in creation order. */
62
+ export function newRunId() {
63
+ return `${Date.now()}-${randomUUID().slice(0, 8)}`;
64
+ }
65
+ /** One run's directory: `state.json` and its `events.jsonl` journal. */
66
+ export class FileRunStore {
67
+ directory;
68
+ runId;
69
+ constructor(runsDir, runId) {
70
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,127}$/.test(runId))
71
+ throw new UnknownRunError("Invalid run ID");
72
+ this.runId = runId;
73
+ // Absolute: runtimes get it while they work in another directory.
74
+ this.directory = resolve(runsDir, runId);
75
+ }
76
+ /** Run IDs in order: they start with their creation time. */
77
+ static async list(runsDir) {
78
+ try {
79
+ return (await readdir(runsDir, { withFileTypes: true }))
80
+ .filter((entry) => entry.isDirectory())
81
+ .map((entry) => entry.name)
82
+ .sort();
83
+ }
84
+ catch (error) {
85
+ if (error.code === "ENOENT")
86
+ return [];
87
+ throw error;
88
+ }
89
+ }
90
+ async save(state) {
91
+ if (state.id !== this.runId)
92
+ throw new Error("Run state ID does not match store");
93
+ await mkdir(this.directory, { recursive: true });
94
+ const temporary = join(this.directory, `state-${randomUUID()}.tmp`);
95
+ try {
96
+ await writeFile(temporary, `${JSON.stringify(state, null, 2)}\n`, {
97
+ mode: 0o600,
98
+ });
99
+ await rename(temporary, join(this.directory, "state.json"));
100
+ }
101
+ finally {
102
+ await rm(temporary, { force: true });
103
+ }
104
+ }
105
+ async load() {
106
+ let text;
107
+ try {
108
+ text = await readFile(join(this.directory, "state.json"), "utf8");
109
+ }
110
+ catch (error) {
111
+ if (error.code === "ENOENT")
112
+ throw new UnknownRunError(`Unknown run ${this.runId}`);
113
+ throw error;
114
+ }
115
+ const state = JSON.parse(text);
116
+ if (state?.version !== 4 ||
117
+ state.id !== this.runId ||
118
+ typeof state.workflow !== "string" ||
119
+ !state.workflow.trim() ||
120
+ !["running", "completed", "failed"].includes(state.status) ||
121
+ typeof state.stage !== "string" ||
122
+ typeof state.createdAt !== "string" ||
123
+ typeof state.updatedAt !== "string" ||
124
+ !isRecord(state.input) ||
125
+ !isRecord(state.data) ||
126
+ (state.retries !== undefined && !isRetryCounts(state.retries)) ||
127
+ (state.metrics !== undefined && !isRunMetrics(state.metrics)) ||
128
+ (state.runtimes !== undefined && !isRuntimes(state.runtimes)))
129
+ throw new Error("Unsupported or mismatched persisted run; runs created by earlier flow versions are not readable");
130
+ return state;
131
+ }
132
+ async event(event) {
133
+ if (event.runId !== this.runId)
134
+ throw new Error("Event run ID does not match store");
135
+ await mkdir(this.directory, { recursive: true });
136
+ await appendFile(join(this.directory, "events.jsonl"), `${JSON.stringify(event)}\n`, { mode: 0o600 });
137
+ }
138
+ /** Recorded events; a last line still being written is ignored. */
139
+ async events() {
140
+ let text;
141
+ try {
142
+ text = await readFile(join(this.directory, "events.jsonl"), "utf8");
143
+ }
144
+ catch (error) {
145
+ if (error.code === "ENOENT")
146
+ return [];
147
+ throw error;
148
+ }
149
+ const lines = text.split("\n");
150
+ // Only lines ended by a newline are complete.
151
+ lines.pop();
152
+ return lines
153
+ .filter((line) => line.trim())
154
+ .map((line) => JSON.parse(line));
155
+ }
156
+ }
157
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/system/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,36 @@
1
1
  {
2
2
  "name": "@clemrig/flow",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.2.0",
4
+ "description": "Write agent workflows in TypeScript and run them with Claude Code or Pi",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/clementchesneau/clemrig-factory-v2.git",
9
+ "directory": "packages/flow"
10
+ },
11
+ "type": "module",
12
+ "exports": {
13
+ ".": {
14
+ "default": "./dist/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "engines": {
21
+ "node": ">=24"
22
+ },
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "scripts": {
27
+ "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.build.json",
28
+ "typecheck": "tsc --noEmit",
29
+ "test": "vitest run",
30
+ "test:coverage": "vitest run --coverage",
31
+ "prepack": "npm run build"
32
+ },
33
+ "dependencies": {
34
+ "zod": "4.6.5"
35
+ }
36
+ }