@yycholla/pi-dynamic-workflows 3.3.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 (179) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +325 -0
  3. package/assets/readme/hero.png +0 -0
  4. package/assets/readme/hero.svg +70 -0
  5. package/assets/readme/package-cover.png +0 -0
  6. package/assets/readme/package-cover.svg +66 -0
  7. package/assets/readme/workflow.png +0 -0
  8. package/assets/readme/workflow.svg +77 -0
  9. package/dist/accept-workflow-guidance.d.ts +14 -0
  10. package/dist/accept-workflow-guidance.js +53 -0
  11. package/dist/adversarial-review.d.ts +30 -0
  12. package/dist/adversarial-review.js +107 -0
  13. package/dist/agent-history.d.ts +20 -0
  14. package/dist/agent-history.js +122 -0
  15. package/dist/agent-registry.d.ts +83 -0
  16. package/dist/agent-registry.js +190 -0
  17. package/dist/agent.d.ts +364 -0
  18. package/dist/agent.js +714 -0
  19. package/dist/builtin-commands.d.ts +19 -0
  20. package/dist/builtin-commands.js +251 -0
  21. package/dist/builtin-workflows.d.ts +45 -0
  22. package/dist/builtin-workflows.js +121 -0
  23. package/dist/code-review.d.ts +26 -0
  24. package/dist/code-review.js +181 -0
  25. package/dist/config.d.ts +37 -0
  26. package/dist/config.js +44 -0
  27. package/dist/deep-research.d.ts +30 -0
  28. package/dist/deep-research.js +124 -0
  29. package/dist/display.d.ts +134 -0
  30. package/dist/display.js +248 -0
  31. package/dist/effort-command.d.ts +28 -0
  32. package/dist/effort-command.js +68 -0
  33. package/dist/enums.d.ts +69 -0
  34. package/dist/enums.js +78 -0
  35. package/dist/errors.d.ts +113 -0
  36. package/dist/errors.js +140 -0
  37. package/dist/extension-reload.d.ts +37 -0
  38. package/dist/extension-reload.js +78 -0
  39. package/dist/fs-persistence.d.ts +63 -0
  40. package/dist/fs-persistence.js +102 -0
  41. package/dist/index.d.ts +57 -0
  42. package/dist/index.js +35 -0
  43. package/dist/logger.d.ts +21 -0
  44. package/dist/logger.js +66 -0
  45. package/dist/model-routing.d.ts +30 -0
  46. package/dist/model-routing.js +50 -0
  47. package/dist/model-spec.d.ts +29 -0
  48. package/dist/model-spec.js +252 -0
  49. package/dist/model-tier-config.d.ts +133 -0
  50. package/dist/model-tier-config.js +249 -0
  51. package/dist/run-persistence.d.ts +180 -0
  52. package/dist/run-persistence.js +294 -0
  53. package/dist/saved-commands.d.ts +28 -0
  54. package/dist/saved-commands.js +100 -0
  55. package/dist/shared-store.d.ts +98 -0
  56. package/dist/shared-store.js +212 -0
  57. package/dist/structured-output.d.ts +19 -0
  58. package/dist/structured-output.js +30 -0
  59. package/dist/task-panel.d.ts +61 -0
  60. package/dist/task-panel.js +422 -0
  61. package/dist/usage-limit-scheduler.d.ts +145 -0
  62. package/dist/usage-limit-scheduler.js +368 -0
  63. package/dist/web-tools.d.ts +20 -0
  64. package/dist/web-tools.js +120 -0
  65. package/dist/workflow-authoring-coverage.d.ts +70 -0
  66. package/dist/workflow-authoring-coverage.js +421 -0
  67. package/dist/workflow-authoring-reference.d.ts +20 -0
  68. package/dist/workflow-authoring-reference.js +156 -0
  69. package/dist/workflow-capability-contract.d.ts +131 -0
  70. package/dist/workflow-capability-contract.js +604 -0
  71. package/dist/workflow-commands.d.ts +18 -0
  72. package/dist/workflow-commands.js +260 -0
  73. package/dist/workflow-comprehension.d.ts +133 -0
  74. package/dist/workflow-comprehension.js +1321 -0
  75. package/dist/workflow-context-measurement.d.ts +72 -0
  76. package/dist/workflow-context-measurement.js +213 -0
  77. package/dist/workflow-control-tool.d.ts +30 -0
  78. package/dist/workflow-control-tool.js +176 -0
  79. package/dist/workflow-delivery-choice.d.ts +20 -0
  80. package/dist/workflow-delivery-choice.js +48 -0
  81. package/dist/workflow-editor.d.ts +93 -0
  82. package/dist/workflow-editor.js +363 -0
  83. package/dist/workflow-manager.d.ts +492 -0
  84. package/dist/workflow-manager.js +1124 -0
  85. package/dist/workflow-paths.d.ts +22 -0
  86. package/dist/workflow-paths.js +46 -0
  87. package/dist/workflow-release-gate.d.ts +39 -0
  88. package/dist/workflow-release-gate.js +309 -0
  89. package/dist/workflow-saved.d.ts +38 -0
  90. package/dist/workflow-saved.js +126 -0
  91. package/dist/workflow-settings.d.ts +70 -0
  92. package/dist/workflow-settings.js +131 -0
  93. package/dist/workflow-tool.d.ts +71 -0
  94. package/dist/workflow-tool.js +367 -0
  95. package/dist/workflow-ui.d.ts +182 -0
  96. package/dist/workflow-ui.js +1587 -0
  97. package/dist/workflow.d.ts +333 -0
  98. package/dist/workflow.js +1151 -0
  99. package/dist/workflows-models-command.d.ts +31 -0
  100. package/dist/workflows-models-command.js +156 -0
  101. package/dist/worktree.d.ts +25 -0
  102. package/dist/worktree.js +61 -0
  103. package/extensions/workflow.ts +151 -0
  104. package/package.json +104 -0
  105. package/skills/workflow-authoring/SKILL.md +30 -0
  106. package/skills/workflow-authoring/examples/adversarial-verification.js +63 -0
  107. package/skills/workflow-authoring/examples/bounded-semantic-retry.js +56 -0
  108. package/skills/workflow-authoring/examples/classify-and-act.js +67 -0
  109. package/skills/workflow-authoring/examples/fan-out-and-synthesize.js +47 -0
  110. package/skills/workflow-authoring/examples/generate-and-filter.js +68 -0
  111. package/skills/workflow-authoring/examples/loop-until-done.js +68 -0
  112. package/skills/workflow-authoring/examples/phased-budgets.js +75 -0
  113. package/skills/workflow-authoring/examples/saved-nested-workflows.js +44 -0
  114. package/skills/workflow-authoring/examples/structured-output.js +37 -0
  115. package/skills/workflow-authoring/examples/tournament.js +81 -0
  116. package/skills/workflow-authoring/examples/validated-gate.js +63 -0
  117. package/skills/workflow-authoring/references/capabilities.md +41 -0
  118. package/skills/workflow-authoring/references/capability-details.md +357 -0
  119. package/skills/workflow-authoring/references/common-helpers.md +4 -0
  120. package/skills/workflow-authoring/references/debugging.md +27 -0
  121. package/skills/workflow-authoring/references/focused-recipes.md +11 -0
  122. package/skills/workflow-authoring/references/helpers.md +9 -0
  123. package/skills/workflow-authoring/references/lifecycle.md +33 -0
  124. package/skills/workflow-authoring/references/pattern-selection.md +15 -0
  125. package/skills/workflow-authoring/references/quality-helpers.md +8 -0
  126. package/skills/workflow-authoring/references/registry-ownership.md +15 -0
  127. package/skills/workflow-authoring/references/retry-helper.md +5 -0
  128. package/skills/workflow-authoring/references/review.md +43 -0
  129. package/skills/workflow-authoring/references/runtime.md +27 -0
  130. package/skills/workflow-authoring/references/specialized-helpers.md +19 -0
  131. package/skills/workflow-authoring/references/versions.md +13 -0
  132. package/skills/workflow-patterns/SKILL.md +51 -0
  133. package/src/accept-workflow-guidance.ts +71 -0
  134. package/src/adversarial-review.ts +120 -0
  135. package/src/agent-history.ts +157 -0
  136. package/src/agent-registry.ts +221 -0
  137. package/src/agent.ts +929 -0
  138. package/src/builtin-commands.ts +286 -0
  139. package/src/builtin-workflows.ts +155 -0
  140. package/src/code-review.ts +183 -0
  141. package/src/config.ts +55 -0
  142. package/src/deep-research.ts +135 -0
  143. package/src/display.ts +367 -0
  144. package/src/effort-command.ts +87 -0
  145. package/src/enums.ts +77 -0
  146. package/src/errors.ts +199 -0
  147. package/src/extension-reload.ts +100 -0
  148. package/src/fs-persistence.ts +124 -0
  149. package/src/index.ts +176 -0
  150. package/src/logger.ts +88 -0
  151. package/src/model-routing.ts +73 -0
  152. package/src/model-spec.ts +309 -0
  153. package/src/model-tier-config.ts +296 -0
  154. package/src/run-persistence.ts +484 -0
  155. package/src/saved-commands.ts +115 -0
  156. package/src/shared-store.ts +228 -0
  157. package/src/structured-output.ts +47 -0
  158. package/src/task-panel.ts +490 -0
  159. package/src/usage-limit-scheduler.ts +432 -0
  160. package/src/web-tools.ts +124 -0
  161. package/src/workflow-authoring-coverage.ts +486 -0
  162. package/src/workflow-authoring-reference.ts +186 -0
  163. package/src/workflow-capability-contract.ts +806 -0
  164. package/src/workflow-commands.ts +287 -0
  165. package/src/workflow-comprehension.ts +1673 -0
  166. package/src/workflow-context-measurement.ts +262 -0
  167. package/src/workflow-control-tool.ts +238 -0
  168. package/src/workflow-delivery-choice.ts +69 -0
  169. package/src/workflow-editor.ts +444 -0
  170. package/src/workflow-manager.ts +1405 -0
  171. package/src/workflow-paths.ts +63 -0
  172. package/src/workflow-release-gate.ts +529 -0
  173. package/src/workflow-saved.ts +180 -0
  174. package/src/workflow-settings.ts +194 -0
  175. package/src/workflow-tool.ts +464 -0
  176. package/src/workflow-ui.ts +1789 -0
  177. package/src/workflow.ts +1615 -0
  178. package/src/workflows-models-command.ts +211 -0
  179. package/src/worktree.ts +76 -0
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Interactive `/workflows` navigator, modeled on Claude Code's view:
3
+ *
4
+ * runs ──enter──▶ phases ──enter──▶ agents ──enter──▶ agent detail
5
+ * ◀──esc─── ◀──esc──── ◀──esc────
6
+ * ◀── (saved items in runs view) ──enter──▶ saved detail
7
+ *
8
+ * Keys: ↑/↓ (or j/k) select · enter/→ drill in · esc/← back (esc at top closes)
9
+ * On runs: p pause · x stop · r restart · s save · q quit
10
+ * On saved: x delete · q quit
11
+ *
12
+ * The state machine and line rendering are pure and unit-tested; the pi-tui
13
+ * Component shell (openWorkflowNavigator) wires them to live manager events.
14
+ */
15
+ import { type ExtensionAPI, type ExtensionUIContext } from "@earendil-works/pi-coding-agent";
16
+ import type { MarkdownTheme } from "@earendil-works/pi-tui";
17
+ import type { AgentUsage } from "./agent.js";
18
+ import type { ThemeLike, WorkflowAgentSnapshot } from "./display.js";
19
+ import type { WorkflowManager } from "./workflow-manager.js";
20
+ import type { SavedWorkflow, WorkflowStorage } from "./workflow-saved.js";
21
+ export type ViewKind = "runs" | "phases" | "agents" | "detail" | "savedDetail";
22
+ export type ItemKind = "run" | "saved";
23
+ interface RunRow {
24
+ runId: string;
25
+ name: string;
26
+ status: string;
27
+ done: number;
28
+ total: number;
29
+ /** Fresh tokens for the whole run (see tokenFigures for the fallback rule). */
30
+ fresh: number;
31
+ /** Cache-read tokens for the whole run. */
32
+ cacheRead: number;
33
+ cost: number;
34
+ }
35
+ interface PhaseRow {
36
+ title: string;
37
+ done: number;
38
+ total: number;
39
+ /** Fresh tokens summed across the phase's agents. */
40
+ fresh: number;
41
+ /** Cache-read tokens summed across the phase's agents. */
42
+ cacheRead: number;
43
+ }
44
+ interface AgentRow {
45
+ id: number;
46
+ label: string;
47
+ status: string;
48
+ phase?: string;
49
+ tokens?: number;
50
+ tokenUsage?: AgentUsage;
51
+ model?: string;
52
+ }
53
+ export declare function shortModel(model: string | undefined): string | undefined;
54
+ /** Reads run/phase/agent data from the manager, preferring live snapshots. */
55
+ export declare class NavigatorModel {
56
+ private readonly manager;
57
+ private readonly storage?;
58
+ private frameDepth;
59
+ private frameRuns;
60
+ private readonly frameSnapshots;
61
+ constructor(manager: Pick<WorkflowManager, "listRuns" | "getRun">, storage?: {
62
+ list(): SavedWorkflow[];
63
+ delete(name: string, location?: string): boolean;
64
+ } | undefined);
65
+ /** Share persisted data across all model lookups performed by one render. */
66
+ withRenderFrame<T>(render: () => T): T;
67
+ private persistedRuns;
68
+ private snapshot;
69
+ runs(): RunRow[];
70
+ /** Return saved workflows sorted by name, or [] when no storage configured. */
71
+ saved(): SavedWorkflow[];
72
+ /** Delete a saved workflow by name. */
73
+ deleteSaved(name: string): boolean;
74
+ runName(runId: string): string;
75
+ runStatus(runId: string): string;
76
+ phases(runId: string): PhaseRow[];
77
+ agents(runId: string, phase: string): AgentRow[];
78
+ /**
79
+ * All agents grouped by their (coerced) phase in a SINGLE pass — O(agents).
80
+ * The navigator's phase pane needs each phase's agents (status colour + the
81
+ * selected phase's rows); calling agents() once per phase row was O(phases ×
82
+ * agents) per frame. Callers that render every phase use this instead.
83
+ */
84
+ agentsByPhase(runId: string): Map<string, AgentRow[]>;
85
+ agentDetail(runId: string, agentId: number): WorkflowAgentSnapshot | undefined;
86
+ }
87
+ /** Navigation state machine: a stack of (view, cursor) frames plus detail scroll. */
88
+ export declare class NavigatorState {
89
+ private stack;
90
+ scroll: number;
91
+ tailing: boolean;
92
+ pagerOpen: boolean;
93
+ private pageSize;
94
+ private top;
95
+ get kind(): ViewKind;
96
+ get cursor(): number;
97
+ set cursor(val: number);
98
+ get runId(): string | undefined;
99
+ get phase(): string | undefined;
100
+ get agentId(): number | undefined;
101
+ /** The saved workflow name at the cursor in savedDetail view */
102
+ get savedName(): string | undefined;
103
+ get depth(): number;
104
+ /**
105
+ * Determine what kind of item is at the given cursor position in the
106
+ * runs view. Positions before runs.length are "run"; after are "saved".
107
+ */
108
+ itemKindAt(model: NavigatorModel, cursor: number): ItemKind;
109
+ /** Clamp the cursor to [0, count). */
110
+ clamp(count: number): void;
111
+ move(delta: number, count: number): void;
112
+ /** Update the amount moved by page keys to match the rendered viewport. */
113
+ setPageSize(rows: number): void;
114
+ /** Move by almost one viewport, retaining one line of reading context. */
115
+ movePage(direction: -1 | 1, count: number): void;
116
+ /** Jump to the beginning or end of the current list/detail. End also enables
117
+ * follow mode for a live agent detail; start disables it. */
118
+ jump(edge: "start" | "end", count: number): void;
119
+ /** Open the full pager without closing an already-open pager. */
120
+ openPager(): boolean;
121
+ /** Toggle the full pager while retaining the compact agent summary view. */
122
+ togglePager(): boolean;
123
+ /** Toggle live follow mode in an agent detail pager. */
124
+ toggleTail(): boolean;
125
+ /** Drill into the selected item. Returns true if the view changed. */
126
+ drill(model: NavigatorModel): boolean;
127
+ /** Pop one level. Returns false when already at the top (caller should close). */
128
+ back(): boolean;
129
+ /** The runId at cursor, or undefined when on a saved item. */
130
+ activeRunId(model: NavigatorModel): string | undefined;
131
+ }
132
+ /** Build the lines for the current view. Pure: depends only on state + model + theme. */
133
+ export declare function renderNavigator(state: NavigatorState, model: NavigatorModel, width: number, theme?: ThemeLike, viewportRows?: number, markdownTheme?: MarkdownTheme): string[];
134
+ /** What a key press should do. Pure mapping from a parsed key id to an action. */
135
+ export type NavAction = {
136
+ type: "move";
137
+ delta: number;
138
+ } | {
139
+ type: "page";
140
+ direction: -1 | 1;
141
+ } | {
142
+ type: "jump";
143
+ edge: "start" | "end";
144
+ } | {
145
+ type: "toggleTail";
146
+ } | {
147
+ type: "togglePager";
148
+ } | {
149
+ type: "openPager";
150
+ } | {
151
+ type: "drill";
152
+ } | {
153
+ type: "back";
154
+ } | {
155
+ type: "close";
156
+ } | {
157
+ type: "pause";
158
+ } | {
159
+ type: "stop";
160
+ } | {
161
+ type: "restart";
162
+ } | {
163
+ type: "save";
164
+ } | {
165
+ type: "deleteSaved";
166
+ } | {
167
+ type: "none";
168
+ };
169
+ export declare function keyToAction(keyId: string | undefined, kind: ViewKind, itemKind?: "run" | "saved"): NavAction;
170
+ import type { OverlayAnchor } from "@earendil-works/pi-tui";
171
+ export interface NavigatorOptions {
172
+ storage?: WorkflowStorage;
173
+ cwd?: string;
174
+ /** Overlay anchor position: "center" (default) or "right-center" for sidebar. */
175
+ anchor?: OverlayAnchor;
176
+ }
177
+ /**
178
+ * Open the interactive `/workflows` navigator as a focused overlay. Resolves when
179
+ * the user closes it (esc at the top level, or `q`).
180
+ */
181
+ export declare function openWorkflowNavigator(pi: ExtensionAPI, manager: WorkflowManager, ui: ExtensionUIContext, opts?: NavigatorOptions): Promise<void>;
182
+ export {};