patchwork-os 0.2.0-beta.13.canary.249 → 0.2.0-beta.13.canary.250
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.
|
@@ -22,6 +22,10 @@ export interface HaltPushPayload {
|
|
|
22
22
|
status: "error" | "halted";
|
|
23
23
|
haltReason?: string;
|
|
24
24
|
haltCategory?: string;
|
|
25
|
+
/** Actionable one-liner for this category (HALT_CATEGORY_HINTS) — lets the
|
|
26
|
+
* push notification / SW show "what to do" without importing the TS hint
|
|
27
|
+
* map. Source of truth: src/recipes/haltCategory.ts. */
|
|
28
|
+
actionHint?: string;
|
|
25
29
|
stepId?: string;
|
|
26
30
|
errorMessage?: string;
|
|
27
31
|
occurredAt?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"haltPushDispatch.js","sourceRoot":"","sources":["../src/haltPushDispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,GAAG,MAAM,mBAAmB,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,EAAU;IAC7B,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"haltPushDispatch.js","sourceRoot":"","sources":["../src/haltPushDispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,GAAG,MAAM,mBAAmB,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,EAAU;IAC7B,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC;AAmBD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,cAAsB,EACtB,gBAAwB,EACxB,OAAwB;IAExB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IACD,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CACV,6DAA6D,QAAQ,CAAC,OAAO,EAAE,CAChF,CAAC;YACF,OAAO;QACT,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,yCAAyC,QAAQ,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACzG,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,cAAc,OAAO,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,gBAAgB,EAAE;aAC5C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,2DAA2D;YAC3D,gEAAgE;YAChE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CACV,wCAAwC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CACvE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,gCAAgC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACnF,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* single push so a flapping run can't spam every subscribed device.
|
|
17
17
|
*/
|
|
18
18
|
import { dispatchHaltPushNotification } from "./haltPushDispatch.js";
|
|
19
|
+
import { categoriseHaltReason, HALT_CATEGORY_HINTS, } from "./recipes/haltCategory.js";
|
|
19
20
|
const DEFAULT_DEDUP_WINDOW_MS = 60_000;
|
|
20
21
|
export function wireHaltPushDispatch(deps) {
|
|
21
22
|
const dedupWindowMs = deps.dedupWindowMs ?? DEFAULT_DEDUP_WINDOW_MS;
|
|
@@ -44,6 +45,14 @@ export function wireHaltPushDispatch(deps) {
|
|
|
44
45
|
const recipeName = typeof md.recipeName === "string" ? md.recipeName : "recipe";
|
|
45
46
|
const runSeq = typeof md.runSeq === "number" ? md.runSeq : 0;
|
|
46
47
|
const errorMessage = typeof md.errorMessage === "string" ? md.errorMessage : undefined;
|
|
48
|
+
// Classify the halt + attach the actionable fix hint so the push (and the
|
|
49
|
+
// service worker) can show "what + how to fix" instead of a raw error
|
|
50
|
+
// string — the difference between "github.list_prs: 401" and
|
|
51
|
+
// "auth failure → reconnect from /connections" on a phone at 3am.
|
|
52
|
+
// Prefer an explicit haltReason from the event; fall back to errorMessage.
|
|
53
|
+
const haltReason = typeof md.haltReason === "string" ? md.haltReason : errorMessage;
|
|
54
|
+
const haltCategory = categoriseHaltReason(haltReason);
|
|
55
|
+
const actionHint = HALT_CATEGORY_HINTS[haltCategory];
|
|
47
56
|
// Dedup: skip if this runSeq fired a push within the window.
|
|
48
57
|
// runSeq 0 is the "unknown" sentinel — never dedup it, since two
|
|
49
58
|
// genuinely distinct unknown-seq runs would otherwise collide.
|
|
@@ -61,6 +70,9 @@ export function wireHaltPushDispatch(deps) {
|
|
|
61
70
|
recipeName,
|
|
62
71
|
runSeq,
|
|
63
72
|
status: "error",
|
|
73
|
+
haltReason,
|
|
74
|
+
haltCategory,
|
|
75
|
+
actionHint,
|
|
64
76
|
errorMessage,
|
|
65
77
|
occurredAt: at,
|
|
66
78
|
}).catch((err) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wireHaltPushDispatch.js","sourceRoot":"","sources":["../src/wireHaltPushDispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"wireHaltPushDispatch.js","sourceRoot":"","sources":["../src/wireHaltPushDispatch.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "patchwork-os",
|
|
3
|
-
"version": "0.2.0-beta.13.canary.
|
|
3
|
+
"version": "0.2.0-beta.13.canary.250",
|
|
4
4
|
"description": "Your personal AI runtime, local-first. Patchwork OS gives any AI model a consistent set of tools, YAML recipes, a delegation policy with approval queue, and a durable trace memory — all on your machine, all under your policy.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|