@usine/engine 0.5.1-next.248.gfd4123b → 0.5.1-next.250.ge13fcb6
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
|
@@ -176,3 +176,5 @@ pnpm --filter @usine/engine db:generate --name <migration_name>
|
|
|
176
176
|
## Attention acknowledgements
|
|
177
177
|
|
|
178
178
|
`AttentionAcknowledgements` from `@usine/engine/attention` records a dismissal by entry ID and content revision, with the configured operator login and time. Repeating the same dismissal preserves the first record. Undo deletes only that revision. The local runtime store persists these records and invalidates operator projections when they change. Run state, failure resolution, and cycle budgets stay unchanged.
|
|
179
|
+
|
|
180
|
+
`prune(current)` deletes acknowledgements whose ID and revision don't match any of the supplied current entries. Pass the complete list, including dismissed entries; an empty list clears all acknowledgements. Pruning preserves matching records and invalidates projections only when it deletes rows.
|
|
@@ -6,6 +6,11 @@ declare const AttentionAcknowledgements_base: Context.ServiceClass<AttentionAckn
|
|
|
6
6
|
readonly list: () => Effect.Effect<ReadonlyArray<AttentionAcknowledgement>, EnginePersistenceError>;
|
|
7
7
|
readonly dismiss: (acknowledgement: AttentionAcknowledgement) => Effect.Effect<void, EnginePersistenceError>;
|
|
8
8
|
readonly undo: (key: AttentionKey) => Effect.Effect<void, EnginePersistenceError>;
|
|
9
|
+
/**
|
|
10
|
+
* Deletes acknowledgements without a matching current ID and revision.
|
|
11
|
+
* Include dismissed entries in `current`; an empty list clears all acknowledgements.
|
|
12
|
+
*/
|
|
13
|
+
readonly prune: (current: ReadonlyArray<AttentionKey>) => Effect.Effect<void, EnginePersistenceError>;
|
|
9
14
|
}>;
|
|
10
15
|
/** Stores attention acknowledgements without changing runs or asks. */
|
|
11
16
|
export declare class AttentionAcknowledgements extends AttentionAcknowledgements_base {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attention.d.ts","sourceRoot":"","sources":["../../src/attention/attention.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAY,MAAM,EAAE,KAAK,EAAkB,MAAM,QAAQ,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;;mBAYjD,MAAM,MAAM,CAAC,MAAM,CAChC,aAAa,CAAC,wBAAwB,CAAC,EACvC,sBAAsB,CACvB;sBACiB,CAChB,eAAe,EAAE,wBAAwB,KACtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,CAAC;mBACjC,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,CAAC;;
|
|
1
|
+
{"version":3,"file":"attention.d.ts","sourceRoot":"","sources":["../../src/attention/attention.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAY,MAAM,EAAE,KAAK,EAAkB,MAAM,QAAQ,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;;mBAYjD,MAAM,MAAM,CAAC,MAAM,CAChC,aAAa,CAAC,wBAAwB,CAAC,EACvC,sBAAsB,CACvB;sBACiB,CAChB,eAAe,EAAE,wBAAwB,KACtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,CAAC;mBACjC,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACjF;;;OAGG;oBACa,CACd,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,KACjC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,CAAC;;AAlBpD,uEAAuE;AACvE,qBAAa,yBAA0B,SAAQ,8BAmBD;IAC5C,MAAM,CAAC,QAAQ,CAAC,KAAK,6DAqEnB;CACH;AAED,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { and, eq } from "drizzle-orm";
|
|
1
|
+
import { and, eq, sql } from "drizzle-orm";
|
|
2
2
|
import { Context, DateTime, Effect, Layer, Option, Schema } from "effect";
|
|
3
3
|
import { RunDatabase } from "../database/database.js";
|
|
4
4
|
import { attentionAcknowledgements } from "../database/schema.js";
|
|
@@ -15,6 +15,31 @@ export class AttentionAcknowledgements extends Context.Service()("@usine/engine/
|
|
|
15
15
|
const rows = yield* database.select().from(attentionAcknowledgements).execute();
|
|
16
16
|
return yield* decodeRows(rows, { onExcessProperty: "error" });
|
|
17
17
|
}, persistence("read attention acknowledgements")),
|
|
18
|
+
prune: Effect.fn("AttentionAcknowledgements.prune")(function* (current) {
|
|
19
|
+
yield* Effect.annotateCurrentSpan({ currentEntries: current.length });
|
|
20
|
+
const removed = yield* database
|
|
21
|
+
.delete(attentionAcknowledgements)
|
|
22
|
+
.where(sql `not exists (
|
|
23
|
+
select 1 from json_each(${JSON.stringify(current)}) as current
|
|
24
|
+
where json_extract(current.value, '$.id') = ${attentionAcknowledgements.id}
|
|
25
|
+
and json_extract(current.value, '$.revision') = ${attentionAcknowledgements.revision}
|
|
26
|
+
)`)
|
|
27
|
+
.returning({ id: attentionAcknowledgements.id })
|
|
28
|
+
.execute();
|
|
29
|
+
if (removed.length === 0) {
|
|
30
|
+
yield* Effect.logDebug("Attention acknowledgements match current entries", {
|
|
31
|
+
currentEntries: current.length,
|
|
32
|
+
});
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const fields = {
|
|
36
|
+
currentEntries: current.length,
|
|
37
|
+
prunedEntries: removed.length,
|
|
38
|
+
needIds: removed.map(({ id }) => id),
|
|
39
|
+
};
|
|
40
|
+
yield* Effect.annotateCurrentSpan(fields);
|
|
41
|
+
yield* Effect.logInfo("Pruned obsolete attention acknowledgements", fields);
|
|
42
|
+
}, persistence("prune attention acknowledgements")),
|
|
18
43
|
dismiss: Effect.fn("AttentionAcknowledgements.dismiss")(function* (acknowledgement) {
|
|
19
44
|
yield* Effect.annotateCurrentSpan({ needId: acknowledgement.id });
|
|
20
45
|
yield* database
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attention.js","sourceRoot":"","sources":["../../src/attention/attention.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"attention.js","sourceRoot":"","sources":["../../src/attention/attention.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,UAAU,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACtF,MAAM,WAAW,GACf,CAAC,SAAiB,EAAE,EAAE,CACtB,CAAU,MAA8B,EAAE,EAAE,CAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9F,uEAAuE;AACvE,MAAM,OAAO,yBAA0B,SAAQ,OAAO,CAAC,OAAO,EAmB3D,CAAC,yCAAyC,CAAC;IAC5C,MAAM,CAAU,KAAK,GAAG,KAAK,CAAC,MAAM,CAClC,yBAAyB,EACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;QACpC,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC;gBACzD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,OAAO,EAAE,CAAC;gBAChF,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC,EAAE,WAAW,CAAC,iCAAiC,CAAC,CAAC;YAClD,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,iCAAiC,CAAC,CAAC,QAAQ,CAAC,EAC3D,OAAoC;gBAEpC,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ;qBAC5B,MAAM,CAAC,yBAAyB,CAAC;qBACjC,KAAK,CAAC,GAAG,CAAA;wCACkB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;4DACH,yBAAyB,CAAC,EAAE;kEACtB,yBAAyB,CAAC,QAAQ;cACtF,CAAC;qBACF,SAAS,CAAC,EAAE,EAAE,EAAE,yBAAyB,CAAC,EAAE,EAAE,CAAC;qBAC/C,OAAO,EAAE,CAAC;gBACb,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,kDAAkD,EAAE;wBACzE,cAAc,EAAE,OAAO,CAAC,MAAM;qBAC/B,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,MAAM,MAAM,GAAG;oBACb,cAAc,EAAE,OAAO,CAAC,MAAM;oBAC9B,aAAa,EAAE,OAAO,CAAC,MAAM;oBAC7B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;iBACrC,CAAC;gBACF,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBAC1C,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,4CAA4C,EAAE,MAAM,CAAC,CAAC;YAC9E,CAAC,EAAE,WAAW,CAAC,kCAAkC,CAAC,CAAC;YACnD,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,mCAAmC,CAAC,CAAC,QAAQ,CAAC,EAC/D,eAAyC;gBAEzC,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClE,KAAK,CAAC,CAAC,QAAQ;qBACZ,MAAM,CAAC,yBAAyB,CAAC;qBACjC,MAAM,CAAC;oBACN,GAAG,eAAe;oBAClB,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC;oBAC1D,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC;iBAC7D,CAAC;qBACD,mBAAmB,EAAE;qBACrB,OAAO,EAAE,CAAC;gBACb,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,EAAE;oBACjD,MAAM,EAAE,eAAe,CAAC,EAAE;oBAC1B,WAAW,EAAE,eAAe,CAAC,WAAW;iBACzC,CAAC,CAAC;YACL,CAAC,EAAE,WAAW,CAAC,yBAAyB,CAAC,CAAC;YAC1C,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAiB;gBAC5E,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtD,KAAK,CAAC,CAAC,QAAQ;qBACZ,MAAM,CAAC,yBAAyB,CAAC;qBACjC,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,yBAAyB,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EACxC,EAAE,CAAC,yBAAyB,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CACrD,CACF;qBACA,OAAO,EAAE,CAAC;gBACb,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1E,CAAC,EAAE,WAAW,CAAC,0BAA0B,CAAC,CAAC;SAC5C,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;CACH;AAED,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usine/engine",
|
|
3
|
-
"version": "0.5.1-next.
|
|
3
|
+
"version": "0.5.1-next.250.ge13fcb6",
|
|
4
4
|
"description": "The usine run engine: event ledger, dedup/supersede/revoke, run scheduling and restart recovery, SQLite store.",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"@effect/platform-node-shared": "4.0.6",
|
|
82
82
|
"@effect/sql-sqlite-node": "4.0.6",
|
|
83
83
|
"drizzle-orm": "1.0.0-rc.5",
|
|
84
|
-
"@usine/core": "0.5.1-next.
|
|
84
|
+
"@usine/core": "0.5.1-next.250.ge13fcb6"
|
|
85
85
|
},
|
|
86
86
|
"devDependencies": {
|
|
87
87
|
"@effect/vitest": "4.0.6",
|