@knpkv/herdr-work 0.4.0 → 0.5.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 +95 -1
- package/dist/agent-binding.d.ts +4 -0
- package/dist/agent-binding.d.ts.map +1 -0
- package/dist/agent-binding.js +26 -0
- package/dist/agent-binding.js.map +1 -0
- package/dist/errors.d.ts +141 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +97 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/agent-binding-admission.d.ts +15 -0
- package/dist/internal/agent-binding-admission.d.ts.map +1 -0
- package/dist/internal/agent-binding-admission.js +92 -0
- package/dist/internal/agent-binding-admission.js.map +1 -0
- package/dist/internal/agent-binding-readback.d.ts +55 -0
- package/dist/internal/agent-binding-readback.d.ts.map +1 -0
- package/dist/internal/agent-binding-readback.js +124 -0
- package/dist/internal/agent-binding-readback.js.map +1 -0
- package/dist/internal/coordinator-authority.d.ts +62 -0
- package/dist/internal/coordinator-authority.d.ts.map +1 -0
- package/dist/internal/coordinator-authority.js +214 -0
- package/dist/internal/coordinator-authority.js.map +1 -0
- package/dist/internal/decision-handoff-migration.d.ts +126 -0
- package/dist/internal/decision-handoff-migration.d.ts.map +1 -0
- package/dist/internal/decision-handoff-migration.js +51 -0
- package/dist/internal/decision-handoff-migration.js.map +1 -0
- package/dist/internal/history-validation.d.ts +5 -0
- package/dist/internal/history-validation.d.ts.map +1 -0
- package/dist/internal/history-validation.js +33 -0
- package/dist/internal/history-validation.js.map +1 -0
- package/dist/model.d.ts +3075 -51
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +334 -12
- package/dist/model.js.map +1 -1
- package/dist/navigation.d.ts +17 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +62 -0
- package/dist/navigation.js.map +1 -0
- package/dist/projection.d.ts +644 -0
- package/dist/projection.d.ts.map +1 -1
- package/dist/projection.js +65 -30
- package/dist/projection.js.map +1 -1
- package/dist/service.d.ts +1870 -3
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +138 -5
- package/dist/service.js.map +1 -1
- package/dist/sql.d.ts +30 -0
- package/dist/sql.d.ts.map +1 -0
- package/dist/sql.js +1454 -0
- package/dist/sql.js.map +1 -0
- package/dist/store.d.ts +1068 -4
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +3275 -51
- package/dist/store.js.map +1 -1
- package/dist/view.d.ts.map +1 -1
- package/dist/view.js +154 -8
- package/dist/view.js.map +1 -1
- package/package.json +25 -13
- package/src/styles.css +91 -17
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Option, Result, Schema } from "effect";
|
|
2
|
+
import { WorkDecisionHandoff } from "../model.js";
|
|
3
|
+
export const PreviousWorkDecisionHandoff = Schema.Struct({
|
|
4
|
+
version: Schema.Literal("herdr.work.decision.v1"),
|
|
5
|
+
id: WorkDecisionHandoff.fields.id,
|
|
6
|
+
sessionId: WorkDecisionHandoff.fields.sessionId,
|
|
7
|
+
laneId: WorkDecisionHandoff.fields.laneId,
|
|
8
|
+
goalId: WorkDecisionHandoff.fields.goalId,
|
|
9
|
+
decision: WorkDecisionHandoff.fields.decision,
|
|
10
|
+
summary: WorkDecisionHandoff.fields.summary,
|
|
11
|
+
owner: WorkDecisionHandoff.fields.owner,
|
|
12
|
+
dispatchIds: WorkDecisionHandoff.fields.dispatchIds,
|
|
13
|
+
blockers: WorkDecisionHandoff.fields.blockers,
|
|
14
|
+
evidenceRefs: WorkDecisionHandoff.fields.evidenceRefs,
|
|
15
|
+
occurredAt: WorkDecisionHandoff.fields.occurredAt
|
|
16
|
+
});
|
|
17
|
+
const PreviousWorkDecisionHandoffVersion = Schema.Struct({
|
|
18
|
+
version: PreviousWorkDecisionHandoff.fields.version
|
|
19
|
+
});
|
|
20
|
+
export const previousDecisionHandoffEquivalent = Schema.toEquivalence(PreviousWorkDecisionHandoff);
|
|
21
|
+
export const currentDecisionHandoffEquivalent = Schema.toEquivalence(WorkDecisionHandoff);
|
|
22
|
+
export const workDispatchLineageEquivalent = Schema.toEquivalence(WorkDecisionHandoff.fields.dispatchIds);
|
|
23
|
+
export const CurrentMetadataWorkLink = Schema.Struct({
|
|
24
|
+
handoff: WorkDecisionHandoff,
|
|
25
|
+
lineage: WorkDecisionHandoff.fields.dispatchIds
|
|
26
|
+
});
|
|
27
|
+
/** Keeps a dispatch's ordered lineage narrower than the decision's complete dispatch set. */
|
|
28
|
+
export const workDispatchLineageContainedBy = (lineage, dispatchIds) => lineage.every((dispatchId) => dispatchIds.includes(dispatchId));
|
|
29
|
+
/** Accepts only the current or immediately previous persisted handoff contract. */
|
|
30
|
+
export const decodePreviousDecisionHandoff = (input) => {
|
|
31
|
+
if (Option.isNone(Schema.decodeUnknownOption(PreviousWorkDecisionHandoffVersion)(input))) {
|
|
32
|
+
const current = Schema.decodeUnknownResult(WorkDecisionHandoff)(input);
|
|
33
|
+
return Result.isFailure(current)
|
|
34
|
+
? { _tag: "invalid", cause: current.failure }
|
|
35
|
+
: { _tag: "current", value: current.success };
|
|
36
|
+
}
|
|
37
|
+
const decoded = Schema.decodeUnknownResult(PreviousWorkDecisionHandoff)(input);
|
|
38
|
+
return Result.isFailure(decoded)
|
|
39
|
+
? { _tag: "invalid", cause: decoded.failure }
|
|
40
|
+
: { _tag: "previous", value: decoded.success };
|
|
41
|
+
};
|
|
42
|
+
/** Upgrades the immediately previous persisted handoff shape without accepting unknown versions. */
|
|
43
|
+
export const upgradePreviousDecisionHandoff = (previous, expectedRevision) => {
|
|
44
|
+
return Schema.decodeUnknownSync(WorkDecisionHandoff)({
|
|
45
|
+
...previous,
|
|
46
|
+
contextDelta: previous.summary,
|
|
47
|
+
expectedRevision,
|
|
48
|
+
version: "herdr.work.decision.v2"
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=decision-handoff-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-handoff-migration.js","sourceRoot":"","sources":["../../src/internal/decision-handoff-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { WorkProjectionError } from "../errors.js";
|
|
2
|
+
import type { WorkGoalCheckpoint } from "../model.js";
|
|
3
|
+
/** Checks invariants spanning the complete decoded Work checkpoint history. */
|
|
4
|
+
export declare const workHistoryError: (events: ReadonlyArray<WorkGoalCheckpoint>) => WorkProjectionError | undefined;
|
|
5
|
+
//# sourceMappingURL=history-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-validation.d.ts","sourceRoot":"","sources":["../../src/internal/history-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAQrD,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,WACnB,aAAa,CAAC,kBAAkB,CAAC,KACxC,mBAAmB,GAAG,SAuCxB,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { WorkProjectionError } from "../errors.js";
|
|
2
|
+
import { validateGoalFamilyHistory } from "../goal-family.js";
|
|
3
|
+
const projectionError = (reason, detail, cause) => new WorkProjectionError({ cause, detail, reason });
|
|
4
|
+
/** Checks invariants spanning the complete decoded Work checkpoint history. */
|
|
5
|
+
export const workHistoryError = (events) => {
|
|
6
|
+
const eventIds = new Set();
|
|
7
|
+
const goalTimes = new Set();
|
|
8
|
+
const createdAt = new Map();
|
|
9
|
+
const ordered = events.toSorted((left, right) => left.occurredAt - right.occurredAt);
|
|
10
|
+
for (const event of ordered) {
|
|
11
|
+
if (eventIds.has(event.eventId)) {
|
|
12
|
+
return projectionError("duplicate_event", `work event ${event.eventId} occurs more than once`, event);
|
|
13
|
+
}
|
|
14
|
+
eventIds.add(event.eventId);
|
|
15
|
+
const timeKey = `${event.goal.id}\u0000${event.occurredAt}`;
|
|
16
|
+
if (goalTimes.has(timeKey)) {
|
|
17
|
+
return projectionError("ambiguous_checkpoint", `goal ${event.goal.id} has more than one checkpoint at ${event.occurredAt}`, event);
|
|
18
|
+
}
|
|
19
|
+
goalTimes.add(timeKey);
|
|
20
|
+
const firstCreatedAt = createdAt.get(event.goal.id);
|
|
21
|
+
if (firstCreatedAt !== undefined && firstCreatedAt !== event.goal.createdAt) {
|
|
22
|
+
return projectionError("inconsistent_history", `goal ${event.goal.id} changed its creation timestamp`, event);
|
|
23
|
+
}
|
|
24
|
+
createdAt.set(event.goal.id, event.goal.createdAt);
|
|
25
|
+
}
|
|
26
|
+
for (const [goalId, timestamp] of createdAt) {
|
|
27
|
+
if (!events.some((event) => event.goal.id === goalId && event.occurredAt === timestamp)) {
|
|
28
|
+
return projectionError("inconsistent_history", `goal ${goalId} has no checkpoint at its creation timestamp`, { goalId, timestamp });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return validateGoalFamilyHistory(events);
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=history-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-validation.js","sourceRoot":"","sources":["../../src/internal/history-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAG7D,MAAM,eAAe,GAAG,CACtB,MAAqC,EACrC,MAAc,EACd,KAAc,EACd,EAAE,CAAC,IAAI,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AAEvD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAAyC,EACR,EAAE;IACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,CAAA;IACpF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,eAAe,CAAC,iBAAiB,EAAE,cAAc,KAAK,CAAC,OAAO,wBAAwB,EAAE,KAAK,CAAC,CAAA;QACvG,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3B,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,KAAK,CAAC,UAAU,EAAE,CAAA;QAC3D,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,eAAe,CACpB,sBAAsB,EACtB,QAAQ,KAAK,CAAC,IAAI,CAAC,EAAE,oCAAoC,KAAK,CAAC,UAAU,EAAE,EAC3E,KAAK,CACN,CAAA;QACH,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACtB,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnD,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5E,OAAO,eAAe,CACpB,sBAAsB,EACtB,QAAQ,KAAK,CAAC,IAAI,CAAC,EAAE,iCAAiC,EACtD,KAAK,CACN,CAAA;QACH,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACpD,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,SAAS,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,EAAE,CAAC;YACxF,OAAO,eAAe,CACpB,sBAAsB,EACtB,QAAQ,MAAM,8CAA8C,EAC5D,EAAE,MAAM,EAAE,SAAS,EAAE,CACtB,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAA;AAC1C,CAAC,CAAA"}
|