@usine/server 0.1.0 → 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 (62) hide show
  1. package/README.md +42 -1
  2. package/dist/backend.d.ts +12 -9
  3. package/dist/backend.d.ts.map +1 -1
  4. package/dist/backend.js +6 -2
  5. package/dist/backend.js.map +1 -1
  6. package/dist/backup.d.ts +4 -0
  7. package/dist/backup.d.ts.map +1 -0
  8. package/dist/backup.js +13 -0
  9. package/dist/backup.js.map +1 -0
  10. package/dist/cli.d.ts +36 -7
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +115 -28
  13. package/dist/cli.js.map +1 -1
  14. package/dist/export-run.d.ts +22 -0
  15. package/dist/export-run.d.ts.map +1 -0
  16. package/dist/export-run.js +85 -0
  17. package/dist/export-run.js.map +1 -0
  18. package/dist/http.d.ts.map +1 -1
  19. package/dist/http.js +94 -138
  20. package/dist/http.js.map +1 -1
  21. package/dist/index.d.ts +1 -7
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -7
  24. package/dist/index.js.map +1 -1
  25. package/dist/main.js +18 -8
  26. package/dist/main.js.map +1 -1
  27. package/dist/shutdown.d.ts +7 -0
  28. package/dist/shutdown.d.ts.map +1 -0
  29. package/dist/shutdown.js +49 -0
  30. package/dist/shutdown.js.map +1 -0
  31. package/dist/up.d.ts +2 -2
  32. package/dist/up.d.ts.map +1 -1
  33. package/dist/up.js +48 -25
  34. package/dist/up.js.map +1 -1
  35. package/dist/web/assets/_name-BHFMXhWe.js +1 -0
  36. package/dist/web/assets/_name-Cz2YmpSb.js +1 -0
  37. package/dist/web/assets/_name-D1NH8oUE.js +6 -0
  38. package/dist/web/assets/badge-BQobsECb.js +142 -0
  39. package/dist/web/assets/bash-CLZ0U2zV.js +1 -0
  40. package/dist/web/assets/button-BoOukj77.js +1 -0
  41. package/dist/web/assets/core-Cg4Mi2IQ.js +12 -0
  42. package/dist/web/assets/diff-woXpYk--.js +1 -0
  43. package/dist/web/assets/empty-DbVYU7bi.js +1 -0
  44. package/dist/web/assets/engine-javascript-h-x4hGa4.js +141 -0
  45. package/dist/web/assets/index-CJ-Nk5DM.js +10 -0
  46. package/dist/web/assets/index-DxGXwXIP.css +2 -0
  47. package/dist/web/assets/json-qhed-kSA.js +1 -0
  48. package/dist/web/assets/loops-huxrr83I.js +1 -0
  49. package/dist/web/assets/operator-copy-BDZ_fazz.js +1 -0
  50. package/dist/web/assets/overview-DTxvvQ4b.js +1 -0
  51. package/dist/web/assets/rolldown-runtime-hePW80VL.js +1 -0
  52. package/dist/web/assets/routes-CbvAb2gn.js +1 -0
  53. package/dist/web/assets/run-drawer-3blrdBMZ.js +157 -0
  54. package/dist/web/assets/status-badge-BTkHx8qb.js +1 -0
  55. package/dist/web/assets/table-B8cLYNvq.js +1 -0
  56. package/dist/web/assets/typescript-bsJCZSQ-.js +1 -0
  57. package/dist/web/assets/useCompositeItem-CuLyiETJ.js +1 -0
  58. package/dist/web/assets/with-selector-N6m4X0X_.js +1 -0
  59. package/dist/web/index.html +9 -2
  60. package/package.json +9 -9
  61. package/dist/web/assets/index-CjRDHHWF.css +0 -2
  62. package/dist/web/assets/index-DmN0SkGf.js +0 -295
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-run.js","sourceRoot":"","sources":["../src/export-run.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAeA,OAAO,EAAU,KAAK,EAAiB,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAY,UAAU,EAAyC,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,cAAc,EAAqB,MAAM,cAAc,CAAC;AA4MjE,eAAO,MAAM,SAAS,mGA0DpB,CAAC;AAEH,eAAO,MAAM,YAAY,YAAa,MAAM,4NAsB3C,CAAC;AAEF,eAAO,MAAM,WAAW,YACb,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,WAC3B,MAAM,QACT,MAAM,yFAQb,CAAC"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAUA,OAAO,EAAU,KAAK,EAAsB,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAW,UAAU,EAAyC,MAAM,sBAAsB,CAAC;AAElG,OAAO,EAAE,cAAc,EAAqB,MAAM,cAAc,CAAC;AAiKjE,eAAO,MAAM,SAAS,mGAIrB,CAAC;AAEF,eAAO,MAAM,YAAY,YAAa,MAAM,4NA2C3C,CAAC;AAEF,eAAO,MAAM,WAAW,YACb,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,WAC3B,MAAM,QACT,MAAM,yFAQb,CAAC"}
package/dist/http.js CHANGED
@@ -1,104 +1,57 @@
1
1
  import { createServer } from "node:http";
2
- import { resolve, sep } from "node:path";
2
+ import { extname, resolve, sep } from "node:path";
3
3
  import { NodeHttpServer } from "@effect/platform-node";
4
- import { Attempt, Item, Loop, Repository, Run } from "@usine/core";
5
- import { BoardLaneId, BoardMove, ColdTranscriptRequest, EarlierTranscriptRequest, FactoryOverview, RunDetailView, TailTranscriptRequest, TranscriptCursor, } from "@usine/orchestrator";
6
- import { Effect, Layer, Match, Schema } from "effect";
7
- import { HttpBody, HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/unstable/http";
4
+ import { RepositoryName } from "@usine/core/repository";
5
+ import { BoardMove } from "@usine/orchestrator/operator";
6
+ import { OperatorApi, OperatorHttpError, OperatorHttpPolicy, } from "@usine/orchestrator/operator/http";
7
+ import { Effect, Layer, Schema } from "effect";
8
+ import { Headers, HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/unstable/http";
9
+ import { HttpApiBuilder, HttpApiError } from "effect/unstable/httpapi";
8
10
  import { FactoryBackend } from "./backend.js";
9
- const PathRun = Schema.Struct({ runId: Run.RunId });
10
- const PathLoop = Schema.Struct({ loop: Loop.LoopName });
11
- const RepositoryPart = Schema.String.check(Schema.isPattern(/^[A-Za-z0-9_.-]+$/u, { message: "Expected a repository path segment" }));
12
- const PathBoardItem = Schema.Struct({
13
- owner: RepositoryPart,
14
- repository: RepositoryPart,
15
- item: Schema.FiniteFromString.pipe(Schema.decodeTo(Item.Number)),
16
- });
17
- const BoardMoveBody = Schema.Struct({ toLane: BoardLaneId });
18
- const TranscriptCursorFromString = Schema.FiniteFromString.pipe(Schema.decodeTo(TranscriptCursor));
19
- const RunDetailSearch = Schema.Union([
20
- Schema.Struct({ _tag: Schema.Literal("ColdTranscriptRequest") }),
21
- Schema.Struct({
22
- _tag: Schema.Literal("TailTranscriptRequest"),
23
- after: TranscriptCursorFromString,
24
- }),
25
- Schema.Struct({
26
- _tag: Schema.Literal("EarlierTranscriptRequest"),
27
- attemptId: Attempt.AttemptId,
28
- before: TranscriptCursorFromString,
29
- }),
30
- ]);
31
- const ApiOk = Schema.Struct({ ok: Schema.Literal(true) });
32
- const ApiError = Schema.Struct({ error: Schema.String, message: Schema.String });
33
- const ok = HttpServerResponse.schemaJson(ApiOk);
34
- class InvalidRequestError extends Schema.TaggedError("@usine/server/InvalidRequestError")("InvalidRequestError", { message: Schema.String }) {
35
- }
36
- const errorResponse = (error) => {
37
- const response = (() => {
11
+ const operatorFailure = (error) => {
12
+ const message = (() => {
38
13
  switch (error._tag) {
39
14
  case "RunNotFoundError":
40
- return { status: 404, message: `Run ${error.runId} was not found.` };
15
+ return `Run ${error.runId} was not found.`;
41
16
  case "RunOperationRejectedError":
42
- return {
43
- status: 409,
44
- message: `Cannot ${error.operation} Run ${error.runId} while it is ${error.state}.`,
45
- };
17
+ return `Cannot ${error.operation} Run ${error.runId} while it is ${error.state}.`;
18
+ case "CycleBudgetResetRejectedError":
19
+ return `Cycle budget Ask ${error.askId} is no longer awaiting this answer.`;
46
20
  case "TranscriptAttemptNotFoundError":
47
- return {
48
- status: 404,
49
- message: `Attempt ${error.attemptId} does not belong to Run ${error.runId}.`,
50
- };
21
+ return `Attempt ${error.attemptId} does not belong to Run ${error.runId}.`;
51
22
  case "BackendUnavailableError":
52
- return { status: 503, message: error.message };
23
+ return error.message;
53
24
  case "BoardProjectNotFoundError":
54
- return { status: 404, message: `Project ${error.repository} was not found.` };
25
+ return `Project ${error.repository} was not found.`;
55
26
  case "BoardItemNotFoundError":
56
- return {
57
- status: 404,
58
- message: `Item ${error.repository}#${error.item} was not found on the Board.`,
59
- };
27
+ return `Item ${error.repository}#${error.item} was not found on the Board.`;
60
28
  case "BoardLaneNotFoundError":
61
- return { status: 404, message: `Board Lane ${error.lane} was not found.` };
29
+ return `Board Lane ${error.lane} was not found.`;
62
30
  case "BoardLaneReadOnlyError":
63
- return {
64
- status: 409,
65
- message: `Board Lane ${error.lane} is derived from Item state and cannot accept label moves.`,
66
- };
31
+ return `Board Lane ${error.lane} is read-only. Configure label-backed lanes in usine.yaml to enable moves.`;
67
32
  case "InstallationDiscoveryError":
68
33
  case "AppPermissionError":
69
- return { status: 503, message: error.message };
34
+ return error.message;
70
35
  case "GitHubApiError":
71
36
  case "InvalidGitHubResponseError":
72
- return { status: 502, message: error.message };
37
+ return error.message;
73
38
  case "GitHubRateLimitError":
74
- return { status: 503, message: error.message };
39
+ return error.message;
75
40
  case "EnginePersistenceError":
76
- return {
77
- status: 500,
78
- message: `Runtime persistence failed while trying to ${error.operation}.`,
79
- };
41
+ return `Runtime persistence failed while trying to ${error.operation}.`;
80
42
  case "AttemptCancellationError":
81
- return {
82
- status: 500,
83
- message: `Attempt ${error.attemptId} could not be canceled.`,
84
- };
85
- case "SchemaError":
86
- return { status: 400, message: `Invalid request: ${error.message}` };
87
- case "InvalidRequestError":
88
- return { status: 400, message: error.message };
89
- case "HttpBodyError":
90
- return { status: 500, message: "The server could not encode its response." };
43
+ return `Attempt ${error.attemptId} could not be canceled.`;
91
44
  }
92
45
  })();
93
- return HttpServerResponse.schemaJson(ApiError)({ error: error._tag, message: response.message }, { status: response.status }).pipe(Effect.orDie);
46
+ return new OperatorHttpError({ error: error._tag, message });
94
47
  };
95
48
  const LOOPBACK_HOSTS = new Set(["127.0.0.1", "localhost", "[::1]", "::1"]);
96
49
  /**
97
50
  * Cross-site request forgery guard. Browsers attach `Origin` to every
98
- * cross-origin request — including the "simple" POSTs this API accepts — so a
99
- * present, non-loopback origin can only be another site driving the
100
- * operator's browser, and its side effect must be refused before the handler
101
- * runs. Requests without the header (curl, same-origin GETs) pass through.
51
+ * cross-origin request, including the simple POSTs this API accepts, so a
52
+ * present non-loopback origin can only be another site driving the operator's
53
+ * browser and its request is refused before the handler runs. Requests without
54
+ * the header (curl, same-origin GETs) pass through.
102
55
  */
103
56
  const crossSiteOrigin = (request) => {
104
57
  const origin = request.headers.origin;
@@ -111,80 +64,66 @@ const crossSiteOrigin = (request) => {
111
64
  return true;
112
65
  }
113
66
  };
114
- const handled = (effect) => Effect.gen(function* () {
67
+ const policy = Layer.succeed(OperatorHttpPolicy)((handler, { endpoint }) => Effect.gen(function* () {
115
68
  const request = yield* HttpServerRequest.HttpServerRequest;
116
69
  if (crossSiteOrigin(request)) {
117
70
  yield* Effect.logWarning("Cross-site request to the operator API was refused", {
118
71
  origin: request.headers.origin,
119
72
  url: request.url,
120
73
  });
121
- return yield* HttpServerResponse.schemaJson(ApiError)({ error: "CrossSiteRequestError", message: "Cross-site requests are refused." }, { status: 403 }).pipe(Effect.orDie);
74
+ return yield* new OperatorHttpError({
75
+ error: "CrossSiteRequestError",
76
+ message: "Cross-site requests are refused.",
77
+ });
122
78
  }
123
- return yield* effect.pipe(Effect.catch(errorResponse));
124
- });
125
- const runAction = (action) => handled(Effect.gen(function* () {
126
- const backend = yield* FactoryBackend;
127
- const { runId } = yield* HttpRouter.schemaPathParams(PathRun);
128
- yield* action(backend, runId);
129
- return yield* ok({ ok: true });
130
- }));
131
- const loopAction = (action) => handled(Effect.gen(function* () {
132
- const backend = yield* FactoryBackend;
133
- const { loop } = yield* HttpRouter.schemaPathParams(PathLoop);
134
- yield* action(backend, loop);
135
- return yield* ok({ ok: true });
79
+ // The operator API has always accepted JSON regardless of Content-Type,
80
+ // including simple browser POSTs. Keep that convention behind the origin guard.
81
+ const decoded = endpoint.payload.size === 0
82
+ ? handler
83
+ : handler.pipe(Effect.provideService(HttpServerRequest.HttpServerRequest, request.modify({
84
+ headers: Headers.set(request.headers, "content-type", "application/json"),
85
+ })));
86
+ return yield* decoded.pipe(Effect.catch((error) => {
87
+ if (!HttpApiError.HttpApiSchemaError.is(error))
88
+ return Effect.fail(error);
89
+ const responseEncoding = error.kind === "Body" || error.kind === "ResponseHeaders";
90
+ return Effect.fail(new OperatorHttpError({
91
+ error: responseEncoding
92
+ ? "HttpBodyError"
93
+ : error.kind === "Payload"
94
+ ? "InvalidRequestError"
95
+ : "SchemaError",
96
+ message: responseEncoding
97
+ ? "The server could not encode its response."
98
+ : `Invalid request: ${error.cause.message}`,
99
+ }));
100
+ }));
136
101
  }));
137
- const transcriptRequest = (request) => {
138
- const params = new URL(request.url, "http://localhost").searchParams;
139
- const after = params.get("after");
140
- const before = params.get("before");
141
- const attemptId = params.get("attempt");
142
- const input = after === null && before === null && attemptId === null
143
- ? { _tag: "ColdTranscriptRequest" }
144
- : after !== null && before === null && attemptId === null
145
- ? { _tag: "TailTranscriptRequest", after }
146
- : after === null && before !== null && attemptId !== null
147
- ? { _tag: "EarlierTranscriptRequest", attemptId, before }
148
- : { _tag: "InvalidTranscriptRequest" };
149
- return Schema.decodeUnknownEffect(RunDetailSearch)(input, { onExcessProperty: "error" }).pipe(Effect.map((search) => Match.valueTags(search, {
150
- ColdTranscriptRequest: () => new ColdTranscriptRequest(),
151
- TailTranscriptRequest: ({ after }) => new TailTranscriptRequest({ after }),
152
- EarlierTranscriptRequest: ({ attemptId, before }) => new EarlierTranscriptRequest({ attemptId, before }),
102
+ const acknowledge = (effect) => Effect.as(effect, { ok: true });
103
+ const fromBackend = (use) => Effect.flatMap(FactoryBackend, use).pipe(Effect.mapError(operatorFailure));
104
+ const handlers = HttpApiBuilder.group(OperatorApi, "operator", (routes) => routes
105
+ .handle("overview", () => fromBackend((backend) => backend.overview))
106
+ .handle("resetCycleBudget", ({ payload }) => fromBackend((backend) => backend.resetCycleBudget(payload.askId)).pipe(acknowledge))
107
+ .handle("detail", ({ params, query }) => fromBackend((backend) => backend.detail(params.runId, query)))
108
+ .handle("approve", ({ params }) => fromBackend((backend) => backend.approve(params.runId)).pipe(acknowledge))
109
+ .handle("retry", ({ params }) => fromBackend((backend) => backend.retry(params.runId)).pipe(acknowledge))
110
+ .handle("cancel", ({ params }) => fromBackend((backend) => backend.cancel(params.runId)).pipe(acknowledge))
111
+ .handle("moveBoardItem", Effect.fn("Http.boardMove")(function* ({ params, payload }) {
112
+ const repository = yield* Schema.decodeUnknownEffect(RepositoryName)(`${params.owner}/${params.repository}`).pipe(Effect.mapError((error) => new OperatorHttpError({
113
+ error: "SchemaError",
114
+ message: `Invalid request: ${error.message}`,
153
115
  })));
154
- };
155
- const boardMove = Effect.fn("Http.boardMove")(function* () {
156
- const { owner, repository: name, item } = yield* HttpRouter.schemaPathParams(PathBoardItem);
157
- const repository = yield* Schema.decodeUnknownEffect(Repository.Name)(`${owner}/${name}`);
158
- const { toLane } = yield* HttpServerRequest.schemaBodyJson(BoardMoveBody, {
159
- onExcessProperty: "error",
160
- }).pipe(Effect.mapError((error) => new InvalidRequestError({ message: `Invalid request: ${error.message}` })));
161
- return new BoardMove({ repository, item, toLane });
162
- });
163
- export const apiRoutes = HttpRouter.addAll([
164
- HttpRouter.route("GET", "/api/overview", handled(Effect.gen(function* () {
165
- const backend = yield* FactoryBackend;
166
- return yield* HttpServerResponse.schemaJson(FactoryOverview)(yield* backend.overview);
167
- }))),
168
- HttpRouter.route("GET", "/api/runs/:runId", (request) => handled(Effect.gen(function* () {
169
- const backend = yield* FactoryBackend;
170
- const { runId } = yield* HttpRouter.schemaPathParams(PathRun);
171
- return yield* HttpServerResponse.schemaJson(RunDetailView)(yield* backend.detail(runId, yield* transcriptRequest(request)));
172
- }))),
173
- HttpRouter.route("POST", "/api/runs/:runId/approve", runAction((backend, id) => backend.approve(id))),
174
- HttpRouter.route("POST", "/api/projects/:owner/:repository/items/:item/lane", handled(Effect.gen(function* () {
175
- const backend = yield* FactoryBackend;
176
- yield* backend.moveBoardItem(yield* boardMove());
177
- return yield* ok({ ok: true });
178
- }))),
179
- HttpRouter.route("POST", "/api/runs/:runId/retry", runAction((backend, id) => backend.retry(id))),
180
- HttpRouter.route("POST", "/api/runs/:runId/cancel", runAction((backend, id) => backend.cancel(id))),
181
- HttpRouter.route("POST", "/api/loops/:loop/pause", loopAction((backend, loop) => backend.pause(loop))),
182
- HttpRouter.route("POST", "/api/loops/:loop/unpause", loopAction((backend, loop) => backend.unpause(loop))),
183
- ]);
116
+ yield* Effect.annotateCurrentSpan({ repository, item: params.item, lane: payload.toLane });
117
+ return yield* fromBackend((backend) => backend.moveBoardItem(new BoardMove({ repository, item: params.item, toLane: payload.toLane }))).pipe(acknowledge);
118
+ }))
119
+ .handle("pause", ({ params }) => fromBackend((backend) => backend.pause(params.loop)).pipe(acknowledge))
120
+ .handle("unpause", ({ params }) => fromBackend((backend) => backend.unpause(params.loop)).pipe(acknowledge)));
121
+ export const apiRoutes = HttpApiBuilder.layer(OperatorApi).pipe(Layer.provide(handlers), Layer.provide(policy), Layer.provide(NodeHttpServer.layerHttpServices));
184
122
  export const staticRoutes = (webRoot) => {
185
123
  const assetsRoot = resolve(webRoot, "assets");
124
+ const applicationShell = HttpServerResponse.file(resolve(webRoot, "index.html"));
186
125
  return HttpRouter.addAll([
187
- HttpRouter.route("GET", "/", HttpServerResponse.file(resolve(webRoot, "index.html"))),
126
+ HttpRouter.route("GET", "/", applicationShell),
188
127
  HttpRouter.route("GET", "/assets/*", (request) => Effect.gen(function* () {
189
128
  const pathname = decodeURIComponent(new URL(request.url, "http://localhost").pathname);
190
129
  const asset = resolve(webRoot, pathname.slice(1));
@@ -196,6 +135,23 @@ export const staticRoutes = (webRoot) => {
196
135
  message: String(error),
197
136
  }).pipe(Effect.as(HttpServerResponse.text("Not found", { status: 404 })))));
198
137
  })),
138
+ HttpRouter.route("GET", "*", (request) => Effect.gen(function* () {
139
+ const pathname = decodeURIComponent(new URL(request.url, "http://localhost").pathname);
140
+ const reservedNamespace = pathname === "/api" ||
141
+ pathname.startsWith("/api/") ||
142
+ pathname === "/assets" ||
143
+ pathname.startsWith("/assets/");
144
+ const hasFileExtension = extname(pathname) !== "";
145
+ if (reservedNamespace || hasFileExtension) {
146
+ yield* Effect.logDebug("Request was not eligible for the application shell fallback", {
147
+ pathname,
148
+ reason: reservedNamespace ? "reserved-namespace" : "file-extension",
149
+ });
150
+ return HttpServerResponse.text("Not found", { status: 404 });
151
+ }
152
+ yield* Effect.logDebug("Serving the application shell for a client route", { pathname });
153
+ return yield* applicationShell;
154
+ })),
199
155
  ]);
200
156
  };
201
157
  export const serverLayer = (backend, webRoot, port) => {
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,3 @@
1
- /**
2
- * @usine/server — the usine orchestrator as a headless server: a thin CLI over
3
- * @usine/orchestrator that serves the web UI.
4
- *
5
- * The published `usine` binary lives in main.ts. Application behavior stays
6
- * in @usine/orchestrator; this package owns only Node and HTTP adaptation.
7
- */
1
+ /** This package publishes the `usine` binary from main.ts and no library surface; the empty export keeps its TypeScript project explicit. */
8
2
  export {};
9
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6IAA6I;AAE7I,OAAO,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,3 @@
1
- /**
2
- * @usine/server — the usine orchestrator as a headless server: a thin CLI over
3
- * @usine/orchestrator that serves the web UI.
4
- *
5
- * The published `usine` binary lives in main.ts. Application behavior stays
6
- * in @usine/orchestrator; this package owns only Node and HTTP adaptation.
7
- */
1
+ /** This package publishes the `usine` binary from main.ts and no library surface; the empty export keeps its TypeScript project explicit. */
8
2
  export {};
9
3
  //# 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;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6IAA6I;AAE7I,OAAO,EAAE,CAAC"}
package/dist/main.js CHANGED
@@ -2,20 +2,30 @@
2
2
  import { NodeRuntime, NodeServices } from "@effect/platform-node";
3
3
  import { Console, Effect, Match, Option } from "effect";
4
4
  import { CLI_USAGE, packageVersion, parseCli } from "./cli.js";
5
+ const exitWith = (message) => Console.error(message).pipe(Effect.andThen(Effect.sync(() => {
6
+ process.exitCode = 1;
7
+ })));
5
8
  const main = Effect.gen(function* () {
6
- const command = yield* parseCli(process.argv.slice(2), Option.fromNullishOr(process.env.USINE_PORT));
9
+ const command = yield* parseCli(process.argv.slice(2), {
10
+ port: Option.fromNullishOr(process.env.USINE_PORT),
11
+ allowVolatileInstance: Option.fromNullishOr(process.env.USINE_ALLOW_VOLATILE_INSTANCE),
12
+ });
7
13
  return yield* Match.valueTags(command, {
8
14
  HelpCommand: () => Console.log(CLI_USAGE),
9
15
  VersionCommand: () => Effect.flatMap(packageVersion(), Console.log),
10
- UpCommand: ({ port }) => Effect.flatMap(Effect.promise(() => import("./up.js")), ({ up }) => up(port)),
16
+ ExportRunCommand: ({ runId, output }) => Effect.flatMap(Effect.promise(() => import("./export-run.js")), ({ exportRun }) => exportRun(runId, output)),
17
+ BackupCommand: ({ output }) => Effect.flatMap(Effect.promise(() => import("./backup.js")), ({ backup }) => backup(output)),
18
+ UpCommand: ({ port, allowVolatileInstance }) => Effect.flatMap(Effect.promise(() => import("./up.js")), ({ up }) => up(port, allowVolatileInstance)),
11
19
  });
12
20
  }).pipe(Effect.provide(NodeServices.layer), Effect.catchTags({
13
- CliUsageError: ({ message }) => Console.error(message).pipe(Effect.andThen(Effect.sync(() => {
14
- process.exitCode = 1;
15
- }))),
16
- PortInUseError: ({ port }) => Console.error(`Port ${port} is already in use. Stop the process using it or run usine up --port <port>.`).pipe(Effect.andThen(Effect.sync(() => {
17
- process.exitCode = 1;
18
- }))),
21
+ CliUsageError: ({ message }) => exitWith(message),
22
+ RunNotFoundError: ({ runId }) => exitWith(`Run ${runId} was not found.`),
23
+ RunExportError: ({ runId, operation, path, reason }) => exitWith(`Could not ${operation} evidence for Run ${runId} at ${path} (${reason}). Check the instance database and choose a new writable output path.`),
24
+ RuntimeStoreBackupError: ({ operation, source, destination, reason }) => exitWith(Match.value(operation).pipe(Match.when("open", () => `Could not open ${source} (${reason}). Run usine backup from the instance folder containing .usine/runtime.sqlite.`), Match.when("copy", () => `Could not copy ${source} to ${destination} (${reason}). Check the source database and the output directory's free space and permissions.`), Match.when("stage", () => `Could not create a backup at ${destination} (${reason}). Choose an existing writable output directory.`), Match.when("publish", () => reason === "AlreadyExists"
25
+ ? `Could not save the backup to ${destination} (${reason}). Choose a different filename; the destination already exists.`
26
+ : `Could not save the backup to ${destination} (${reason}). Check the destination path and permissions; its filesystem must support hard links.`), Match.exhaustive)),
27
+ VolatileInstanceDirectoryError: ({ directory, root }) => exitWith(`Refusing to start: ${directory} sits under ${root}, which the OS clears. The runtime store there is the only copy of every Run and transcript. Move the instance folder, or pass --allow-volatile-instance (or USINE_ALLOW_VOLATILE_INSTANCE=1) to proceed anyway.`),
28
+ PortInUseError: ({ port }) => exitWith(`Port ${port} is already in use. Stop the process using it or run usine up --port <port>.`),
19
29
  }));
20
30
  NodeRuntime.runMain(main);
21
31
  //# sourceMappingURL=main.js.map
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE/D,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,CAC7B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACrB,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAC7C,CAAC;IACF,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;QACrC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QACzC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC;QACnE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACtB,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EACvC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CACrB;KACJ,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAClC,MAAM,CAAC,SAAS,CAAC;IACf,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CACzB,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CACH,CACF;IACH,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAC3B,OAAO,CAAC,KAAK,CACX,QAAQ,IAAI,8EAA8E,CAC3F,CAAC,IAAI,CACJ,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CACH,CACF;CACJ,CAAC,CACH,CAAC;AAEF,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Deferred, Duration, Effect, Scope } from "effect";
2
+ /** Protects startup and running work with a bounded drain before runtime resources close. */
3
+ export declare const withGracefulShutdown: <A, E, R, E2, R2>(startup: Effect.Effect<{
4
+ readonly running: Effect.Effect<A, E, R>;
5
+ readonly drain: Effect.Effect<void>;
6
+ }, E2, R2>, requested: Deferred.Deferred<void>, deadline: Duration.Duration) => Effect.Effect<A, E | E2, Exclude<Exclude<R, Scope.Scope>, Scope.Scope> | Exclude<Exclude<R2, Scope.Scope>, Scope.Scope>>;
7
+ //# sourceMappingURL=shutdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAuB,KAAK,EAAE,MAAM,QAAQ,CAAC;AAuBhF,6FAA6F;AAC7F,eAAO,MAAM,oBAAoB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,WACzC,MAAM,CAAC,MAAM,CACpB;IACE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACrC,EACD,EAAE,EACF,EAAE,CACH,aACU,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YACxB,QAAQ,CAAC,QAAQ,6HAsE1B,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { Deferred, Duration, Effect, Exit, Fiber, Option, Scope } from "effect";
2
+ // This listener runs before NodeRuntime's main-fiber interruption. Admission is
3
+ // closed synchronously at the signal boundary, including during Layer startup.
4
+ const observeSignals = (requested, forced) => Effect.acquireRelease(Effect.sync(() => {
5
+ let received = 0;
6
+ const onSignal = () => {
7
+ received += 1;
8
+ Deferred.doneUnsafe(received === 1 ? requested : forced, Effect.void);
9
+ };
10
+ process.prependListener("SIGINT", onSignal);
11
+ process.prependListener("SIGTERM", onSignal);
12
+ return onSignal;
13
+ }), (onSignal) => Effect.sync(() => {
14
+ process.removeListener("SIGINT", onSignal);
15
+ process.removeListener("SIGTERM", onSignal);
16
+ }));
17
+ /** Protects startup and running work with a bounded drain before runtime resources close. */
18
+ export const withGracefulShutdown = (startup, requested, deadline) => Effect.scoped(Effect.gen(function* () {
19
+ const forced = yield* Deferred.make();
20
+ yield* observeSignals(requested, forced);
21
+ // Acquired before the forks: their shutdown completes while runtime
22
+ // resources (database, executor, HTTP) are still available.
23
+ const runtimeScope = yield* Effect.acquireRelease(Scope.make(), (scope, exit) => Scope.close(scope, exit));
24
+ const started = yield* Effect.forkScoped(Scope.provide(startup, runtimeScope));
25
+ const running = yield* Effect.forkScoped(Fiber.join(started).pipe(Effect.flatMap(({ running }) => Deferred.isDone(requested).pipe(Effect.flatMap((stopped) => stopped ? Effect.never : Scope.provide(running, runtimeScope))))));
26
+ return yield* Fiber.join(running).pipe(Effect.onInterrupt(() => Effect.gen(function* () {
27
+ yield* Deferred.succeed(requested, undefined);
28
+ yield* Effect.logInfo("Orchestrator shutdown started", {
29
+ deadlineMilliseconds: Duration.toMillis(deadline),
30
+ });
31
+ const stopping = yield* Effect.forkScoped(Fiber.interrupt(running).pipe(Effect.interruptible), { startImmediately: true });
32
+ const drain = Fiber.join(started).pipe(Effect.matchEffect({
33
+ onFailure: (error) => Effect.logWarning("Runtime startup failed during shutdown", { error }),
34
+ onSuccess: ({ drain }) => drain,
35
+ }));
36
+ // Finalizers are uninterruptible; raced waits must remain
37
+ // interruptible so the losing drain or signal wait can be stopped.
38
+ const outcome = yield* Effect.raceFirst(Effect.all([drain, Fiber.join(stopping)], { concurrency: "unbounded" }).pipe(Effect.timeoutOption(deadline), Effect.map((result) => Option.isSome(result) ? "drained" : "deadline"), Effect.interruptible), Deferred.await(forced).pipe(Effect.as("forced"), Effect.interruptible));
39
+ if (outcome === "drained") {
40
+ yield* Effect.logInfo("Orchestrator exiting after graceful drain");
41
+ }
42
+ else {
43
+ yield* Effect.logWarning("Orchestrator stopping before drain completed; unfinished Attempts will recover on restart", { reason: outcome });
44
+ // Cancel Attempts now, even if a trigger's finalizer is slow.
45
+ yield* Effect.all([Fiber.interrupt(started), Scope.close(runtimeScope, Exit.interrupt())], { concurrency: "unbounded" });
46
+ }
47
+ })));
48
+ }));
49
+ //# sourceMappingURL=shutdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"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"}
package/dist/up.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { Effect } from "effect";
2
- import { type Port } from "./cli.ts";
3
- export declare const up: (port: Port) => Effect.Effect<never, import("@usine/github").AppAuthenticationError | import("@usine/engine").AttemptCancellationError | import("@usine/executor").CredentialUnavailableError | import("@usine/engine").EnginePersistenceError | import("@usine/executor").ExecutorOperationError | import("@usine/config").FactoryConfigError | import("./cli.ts").PortInUseError | import("@usine/engine").RunNotFoundError | import("@usine/engine").RunOperationRejectedError | import("./cli.ts").ServerStartError | import("@usine/orchestrator").UnsupportedWorkerError | import("@usine/executor").WorkerCapabilityError, import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner>;
2
+ import { type Port, VolatileInstanceDirectoryError } from "./cli.ts";
3
+ export declare const up: (port: Port, allowVolatileInstance: boolean) => Effect.Effect<never, import("@usine/github/github-app").AppAuthenticationError | import("@usine/engine/engine").AttemptCancellationError | import("@usine/executor").CredentialUnavailableError | import("@usine/engine/engine").EnginePersistenceError | import("@usine/executor").ExecutorOperationError | import("@usine/config/file").FactoryConfigError | import("./cli.ts").PortInUseError | import("@usine/engine/engine").RunNotFoundError | import("@usine/engine/engine").RunOperationRejectedError | import("./cli.ts").ServerStartError | import("@usine/orchestrator/scheduler").UnsupportedWorkerError | VolatileInstanceDirectoryError | import("@usine/executor").WorkerCapabilityError, import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner>;
4
4
  //# sourceMappingURL=up.d.ts.map
package/dist/up.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../src/up.ts"],"names":[],"mappings":"AAUA,OAAO,EAAoB,MAAM,EAAiB,MAAM,QAAQ,CAAC;AAEjE,OAAO,EAAE,KAAK,IAAI,EAAiC,MAAM,UAAU,CAAC;AA4CpE,eAAO,MAAM,EAAE,SAAU,IAAI,iqBAsD1B,CAAC"}
1
+ {"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../src/up.ts"],"names":[],"mappings":"AAaA,OAAO,EAML,MAAM,EAKP,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,KAAK,IAAI,EACT,8BAA8B,EAK/B,MAAM,UAAU,CAAC;AAkElB,eAAO,MAAM,EAAE,SAAU,IAAI,yBAAyB,OAAO,wvBAsE1D,CAAC"}