@shivaedev/work-fleet 0.1.1 → 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.
- package/CHANGELOG.md +16 -0
- package/README.md +2 -2
- package/dist/admit.d.ts +54 -0
- package/dist/admit.d.ts.map +1 -1
- package/dist/engine/abandonStalled.d.ts +9807 -0
- package/dist/engine/abandonStalled.d.ts.map +1 -0
- package/dist/engine/abandonStalled.js +55 -0
- package/dist/engine/abandonStalled.js.map +1 -0
- package/dist/engine/applyResolution.d.ts +108 -0
- package/dist/engine/applyResolution.d.ts.map +1 -1
- package/dist/engine/applyResolution.js +3 -0
- package/dist/engine/applyResolution.js.map +1 -1
- package/dist/engine/approveBrief.d.ts +164 -2
- package/dist/engine/approveBrief.d.ts.map +1 -1
- package/dist/engine/approveBrief.js +7 -5
- package/dist/engine/approveBrief.js.map +1 -1
- package/dist/engine/authorizeResolution.d.ts +942 -24
- package/dist/engine/authorizeResolution.d.ts.map +1 -1
- package/dist/engine/boardBrief.d.ts +162 -0
- package/dist/engine/boardBrief.d.ts.map +1 -1
- package/dist/engine/capacityRetry.d.ts +2883 -75
- package/dist/engine/capacityRetry.d.ts.map +1 -1
- package/dist/engine/closeDecisions.d.ts +108 -0
- package/dist/engine/closeDecisions.d.ts.map +1 -1
- package/dist/engine/completeBoardWork.d.ts +108 -0
- package/dist/engine/completeBoardWork.d.ts.map +1 -1
- package/dist/engine/completeReport.d.ts +108 -0
- package/dist/engine/completeReport.d.ts.map +1 -1
- package/dist/engine/continueCommand.d.ts +54 -0
- package/dist/engine/continueCommand.d.ts.map +1 -1
- package/dist/engine/continueWorker.d.ts +108 -0
- package/dist/engine/continueWorker.d.ts.map +1 -1
- package/dist/engine/deliverPendingAnswers.d.ts +1104 -24
- package/dist/engine/deliverPendingAnswers.d.ts.map +1 -1
- package/dist/engine/dispatchCommand.d.ts +54 -0
- package/dist/engine/dispatchCommand.d.ts.map +1 -1
- package/dist/engine/ensureDecisionOwner.d.ts +108 -0
- package/dist/engine/ensureDecisionOwner.d.ts.map +1 -1
- package/dist/engine/ensurePublication.d.ts +108 -0
- package/dist/engine/ensurePublication.d.ts.map +1 -1
- package/dist/engine/inspectRenewal.d.ts +108 -0
- package/dist/engine/inspectRenewal.d.ts.map +1 -1
- package/dist/engine/launchInput.d.ts +54 -0
- package/dist/engine/launchInput.d.ts.map +1 -1
- package/dist/engine/launchReceipt.d.ts +54 -0
- package/dist/engine/launchReceipt.d.ts.map +1 -1
- package/dist/engine/makeAdopt.d.ts +108 -0
- package/dist/engine/makeAdopt.d.ts.map +1 -1
- package/dist/engine/makeAdvance.d.ts +54 -0
- package/dist/engine/makeAdvance.d.ts.map +1 -1
- package/dist/engine/makeDeliver.d.ts +108 -0
- package/dist/engine/makeDeliver.d.ts.map +1 -1
- package/dist/engine/makeHuman.d.ts +108 -0
- package/dist/engine/makeHuman.d.ts.map +1 -1
- package/dist/engine/makeLaunch.d.ts +108 -0
- package/dist/engine/makeLaunch.d.ts.map +1 -1
- package/dist/engine/makeObserve.d.ts +108 -0
- package/dist/engine/makeObserve.d.ts.map +1 -1
- package/dist/engine/makeReview.d.ts +108 -0
- package/dist/engine/makeReview.d.ts.map +1 -1
- package/dist/engine/makeState.d.ts +888 -24
- package/dist/engine/makeState.d.ts.map +1 -1
- package/dist/engine/makeValidate.d.ts +108 -0
- package/dist/engine/makeValidate.d.ts.map +1 -1
- package/dist/engine/mergeReadiness.d.ts +1212 -24
- package/dist/engine/mergeReadiness.d.ts.map +1 -1
- package/dist/engine/observeDeliveryFailure.d.ts +996 -24
- package/dist/engine/observeDeliveryFailure.d.ts.map +1 -1
- package/dist/engine/observeRenewal.d.ts +189 -0
- package/dist/engine/observeRenewal.d.ts.map +1 -1
- package/dist/engine/observedAttempt.d.ts.map +1 -1
- package/dist/engine/observedAttempt.js +3 -0
- package/dist/engine/observedAttempt.js.map +1 -1
- package/dist/engine/obtainReview.d.ts +54 -0
- package/dist/engine/obtainReview.d.ts.map +1 -1
- package/dist/engine/operationRecord.d.ts +726 -24
- package/dist/engine/operationRecord.d.ts.map +1 -1
- package/dist/engine/persistTerminalReceipts.d.ts +108 -0
- package/dist/engine/persistTerminalReceipts.d.ts.map +1 -1
- package/dist/engine/prepareCommand.d.ts +54 -0
- package/dist/engine/prepareCommand.d.ts.map +1 -1
- package/dist/engine/prepareCommand.js +19 -0
- package/dist/engine/prepareCommand.js.map +1 -1
- package/dist/engine/queueAnswerCommand.d.ts +54 -0
- package/dist/engine/queueAnswerCommand.d.ts.map +1 -1
- package/dist/engine/readOrContinueReview.d.ts +54 -0
- package/dist/engine/readOrContinueReview.d.ts.map +1 -1
- package/dist/engine/readRetry.d.ts +1995 -51
- package/dist/engine/readRetry.d.ts.map +1 -1
- package/dist/engine/reassignCommand.d.ts +54 -0
- package/dist/engine/reassignCommand.d.ts.map +1 -1
- package/dist/engine/reconcileAttempt.d.ts +81 -0
- package/dist/engine/reconcileAttempt.d.ts.map +1 -1
- package/dist/engine/reconcileCommand.d.ts +54 -0
- package/dist/engine/reconcileCommand.d.ts.map +1 -1
- package/dist/engine/recoverStall.d.ts +1023 -24
- package/dist/engine/recoverStall.d.ts.map +1 -1
- package/dist/engine/recoverStall.js +5 -1
- package/dist/engine/recoverStall.js.map +1 -1
- package/dist/engine/recoverUnobservable.d.ts +1023 -24
- package/dist/engine/recoverUnobservable.d.ts.map +1 -1
- package/dist/engine/refreshBrief.d.ts +1997 -53
- package/dist/engine/refreshBrief.d.ts.map +1 -1
- package/dist/engine/refreshReviewResult.d.ts +108 -0
- package/dist/engine/refreshReviewResult.d.ts.map +1 -1
- package/dist/engine/releaseClosedPreparation.d.ts +996 -24
- package/dist/engine/releaseClosedPreparation.d.ts.map +1 -1
- package/dist/engine/releaseExecution.d.ts +996 -24
- package/dist/engine/releaseExecution.d.ts.map +1 -1
- package/dist/engine/releaseFinishedWork.d.ts +54 -0
- package/dist/engine/releaseFinishedWork.d.ts.map +1 -1
- package/dist/engine/repository.d.ts +672 -24
- package/dist/engine/repository.d.ts.map +1 -1
- package/dist/engine/repository.js +1 -0
- package/dist/engine/repository.js.map +1 -1
- package/dist/engine/requestConflictRepair.d.ts +996 -24
- package/dist/engine/requestConflictRepair.d.ts.map +1 -1
- package/dist/engine/requestRework.d.ts +108 -0
- package/dist/engine/requestRework.d.ts.map +1 -1
- package/dist/engine/resolveCommand.d.ts +54 -0
- package/dist/engine/resolveCommand.d.ts.map +1 -1
- package/dist/engine/resolveExecution.d.ts +996 -24
- package/dist/engine/resolveExecution.d.ts.map +1 -1
- package/dist/engine/resolveExecution.js +3 -1
- package/dist/engine/resolveExecution.js.map +1 -1
- package/dist/engine/resumeAttempt.d.ts +1023 -24
- package/dist/engine/resumeAttempt.d.ts.map +1 -1
- package/dist/engine/retireUnacknowledged.d.ts +108 -0
- package/dist/engine/retireUnacknowledged.d.ts.map +1 -1
- package/dist/engine/retryTerminal.d.ts +942 -24
- package/dist/engine/retryTerminal.d.ts.map +1 -1
- package/dist/engine/scheduler.d.ts +108 -0
- package/dist/engine/scheduler.d.ts.map +1 -1
- package/dist/engine/sessionCleanup.d.ts +108 -0
- package/dist/engine/sessionCleanup.d.ts.map +1 -1
- package/dist/engine/sessionCleanup.js +3 -1
- package/dist/engine/sessionCleanup.js.map +1 -1
- package/dist/engine/sessionStatus.d.ts.map +1 -1
- package/dist/engine/sessionStatus.js +3 -0
- package/dist/engine/sessionStatus.js.map +1 -1
- package/dist/engine/settleMergedDelivery.d.ts +996 -24
- package/dist/engine/settleMergedDelivery.d.ts.map +1 -1
- package/dist/engine/steerBrief.d.ts +10340 -0
- package/dist/engine/steerBrief.d.ts.map +1 -0
- package/dist/engine/steerBrief.js +42 -0
- package/dist/engine/steerBrief.js.map +1 -0
- package/dist/engine/submissionFailure.d.ts +888 -24
- package/dist/engine/submissionFailure.d.ts.map +1 -1
- package/dist/engine/submitLaunch.d.ts +942 -24
- package/dist/engine/submitLaunch.d.ts.map +1 -1
- package/dist/engine/views.js +1 -0
- package/dist/engine/views.js.map +1 -1
- package/dist/engine/workerReport.d.ts +162 -0
- package/dist/engine/workerReport.d.ts.map +1 -1
- package/dist/fleet.d.ts +540 -0
- package/dist/fleet.d.ts.map +1 -1
- package/dist/host/admission.d.ts +108 -0
- package/dist/host/admission.d.ts.map +1 -1
- package/dist/host/admission.js +2 -1
- package/dist/host/admission.js.map +1 -1
- package/dist/host/answerWork.d.ts +54 -0
- package/dist/host/answerWork.d.ts.map +1 -1
- package/dist/host/commands.d.ts +108 -0
- package/dist/host/commands.d.ts.map +1 -1
- package/dist/host/daemon.d.ts +1465 -865
- package/dist/host/daemon.d.ts.map +1 -1
- package/dist/host/daemonClient.d.ts +691 -91
- package/dist/host/daemonClient.d.ts.map +1 -1
- package/dist/host/daemonContract.d.ts +984 -0
- package/dist/host/daemonContract.d.ts.map +1 -1
- package/dist/host/readWaitStates.d.ts.map +1 -1
- package/dist/host/readWaitStates.js +13 -4
- package/dist/host/readWaitStates.js.map +1 -1
- package/dist/host/reassignWork.d.ts +54 -0
- package/dist/host/reassignWork.d.ts.map +1 -1
- package/dist/host/recordPayloads.d.ts.map +1 -1
- package/dist/host/recordPayloads.js +8 -3
- package/dist/host/recordPayloads.js.map +1 -1
- package/dist/host/releaseWork.d.ts +108 -0
- package/dist/host/releaseWork.d.ts.map +1 -1
- package/dist/host/status.d.ts +30 -0
- package/dist/host/status.d.ts.map +1 -1
- package/dist/model.d.ts +144 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +14 -1
- package/dist/model.js.map +1 -1
- package/dist/operations.d.ts +1224 -0
- package/dist/operations.d.ts.map +1 -1
- package/dist/packageInfo.d.ts +1 -1
- package/dist/packageInfo.js +1 -1
- package/dist/prompt/briefEdit.d.ts +2 -0
- package/dist/prompt/briefEdit.d.ts.map +1 -0
- package/dist/prompt/briefEdit.js +41 -0
- package/dist/prompt/briefEdit.js.map +1 -0
- package/dist/prompt/worker.d.ts.map +1 -1
- package/dist/prompt/worker.js +11 -2
- package/dist/prompt/worker.js.map +1 -1
- package/dist/qualifyDependencies.d.ts +54 -0
- package/dist/qualifyDependencies.d.ts.map +1 -1
- package/dist/scheduling/areas.d.ts +162 -0
- package/dist/scheduling/areas.d.ts.map +1 -1
- package/dist/storage/attemptV12.d.ts +108 -0
- package/dist/storage/attemptV12.d.ts.map +1 -0
- package/dist/storage/attemptV12.js +94 -0
- package/dist/storage/attemptV12.js.map +1 -0
- package/dist/storage/createCollections.d.ts +5 -0
- package/dist/storage/createCollections.d.ts.map +1 -0
- package/dist/storage/createCollections.js +21 -0
- package/dist/storage/createCollections.js.map +1 -0
- package/dist/storage/cycleV12.d.ts +287 -0
- package/dist/storage/cycleV12.d.ts.map +1 -0
- package/dist/storage/cycleV12.js +124 -0
- package/dist/storage/cycleV12.js.map +1 -0
- package/dist/storage/fleetMigrations.d.ts +0 -39
- package/dist/storage/fleetMigrations.d.ts.map +1 -1
- package/dist/storage/fleetMigrations.js +3 -9
- package/dist/storage/fleetMigrations.js.map +1 -1
- package/dist/storage/legacyColumns.d.ts +40 -0
- package/dist/storage/legacyColumns.d.ts.map +1 -0
- package/dist/storage/legacyColumns.js +12 -0
- package/dist/storage/legacyColumns.js.map +1 -0
- package/dist/storage/makeForeignReservations.d.ts +15 -0
- package/dist/storage/makeForeignReservations.d.ts.map +1 -0
- package/dist/storage/makeForeignReservations.js +34 -0
- package/dist/storage/makeForeignReservations.js.map +1 -0
- package/dist/storage/makePostgresFleetStore.d.ts +36 -16
- package/dist/storage/makePostgresFleetStore.d.ts.map +1 -1
- package/dist/storage/makePostgresFleetStore.js +24 -32
- package/dist/storage/makePostgresFleetStore.js.map +1 -1
- package/dist/storage/model.d.ts +53 -59
- package/dist/storage/model.d.ts.map +1 -1
- package/dist/storage/model.js +18 -60
- package/dist/storage/model.js.map +1 -1
- package/dist/storage/operationEntries.d.ts +6 -5
- package/dist/storage/operationEntries.d.ts.map +1 -1
- package/dist/storage/operationEntries.js +12 -15
- package/dist/storage/operationEntries.js.map +1 -1
- package/dist/storage/preparationV12.d.ts +44 -0
- package/dist/storage/preparationV12.d.ts.map +1 -0
- package/dist/storage/preparationV12.js +30 -0
- package/dist/storage/preparationV12.js.map +1 -0
- package/dist/storage/readRecords.d.ts +4 -0
- package/dist/storage/readRecords.d.ts.map +1 -0
- package/dist/storage/readRecords.js +10 -0
- package/dist/storage/readRecords.js.map +1 -0
- package/dist/storage/recordChildren.d.ts +11 -0
- package/dist/storage/recordChildren.d.ts.map +1 -0
- package/dist/storage/recordChildren.js +105 -0
- package/dist/storage/recordChildren.js.map +1 -0
- package/dist/storage/recordShape.d.ts +23 -0
- package/dist/storage/recordShape.d.ts.map +1 -0
- package/dist/storage/recordShape.js +112 -0
- package/dist/storage/recordShape.js.map +1 -0
- package/dist/storage/recordValue.d.ts +9 -6
- package/dist/storage/recordValue.d.ts.map +1 -1
- package/dist/storage/recordValue.js +42 -32
- package/dist/storage/recordValue.js.map +1 -1
- package/dist/storage/shapeV12.d.ts +794 -0
- package/dist/storage/shapeV12.d.ts.map +1 -0
- package/dist/storage/shapeV12.js +10 -0
- package/dist/storage/shapeV12.js.map +1 -0
- package/dist/storage/textRecordValue.d.ts +3 -0
- package/dist/storage/textRecordValue.d.ts.map +1 -0
- package/dist/storage/textRecordValue.js +13 -0
- package/dist/storage/textRecordValue.js.map +1 -0
- package/dist/storage/typedDecisionsV12.d.ts +103 -0
- package/dist/storage/typedDecisionsV12.d.ts.map +1 -0
- package/dist/storage/typedDecisionsV12.js +97 -0
- package/dist/storage/typedDecisionsV12.js.map +1 -0
- package/dist/storage/typedTables.d.ts +4 -0
- package/dist/storage/typedTables.d.ts.map +1 -0
- package/dist/storage/typedTables.js +39 -0
- package/dist/storage/typedTables.js.map +1 -0
- package/package.json +8 -8
- package/src/engine/abandonStalled.ts +63 -0
- package/src/engine/applyResolution.ts +3 -0
- package/src/engine/approveBrief.ts +34 -32
- package/src/engine/observedAttempt.ts +3 -0
- package/src/engine/prepareCommand.ts +21 -0
- package/src/engine/recoverStall.ts +6 -2
- package/src/engine/repository.ts +1 -0
- package/src/engine/resolveExecution.ts +3 -1
- package/src/engine/sessionCleanup.ts +3 -1
- package/src/engine/sessionStatus.ts +5 -0
- package/src/engine/steerBrief.ts +54 -0
- package/src/engine/views.ts +1 -0
- package/src/host/admission.ts +2 -1
- package/src/host/readWaitStates.ts +12 -11
- package/src/host/recordPayloads.ts +11 -3
- package/src/model.ts +20 -1
- package/src/packageInfo.ts +1 -1
- package/src/prompt/briefEdit.ts +44 -0
- package/src/prompt/worker.ts +11 -2
- package/src/storage/attemptV12.ts +95 -0
- package/src/storage/createCollections.ts +21 -0
- package/src/storage/cycleV12.ts +125 -0
- package/src/storage/fleetMigrations.ts +3 -10
- package/src/storage/legacyColumns.ts +12 -0
- package/src/storage/makeForeignReservations.ts +41 -0
- package/src/storage/makePostgresFleetStore.ts +30 -43
- package/src/storage/model.ts +19 -69
- package/src/storage/operationEntries.ts +12 -22
- package/src/storage/preparationV12.ts +31 -0
- package/src/storage/readRecords.ts +12 -0
- package/src/storage/recordChildren.ts +131 -0
- package/src/storage/recordShape.ts +137 -0
- package/src/storage/recordValue.ts +47 -34
- package/src/storage/shapeV12.ts +11 -0
- package/src/storage/textRecordValue.ts +16 -0
- package/src/storage/typedDecisionsV12.ts +100 -0
- package/src/storage/typedTables.ts +39 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shapeV12.d.ts","sourceRoot":"","sources":["../../src/storage/shapeV12.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAD2B,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAAL,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAIC,QAAQ;;;;;CAEpC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { attemptV12 } from "#storage/attemptV12.ts";
|
|
2
|
+
import { cycleV12 } from "#storage/cycleV12.ts";
|
|
3
|
+
const cycle = { ...cycleV12.fields, attempts: { array: attemptV12 } };
|
|
4
|
+
export const shapeV12 = {
|
|
5
|
+
fields: {
|
|
6
|
+
...cycle,
|
|
7
|
+
history: { array: { fields: { ...cycle, archivedAt: "number" } } },
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=shapeV12.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shapeV12.js","sourceRoot":"","sources":["../../src/storage/shapeV12.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,MAAM,KAAK,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC;AACtE,MAAM,CAAC,MAAM,QAAQ,GAAG;IACvB,MAAM,EAAE;QACP,GAAG,KAAK;QACR,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;KAClE;CACwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textRecordValue.d.ts","sourceRoot":"","sources":["../../src/storage/textRecordValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGxC,eAAO,MAAM,eAAe,8IAY1B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import { legacyColumns } from "#storage/legacyColumns.ts";
|
|
3
|
+
export const textRecordValue = Effect.fn("FleetStore.textRecordValue")(function* (row, structured) {
|
|
4
|
+
const value = {};
|
|
5
|
+
for (const name of Object.keys(legacyColumns)) {
|
|
6
|
+
const field = row[structured.includes(name) ? `legacy_${name}` : name];
|
|
7
|
+
if (field !== null) {
|
|
8
|
+
value[name] = structured.includes(name) ? yield* Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Unknown))(field) : field;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return value;
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=textRecordValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textRecordValue.js","sourceRoot":"","sources":["../../src/storage/textRecordValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,EAC/E,GAAsC,EACtC,UAA6B;IAE7B,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACnI,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
export declare const decisionV12: {
|
|
2
|
+
readonly fields: {
|
|
3
|
+
readonly attentionOwner: "string";
|
|
4
|
+
readonly boardAcknowledgementDisposition: "string";
|
|
5
|
+
readonly code: "string";
|
|
6
|
+
readonly id: "string";
|
|
7
|
+
readonly links: {
|
|
8
|
+
readonly array: "string";
|
|
9
|
+
};
|
|
10
|
+
readonly publicationWork: {
|
|
11
|
+
readonly fields: {
|
|
12
|
+
readonly approved: "boolean";
|
|
13
|
+
readonly areas: {
|
|
14
|
+
readonly array: "string";
|
|
15
|
+
};
|
|
16
|
+
readonly context: "string";
|
|
17
|
+
readonly deliverable: "string";
|
|
18
|
+
readonly dependsOn: {
|
|
19
|
+
readonly array: "string";
|
|
20
|
+
};
|
|
21
|
+
readonly revision: "string";
|
|
22
|
+
readonly sourcePath: "string";
|
|
23
|
+
readonly status: "string";
|
|
24
|
+
readonly workId: "string";
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
readonly published: {
|
|
28
|
+
readonly fields: {
|
|
29
|
+
readonly itemId: "string";
|
|
30
|
+
readonly questionId: "string";
|
|
31
|
+
readonly request: "string";
|
|
32
|
+
readonly revision: "string";
|
|
33
|
+
readonly sourcePath: "string";
|
|
34
|
+
readonly workId: "string";
|
|
35
|
+
readonly workRevision: "string";
|
|
36
|
+
readonly workSourcePath: "string";
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
readonly reason: "string";
|
|
40
|
+
readonly recommendation: "string";
|
|
41
|
+
readonly worker: {
|
|
42
|
+
readonly fields: {
|
|
43
|
+
readonly sessionId: "string";
|
|
44
|
+
readonly turnId: "string";
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export declare const responsesV12: {
|
|
50
|
+
readonly array: {
|
|
51
|
+
readonly fields: {
|
|
52
|
+
readonly action: "string";
|
|
53
|
+
readonly boardAcknowledged: "boolean";
|
|
54
|
+
readonly boardAcknowledgementDisposition: "string";
|
|
55
|
+
readonly decisionId: "string";
|
|
56
|
+
readonly processedAt: "number";
|
|
57
|
+
readonly published: {
|
|
58
|
+
readonly fields: {
|
|
59
|
+
readonly itemId: "string";
|
|
60
|
+
readonly questionId: "string";
|
|
61
|
+
readonly request: "string";
|
|
62
|
+
readonly revision: "string";
|
|
63
|
+
readonly sourcePath: "string";
|
|
64
|
+
readonly workId: "string";
|
|
65
|
+
readonly workRevision: "string";
|
|
66
|
+
readonly workSourcePath: "string";
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
readonly questionId: "string";
|
|
70
|
+
readonly questionRevision: "string";
|
|
71
|
+
readonly responseId: "string";
|
|
72
|
+
readonly type: "string";
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
export declare const supersededDecisionsV12: {
|
|
77
|
+
readonly array: {
|
|
78
|
+
readonly fields: {
|
|
79
|
+
readonly boardAcknowledged: "boolean";
|
|
80
|
+
readonly boardAcknowledgementDisposition: "string";
|
|
81
|
+
readonly published: {
|
|
82
|
+
readonly fields: {
|
|
83
|
+
readonly itemId: "string";
|
|
84
|
+
readonly questionId: "string";
|
|
85
|
+
readonly request: "string";
|
|
86
|
+
readonly revision: "string";
|
|
87
|
+
readonly sourcePath: "string";
|
|
88
|
+
readonly workId: "string";
|
|
89
|
+
readonly workRevision: "string";
|
|
90
|
+
readonly workSourcePath: "string";
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
readonly reassignedTo: {
|
|
94
|
+
readonly fields: {
|
|
95
|
+
readonly attentionOwner: "string";
|
|
96
|
+
readonly decisionId: "string";
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
readonly supersededAt: "number";
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=typedDecisionsV12.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typedDecisionsV12.d.ts","sourceRoot":"","sources":["../../src/storage/typedDecisionsV12.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;iBAEtB,cAAc,EAAE,QAAQ;iBACxB,+BAA+B,EAAE,QAAQ;iBACzC,IAAI,EAAE,QAAQ;iBACd,EAAE,EAAE,QAAQ;iBACZ,KAAK;qBAAI,KAAK,EAAE,QAAQ;;iBACxB,eAAe;qBACd,MAAM;yBACL,QAAQ,EAAE,SAAS;yBACnB,KAAK;6BAAI,KAAK,EAAE,QAAQ;;yBACxB,OAAO,EAAE,QAAQ;yBACjB,WAAW,EAAE,QAAQ;yBACrB,SAAS;6BAAI,KAAK,EAAE,QAAQ;;yBAC5B,QAAQ,EAAE,QAAQ;yBAClB,UAAU,EAAE,QAAQ;yBACpB,MAAM,EAAE,QAAQ;yBAChB,MAAM,EAAE,QAAQ;;;iBAGlB,SAAS;qBACR,MAAM;yBACL,MAAM,EAAE,QAAQ;yBAChB,UAAU,EAAE,QAAQ;yBACpB,OAAO,EAAE,QAAQ;yBACjB,QAAQ,EAAE,QAAQ;yBAClB,UAAU,EAAE,QAAQ;yBACpB,MAAM,EAAE,QAAQ;yBAChB,YAAY,EAAE,QAAQ;yBACtB,cAAc,EAAE,QAAQ;;;iBAG1B,MAAM,EAAE,QAAQ;iBAChB,cAAc,EAAE,QAAQ;iBACxB,MAAM;qBACL,MAAM;yBACL,SAAS,EAAE,QAAQ;yBACnB,MAAM,EAAE,QAAQ;;;;CAIM,CAAC;AAE3B,eAAO,MAAM,YAAY;;iBAEvB,MAAM;qBACL,MAAM,EAAE,QAAQ;qBAChB,iBAAiB,EAAE,SAAS;qBAC5B,+BAA+B,EAAE,QAAQ;qBACzC,UAAU,EAAE,QAAQ;qBACpB,WAAW,EAAE,QAAQ;qBACrB,SAAS;yBACR,MAAM;6BACL,MAAM,EAAE,QAAQ;6BAChB,UAAU,EAAE,QAAQ;6BACpB,OAAO,EAAE,QAAQ;6BACjB,QAAQ,EAAE,QAAQ;6BAClB,UAAU,EAAE,QAAQ;6BACpB,MAAM,EAAE,QAAQ;6BAChB,YAAY,EAAE,QAAQ;6BACtB,cAAc,EAAE,QAAQ;;;qBAG1B,UAAU,EAAE,QAAQ;qBACpB,gBAAgB,EAAE,QAAQ;qBAC1B,UAAU,EAAE,QAAQ;qBACpB,IAAI,EAAE,QAAQ;;;CAGS,CAAC;AAE3B,eAAO,MAAM,sBAAsB;;iBAEjC,MAAM;qBACL,iBAAiB,EAAE,SAAS;qBAC5B,+BAA+B,EAAE,QAAQ;qBACzC,SAAS;yBACR,MAAM;6BACL,MAAM,EAAE,QAAQ;6BAChB,UAAU,EAAE,QAAQ;6BACpB,OAAO,EAAE,QAAQ;6BACjB,QAAQ,EAAE,QAAQ;6BAClB,UAAU,EAAE,QAAQ;6BACpB,MAAM,EAAE,QAAQ;6BAChB,YAAY,EAAE,QAAQ;6BACtB,cAAc,EAAE,QAAQ;;;qBAG1B,YAAY;yBACX,MAAM;6BACL,cAAc,EAAE,QAAQ;6BACxB,UAAU,EAAE,QAAQ;;;qBAGtB,YAAY,EAAE,QAAQ;;;CAGC,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export const decisionV12 = {
|
|
2
|
+
fields: {
|
|
3
|
+
attentionOwner: "string",
|
|
4
|
+
boardAcknowledgementDisposition: "string",
|
|
5
|
+
code: "string",
|
|
6
|
+
id: "string",
|
|
7
|
+
links: { array: "string" },
|
|
8
|
+
publicationWork: {
|
|
9
|
+
fields: {
|
|
10
|
+
approved: "boolean",
|
|
11
|
+
areas: { array: "string" },
|
|
12
|
+
context: "string",
|
|
13
|
+
deliverable: "string",
|
|
14
|
+
dependsOn: { array: "string" },
|
|
15
|
+
revision: "string",
|
|
16
|
+
sourcePath: "string",
|
|
17
|
+
status: "string",
|
|
18
|
+
workId: "string",
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
published: {
|
|
22
|
+
fields: {
|
|
23
|
+
itemId: "string",
|
|
24
|
+
questionId: "string",
|
|
25
|
+
request: "string",
|
|
26
|
+
revision: "string",
|
|
27
|
+
sourcePath: "string",
|
|
28
|
+
workId: "string",
|
|
29
|
+
workRevision: "string",
|
|
30
|
+
workSourcePath: "string",
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
reason: "string",
|
|
34
|
+
recommendation: "string",
|
|
35
|
+
worker: {
|
|
36
|
+
fields: {
|
|
37
|
+
sessionId: "string",
|
|
38
|
+
turnId: "string",
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
export const responsesV12 = {
|
|
44
|
+
array: {
|
|
45
|
+
fields: {
|
|
46
|
+
action: "string",
|
|
47
|
+
boardAcknowledged: "boolean",
|
|
48
|
+
boardAcknowledgementDisposition: "string",
|
|
49
|
+
decisionId: "string",
|
|
50
|
+
processedAt: "number",
|
|
51
|
+
published: {
|
|
52
|
+
fields: {
|
|
53
|
+
itemId: "string",
|
|
54
|
+
questionId: "string",
|
|
55
|
+
request: "string",
|
|
56
|
+
revision: "string",
|
|
57
|
+
sourcePath: "string",
|
|
58
|
+
workId: "string",
|
|
59
|
+
workRevision: "string",
|
|
60
|
+
workSourcePath: "string",
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
questionId: "string",
|
|
64
|
+
questionRevision: "string",
|
|
65
|
+
responseId: "string",
|
|
66
|
+
type: "string",
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
export const supersededDecisionsV12 = {
|
|
71
|
+
array: {
|
|
72
|
+
fields: {
|
|
73
|
+
boardAcknowledged: "boolean",
|
|
74
|
+
boardAcknowledgementDisposition: "string",
|
|
75
|
+
published: {
|
|
76
|
+
fields: {
|
|
77
|
+
itemId: "string",
|
|
78
|
+
questionId: "string",
|
|
79
|
+
request: "string",
|
|
80
|
+
revision: "string",
|
|
81
|
+
sourcePath: "string",
|
|
82
|
+
workId: "string",
|
|
83
|
+
workRevision: "string",
|
|
84
|
+
workSourcePath: "string",
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
reassignedTo: {
|
|
88
|
+
fields: {
|
|
89
|
+
attentionOwner: "string",
|
|
90
|
+
decisionId: "string",
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
supersededAt: "number",
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=typedDecisionsV12.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typedDecisionsV12.js","sourceRoot":"","sources":["../../src/storage/typedDecisionsV12.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,MAAM,EAAE;QACP,cAAc,EAAE,QAAQ;QACxB,+BAA+B,EAAE,QAAQ;QACzC,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC1B,eAAe,EAAE;YAChB,MAAM,EAAE;gBACP,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAC1B,OAAO,EAAE,QAAQ;gBACjB,WAAW,EAAE,QAAQ;gBACrB,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAC9B,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,QAAQ;gBACpB,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,QAAQ;aAChB;SACD;QACD,SAAS,EAAE;YACV,MAAM,EAAE;gBACP,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE,QAAQ;gBACpB,OAAO,EAAE,QAAQ;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,QAAQ;gBACpB,MAAM,EAAE,QAAQ;gBAChB,YAAY,EAAE,QAAQ;gBACtB,cAAc,EAAE,QAAQ;aACxB;SACD;QACD,MAAM,EAAE,QAAQ;QAChB,cAAc,EAAE,QAAQ;QACxB,MAAM,EAAE;YACP,MAAM,EAAE;gBACP,SAAS,EAAE,QAAQ;gBACnB,MAAM,EAAE,QAAQ;aAChB;SACD;KACD;CACwB,CAAC;AAE3B,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,KAAK,EAAE;QACN,MAAM,EAAE;YACP,MAAM,EAAE,QAAQ;YAChB,iBAAiB,EAAE,SAAS;YAC5B,+BAA+B,EAAE,QAAQ;YACzC,UAAU,EAAE,QAAQ;YACpB,WAAW,EAAE,QAAQ;YACrB,SAAS,EAAE;gBACV,MAAM,EAAE;oBACP,MAAM,EAAE,QAAQ;oBAChB,UAAU,EAAE,QAAQ;oBACpB,OAAO,EAAE,QAAQ;oBACjB,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,QAAQ;oBACpB,MAAM,EAAE,QAAQ;oBAChB,YAAY,EAAE,QAAQ;oBACtB,cAAc,EAAE,QAAQ;iBACxB;aACD;YACD,UAAU,EAAE,QAAQ;YACpB,gBAAgB,EAAE,QAAQ;YAC1B,UAAU,EAAE,QAAQ;YACpB,IAAI,EAAE,QAAQ;SACd;KACD;CACwB,CAAC;AAE3B,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACrC,KAAK,EAAE;QACN,MAAM,EAAE;YACP,iBAAiB,EAAE,SAAS;YAC5B,+BAA+B,EAAE,QAAQ;YACzC,SAAS,EAAE;gBACV,MAAM,EAAE;oBACP,MAAM,EAAE,QAAQ;oBAChB,UAAU,EAAE,QAAQ;oBACpB,OAAO,EAAE,QAAQ;oBACjB,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,QAAQ;oBACpB,MAAM,EAAE,QAAQ;oBAChB,YAAY,EAAE,QAAQ;oBACtB,cAAc,EAAE,QAAQ;iBACxB;aACD;YACD,YAAY,EAAE;gBACb,MAAM,EAAE;oBACP,cAAc,EAAE,QAAQ;oBACxB,UAAU,EAAE,QAAQ;iBACpB;aACD;YACD,YAAY,EAAE,QAAQ;SACtB;KACD;CACwB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import { SqlClient } from "effect/sql";
|
|
3
|
+
export declare const typedTables: (namespace: string) => Effect.Effect<void, Schema.SchemaError | import("effect/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
4
|
+
//# sourceMappingURL=typedTables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typedTables.d.ts","sourceRoot":"","sources":["../../src/storage/typedTables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AASvC,eAAO,MAAM,WAAW,8HA4BtB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import { SqlClient } from "effect/sql";
|
|
3
|
+
import { createCollections } from "#storage/createCollections.ts";
|
|
4
|
+
import { legacyColumns } from "#storage/legacyColumns.ts";
|
|
5
|
+
import { modelFromColumns } from "#storage/model.ts";
|
|
6
|
+
import { inputColumns, makeRecordChildren } from "#storage/recordChildren.ts";
|
|
7
|
+
import { shapeColumns, sqlTypes } from "#storage/recordShape.ts";
|
|
8
|
+
import { shapeV12 } from "#storage/shapeV12.ts";
|
|
9
|
+
import { textRecordValue } from "#storage/textRecordValue.ts";
|
|
10
|
+
export const typedTables = Effect.fn("FleetStore.typedTables")(function* (namespace) {
|
|
11
|
+
const sql = yield* SqlClient.SqlClient;
|
|
12
|
+
const table = `${namespace}_records`;
|
|
13
|
+
const structured = Object.entries(legacyColumns)
|
|
14
|
+
.filter(([_name, kind]) => kind === "json")
|
|
15
|
+
.map(([name]) => name);
|
|
16
|
+
for (const name of structured) {
|
|
17
|
+
yield* sql `alter table ${sql(table)} rename column ${sql(name)} to ${sql(`legacy_${name}`)}`;
|
|
18
|
+
}
|
|
19
|
+
const columns = shapeColumns(shapeV12);
|
|
20
|
+
for (const [name, kind] of Object.entries(columns)) {
|
|
21
|
+
if (!(name in legacyColumns) || structured.includes(name)) {
|
|
22
|
+
yield* sql `alter table ${sql(table)} add column ${sql(name)} ${sql.literal(sqlTypes[kind])}`;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
yield* createCollections(namespace, shapeV12);
|
|
26
|
+
const rows = yield* sql `select * from ${sql(table)} order by admission_order`;
|
|
27
|
+
const model = modelFromColumns(columns);
|
|
28
|
+
const saveChildren = yield* makeRecordChildren(namespace, shapeV12);
|
|
29
|
+
for (const row of rows) {
|
|
30
|
+
const value = yield* textRecordValue(row, structured);
|
|
31
|
+
const input = yield* Schema.decodeUnknownEffect(model.insert)({ ...inputColumns(value, shapeV12), "work_id": row.work_id });
|
|
32
|
+
yield* sql `update ${sql(table)} set ${sql.update(yield* Schema.encodeEffect(model.insert)(input))} where work_id = ${row.work_id}`;
|
|
33
|
+
yield* saveChildren(String(row.work_id), value, false);
|
|
34
|
+
}
|
|
35
|
+
for (const name of structured) {
|
|
36
|
+
yield* sql `alter table ${sql(table)} drop column ${sql(`legacy_${name}`)}`;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=typedTables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typedTables.js","sourceRoot":"","sources":["../../src/storage/typedTables.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/work-fleet",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Optional Board-backed execution, review and authorized delivery",
|
|
5
5
|
"homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/work-fleet#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -45,20 +45,20 @@
|
|
|
45
45
|
],
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@effect/sql-pg": "4.0.4",
|
|
48
|
-
"@shivaedev/effect-contract": "0.5.
|
|
48
|
+
"@shivaedev/effect-contract": "0.5.1",
|
|
49
49
|
"@shivaedev/effect-service": "0.3.0",
|
|
50
|
-
"@shivaedev/effect-sql": "0.
|
|
51
|
-
"@shivaedev/platform": "0.
|
|
52
|
-
"@shivaedev/work-board": "0.14.
|
|
50
|
+
"@shivaedev/effect-sql": "0.5.0",
|
|
51
|
+
"@shivaedev/platform": "0.14.0",
|
|
52
|
+
"@shivaedev/work-board": "0.14.1",
|
|
53
53
|
"yaml": "2.9.1"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@effect/platform-node": "4.0.4",
|
|
57
57
|
"@effect/platform-node-shared": "4.0.4",
|
|
58
58
|
"@effect/vitest": "4.0.4",
|
|
59
|
-
"@shivaedev/effect-test": "0.
|
|
60
|
-
"@shivaedev/effect-test-sql": "0.
|
|
61
|
-
"@shivaedev/quality": "0.
|
|
59
|
+
"@shivaedev/effect-test": "0.5.0",
|
|
60
|
+
"@shivaedev/effect-test-sql": "0.4.0",
|
|
61
|
+
"@shivaedev/quality": "0.22.0",
|
|
62
62
|
"@types/node": "24.19.1",
|
|
63
63
|
"@typescript/native": "npm:typescript@7.0.2",
|
|
64
64
|
"effect": "4.0.4",
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Effect, Result } from "effect";
|
|
2
|
+
import type { EngineState } from "#engine/makeState.ts";
|
|
3
|
+
import type { Attempt, FleetRecord } from "#model.ts";
|
|
4
|
+
import type { SessionObservation } from "#session/schema.ts";
|
|
5
|
+
import type { Versioned } from "#storage/model.ts";
|
|
6
|
+
|
|
7
|
+
export const abandonStalled = Effect.fn("Fleet.abandonStalled")(function* (state: EngineState, stored: Versioned<FleetRecord>) {
|
|
8
|
+
const latest = stored.value.attempts.at(-1);
|
|
9
|
+
if (!hasStalledAttempt(stored.value) || latest?.abandoned !== undefined) {
|
|
10
|
+
return stored;
|
|
11
|
+
}
|
|
12
|
+
const targets = stored.value.attempts.filter((attempt) => attempt === latest || ["submitting", "accepted", "running"].includes(attempt.status));
|
|
13
|
+
const at = state.policy.now();
|
|
14
|
+
let current = yield* state.save(stored, {
|
|
15
|
+
...stored.value,
|
|
16
|
+
attempts: stored.value.attempts.map((attempt) =>
|
|
17
|
+
targets.includes(attempt)
|
|
18
|
+
? {
|
|
19
|
+
...attempt,
|
|
20
|
+
abandoned: attempt.abandoned ?? { at, observation: lastObservation(attempt) },
|
|
21
|
+
output: undefined,
|
|
22
|
+
sessionUnusable: true,
|
|
23
|
+
status: "failed" as const,
|
|
24
|
+
}
|
|
25
|
+
: attempt,
|
|
26
|
+
),
|
|
27
|
+
});
|
|
28
|
+
for (const attempt of targets) {
|
|
29
|
+
const receipt = attempt.receipt;
|
|
30
|
+
if (receipt === undefined) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const interrupted = yield* state.sessions.interrupt(receipt).pipe(Effect.timeout("5 seconds"), Effect.result);
|
|
34
|
+
const observed = yield* state.sessions.observe(receipt).pipe(Effect.timeout("5 seconds"), Effect.result);
|
|
35
|
+
const abandoned = {
|
|
36
|
+
at: attempt.abandoned?.at ?? at,
|
|
37
|
+
interruptError: Result.isFailure(interrupted) ? interrupted.failure.message : undefined,
|
|
38
|
+
observation: Result.isSuccess(observed) ? observed.success : (attempt.abandoned?.observation ?? lastObservation(attempt)),
|
|
39
|
+
observationError: Result.isFailure(observed) ? observed.failure.message : undefined,
|
|
40
|
+
};
|
|
41
|
+
current = yield* state.save(current, {
|
|
42
|
+
...current.value,
|
|
43
|
+
attempts: current.value.attempts.map((saved) => (saved.operationId === attempt.operationId ? { ...saved, abandoned } : saved)),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return current;
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
function hasStalledAttempt(record: FleetRecord): boolean {
|
|
50
|
+
const latest = record.attempts.at(-1);
|
|
51
|
+
return record.decision?.code === "session-stalled" || (latest?.sessionUnusable === true && (latest.stallRecovery?.count ?? 0) >= 2);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function lastObservation(attempt: Attempt): SessionObservation | undefined {
|
|
55
|
+
return attempt.receipt === undefined || attempt.status === "submitting"
|
|
56
|
+
? undefined
|
|
57
|
+
: {
|
|
58
|
+
execution: attempt.status,
|
|
59
|
+
output: attempt.output ?? "",
|
|
60
|
+
provisioning: "unknown",
|
|
61
|
+
receipt: attempt.receipt,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -69,6 +69,9 @@ function retryRework(state: EngineState) {
|
|
|
69
69
|
return undefined;
|
|
70
70
|
}
|
|
71
71
|
const latest = record.attempts.at(-1);
|
|
72
|
+
if (latest?.role === "reviewer" && latest.abandoned !== undefined) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
72
75
|
let changes = body.trim();
|
|
73
76
|
if (record.decision?.code === "pr-conflicting") {
|
|
74
77
|
changes = ["GitHub reports a conflict with main. Fetch and merge main, resolve the conflicts, and retain the requested changes.", changes]
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { workRevision } from "#board/workRevision.ts";
|
|
3
|
+
import { abandonStalled } from "#engine/abandonStalled.ts";
|
|
3
4
|
import { authorizeBrief, briefChanged } from "#engine/boardBrief.ts";
|
|
4
5
|
import { closeDecisions } from "#engine/closeDecisions.ts";
|
|
5
6
|
import { ensurePublication } from "#engine/ensurePublication.ts";
|
|
6
7
|
import { launchPrompt } from "#engine/makeLaunch.ts";
|
|
7
8
|
import type { EngineState } from "#engine/makeState.ts";
|
|
9
|
+
import { briefSteerIntent, steerBrief } from "#engine/steerBrief.ts";
|
|
8
10
|
import { executing, type FleetRecord } from "#model.ts";
|
|
9
11
|
import type { BoardWork, DecisionResponse } from "#policy.ts";
|
|
10
12
|
import type { Versioned } from "#storage/model.ts";
|
|
@@ -17,41 +19,41 @@ export function approveBrief(state: EngineState) {
|
|
|
17
19
|
responses?: readonly DecisionResponse[],
|
|
18
20
|
) {
|
|
19
21
|
yield* authorizeBrief(work);
|
|
20
|
-
const stored = yield* ensurePublication(state)(input);
|
|
22
|
+
const stored = yield* ensurePublication(state)(input).pipe(Effect.flatMap((current) => abandonStalled(state, current)));
|
|
21
23
|
const record = stored.value;
|
|
22
24
|
const published = record.decision?.published;
|
|
23
25
|
const approvedPrompt = prompt ?? revisedPrompt(record, work);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
26
|
+
const updated: FleetRecord = {
|
|
27
|
+
...record,
|
|
28
|
+
areas: work.areas,
|
|
29
|
+
attempts: record.attempts.map((attempt) =>
|
|
30
|
+
attempt.role === "reviewer" && attempt.reviewRevision === undefined
|
|
31
|
+
? { ...attempt, reviewRevision: workRevision(record.boardRevision, record.boardContext) }
|
|
32
|
+
: attempt,
|
|
33
|
+
),
|
|
34
|
+
blocker: undefined,
|
|
35
|
+
boardContext: work.context,
|
|
36
|
+
boardRevision: work.revision,
|
|
37
|
+
boardSourcePath: work.sourcePath,
|
|
38
|
+
checks: undefined,
|
|
39
|
+
decision: undefined,
|
|
40
|
+
decisionAcknowledged: undefined,
|
|
41
|
+
decisionPublished: undefined,
|
|
42
|
+
launchRetry: revisedRetry(record, approvedPrompt, state.policy.workerGuidance),
|
|
43
|
+
mergeAreasReleased: undefined,
|
|
44
|
+
mergeReadyAt: undefined,
|
|
45
|
+
mergeReadyHead: undefined,
|
|
46
|
+
prompt: approvedPrompt,
|
|
47
|
+
responses: responses ?? record.responses,
|
|
48
|
+
review: undefined,
|
|
49
|
+
stage: resumedStage(record),
|
|
50
|
+
supersededDecisions:
|
|
51
|
+
published === undefined
|
|
52
|
+
? record.supersededDecisions
|
|
53
|
+
: [...(record.supersededDecisions ?? []), { published, supersededAt: state.policy.now() }],
|
|
54
|
+
};
|
|
55
|
+
const approved = yield* state.save(stored, briefSteerIntent(record, updated, state.policy.now())).pipe(Effect.flatMap(closeDecisions(state)));
|
|
56
|
+
return yield* steerBrief(state, approved, record);
|
|
55
57
|
});
|
|
56
58
|
}
|
|
57
59
|
|
|
@@ -2,6 +2,9 @@ import type { Attempt } from "#model.ts";
|
|
|
2
2
|
import type { SessionObservation } from "#session/schema.ts";
|
|
3
3
|
|
|
4
4
|
export function observedAttempt(attempt: Attempt, observation: SessionObservation, now: number): Attempt {
|
|
5
|
+
if (attempt.abandoned !== undefined) {
|
|
6
|
+
return attempt;
|
|
7
|
+
}
|
|
5
8
|
const signature = observation.progress === undefined ? undefined : JSON.stringify(observation.progress);
|
|
6
9
|
const progress = signature === undefined || signature === attempt.progress?.signature ? attempt.progress : { at: now, signature };
|
|
7
10
|
return {
|
|
@@ -43,12 +43,33 @@ export function prepareCommand(state: EngineState) {
|
|
|
43
43
|
if (unusedPreparation(existing.value)) {
|
|
44
44
|
return yield* save(existing, { ...current, history: existing.value.history });
|
|
45
45
|
}
|
|
46
|
+
if (refreshablePreparation(existing.value, work, input)) {
|
|
47
|
+
return yield* save(existing, {
|
|
48
|
+
...existing.value,
|
|
49
|
+
cwd: input.cwd,
|
|
50
|
+
launch: input.launch,
|
|
51
|
+
preparation: input.preparation,
|
|
52
|
+
prompt: input.prompt,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
46
55
|
return yield* renewPreparation(state, existing, current, work);
|
|
47
56
|
});
|
|
48
57
|
}
|
|
49
58
|
function unusedPreparation(record: FleetRecord): boolean {
|
|
50
59
|
return record.stage === "prepared" && record.attempts.length === 0 && record.decision === undefined && (record.responses?.length ?? 0) === 0;
|
|
51
60
|
}
|
|
61
|
+
function refreshablePreparation(record: FleetRecord, work: BoardWork, input: PrepareWork): boolean {
|
|
62
|
+
return (
|
|
63
|
+
record.stage === "prepared"
|
|
64
|
+
&& record.decision === undefined
|
|
65
|
+
&& record.result === undefined
|
|
66
|
+
&& !executing(record)
|
|
67
|
+
&& !briefChanged(record, work)
|
|
68
|
+
&& record.cwd === input.cwd
|
|
69
|
+
&& record.preparation.ownedPaths.length === input.preparation.ownedPaths.length
|
|
70
|
+
&& record.preparation.ownedPaths.every((path, index) => path === input.preparation.ownedPaths[index])
|
|
71
|
+
);
|
|
72
|
+
}
|
|
52
73
|
const renewPreparation = Effect.fn("Fleet.renewPreparation")(function* (
|
|
53
74
|
state: EngineState,
|
|
54
75
|
input: Versioned<FleetRecord>,
|
|
@@ -30,11 +30,15 @@ export const recoverStall = Effect.fn("Fleet.recoverStall")(function* (
|
|
|
30
30
|
}
|
|
31
31
|
const count = recovery?.count ?? 0;
|
|
32
32
|
if (count >= 2) {
|
|
33
|
+
const exhausted = yield* state.save(stored, {
|
|
34
|
+
...stored.value,
|
|
35
|
+
attempts: stored.value.attempts.map((entry) => (entry.operationId === attempt.operationId ? { ...entry, sessionUnusable: true } : entry)),
|
|
36
|
+
});
|
|
33
37
|
return yield* state.decision(
|
|
34
|
-
|
|
38
|
+
exhausted,
|
|
35
39
|
"session-stalled",
|
|
36
40
|
"Provider turn stalled after automatic steer and interrupt recovery",
|
|
37
|
-
"
|
|
41
|
+
"Retry in a fresh session or abandon the stalled turn and release ownership",
|
|
38
42
|
);
|
|
39
43
|
}
|
|
40
44
|
if (count === 0) {
|
package/src/engine/repository.ts
CHANGED
|
@@ -60,6 +60,7 @@ const FleetSessionJournal = defineService({
|
|
|
60
60
|
const original = stored.value.attempts.find((attempt) => attempt.operationId === operationId);
|
|
61
61
|
if (
|
|
62
62
|
original === undefined
|
|
63
|
+
|| original.abandoned !== undefined
|
|
63
64
|
|| (original.sessionId === undefined && original.status !== "submitting")
|
|
64
65
|
|| (original.role === "reviewer"
|
|
65
66
|
&& allAttempts(stored.value).some((attempt) => attempt.role !== "reviewer" && attempt.sessionId === sessionId))
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import { abandonStalled } from "#engine/abandonStalled.ts";
|
|
2
3
|
import { authorizeResolution } from "#engine/authorizeResolution.ts";
|
|
3
4
|
import type { EngineState } from "#engine/makeState.ts";
|
|
4
5
|
import { releaseExecution } from "#engine/releaseExecution.ts";
|
|
@@ -14,7 +15,8 @@ export const resolveExecution = Effect.fn("Fleet.resolveExecution")(function* (
|
|
|
14
15
|
if (action === "retry") {
|
|
15
16
|
yield* authorizeResolution(state, stored.value, action);
|
|
16
17
|
}
|
|
17
|
-
const
|
|
18
|
+
const resolved = yield* abandonStalled(state, stored);
|
|
19
|
+
const fenced = yield* retireUnacknowledged(state, resolved);
|
|
18
20
|
const current = action === "release" && executing(fenced.value) ? yield* releaseExecution(state, fenced) : fenced;
|
|
19
21
|
if (action === "release") {
|
|
20
22
|
yield* authorizeResolution(state, current.value, action);
|
|
@@ -24,7 +24,9 @@ export function cleanupSessions({ sessions, load, save }: EngineState) {
|
|
|
24
24
|
return Effect.fn("Fleet.cleanupSessions")(function* (input: Versioned<FleetRecord>) {
|
|
25
25
|
let stored = input;
|
|
26
26
|
for (const id of pendingSessionCleanup(stored.value)) {
|
|
27
|
-
const
|
|
27
|
+
const abandoned = allAttempts(stored.value).some((attempt) => sessionId(attempt) === id && attempt.abandoned !== undefined);
|
|
28
|
+
const archive = sessions.archive(id);
|
|
29
|
+
const result = yield* (abandoned ? archive.pipe(Effect.timeout("5 seconds")) : archive).pipe(Effect.result);
|
|
28
30
|
if (result._tag === "Failure") {
|
|
29
31
|
yield* Effect.logWarning("Fleet session cleanup failed; reconciliation will retry", Cause.fail(result.failure)).pipe(
|
|
30
32
|
Effect.annotateLogs({ sessionId: id }),
|
|
@@ -10,5 +10,10 @@ export function sessionStatus(session: (typeof FleetView.Type)["sessions"][numbe
|
|
|
10
10
|
return [
|
|
11
11
|
`session ${session.sessionId} turn ${session.turnId}`,
|
|
12
12
|
...times.flatMap(([label, time]) => (time === undefined ? [] : [`${label} ${new Date(time).toISOString()}`])),
|
|
13
|
+
...(session.briefSteers ?? []).map((steer) =>
|
|
14
|
+
steer.steeredAt === undefined
|
|
15
|
+
? `brief edit steer requested ${new Date(steer.requestedAt).toISOString()}; ${steer.error === undefined ? "delivery unconfirmed" : `failed: ${steer.error}`}`
|
|
16
|
+
: `brief edit steered ${new Date(steer.steeredAt).toISOString()}`,
|
|
17
|
+
),
|
|
13
18
|
].join("; ");
|
|
14
19
|
}
|