@osolmaz/pi-workflows 0.15.2 → 0.16.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.
Files changed (124) hide show
  1. package/README.md +6 -6
  2. package/dist/client/activity.d.ts +2 -0
  3. package/dist/client/activity.js +6 -0
  4. package/dist/client/activity.js.map +1 -0
  5. package/dist/client/client.d.ts +101 -0
  6. package/dist/client/client.js +733 -0
  7. package/dist/client/client.js.map +1 -0
  8. package/dist/client/index.d.ts +3 -0
  9. package/dist/client/index.js +3 -0
  10. package/dist/client/index.js.map +1 -0
  11. package/dist/client/materialize.d.ts +7 -0
  12. package/dist/client/materialize.js +177 -0
  13. package/dist/client/materialize.js.map +1 -0
  14. package/dist/client/protocol.d.ts +60 -0
  15. package/dist/client/protocol.js +269 -0
  16. package/dist/client/protocol.js.map +1 -0
  17. package/dist/client/resolver.d.ts +23 -0
  18. package/dist/client/resolver.js +2 -0
  19. package/dist/client/resolver.js.map +1 -0
  20. package/dist/client/view.d.ts +118 -0
  21. package/dist/client/view.js +3 -0
  22. package/dist/client/view.js.map +1 -0
  23. package/dist/controllers/sqlite.d.ts +64 -0
  24. package/dist/controllers/sqlite.js +219 -3
  25. package/dist/controllers/sqlite.js.map +1 -1
  26. package/dist/extension/index.d.ts +1 -0
  27. package/dist/extension/index.js +384 -156
  28. package/dist/extension/index.js.map +1 -1
  29. package/dist/extension/session-delivery.d.ts +6 -0
  30. package/dist/extension/session-delivery.js +80 -25
  31. package/dist/extension/session-delivery.js.map +1 -1
  32. package/dist/extension/session-view.d.ts +21 -0
  33. package/dist/extension/session-view.js +127 -0
  34. package/dist/extension/session-view.js.map +1 -0
  35. package/dist/extension/widget.d.ts +2 -1
  36. package/dist/extension/widget.js +15 -7
  37. package/dist/extension/widget.js.map +1 -1
  38. package/dist/host/child-worker-supervisor.js +1 -1
  39. package/dist/host/child-worker-supervisor.js.map +1 -1
  40. package/dist/host/resolver-entry.d.ts +2 -23
  41. package/dist/host/resolver-entry.js +1 -1
  42. package/dist/host/resolver-entry.js.map +1 -1
  43. package/dist/host/runner.d.ts +12 -0
  44. package/dist/host/runner.js +565 -43
  45. package/dist/host/runner.js.map +1 -1
  46. package/dist/host/state.d.ts +8 -3
  47. package/dist/host/state.js +59 -27
  48. package/dist/host/state.js.map +1 -1
  49. package/dist/host/view.d.ts +73 -0
  50. package/dist/host/view.js +871 -0
  51. package/dist/host/view.js.map +1 -0
  52. package/dist/host/worker-protocol.js +1 -1
  53. package/dist/host/worker-protocol.js.map +1 -1
  54. package/dist/state/database.d.ts +1 -0
  55. package/dist/state/database.js +15 -0
  56. package/dist/state/database.js.map +1 -1
  57. package/dist/state/prune.d.ts +3 -1
  58. package/dist/state/prune.js +6 -8
  59. package/dist/state/prune.js.map +1 -1
  60. package/dist/state/schema.js +12 -1
  61. package/dist/state/schema.js.map +1 -1
  62. package/dist/viewer/backup.d.ts +2 -0
  63. package/dist/viewer/backup.js +28 -0
  64. package/dist/viewer/backup.js.map +1 -0
  65. package/dist/viewer/cli.d.ts +4 -0
  66. package/dist/viewer/cli.js +150 -170
  67. package/dist/viewer/cli.js.map +1 -1
  68. package/dist/viewer/tui.d.ts +5 -7
  69. package/dist/viewer/tui.js +188 -108
  70. package/dist/viewer/tui.js.map +1 -1
  71. package/dist/workflows/store.d.ts +62 -1
  72. package/dist/workflows/store.js +350 -44
  73. package/dist/workflows/store.js.map +1 -1
  74. package/docs/2026-09-01-restore-session-delivery-controls-plan.md +139 -0
  75. package/docs/2026-09-01-unified-workflow-client-plan.md +381 -0
  76. package/docs/2026-09-02-installed-live-e2e-plan.md +225 -0
  77. package/docs/SQLITE_STATE.md +13 -11
  78. package/docs/WORKFLOW_HOST.md +81 -64
  79. package/docs/WORKFLOW_STEP_MESSAGES.md +4 -4
  80. package/docs/development.md +2 -1
  81. package/docs/live-replay-protocol.md +70 -132
  82. package/docs/tui-viewer.md +10 -14
  83. package/docs/workflows.md +56 -3
  84. package/herdr-plugin.toml +1 -1
  85. package/package.json +9 -3
  86. package/protocol/client.v1.schema.json +137 -0
  87. package/protocol/fixtures/client-v1.json +23 -0
  88. package/src/client/activity.ts +6 -0
  89. package/src/client/client.ts +935 -0
  90. package/src/client/index.ts +24 -0
  91. package/src/client/materialize.ts +228 -0
  92. package/src/client/protocol.ts +327 -0
  93. package/src/client/resolver.ts +26 -0
  94. package/src/client/view.ts +138 -0
  95. package/src/controllers/sqlite.ts +342 -3
  96. package/src/extension/index.ts +482 -171
  97. package/src/extension/session-delivery.ts +88 -25
  98. package/src/extension/session-view.ts +154 -0
  99. package/src/extension/widget.ts +18 -9
  100. package/src/host/child-worker-supervisor.ts +1 -1
  101. package/src/host/resolver-entry.ts +11 -26
  102. package/src/host/runner.ts +749 -75
  103. package/src/host/state.ts +82 -44
  104. package/src/host/view.ts +1084 -0
  105. package/src/host/worker-protocol.ts +1 -1
  106. package/src/state/database.ts +13 -0
  107. package/src/state/prune.ts +11 -11
  108. package/src/state/schema.ts +12 -1
  109. package/src/viewer/backup.ts +29 -0
  110. package/src/viewer/cli.ts +171 -185
  111. package/src/viewer/tui.ts +196 -124
  112. package/src/workflows/store.ts +500 -45
  113. package/dist/host/client.d.ts +0 -48
  114. package/dist/host/client.js +0 -216
  115. package/dist/host/client.js.map +0 -1
  116. package/dist/host/protocol.d.ts +0 -38
  117. package/dist/host/protocol.js +0 -156
  118. package/dist/host/protocol.js.map +0 -1
  119. package/dist/viewer/watch.d.ts +0 -6
  120. package/dist/viewer/watch.js +0 -46
  121. package/dist/viewer/watch.js.map +0 -1
  122. package/src/host/client.ts +0 -293
  123. package/src/host/protocol.ts +0 -196
  124. package/src/viewer/watch.ts +0 -51
package/README.md CHANGED
@@ -80,10 +80,10 @@ All live workflow and controller state uses one local database:
80
80
  ```
81
81
 
82
82
  Runs, decisions, queues, claims, controllers, session capture, notifications,
83
- channel transport state, effects, and large text values all live there.
84
- Viewers open the database read-only, and every write checks its actor,
85
- expected revision, and owner lease when required. See
86
- [SQLite state](docs/SQLITE_STATE.md).
83
+ channel transport state, effects, and large text values all live there. The
84
+ package-owned host is the only production process that opens the active
85
+ database. The extension, CLI, Herdr adapter, and `piw` use the same versioned
86
+ local client protocol. See [SQLite state](docs/SQLITE_STATE.md).
87
87
 
88
88
  ## Quick start
89
89
 
@@ -254,8 +254,8 @@ Run the same command after a pi-workflows update. `pi-workflows herdr setup`
254
254
  remains an alias for existing installations.
255
255
 
256
256
  When Pi runs inside Herdr, the workflow widget shows a `Ctrl+Shift+R piw`
257
- shortcut. The shortcut opens the exact SQLite run state and lets you choose a
258
- split, tab, or new workspace. `/piw` opens the same menu, and `/piw right`,
257
+ shortcut. The shortcut opens the exact host-owned run view and lets you choose
258
+ a split, tab, or new workspace. `/piw` opens the same menu, and `/piw right`,
259
259
  `/piw below`, `/piw left`, `/piw above`, `/piw tab`, or `/piw workspace`
260
260
  selects a placement directly. If a viewer for that run already exists,
261
261
  pi-workflows focuses it instead of opening a duplicate.
@@ -0,0 +1,2 @@
1
+ export declare const ORIGIN_ACTIVITY_REFRESH_MS = 1000;
2
+ export declare const ORIGIN_ACTIVITY_LEASE_MS = 4000;
@@ -0,0 +1,6 @@
1
+ export const ORIGIN_ACTIVITY_REFRESH_MS = 1_000;
2
+ export const ORIGIN_ACTIVITY_LEASE_MS = 4_000;
3
+ if (ORIGIN_ACTIVITY_REFRESH_MS >= ORIGIN_ACTIVITY_LEASE_MS) {
4
+ throw new Error("Origin activity refresh period must be shorter than its lease");
5
+ }
6
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/client/activity.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAChD,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,IAAI,0BAA0B,IAAI,wBAAwB,EAAE,CAAC;IAC3D,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;AACnF,CAAC"}
@@ -0,0 +1,101 @@
1
+ import { type JsonValue } from "../state/json.js";
2
+ import { type ClientEvent, type ClientHello, type ClientOperation, type ClientResponse } from "./protocol.js";
3
+ import type { ResolvedControllerInitialization, ResolvedSettingsChange, ResolvedWorkflowLaunch } from "./resolver.js";
4
+ import type { WorkflowRunView } from "./view.js";
5
+ export declare class WorkflowClientVersionError extends Error {
6
+ constructor(message: string);
7
+ }
8
+ export type WorkflowClientOptions = {
9
+ clientId?: string;
10
+ databasePath?: string;
11
+ hostEntryPath?: string;
12
+ env?: Record<string, string>;
13
+ };
14
+ export declare class WorkflowClient {
15
+ readonly clientId: string;
16
+ readonly databasePath: string;
17
+ readonly endpoint: string;
18
+ private readonly hostEntryPath;
19
+ private readonly env;
20
+ private socket;
21
+ private connectTask;
22
+ private hello;
23
+ private closed;
24
+ private reconnectTimer;
25
+ private readonly pending;
26
+ private readonly subscriptions;
27
+ constructor(options?: WorkflowClientOptions);
28
+ get connectionId(): string | undefined;
29
+ get packageVersion(): string | undefined;
30
+ connect(): Promise<ClientHello>;
31
+ request(options: {
32
+ operation: ClientOperation;
33
+ requestId?: string;
34
+ idempotencyKey?: string;
35
+ runId?: string;
36
+ expectedRevision?: number;
37
+ payload?: JsonValue;
38
+ signal?: AbortSignal;
39
+ }): Promise<ClientResponse>;
40
+ requestDurable(options: {
41
+ operation: ClientOperation;
42
+ requestId?: string;
43
+ idempotencyKey: string;
44
+ runId?: string;
45
+ expectedRevision?: number;
46
+ payload?: JsonValue;
47
+ signal?: AbortSignal;
48
+ }): Promise<ClientResponse>;
49
+ getRun(runId: string): Promise<WorkflowRunView | null>;
50
+ watchRuns(listener: (event: ClientEvent) => void, options?: {
51
+ subscriptionId?: string;
52
+ limit?: number;
53
+ }): Promise<() => Promise<void>>;
54
+ watchRun(runId: string, listener: (event: ClientEvent) => void, options?: {
55
+ subscriptionId?: string;
56
+ revision?: number;
57
+ }): Promise<() => Promise<void>>;
58
+ watchSession(sessionId: string, listener: (event: ClientEvent) => void, options?: {
59
+ subscriptionId?: string;
60
+ }): Promise<() => Promise<void>>;
61
+ ensureAvailable(): Promise<ClientHello>;
62
+ ensureRunning(): Promise<ClientResponse>;
63
+ readContent(runId: string, contentPath: string): Promise<{
64
+ mediaType: string;
65
+ content: Buffer;
66
+ }>;
67
+ hydrateContent(runId: string, value: JsonValue): Promise<JsonValue>;
68
+ private hydrateContentValue;
69
+ resolveWorkflow(options: {
70
+ cwd: string;
71
+ workflowRef: string;
72
+ timeoutMs?: number;
73
+ }): Promise<ResolvedWorkflowLaunch>;
74
+ resolveControllerInitialization(options: {
75
+ cwd: string;
76
+ controllerName: string;
77
+ spec: JsonValue;
78
+ timeoutMs?: number;
79
+ }): Promise<ResolvedControllerInitialization>;
80
+ resolveSettingsChange(options: {
81
+ cwd: string;
82
+ workflowRef: string;
83
+ definitionDigest: string;
84
+ mountPath: string;
85
+ current: JsonValue;
86
+ patch: JsonValue;
87
+ actorId: string;
88
+ timeoutMs?: number;
89
+ }): Promise<ResolvedSettingsChange>;
90
+ close(): Promise<void>;
91
+ private subscribe;
92
+ private requestConnected;
93
+ private send;
94
+ private openConnection;
95
+ private deliverSubscriptionEvent;
96
+ private restoreSubscriptions;
97
+ private resetConnection;
98
+ private scheduleReconnect;
99
+ private runResolver;
100
+ private startDetached;
101
+ }