@clemrig/factory 0.18.0 → 0.18.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 CHANGED
@@ -90,7 +90,7 @@ A malformed agent response goes back to that agent, 2 times at most. The text th
90
90
 
91
91
  #### The application
92
92
 
93
- When `factory.ts` declares the repository's `app`, the run owns it, as it owns the browser: for each execution of the `implement`, `review` and `describe` stages, it picks a free port for each name in `ports`, runs `setup`, which prepares data of the application's own (a database created, migrated and seeded, for instance) and writes the application's variables as `NAME=value` lines in the file `FACTORY_APP_ENV` names, then `start`, in the foreground, and waits until its `url`, a function of its variables, answers in HTTP, whatever the status (5 minutes at most; 10 for `setup`, 5 for `teardown`). Each command runs in the repository, without a shell, with the application's variables: `FACTORY_APP`, a short identifier of its own that can name a database, the ports, then what `setup` wrote. The agents receive `app` (its `url`, and `logs`, the file of its output, in the run's folder) and its variables in their environment, so that their own commands, such as a migration or a query, reach the same data; their prompts tell them it already runs, with data they may change, and to start or stop no server. Once the stage is over, failed or not, the run stops the application (5 seconds, then SIGKILL of its process group) and runs `teardown`, even after a failed `setup`; the stage's journal tells when the application stopped by itself during the call, or when its data could not be removed. An application that cannot start fails the stage, with the end of its output; `factory resume` starts the stage again. None of the three commands may change the repository's files, which the run would take for the agents' work: what they change as the application starts or stops is put back and named in the stage's journal, and a change as it starts fails the stage; what the application writes while the agents work cannot be told from theirs. Without `app`, the agents start the application as the repository's agent instructions say.
93
+ When `factory.ts` declares the repository's `app`, the run owns it, as it owns the browser: for each execution of the `implement`, `review` and `describe` stages, it picks a free port for each name in `ports`, runs `setup`, which prepares data of the application's own (a database created, migrated and seeded, for instance) and writes the application's variables as `NAME=value` lines in the file `FACTORY_APP_ENV` names, then `start`, in the foreground, and waits until its `url`, a function of its variables, answers in HTTP, whatever the status, and each of its ports accepts connections, so that a front end that proxies its API waits for it (5 minutes at most; 10 for `setup`, 5 for `teardown`). Each command runs in the repository, without a shell, with the application's variables: `FACTORY_APP`, a short identifier of its own that can name a database, the ports, then what `setup` wrote. The agents receive `app` (its `url`, and `logs`, the file of its output, in the run's folder) and its variables in their environment, so that their own commands, such as a migration or a query, reach the same data; their prompts tell them it already runs, with data they may change, and to start or stop no server. Once the stage is over, failed or not, the run stops the application (5 seconds, then SIGKILL of its process group) and runs `teardown`, even after a failed `setup`; the stage's journal tells when the application stopped by itself during the call, or when its data could not be removed. An application that cannot start fails the stage, with the end of its output; `factory resume` starts the stage again. None of the three commands may change the repository's files, which the run would take for the agents' work: what they change as the application starts or stops is put back and named in the stage's journal, and a change as it starts fails the stage; what the application writes while the agents work cannot be told from theirs. Without `app`, the agents start the application as the repository's agent instructions say.
94
94
 
95
95
  ```ts
96
96
  app: {
@@ -19,7 +19,10 @@ export interface AppDeclaration {
19
19
  start: Command;
20
20
  /** Removes what setup prepared, even when setup failed halfway. */
21
21
  teardown?: Command;
22
- /** Variables the factory gives each a free port, such as `WEB_PORT`. */
22
+ /**
23
+ * Variables the factory gives each a free port, such as `WEB_PORT`, which
24
+ * the application listens on: it is ready once each accepts connections.
25
+ */
23
26
  ports?: string[];
24
27
  /** Where the application answers once it runs, from its variables, such as `({ WEB_PORT }) => "http://localhost:" + WEB_PORT`. */
25
28
  url: (variables: Record<string, string>) => string;
@@ -11,7 +11,8 @@ export interface RunningApp {
11
11
  }
12
12
  /**
13
13
  * Prepares and starts the application in `dir`, its files in `runDir/app/`,
14
- * and resolves once its url answers. A failure stops what started, removes
15
- * what setup prepared, and gives the end of the application's log.
14
+ * and resolves once its url answers and each of its ports accepts
15
+ * connections. A failure stops what started, removes what setup prepared,
16
+ * and gives the end of the application's log.
16
17
  */
17
18
  export declare function startApp(app: AppDeclaration, dir: string, runDir: string): Promise<RunningApp>;
@@ -1,6 +1,6 @@
1
1
  import { randomBytes } from "node:crypto";
2
2
  import { appendFile, mkdir, readFile, rm } from "node:fs/promises";
3
- import { createServer } from "node:net";
3
+ import { connect, createServer } from "node:net";
4
4
  import { join } from "node:path";
5
5
  import { parseEnv } from "node:util";
6
6
  import { ProcessInterruptedError, runCommand, } from "@clemrig/flow";
@@ -34,10 +34,26 @@ async function tail(logs) {
34
34
  const message = (error) => error instanceof Error ? error.message : String(error);
35
35
  /** Whether the url answers in HTTP, whatever its status. */
36
36
  const answers = (url) => fetch(url, { redirect: "manual", signal: AbortSignal.timeout(2_000) }).then(() => true, () => false);
37
+ /** Whether something on this machine accepts connections on the port. */
38
+ const listens = (port) => new Promise((resolve) => {
39
+ const socket = connect({
40
+ host: "localhost",
41
+ port: Number(port),
42
+ timeout: 2_000,
43
+ });
44
+ const end = (listening) => {
45
+ socket.destroy();
46
+ resolve(listening);
47
+ };
48
+ socket.once("connect", () => end(true));
49
+ socket.once("error", () => end(false));
50
+ socket.once("timeout", () => end(false));
51
+ });
37
52
  /**
38
53
  * Prepares and starts the application in `dir`, its files in `runDir/app/`,
39
- * and resolves once its url answers. A failure stops what started, removes
40
- * what setup prepared, and gives the end of the application's log.
54
+ * and resolves once its url answers and each of its ports accepts
55
+ * connections. A failure stops what started, removes what setup prepared,
56
+ * and gives the end of the application's log.
41
57
  */
42
58
  export async function startApp(app, dir, runDir) {
43
59
  const id = randomBytes(4).toString("hex");
@@ -45,7 +61,8 @@ export async function startApp(app, dir, runDir) {
45
61
  await mkdir(folder, { recursive: true });
46
62
  const logs = join(folder, `${id}.log`);
47
63
  const written = join(folder, `${id}.env`);
48
- const own = { FACTORY_APP: id, ...(await freePorts(app.ports ?? [])) };
64
+ const ports = await freePorts(app.ports ?? []);
65
+ const own = { FACTORY_APP: id, ...ports };
49
66
  let env = own;
50
67
  /** Runs a command of the application with its variables, its output in the log. */
51
68
  const step = async (name, command, bound, extra = {}) => {
@@ -116,12 +133,28 @@ export async function startApp(app, dir, runDir) {
116
133
  controller.abort();
117
134
  await running;
118
135
  };
136
+ /**
137
+ * What the application does not do yet: answer at its url, then accept
138
+ * connections on each of its ports, such as those of an API its url only
139
+ * proxies.
140
+ */
141
+ const missing = async () => {
142
+ if (!(await answers(url)))
143
+ return `answer at ${url}`;
144
+ const closed = [];
145
+ for (const [name, port] of Object.entries(ports))
146
+ if (!(await listens(port)))
147
+ closed.push(name);
148
+ return closed.length > 0
149
+ ? `accept connections on ${closed.join(", ")}`
150
+ : undefined;
151
+ };
119
152
  const deadline = Date.now() + READY_TIMEOUT_MS;
120
- while (!(await answers(url))) {
153
+ for (let wanted = await missing(); wanted; wanted = await missing()) {
121
154
  if (ended !== undefined || Date.now() >= deadline) {
122
155
  const why = ended
123
- ? `The application stopped before answering at ${url}: ${ended}`
124
- : `The application did not answer at ${url} within ${READY_TIMEOUT_MS / 60_000} minutes`;
156
+ ? `The application stopped before it was ready: ${ended}`
157
+ : `The application did not ${wanted} within ${READY_TIMEOUT_MS / 60_000} minutes`;
125
158
  await stopped();
126
159
  return fail(why);
127
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/system/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/system/app.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clemrig/factory",
3
- "version": "0.18.0",
3
+ "version": "0.18.1",
4
4
  "description": "Take a repository's issues from spec to pull request with agents, watch them on a local Kanban, and run the repository's own workflows",
5
5
  "license": "MIT",
6
6
  "repository": {