@positronic/cloudflare 0.0.41 → 0.0.43
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,29 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
640
648
|
}
|
|
641
649
|
];
|
|
642
650
|
}
|
|
643
|
-
|
|
644
|
-
//
|
|
645
|
-
//
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
651
|
+
monitorStub = this.env.MONITOR_DO.get(this.env.MONITOR_DO.idFromName('singleton'));
|
|
652
|
+
// Use passed-in brainRunId/brainTitle if provided (from API which already verified the run exists)
|
|
653
|
+
// Only fall back to SQLite if not provided
|
|
654
|
+
actualBrainRunId = brainRunId;
|
|
655
|
+
actualBrainTitle = brainTitle;
|
|
656
|
+
startEvent = null;
|
|
657
|
+
// Only query SQLite if we don't have the brainRunId from the API
|
|
658
|
+
if (!actualBrainRunId) {
|
|
659
|
+
sql = this.sql;
|
|
660
|
+
try {
|
|
661
|
+
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();
|
|
662
|
+
if (startEventResult.length > 0) {
|
|
663
|
+
startEvent = JSON.parse(startEventResult[0].serialized_event);
|
|
664
|
+
actualBrainRunId = startEvent.brainRunId;
|
|
665
|
+
actualBrainTitle = startEvent.brainTitle;
|
|
666
|
+
}
|
|
667
|
+
} catch (err) {
|
|
668
|
+
// Table doesn't exist - brain was killed before any events were written to DO's SQLite
|
|
669
|
+
console.log("[DO ".concat(this.brainRunId, "] kill() could not query brain_events (table may not exist)"));
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
// If we still don't have a brainRunId, we can't proceed
|
|
673
|
+
if (!actualBrainRunId) {
|
|
649
674
|
return [
|
|
650
675
|
2,
|
|
651
676
|
{
|
|
@@ -654,10 +679,6 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
654
679
|
}
|
|
655
680
|
];
|
|
656
681
|
}
|
|
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
682
|
return [
|
|
662
683
|
4,
|
|
663
684
|
monitorStub.getLastEvent(actualBrainRunId)
|
|
@@ -683,14 +704,14 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
683
704
|
}
|
|
684
705
|
];
|
|
685
706
|
}
|
|
686
|
-
//
|
|
707
|
+
// Emit CANCELLED event to MonitorDO
|
|
687
708
|
cancelledEvent = {
|
|
688
709
|
type: BRAIN_EVENTS.CANCELLED,
|
|
689
710
|
status: STATUS.CANCELLED,
|
|
690
|
-
brainTitle:
|
|
691
|
-
brainDescription: startEvent.brainDescription || '',
|
|
711
|
+
brainTitle: actualBrainTitle || String(existingRun.brain_title) || 'unknown',
|
|
712
|
+
brainDescription: (startEvent === null || startEvent === void 0 ? void 0 : startEvent.brainDescription) || '',
|
|
692
713
|
brainRunId: actualBrainRunId,
|
|
693
|
-
options: startEvent.options || {}
|
|
714
|
+
options: (startEvent === null || startEvent === void 0 ? void 0 : startEvent.options) || {}
|
|
694
715
|
};
|
|
695
716
|
return [
|
|
696
717
|
4,
|
|
@@ -702,7 +723,7 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
702
723
|
2,
|
|
703
724
|
{
|
|
704
725
|
success: true,
|
|
705
|
-
message: '
|
|
726
|
+
message: 'Brain run cancelled'
|
|
706
727
|
}
|
|
707
728
|
];
|
|
708
729
|
}
|
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;IAuE9F,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.43",
|
|
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.43",
|
|
35
|
+
"@positronic/spec": "^0.0.43",
|
|
36
|
+
"@positronic/template-new-project": "^0.0.43",
|
|
37
37
|
"aws4fetch": "^1.0.18",
|
|
38
38
|
"caz": "^2.0.0",
|
|
39
39
|
"cron-schedule": "^5.0.4",
|