@positronic/cloudflare 0.0.40 → 0.0.42
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/dist/src/api.js
CHANGED
|
@@ -509,7 +509,8 @@ app.delete('/brains/runs/:runId', function(context) {
|
|
|
509
509
|
}, 404)
|
|
510
510
|
];
|
|
511
511
|
}
|
|
512
|
-
// Now try to kill it
|
|
512
|
+
// Now try to kill it - pass runId and brainTitle as fallbacks in case
|
|
513
|
+
// the DO's SQLite state is missing (zombie brain scenario)
|
|
513
514
|
namespace = context.env.BRAIN_RUNNER_DO;
|
|
514
515
|
doId = namespace.idFromName(runId);
|
|
515
516
|
stub = namespace.get(doId);
|
|
@@ -523,12 +524,11 @@ app.delete('/brains/runs/:runId', function(context) {
|
|
|
523
524
|
]);
|
|
524
525
|
return [
|
|
525
526
|
4,
|
|
526
|
-
stub.kill()
|
|
527
|
+
stub.kill(runId, existingRun.brain_title)
|
|
527
528
|
];
|
|
528
529
|
case 3:
|
|
529
530
|
result = _state.sent();
|
|
530
531
|
if (!result.success) {
|
|
531
|
-
// Brain run is not active or already completed
|
|
532
532
|
return [
|
|
533
533
|
2,
|
|
534
534
|
context.json({
|
|
@@ -623,9 +623,17 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
623
623
|
},
|
|
624
624
|
{
|
|
625
625
|
key: "kill",
|
|
626
|
-
value:
|
|
626
|
+
value: /**
|
|
627
|
+
* Kill a brain run. This method handles multiple scenarios:
|
|
628
|
+
* 1. Brain is actively running (has abortController) - abort it
|
|
629
|
+
* 2. Brain is suspended (waiting for webhook) - emit CANCELLED event
|
|
630
|
+
* 3. Brain is a "zombie" (DO state missing due to IoContext timeout) - directly update MonitorDO
|
|
631
|
+
*
|
|
632
|
+
* The brainRunId and brainTitle parameters are used as fallbacks when the DO's
|
|
633
|
+
* SQLite state is missing (zombie brain scenario).
|
|
634
|
+
*/ function kill(brainRunId, brainTitle) {
|
|
627
635
|
return _async_to_generator(function() {
|
|
628
|
-
var
|
|
636
|
+
var monitorStub, actualBrainRunId, actualBrainTitle, startEvent, sql, startEventResult, existingRun, cancelledEvent;
|
|
629
637
|
return _ts_generator(this, function(_state) {
|
|
630
638
|
switch(_state.label){
|
|
631
639
|
case 0:
|
|
@@ -640,12 +648,26 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
640
648
|
}
|
|
641
649
|
];
|
|
642
650
|
}
|
|
643
|
-
|
|
644
|
-
//
|
|
645
|
-
|
|
651
|
+
monitorStub = this.env.MONITOR_DO.get(this.env.MONITOR_DO.idFromName('singleton'));
|
|
652
|
+
// Try to get brainRunId from DO's SQLite state
|
|
653
|
+
actualBrainRunId = brainRunId;
|
|
654
|
+
actualBrainTitle = brainTitle;
|
|
655
|
+
startEvent = null;
|
|
646
656
|
sql = this.sql;
|
|
647
|
-
|
|
648
|
-
|
|
657
|
+
try {
|
|
658
|
+
startEventResult = sql.exec("SELECT serialized_event FROM brain_events WHERE event_type IN (?, ?) ORDER BY event_id DESC LIMIT 1", BRAIN_EVENTS.START, BRAIN_EVENTS.RESTART).toArray();
|
|
659
|
+
if (startEventResult.length > 0) {
|
|
660
|
+
startEvent = JSON.parse(startEventResult[0].serialized_event);
|
|
661
|
+
actualBrainRunId = startEvent.brainRunId;
|
|
662
|
+
actualBrainTitle = startEvent.brainTitle;
|
|
663
|
+
}
|
|
664
|
+
} catch (err) {
|
|
665
|
+
// Table doesn't exist - brain was killed before any events were written to DO's SQLite
|
|
666
|
+
// This is fine if we have fallback brainRunId/brainTitle from the API
|
|
667
|
+
console.log("[DO ".concat(this.brainRunId, "] kill() could not query brain_events (table may not exist)"));
|
|
668
|
+
}
|
|
669
|
+
// If we still don't have a brainRunId, we can't proceed
|
|
670
|
+
if (!actualBrainRunId) {
|
|
649
671
|
return [
|
|
650
672
|
2,
|
|
651
673
|
{
|
|
@@ -654,10 +676,6 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
654
676
|
}
|
|
655
677
|
];
|
|
656
678
|
}
|
|
657
|
-
startEvent = JSON.parse(startEventResult[0].serialized_event);
|
|
658
|
-
actualBrainRunId = startEvent.brainRunId;
|
|
659
|
-
// Check if it's still in RUNNING status (which means it's suspended)
|
|
660
|
-
monitorStub = this.env.MONITOR_DO.get(this.env.MONITOR_DO.idFromName('singleton'));
|
|
661
679
|
return [
|
|
662
680
|
4,
|
|
663
681
|
monitorStub.getLastEvent(actualBrainRunId)
|
|
@@ -683,14 +701,14 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
683
701
|
}
|
|
684
702
|
];
|
|
685
703
|
}
|
|
686
|
-
//
|
|
704
|
+
// Emit CANCELLED event to MonitorDO
|
|
687
705
|
cancelledEvent = {
|
|
688
706
|
type: BRAIN_EVENTS.CANCELLED,
|
|
689
707
|
status: STATUS.CANCELLED,
|
|
690
|
-
brainTitle:
|
|
691
|
-
brainDescription: startEvent.brainDescription || '',
|
|
708
|
+
brainTitle: actualBrainTitle || String(existingRun.brain_title) || 'unknown',
|
|
709
|
+
brainDescription: (startEvent === null || startEvent === void 0 ? void 0 : startEvent.brainDescription) || '',
|
|
692
710
|
brainRunId: actualBrainRunId,
|
|
693
|
-
options: startEvent.options || {}
|
|
711
|
+
options: (startEvent === null || startEvent === void 0 ? void 0 : startEvent.options) || {}
|
|
694
712
|
};
|
|
695
713
|
return [
|
|
696
714
|
4,
|
|
@@ -702,7 +720,7 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
702
720
|
2,
|
|
703
721
|
{
|
|
704
722
|
success: true,
|
|
705
|
-
message: '
|
|
723
|
+
message: 'Brain run cancelled'
|
|
706
724
|
}
|
|
707
725
|
];
|
|
708
726
|
}
|
package/dist/types/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAK1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,2BAA2B,CAAC;AAGpE,KAAK,QAAQ,GAAG;IACd,eAAe,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACvD,UAAU,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AA+BF,QAAA,MAAM,GAAG;cAAwB,QAAQ;yCAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAK1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,2BAA2B,CAAC;AAGpE,KAAK,QAAQ,GAAG;IACd,eAAe,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACvD,UAAU,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AA+BF,QAAA,MAAM,GAAG;cAAwB,QAAQ;yCAAK,CAAC;AAg8C/C,eAAe,GAAG,CAAC"}
|
|
@@ -28,7 +28,16 @@ export declare class BrainRunnerDO extends DurableObject<Env> {
|
|
|
28
28
|
* Extracts secrets from Cloudflare env bindings (string values only).
|
|
29
29
|
*/
|
|
30
30
|
private buildRuntimeEnv;
|
|
31
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Kill a brain run. This method handles multiple scenarios:
|
|
33
|
+
* 1. Brain is actively running (has abortController) - abort it
|
|
34
|
+
* 2. Brain is suspended (waiting for webhook) - emit CANCELLED event
|
|
35
|
+
* 3. Brain is a "zombie" (DO state missing due to IoContext timeout) - directly update MonitorDO
|
|
36
|
+
*
|
|
37
|
+
* The brainRunId and brainTitle parameters are used as fallbacks when the DO's
|
|
38
|
+
* SQLite state is missing (zombie brain scenario).
|
|
39
|
+
*/
|
|
40
|
+
kill(brainRunId?: string, brainTitle?: string): Promise<{
|
|
32
41
|
success: boolean;
|
|
33
42
|
message: string;
|
|
34
43
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain-runner-do.d.ts","sourceRoot":"","sources":["../../src/brain-runner-do.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAyD,MAAM,kBAAkB,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,wBAAgB,WAAW,CAAC,iBAAiB,EAAE,kBAAkB,QAEhE;AAED,wBAAgB,WAAW,IAAI,kBAAkB,GAAG,IAAI,CAEvD;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,QAEjD;AAGD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAE/D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAE/D;AAED,MAAM,WAAW,GAAG;IAClB,eAAe,EAAE,sBAAsB,CAAC;IACxC,UAAU,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwDD,qBAAa,aAAc,SAAQ,aAAa,CAAC,GAAG,CAAC;IACnD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,eAAe,CAAgC;gBAE3C,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG;YAOjC,mBAAmB;IAqEjC;;;OAGG;IACH,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"brain-runner-do.d.ts","sourceRoot":"","sources":["../../src/brain-runner-do.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAyD,MAAM,kBAAkB,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,wBAAgB,WAAW,CAAC,iBAAiB,EAAE,kBAAkB,QAEhE;AAED,wBAAgB,WAAW,IAAI,kBAAkB,GAAG,IAAI,CAEvD;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,QAEjD;AAGD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAE/D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAE/D;AAED,MAAM,WAAW,GAAG;IAClB,eAAe,EAAE,sBAAsB,CAAC;IACxC,UAAU,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwDD,qBAAa,aAAc,SAAQ,aAAa,CAAC,GAAG,CAAC;IACnD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,eAAe,CAAgC;gBAE3C,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG;YAOjC,mBAAmB;IAqEjC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;;;OAQG;IACG,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoE9F,KAAK,CACT,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAuG7B,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmJhC,KAAK,CAAC,OAAO,EAAE,OAAO;CA4E7B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@positronic/cloudflare",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.42",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"clean": "rm -rf tsconfig.tsbuildinfo dist"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@positronic/core": "^0.0.
|
|
35
|
-
"@positronic/spec": "^0.0.
|
|
36
|
-
"@positronic/template-new-project": "^0.0.
|
|
34
|
+
"@positronic/core": "^0.0.42",
|
|
35
|
+
"@positronic/spec": "^0.0.42",
|
|
36
|
+
"@positronic/template-new-project": "^0.0.42",
|
|
37
37
|
"aws4fetch": "^1.0.18",
|
|
38
38
|
"caz": "^2.0.0",
|
|
39
39
|
"cron-schedule": "^5.0.4",
|