@knpkv/herdr-coordinator 0.2.1 → 0.3.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 +81 -3
- package/dist/chat.d.ts +136 -10
- package/dist/chat.d.ts.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/model.d.ts +2 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +2 -0
- package/dist/model.js.map +1 -1
- package/dist/orchestrator-errors.d.ts +54 -0
- package/dist/orchestrator-errors.d.ts.map +1 -0
- package/dist/orchestrator-errors.js +36 -0
- package/dist/orchestrator-errors.js.map +1 -0
- package/dist/orchestrator-model.d.ts +1160 -0
- package/dist/orchestrator-model.d.ts.map +1 -0
- package/dist/orchestrator-model.js +240 -0
- package/dist/orchestrator-model.js.map +1 -0
- package/dist/orchestrator.d.ts +34 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +853 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/pull-request-evidence-model.d.ts +153 -0
- package/dist/pull-request-evidence-model.d.ts.map +1 -0
- package/dist/pull-request-evidence-model.js +136 -0
- package/dist/pull-request-evidence-model.js.map +1 -0
- package/dist/pull-request-evidence.d.ts +19 -0
- package/dist/pull-request-evidence.d.ts.map +1 -0
- package/dist/pull-request-evidence.js +102 -0
- package/dist/pull-request-evidence.js.map +1 -0
- package/dist/store.d.ts +2 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +19 -37
- package/dist/store.js.map +1 -1
- package/package.json +9 -7
package/dist/store.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { openPrivateSqlite } from "@knpkv/herdr-fleet/sqlite";
|
|
2
|
+
import { Effect, Schema } from "effect";
|
|
3
3
|
import { ChatHistoryError } from "./errors.js";
|
|
4
4
|
import { chatHistoryMaxEntries, StoredChatTurn } from "./model.js";
|
|
5
5
|
const storeError = (operation) => (cause) => new ChatHistoryError({ cause, detail: String(cause), operation });
|
|
6
|
+
const fromPrivateDatabaseError = (error) => new ChatHistoryError({ cause: error.cause, detail: String(error.cause), operation: `chat.${error.operation}` });
|
|
6
7
|
const StoredTurnRow = Schema.Struct({ record: Schema.String });
|
|
7
8
|
const decodeTurn = (encoded) => Effect.try({
|
|
8
9
|
try: () => Schema.decodeUnknownSync(StoredChatTurn)(JSON.parse(encoded)),
|
|
@@ -11,40 +12,25 @@ const decodeTurn = (encoded) => Effect.try({
|
|
|
11
12
|
const decodeRow = (operation, row) => Schema.decodeUnknownEffect(StoredTurnRow)(row).pipe(Effect.mapError(storeError(operation)), Effect.flatMap(({ record }) => decodeTurn(record)));
|
|
12
13
|
export class ChatStore {
|
|
13
14
|
#database;
|
|
14
|
-
#
|
|
15
|
+
#secureFiles;
|
|
15
16
|
path;
|
|
16
|
-
constructor(path,
|
|
17
|
+
constructor(path, opened) {
|
|
17
18
|
this.path = path;
|
|
18
|
-
this.#
|
|
19
|
-
this.#
|
|
20
|
-
try {
|
|
21
|
-
this.#database.exec(`
|
|
22
|
-
PRAGMA journal_mode = WAL;
|
|
23
|
-
CREATE TABLE IF NOT EXISTS chat_turns (
|
|
24
|
-
id TEXT PRIMARY KEY,
|
|
25
|
-
job_id TEXT NOT NULL UNIQUE,
|
|
26
|
-
created_at INTEGER NOT NULL,
|
|
27
|
-
record TEXT NOT NULL
|
|
28
|
-
);
|
|
29
|
-
`);
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
this.#database.close();
|
|
33
|
-
throw error;
|
|
34
|
-
}
|
|
19
|
+
this.#database = opened.database;
|
|
20
|
+
this.#secureFiles = opened.secureFiles.pipe(Effect.mapError(fromPrivateDatabaseError));
|
|
35
21
|
}
|
|
36
22
|
static open = Effect.fn("ChatStore.open")(function* (path) {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return
|
|
23
|
+
const opened = yield* openPrivateSqlite(path, {
|
|
24
|
+
initialize: (database) => database.exec(`
|
|
25
|
+
CREATE TABLE IF NOT EXISTS chat_turns (
|
|
26
|
+
id TEXT PRIMARY KEY,
|
|
27
|
+
job_id TEXT NOT NULL UNIQUE,
|
|
28
|
+
created_at INTEGER NOT NULL,
|
|
29
|
+
record TEXT NOT NULL
|
|
30
|
+
);
|
|
31
|
+
`)
|
|
32
|
+
}).pipe(Effect.mapError(fromPrivateDatabaseError));
|
|
33
|
+
return new ChatStore(path, opened);
|
|
48
34
|
});
|
|
49
35
|
put = Effect.fn("ChatStore.put")(function* (turn) {
|
|
50
36
|
const stored = yield* Effect.try({
|
|
@@ -80,11 +66,7 @@ export class ChatStore {
|
|
|
80
66
|
return yield* Effect.forEach(rows, (row) => decodeRow("chat.list", row));
|
|
81
67
|
});
|
|
82
68
|
secureFiles() {
|
|
83
|
-
|
|
84
|
-
const files = [this.path, `${this.path}-wal`, `${this.path}-shm`];
|
|
85
|
-
return Effect.forEach(files, (path) => fileSystem.exists(path).pipe(Effect.mapError(storeError("chat.secureExists")), Effect.flatMap((exists) => exists
|
|
86
|
-
? fileSystem.chmod(path, 0o600).pipe(Effect.mapError(storeError("chat.secureChmod")))
|
|
87
|
-
: Effect.void)), { discard: true });
|
|
69
|
+
return this.#secureFiles;
|
|
88
70
|
}
|
|
89
71
|
close() {
|
|
90
72
|
this.#database.close();
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knpkv/herdr-coordinator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Persistent coordinator chat contracts for Herdr fleet jobs",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "knpkv",
|
|
@@ -34,16 +34,18 @@
|
|
|
34
34
|
"node": ">=26"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"effect": "4.0.0
|
|
38
|
-
"@
|
|
37
|
+
"@effect/platform-node": "4.0.0",
|
|
38
|
+
"@effect/sql-sqlite-node": "4.0.0",
|
|
39
|
+
"effect": "4.0.0",
|
|
40
|
+
"@knpkv/herdr-fleet": "^0.5.0",
|
|
41
|
+
"@knpkv/herdr-work": "^0.5.1"
|
|
39
42
|
},
|
|
40
43
|
"devDependencies": {
|
|
41
|
-
"@effect/
|
|
42
|
-
"@
|
|
43
|
-
"@types/node": "^26.2.0",
|
|
44
|
+
"@effect/vitest": "4.0.0",
|
|
45
|
+
"@types/node": "^26.6.4",
|
|
44
46
|
"rimraf": "^6.1.3",
|
|
45
47
|
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
46
|
-
"vitest": "^
|
|
48
|
+
"vitest": "^5.0.3"
|
|
47
49
|
},
|
|
48
50
|
"scripts": {
|
|
49
51
|
"build": "rimraf dist && tsc -b --force",
|