pi-agent-flow 2.2.32 → 2.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 (184) hide show
  1. package/agents/craft.md +2 -1
  2. package/agents/debug.md +2 -1
  3. package/agents/ideas.md +2 -1
  4. package/agents/scout.md +1 -0
  5. package/dist/batch/apply-patch.d.ts.map +1 -1
  6. package/dist/batch/apply-patch.js +22 -0
  7. package/dist/batch/apply-patch.js.map +1 -1
  8. package/dist/batch/batch-bash.d.ts +5 -3
  9. package/dist/batch/batch-bash.d.ts.map +1 -1
  10. package/dist/batch/batch-bash.js +6 -13
  11. package/dist/batch/batch-bash.js.map +1 -1
  12. package/dist/batch/constants.d.ts +4 -0
  13. package/dist/batch/constants.d.ts.map +1 -1
  14. package/dist/batch/constants.js +1 -0
  15. package/dist/batch/constants.js.map +1 -1
  16. package/dist/batch/execute.d.ts.map +1 -1
  17. package/dist/batch/execute.js +117 -4
  18. package/dist/batch/execute.js.map +1 -1
  19. package/dist/batch/format-directory-listing.d.ts +26 -0
  20. package/dist/batch/format-directory-listing.d.ts.map +1 -0
  21. package/dist/batch/format-directory-listing.js +89 -0
  22. package/dist/batch/format-directory-listing.js.map +1 -0
  23. package/dist/batch/fuzzy-edit.d.ts +1 -1
  24. package/dist/batch/fuzzy-edit.d.ts.map +1 -1
  25. package/dist/batch/fuzzy-edit.js +53 -17
  26. package/dist/batch/fuzzy-edit.js.map +1 -1
  27. package/dist/batch/index.d.ts +6 -68
  28. package/dist/batch/index.d.ts.map +1 -1
  29. package/dist/batch/index.js +7 -494
  30. package/dist/batch/index.js.map +1 -1
  31. package/dist/batch/summary.d.ts.map +1 -1
  32. package/dist/batch/summary.js +146 -0
  33. package/dist/batch/summary.js.map +1 -1
  34. package/dist/cli/batch-read.d.ts +20 -0
  35. package/dist/cli/batch-read.d.ts.map +1 -0
  36. package/dist/cli/batch-read.js +267 -0
  37. package/dist/cli/batch-read.js.map +1 -0
  38. package/dist/cli/batch.d.ts +20 -0
  39. package/dist/cli/batch.d.ts.map +1 -0
  40. package/dist/cli/batch.js +252 -0
  41. package/dist/cli/batch.js.map +1 -0
  42. package/dist/cli/chain.d.ts +24 -0
  43. package/dist/cli/chain.d.ts.map +1 -0
  44. package/dist/cli/chain.js +166 -0
  45. package/dist/cli/chain.js.map +1 -0
  46. package/dist/cli/exec/bash.d.ts +11 -0
  47. package/dist/cli/exec/bash.d.ts.map +1 -0
  48. package/dist/cli/exec/bash.js +63 -0
  49. package/dist/cli/exec/bash.js.map +1 -0
  50. package/dist/cli/exec/delete.d.ts +10 -0
  51. package/dist/cli/exec/delete.d.ts.map +1 -0
  52. package/dist/cli/exec/delete.js +21 -0
  53. package/dist/cli/exec/delete.js.map +1 -0
  54. package/dist/cli/exec/edit.d.ts +10 -0
  55. package/dist/cli/exec/edit.d.ts.map +1 -0
  56. package/dist/cli/exec/edit.js +47 -0
  57. package/dist/cli/exec/edit.js.map +1 -0
  58. package/dist/cli/exec/index.d.ts +10 -0
  59. package/dist/cli/exec/index.d.ts.map +1 -0
  60. package/dist/cli/exec/index.js +10 -0
  61. package/dist/cli/exec/index.js.map +1 -0
  62. package/dist/cli/exec/patch.d.ts +10 -0
  63. package/dist/cli/exec/patch.d.ts.map +1 -0
  64. package/dist/cli/exec/patch.js +23 -0
  65. package/dist/cli/exec/patch.js.map +1 -0
  66. package/dist/cli/exec/poll.d.ts +12 -0
  67. package/dist/cli/exec/poll.d.ts.map +1 -0
  68. package/dist/cli/exec/poll.js +59 -0
  69. package/dist/cli/exec/poll.js.map +1 -0
  70. package/dist/cli/exec/read.d.ts +10 -0
  71. package/dist/cli/exec/read.d.ts.map +1 -0
  72. package/dist/cli/exec/read.js +54 -0
  73. package/dist/cli/exec/read.js.map +1 -0
  74. package/dist/cli/exec/rg.d.ts +10 -0
  75. package/dist/cli/exec/rg.d.ts.map +1 -0
  76. package/dist/cli/exec/rg.js +32 -0
  77. package/dist/cli/exec/rg.js.map +1 -0
  78. package/dist/cli/exec/web.d.ts +13 -0
  79. package/dist/cli/exec/web.d.ts.map +1 -0
  80. package/dist/cli/exec/web.js +47 -0
  81. package/dist/cli/exec/web.js.map +1 -0
  82. package/dist/cli/exec/write.d.ts +10 -0
  83. package/dist/cli/exec/write.d.ts.map +1 -0
  84. package/dist/cli/exec/write.js +26 -0
  85. package/dist/cli/exec/write.js.map +1 -0
  86. package/dist/cli/flags/bash.d.ts +3 -0
  87. package/dist/cli/flags/bash.d.ts.map +1 -0
  88. package/dist/cli/flags/bash.js +6 -0
  89. package/dist/cli/flags/bash.js.map +1 -0
  90. package/dist/cli/flags/delete.d.ts +3 -0
  91. package/dist/cli/flags/delete.d.ts.map +1 -0
  92. package/dist/cli/flags/delete.js +2 -0
  93. package/dist/cli/flags/delete.js.map +1 -0
  94. package/dist/cli/flags/edit.d.ts +3 -0
  95. package/dist/cli/flags/edit.d.ts.map +1 -0
  96. package/dist/cli/flags/edit.js +7 -0
  97. package/dist/cli/flags/edit.js.map +1 -0
  98. package/dist/cli/flags/index.d.ts +10 -0
  99. package/dist/cli/flags/index.d.ts.map +1 -0
  100. package/dist/cli/flags/index.js +10 -0
  101. package/dist/cli/flags/index.js.map +1 -0
  102. package/dist/cli/flags/patch.d.ts +3 -0
  103. package/dist/cli/flags/patch.d.ts.map +1 -0
  104. package/dist/cli/flags/patch.js +4 -0
  105. package/dist/cli/flags/patch.js.map +1 -0
  106. package/dist/cli/flags/poll.d.ts +3 -0
  107. package/dist/cli/flags/poll.d.ts.map +1 -0
  108. package/dist/cli/flags/poll.js +4 -0
  109. package/dist/cli/flags/poll.js.map +1 -0
  110. package/dist/cli/flags/read.d.ts +3 -0
  111. package/dist/cli/flags/read.d.ts.map +1 -0
  112. package/dist/cli/flags/read.js +6 -0
  113. package/dist/cli/flags/read.js.map +1 -0
  114. package/dist/cli/flags/rg.d.ts +3 -0
  115. package/dist/cli/flags/rg.d.ts.map +1 -0
  116. package/dist/cli/flags/rg.js +9 -0
  117. package/dist/cli/flags/rg.js.map +1 -0
  118. package/dist/cli/flags/web.d.ts +3 -0
  119. package/dist/cli/flags/web.d.ts.map +1 -0
  120. package/dist/cli/flags/web.js +6 -0
  121. package/dist/cli/flags/web.js.map +1 -0
  122. package/dist/cli/flags/write.d.ts +3 -0
  123. package/dist/cli/flags/write.d.ts.map +1 -0
  124. package/dist/cli/flags/write.js +4 -0
  125. package/dist/cli/flags/write.js.map +1 -0
  126. package/dist/cli/flow.d.ts +33 -0
  127. package/dist/cli/flow.d.ts.map +1 -0
  128. package/dist/cli/flow.js +345 -0
  129. package/dist/cli/flow.js.map +1 -0
  130. package/dist/cli/format.d.ts +12 -0
  131. package/dist/cli/format.d.ts.map +1 -0
  132. package/dist/cli/format.js +29 -0
  133. package/dist/cli/format.js.map +1 -0
  134. package/dist/cli/help.d.ts +14 -0
  135. package/dist/cli/help.d.ts.map +1 -0
  136. package/dist/cli/help.js +31 -0
  137. package/dist/cli/help.js.map +1 -0
  138. package/dist/cli/parse.d.ts +24 -0
  139. package/dist/cli/parse.d.ts.map +1 -0
  140. package/dist/cli/parse.js +165 -0
  141. package/dist/cli/parse.js.map +1 -0
  142. package/dist/cli/register.d.ts +73 -0
  143. package/dist/cli/register.d.ts.map +1 -0
  144. package/dist/cli/register.js +105 -0
  145. package/dist/cli/register.js.map +1 -0
  146. package/dist/cli/tokenize.d.ts +9 -0
  147. package/dist/cli/tokenize.d.ts.map +1 -0
  148. package/dist/cli/tokenize.js +80 -0
  149. package/dist/cli/tokenize.js.map +1 -0
  150. package/dist/core2/snapshot.d.ts.map +1 -1
  151. package/dist/core2/snapshot.js +22 -0
  152. package/dist/core2/snapshot.js.map +1 -1
  153. package/dist/flow/agents.d.ts +2 -0
  154. package/dist/flow/agents.d.ts.map +1 -1
  155. package/dist/flow/agents.js +2 -0
  156. package/dist/flow/agents.js.map +1 -1
  157. package/dist/flow/executor.d.ts.map +1 -1
  158. package/dist/flow/executor.js +1 -0
  159. package/dist/flow/executor.js.map +1 -1
  160. package/dist/flow/flow-args.d.ts.map +1 -1
  161. package/dist/flow/flow-args.js +1 -0
  162. package/dist/flow/flow-args.js.map +1 -1
  163. package/dist/index.d.ts +1 -0
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.js +159 -214
  166. package/dist/index.js.map +1 -1
  167. package/dist/steering/flow-prompt.js +2 -2
  168. package/dist/steering/flow-prompt.js.map +1 -1
  169. package/dist/steering/sliding-prompt.d.ts.map +1 -1
  170. package/dist/steering/sliding-prompt.js +9 -20
  171. package/dist/steering/sliding-prompt.js.map +1 -1
  172. package/dist/tools/ask-user.d.ts +1 -4
  173. package/dist/tools/ask-user.d.ts.map +1 -1
  174. package/dist/tools/ask-user.js +7 -33
  175. package/dist/tools/ask-user.js.map +1 -1
  176. package/dist/tools/trace.d.ts +12 -6
  177. package/dist/tools/trace.d.ts.map +1 -1
  178. package/dist/tools/trace.js +157 -163
  179. package/dist/tools/trace.js.map +1 -1
  180. package/dist/tools/web-ops.d.ts +40 -0
  181. package/dist/tools/web-ops.d.ts.map +1 -1
  182. package/dist/tools/web-ops.js +2 -2
  183. package/dist/tools/web-ops.js.map +1 -1
  184. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ export const READ_FLAGS = {
2
+ start: { short: "s", type: "number", description: "1-indexed start line" },
3
+ limit: { short: "l", type: "number", description: "Maximum lines to read" },
4
+ end: { short: "e", type: "number", description: "End line (used with -s)" },
5
+ };
6
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/cli/flags/read.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAa;IAClC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;IAC1E,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;IAC3E,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;CAC5E,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type FlagSpec } from "../parse.js";
2
+ export declare const RG_FLAGS: FlagSpec;
3
+ //# sourceMappingURL=rg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rg.d.ts","sourceRoot":"","sources":["../../../src/cli/flags/rg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,eAAO,MAAM,QAAQ,EAAE,QAOtB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export const RG_FLAGS = {
2
+ query: { short: "q", type: "string", description: "Search pattern for rg" },
3
+ "ignore-case": { short: "i", type: "boolean", description: "Ignore case for rg" },
4
+ "files-only": { short: "l", type: "boolean", description: "Return filenames only for rg" },
5
+ type: { short: "t", type: "string", description: "Type filter for rg (e.g., ts, js)" },
6
+ "max-count": { short: "n", type: "number", description: "Max matches per file for rg" },
7
+ "ignore-level": { short: "u", type: "number", description: "Ignore level for rg (0-3)" },
8
+ };
9
+ //# sourceMappingURL=rg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rg.js","sourceRoot":"","sources":["../../../src/cli/flags/rg.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;IAC3E,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE;IACjF,YAAY,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,8BAA8B,EAAE;IAC1F,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;IACtF,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;IACvF,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;CACzF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type FlagSpec } from "../parse.js";
2
+ export declare const WEB_FLAGS: FlagSpec;
3
+ //# sourceMappingURL=web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../../src/cli/flags/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,eAAO,MAAM,SAAS,EAAE,QAIvB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const WEB_FLAGS = {
2
+ query: { short: "q", type: "string", description: "Search query (for web search)" },
3
+ url: { short: "u", type: "string", description: "URL to fetch (for web fetch)" },
4
+ format: { short: "f", type: "string", description: "Output format for fetch: markdown, text, html (default: markdown)" },
5
+ };
6
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/cli/flags/web.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAa;IACjC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE;IACnF,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;IAChF,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mEAAmE,EAAE;CACzH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type FlagSpec } from "../parse.js";
2
+ export declare const WRITE_FLAGS: FlagSpec;
3
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../../src/cli/flags/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,eAAO,MAAM,WAAW,EAAE,QAEzB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const WRITE_FLAGS = {
2
+ content: { short: "c", type: "string", description: "File content (required for write)" },
3
+ };
4
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/cli/flags/write.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAa;IACnC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;CAC1F,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * flow — bash-style CLI tool.
3
+ *
4
+ * Replaces the legacy flow mega-schema with a simple cmd string
5
+ * that uses flags and chaining.
6
+ */
7
+ export declare const FlowCliParams: any;
8
+ export declare const FLOW_CLI_DESCRIPTION = "Spawns specialized agent flows \u2014 NOT a shell. Required per item: `--type` (one of: `scout` \u2022 `build` \u2022 `debug` \u2022 `audit` \u2022 `craft` \u2022 `ideas` \u2022 `trace`), `--intent`, `--aim`, `--concern`. Optional: `--acceptance`, `--cwd`, `--complexity` (`snap` \u2022 `simple` \u2022 `moderate` \u2022 `complex` \u2022 `intricate`). Chain multiple items with `;` or `&&`. For simple reads/checks, use `trace` instead. Pass [cmd]: \"help\" for the man page.";
9
+ export declare const FLOW_CLI_SNIPPET = "Dive into specialized flows (scout, debug, build, craft, audit, ideas) via bash-style CLI.";
10
+ export declare const FLOW_CLI_GUIDELINES: string[];
11
+ declare const FLOW_HELP: string;
12
+ export { FLOW_HELP };
13
+ export interface ParsedFlowItem {
14
+ type: string;
15
+ intent: string;
16
+ aim: string;
17
+ concern: string;
18
+ acceptance?: string;
19
+ cwd?: string;
20
+ complexity?: string;
21
+ dispatch?: string;
22
+ kind?: "run" | "and";
23
+ }
24
+ export interface ParsedFlowCmd {
25
+ confirm: boolean;
26
+ audit: number;
27
+ items: ParsedFlowItem[];
28
+ }
29
+ export declare function parseFlowCmd(cmd: string): {
30
+ help?: string;
31
+ parsed?: ParsedFlowCmd;
32
+ };
33
+ //# sourceMappingURL=flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/cli/flow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,eAAO,MAAM,aAAa,KAIxB,CAAC;AAMH,eAAO,MAAM,oBAAoB,geACuY,CAAC;AAEza,eAAO,MAAM,gBAAgB,+FACiE,CAAC;AAE/F,eAAO,MAAM,mBAAmB,UAS/B,CAAC;AA0DF,QAAA,MAAM,SAAS,QAAqE,CAAC;AAErF,OAAO,EAAE,SAAS,EAAE,CAAC;AAMrB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AA8GD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAE,CAqHnF"}
@@ -0,0 +1,345 @@
1
+ /**
2
+ * flow — bash-style CLI tool.
3
+ *
4
+ * Replaces the legacy flow mega-schema with a simple cmd string
5
+ * that uses flags and chaining.
6
+ */
7
+ import { Type } from "@sinclair/typebox";
8
+ import { tokenize } from "./tokenize.js";
9
+ import { parseCommand, CliError } from "./parse.js";
10
+ import { renderHelp } from "./help.js";
11
+ // ---------------------------------------------------------------------------
12
+ // Schema
13
+ // ---------------------------------------------------------------------------
14
+ export const FlowCliParams = Type.Object({
15
+ cmd: Type.String({
16
+ description: "Flow command. Multiple items chained with `;` or `&&`. Each item: --type --intent --aim --concern [--acceptance] [--cwd] [--complexity] [-- <batch-dispatch>]. Global: --confirm <bool>, --audit <n> (first item only). Run with `cmd: 'help'` for the man page.",
17
+ }),
18
+ });
19
+ // ---------------------------------------------------------------------------
20
+ // Constants
21
+ // ---------------------------------------------------------------------------
22
+ export const FLOW_CLI_DESCRIPTION = "Spawns specialized agent flows — NOT a shell. Required per item: `--type` (one of: `scout` • `build` • `debug` • `audit` • `craft` • `ideas` • `trace`), `--intent`, `--aim`, `--concern`. Optional: `--acceptance`, `--cwd`, `--complexity` (`snap` • `simple` • `moderate` • `complex` • `intricate`). Chain multiple items with `;` or `&&`. For simple reads/checks, use `trace` instead. Pass [cmd]: \"help\" for the man page.";
23
+ export const FLOW_CLI_SNIPPET = "Dive into specialized flows (scout, debug, build, craft, audit, ideas) via bash-style CLI.";
24
+ export const FLOW_CLI_GUIDELINES = [
25
+ "**This is a structured command, NOT a shell.** There is no `ls`, `cd`, `git`, or arbitrary command. Use only the documented flags.",
26
+ "Use `flow --type <name> --intent <text> --aim <text> --concern <text>` to spawn a flow.",
27
+ "Chain multiple flows with `;` (sequential) or `&&` (conditional).",
28
+ "Add `--acceptance <text>` for success criteria.",
29
+ "Add `--complexity <level>` for budget: snap, simple, moderate, complex, intricate.",
30
+ "Add `-- <batch-dispatch>` for pre-flight ops (e.g., `-- batch read src/auth.ts`).",
31
+ "For quick file reads/checks, use `trace` instead.",
32
+ "Pass `cmd: \"help\"` or `--help` for the man page.",
33
+ ];
34
+ const VALID_TYPES = new Set([
35
+ "scout", "build", "debug", "audit", "craft", "ideas", "trace",
36
+ ]);
37
+ const VALID_COMPLEXITIES = new Set([
38
+ "snap", "simple", "moderate", "complex", "intricate",
39
+ ]);
40
+ // ---------------------------------------------------------------------------
41
+ // Flag specs
42
+ // ---------------------------------------------------------------------------
43
+ const GLOBAL_FLAG_SPEC = {
44
+ confirm: { type: "boolean", description: "Prompt before running project flows" },
45
+ audit: { type: "number", description: "Override audit cycles (0-3)" },
46
+ };
47
+ const ITEM_FLAG_SPEC = {
48
+ type: { short: "t", type: "string", description: "Flow type" },
49
+ intent: { short: "i", type: "string", description: "Mission" },
50
+ aim: { short: "a", type: "string", description: "Headline" },
51
+ concern: { short: "c", type: "string", description: "Risks" },
52
+ acceptance: { type: "string", description: "Acceptance criteria" },
53
+ cwd: { type: "string", description: "Working dir" },
54
+ complexity: { type: "string", description: "Budget level" },
55
+ };
56
+ // ---------------------------------------------------------------------------
57
+ // Help text
58
+ // ---------------------------------------------------------------------------
59
+ const subcommands = [
60
+ {
61
+ name: "flow",
62
+ description: "Spawn a specialized agent flow.",
63
+ flags: {
64
+ type: { short: "t", type: "string", description: "Flow type (scout|build|debug|audit|craft|ideas|trace)" },
65
+ intent: { short: "i", type: "string", description: "Detailed mission" },
66
+ aim: { short: "a", type: "string", description: "Short headline (5-7 words)" },
67
+ concern: { short: "c", type: "string", description: "Known risks" },
68
+ acceptance: { type: "string", description: "Success criteria" },
69
+ cwd: { type: "string", description: "Working directory override" },
70
+ complexity: { type: "string", description: "Budget: snap|simple|moderate|complex|intricate" },
71
+ },
72
+ },
73
+ ];
74
+ const GLOBAL_HELP = {
75
+ name: "global",
76
+ description: "Global flags (first chain link only)",
77
+ flags: {
78
+ confirm: { type: "boolean", description: "Prompt before running project flows. Default: true." },
79
+ audit: { type: "number", description: "Override audit cycles (0-3). Default: 0." },
80
+ },
81
+ };
82
+ const FLOW_HELP = renderHelp("flow", "Spawns specialized agent flows.", subcommands);
83
+ export { FLOW_HELP };
84
+ // ---------------------------------------------------------------------------
85
+ // Parser
86
+ // ---------------------------------------------------------------------------
87
+ function splitChainAwareOfDoubleDash(input) {
88
+ // First, split the input into segments separated by standalone `--`.
89
+ // Each segment (except the last) is the pre part of a link; the post part
90
+ // (dispatch) starts right after the `--` and continues until the next chain
91
+ // separator (`;` or `&&`) at the top level (not inside quotes).
92
+ const links = [];
93
+ let current = "";
94
+ let inSingle = false;
95
+ let inDouble = false;
96
+ let escapeNext = false;
97
+ let nextKind = "run";
98
+ let foundDash = false;
99
+ let post = "";
100
+ function flush() {
101
+ const preTrim = current.trim();
102
+ const postTrim = post.trim();
103
+ if (preTrim.length > 0 || postTrim.length > 0) {
104
+ links.push({ kind: nextKind, pre: preTrim, post: postTrim });
105
+ }
106
+ current = "";
107
+ post = "";
108
+ }
109
+ for (let i = 0; i < input.length; i++) {
110
+ const ch = input[i];
111
+ if (escapeNext) {
112
+ if (foundDash)
113
+ post += ch;
114
+ else
115
+ current += ch;
116
+ escapeNext = false;
117
+ continue;
118
+ }
119
+ if (ch === '\\' && !inSingle && !inDouble) {
120
+ escapeNext = true;
121
+ if (foundDash)
122
+ post += ch;
123
+ else
124
+ current += ch;
125
+ continue;
126
+ }
127
+ if (inSingle) {
128
+ if (ch === "'")
129
+ inSingle = false;
130
+ if (foundDash)
131
+ post += ch;
132
+ else
133
+ current += ch;
134
+ continue;
135
+ }
136
+ if (inDouble) {
137
+ if (ch === '"')
138
+ inDouble = false;
139
+ if (foundDash)
140
+ post += ch;
141
+ else
142
+ current += ch;
143
+ continue;
144
+ }
145
+ if (ch === "'") {
146
+ inSingle = true;
147
+ if (foundDash)
148
+ post += ch;
149
+ else
150
+ current += ch;
151
+ continue;
152
+ }
153
+ if (ch === '"') {
154
+ inDouble = true;
155
+ if (foundDash)
156
+ post += ch;
157
+ else
158
+ current += ch;
159
+ continue;
160
+ }
161
+ // Detect standalone `--` (only the first one)
162
+ if (!foundDash && ch === '-' && i + 1 < input.length && input[i + 1] === '-') {
163
+ const prev = i > 0 ? input[i - 1] : ' ';
164
+ const nextIdx = i + 2;
165
+ const isWhitespace = (c) => c === ' ' || c === '\t' || c === '\n' || c === '\r';
166
+ if (isWhitespace(prev) && (nextIdx >= input.length || isWhitespace(input[nextIdx]))) {
167
+ foundDash = true;
168
+ i++; // skip second dash
169
+ continue;
170
+ }
171
+ }
172
+ // Detect chain separators only when not in dispatch (foundDash=false)
173
+ if (!foundDash && !inSingle && !inDouble) {
174
+ if (ch === ';') {
175
+ flush();
176
+ nextKind = "run";
177
+ continue;
178
+ }
179
+ if (ch === '&' && i + 1 < input.length && input[i + 1] === '&') {
180
+ flush();
181
+ nextKind = "and";
182
+ i++; // skip second &
183
+ continue;
184
+ }
185
+ }
186
+ if (foundDash)
187
+ post += ch;
188
+ else
189
+ current += ch;
190
+ }
191
+ flush();
192
+ return links;
193
+ }
194
+ export function parseFlowCmd(cmd) {
195
+ const trimmed = cmd.trim();
196
+ if (trimmed.length === 0 || trimmed === "help" || trimmed === "--help" || trimmed === "-h" || trimmed === "flow help" || trimmed === "flow --help" || trimmed === "flow -h") {
197
+ return { help: FLOW_HELP };
198
+ }
199
+ // Remove leading "flow" keyword if present (the model may include it)
200
+ let working = trimmed;
201
+ if (working.startsWith("flow ")) {
202
+ working = working.slice(5);
203
+ }
204
+ const chain = splitChainAwareOfDoubleDash(working);
205
+ if (chain.length === 0) {
206
+ return { help: FLOW_HELP };
207
+ }
208
+ let confirm = true;
209
+ let audit = 0;
210
+ const items = [];
211
+ for (let linkIdx = 0; linkIdx < chain.length; linkIdx++) {
212
+ const link = chain[linkIdx];
213
+ const pre = link.pre;
214
+ const post = link.post;
215
+ const tokens = tokenize(pre);
216
+ // Remove leading "flow" if present in this fragment
217
+ if (tokens[0] === "flow") {
218
+ tokens.shift();
219
+ }
220
+ if (tokens.length === 0) {
221
+ continue;
222
+ }
223
+ // For the first link, parse global flags before item flags.
224
+ if (linkIdx === 0) {
225
+ const remainingTokens = [];
226
+ for (let i = 0; i < tokens.length; i++) {
227
+ const tok = tokens[i];
228
+ if (tok === "--confirm" || tok === "--audit") {
229
+ const name = tok.slice(2);
230
+ const cfg = GLOBAL_FLAG_SPEC[name];
231
+ if (cfg.type === "boolean") {
232
+ if (i + 1 < tokens.length && (tokens[i + 1] === "true" || tokens[i + 1] === "false")) {
233
+ confirm = tokens[i + 1] === "true";
234
+ i++;
235
+ }
236
+ else {
237
+ confirm = true;
238
+ }
239
+ }
240
+ else if (cfg.type === "number") {
241
+ if (i + 1 < tokens.length) {
242
+ const num = Number(tokens[i + 1]);
243
+ if (Number.isFinite(num)) {
244
+ audit = num;
245
+ }
246
+ i++;
247
+ }
248
+ }
249
+ continue;
250
+ }
251
+ // Handle --flag=value syntax
252
+ if (tok.startsWith("--confirm=") || tok.startsWith("--audit=")) {
253
+ const eqIdx = tok.indexOf("=");
254
+ const name = tok.slice(2, eqIdx);
255
+ const value = tok.slice(eqIdx + 1);
256
+ if (name === "confirm") {
257
+ confirm = value === "true";
258
+ }
259
+ else if (name === "audit") {
260
+ const num = Number(value);
261
+ if (Number.isFinite(num))
262
+ audit = num;
263
+ }
264
+ continue;
265
+ }
266
+ remainingTokens.push(tok);
267
+ }
268
+ // Parse the rest with item flag spec
269
+ // Prepend a dummy subcommand if the first token is a flag so parseCommand
270
+ // doesn't consume the real flag as the subcommand.
271
+ const tokensForParse = remainingTokens.length > 0 && remainingTokens[0].startsWith("-")
272
+ ? ["flow", ...remainingTokens]
273
+ : remainingTokens.length > 0 ? remainingTokens : ["flow"];
274
+ const parsed = parseCommand(tokensForParse, ITEM_FLAG_SPEC);
275
+ items.push(extractItem(parsed, post, link.kind));
276
+ }
277
+ else {
278
+ // Detect global flags on non-first links and throw a clear error
279
+ for (let i = 0; i < tokens.length; i++) {
280
+ const tok = tokens[i];
281
+ if (tok === "--confirm" || tok === "--audit") {
282
+ throw new CliError(`Global flag ${tok} is not allowed on subsequent chain links.`, "Put --confirm and --audit on the first flow item only.");
283
+ }
284
+ if (tok.startsWith("--confirm=") || tok.startsWith("--audit=")) {
285
+ throw new CliError(`Global flag ${tok.split("=")[0]} is not allowed on subsequent chain links.`, "Put --confirm and --audit on the first flow item only.");
286
+ }
287
+ }
288
+ // Prepend a dummy subcommand if the first token is a flag
289
+ const tokensForParse = tokens.length > 0 && tokens[0].startsWith("-")
290
+ ? ["flow", ...tokens]
291
+ : tokens.length > 0 ? tokens : ["flow"];
292
+ const parsed = parseCommand(tokensForParse, ITEM_FLAG_SPEC);
293
+ items.push(extractItem(parsed, post, link.kind));
294
+ }
295
+ }
296
+ if (items.length === 0) {
297
+ throw new CliError("No flow items found. At least one --type is required.", "Run with --help for usage.");
298
+ }
299
+ return { parsed: { confirm, audit, items } };
300
+ }
301
+ function extractItem(parsed, dispatch, kind) {
302
+ const type = parsed.flags.type;
303
+ const intent = parsed.flags.intent;
304
+ const aim = parsed.flags.aim;
305
+ const concern = parsed.flags.concern;
306
+ const acceptance = parsed.flags.acceptance;
307
+ const cwd = parsed.flags.cwd;
308
+ const complexity = parsed.flags.complexity;
309
+ if (!type) {
310
+ throw new CliError("Missing required flag: --type", `Valid types: ${Array.from(VALID_TYPES).join(", ")}`);
311
+ }
312
+ if (!VALID_TYPES.has(type.toLowerCase())) {
313
+ throw new CliError(`Invalid flow type: ${type}`, `Valid types: ${Array.from(VALID_TYPES).join(", ")}`);
314
+ }
315
+ if (!intent) {
316
+ throw new CliError("Missing required flag: --intent");
317
+ }
318
+ if (!aim) {
319
+ throw new CliError("Missing required flag: --aim");
320
+ }
321
+ if (!concern) {
322
+ throw new CliError("Missing required flag: --concern");
323
+ }
324
+ if (complexity && !VALID_COMPLEXITIES.has(complexity.toLowerCase())) {
325
+ throw new CliError(`Invalid complexity: ${complexity}`, `Valid complexities: ${Array.from(VALID_COMPLEXITIES).join(", ")}`);
326
+ }
327
+ const item = {
328
+ type: type.toLowerCase(),
329
+ intent,
330
+ aim,
331
+ concern,
332
+ };
333
+ if (acceptance)
334
+ item.acceptance = acceptance;
335
+ if (cwd)
336
+ item.cwd = cwd;
337
+ if (complexity)
338
+ item.complexity = complexity.toLowerCase();
339
+ if (dispatch)
340
+ item.dispatch = dispatch;
341
+ if (kind)
342
+ item.kind = kind;
343
+ return item;
344
+ }
345
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/cli/flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Output formatter for chained CLI ops.
3
+ */
4
+ export interface ChainedOp {
5
+ cmd: string;
6
+ output: string;
7
+ error?: string;
8
+ failed?: boolean;
9
+ skipped?: boolean;
10
+ }
11
+ export declare function formatChainedOutput(ops: ChainedOp[]): string;
12
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/cli/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,CAwB5D"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Output formatter for chained CLI ops.
3
+ */
4
+ export function formatChainedOutput(ops) {
5
+ const total = ops.length;
6
+ if (total === 1 && !ops[0].skipped) {
7
+ if (ops[0].error) {
8
+ return `ERROR: ${ops[0].error}`;
9
+ }
10
+ return ops[0].output;
11
+ }
12
+ const sections = [];
13
+ for (let i = 0; i < ops.length; i++) {
14
+ const op = ops[i];
15
+ const header = `--- op ${i + 1}/${total}: ${op.skipped ? `SKIPPED (previous failed)` : op.cmd} ---`;
16
+ sections.push(header);
17
+ if (op.skipped) {
18
+ continue;
19
+ }
20
+ if (op.error) {
21
+ sections.push(`ERROR: ${op.error}`);
22
+ }
23
+ else {
24
+ sections.push(op.output);
25
+ }
26
+ }
27
+ return sections.join("\n");
28
+ }
29
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/cli/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,MAAM,UAAU,mBAAmB,CAAC,GAAgB;IAClD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;IACzB,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;QACD,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QACpG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Man-page style help generator.
3
+ */
4
+ export interface SubcommandHelp {
5
+ name: string;
6
+ description: string;
7
+ flags: Record<string, {
8
+ short?: string;
9
+ type: string;
10
+ description: string;
11
+ }>;
12
+ }
13
+ export declare function renderHelp(toolName: string, description: string, subcommands: SubcommandHelp[]): string;
14
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,cAAc,EAAE,GAC5B,MAAM,CAyBR"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Man-page style help generator.
3
+ */
4
+ export function renderHelp(toolName, description, subcommands) {
5
+ const lines = [];
6
+ lines.push(`USAGE: ${toolName} <subcommand> [flags] [args]`);
7
+ lines.push("");
8
+ lines.push(description);
9
+ lines.push("");
10
+ lines.push("SUBCOMMANDS:");
11
+ for (const sub of subcommands) {
12
+ lines.push(` ${sub.name.padEnd(12)} ${sub.description}`);
13
+ }
14
+ lines.push("");
15
+ for (const sub of subcommands) {
16
+ lines.push(`${sub.name.toUpperCase()} FLAGS:`);
17
+ const entries = Object.entries(sub.flags);
18
+ if (entries.length === 0) {
19
+ lines.push(" (none)");
20
+ }
21
+ else {
22
+ for (const [name, cfg] of entries) {
23
+ const short = cfg.short ? `-${cfg.short}, ` : "";
24
+ lines.push(` ${short}--${name.padEnd(14)} ${cfg.description}`);
25
+ }
26
+ }
27
+ lines.push("");
28
+ }
29
+ return lines.join("\n");
30
+ }
31
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,UAAU,UAAU,CACxB,QAAgB,EAChB,WAAmB,EACnB,WAA6B;IAE7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,QAAQ,8BAA8B,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * CLI argument parser.
3
+ *
4
+ * Parses a token array into subcommand, flags, and positionals.
5
+ */
6
+ export interface FlagSpec {
7
+ [name: string]: {
8
+ short?: string;
9
+ type: "boolean" | "string" | "number";
10
+ description?: string;
11
+ multi?: boolean;
12
+ };
13
+ }
14
+ export interface ParsedCommand {
15
+ subcommand: string;
16
+ flags: Record<string, string | number | boolean | Array<string | number | boolean>>;
17
+ positionals: string[];
18
+ }
19
+ export declare class CliError extends Error {
20
+ hint?: string;
21
+ constructor(message: string, hint?: string);
22
+ }
23
+ export declare function parseCommand(tokens: string[], spec: FlagSpec): ParsedCommand;
24
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/cli/parse.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,QAAQ;IACvB,CAAC,IAAI,EAAE,MAAM,GAAG;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;QACtC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IACpF,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;gBACF,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAK3C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,aAAa,CAqJ5E"}