@cursor/july 0.1.2 → 0.1.4

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 (232) hide show
  1. package/AGENTS.md +16 -5
  2. package/README.md +8 -9
  3. package/dist/bin/agent-serve.d.ts +3 -1
  4. package/dist/bin/agent-serve.d.ts.map +1 -1
  5. package/dist/bin/agent-serve.js +416 -155
  6. package/dist/channels/slack/log.d.ts +1 -1
  7. package/dist/channels/slack/log.d.ts.map +1 -1
  8. package/dist/channels/slack/log.js +4 -5
  9. package/dist/channels/slack/setup.js +1 -1
  10. package/dist/channels/slack/socket-mode.d.ts.map +1 -1
  11. package/dist/channels/slack/socket-mode.js +10 -9
  12. package/dist/docs/404.html +2 -2
  13. package/dist/docs/ab.html +3 -3
  14. package/dist/docs/assets/{app.Oje4vhlk.js → app.DF-Yx4OP.js} +1 -1
  15. package/dist/docs/assets/chunks/@localSearchIndexroot.0XrheBv2.js +1 -0
  16. package/dist/docs/assets/chunks/{VPLocalSearchBox.H5XZ2zCB.js → VPLocalSearchBox.DSeJSudL.js} +1 -1
  17. package/dist/docs/assets/chunks/{theme.CTR_TuaE.js → theme.DZVLTXOC.js} +2 -2
  18. package/dist/docs/assets/{index.md.m81y7TY7.js → index.md.Cylk70gg.js} +1 -1
  19. package/dist/docs/assets/{quickstart.md.CfU8_uTC.js → quickstart.md.BU6Iwi_9.js} +18 -6
  20. package/dist/docs/assets/{reference_cli.md.DA730zCu.js → reference_cli.md.Bv6pOxcF.js} +11 -6
  21. package/dist/docs/assets/{reference_cli.md.DA730zCu.lean.js → reference_cli.md.Bv6pOxcF.lean.js} +1 -1
  22. package/dist/docs/building-with-agents.html +3 -3
  23. package/dist/docs/concepts.html +3 -3
  24. package/dist/docs/deployment.html +3 -3
  25. package/dist/docs/evals.html +3 -3
  26. package/dist/docs/guides/agent-to-agent.html +3 -3
  27. package/dist/docs/guides/cloud-runtime.html +3 -3
  28. package/dist/docs/guides/github.html +3 -3
  29. package/dist/docs/guides/human-in-the-loop.html +3 -3
  30. package/dist/docs/guides/slack.html +3 -3
  31. package/dist/docs/guides/webhooks.html +3 -3
  32. package/dist/docs/hashmap.json +1 -1
  33. package/dist/docs/hillclimbing.html +3 -3
  34. package/dist/docs/index.html +5 -5
  35. package/dist/docs/quickstart.html +22 -10
  36. package/dist/docs/reference/agent-config.html +3 -3
  37. package/dist/docs/reference/channels.html +3 -3
  38. package/dist/docs/reference/cli.html +14 -9
  39. package/dist/docs/reference/connections.html +3 -3
  40. package/dist/docs/reference/hooks.html +3 -3
  41. package/dist/docs/reference/http-api.html +3 -3
  42. package/dist/docs/reference/instructions.html +3 -3
  43. package/dist/docs/reference/playground.html +3 -3
  44. package/dist/docs/reference/project-layout.html +3 -3
  45. package/dist/docs/reference/schedules.html +3 -3
  46. package/dist/docs/reference/sessions.html +3 -3
  47. package/dist/docs/reference/skills.html +3 -3
  48. package/dist/docs/reference/subagents.html +3 -3
  49. package/dist/docs/reference/tools.html +3 -3
  50. package/dist/docs/scaffolding-agents.html +3 -3
  51. package/dist/docs/storage.html +3 -3
  52. package/dist/docs/troubleshooting.html +3 -3
  53. package/dist/internal/ab-collector.js +3 -3
  54. package/dist/internal/ab-fold.js +1 -1
  55. package/dist/internal/chat-client.d.ts +29 -3
  56. package/dist/internal/chat-client.d.ts.map +1 -1
  57. package/dist/internal/chat-client.js +180 -27
  58. package/dist/internal/cli-ax.d.ts +83 -2
  59. package/dist/internal/cli-ax.d.ts.map +1 -1
  60. package/dist/internal/cli-ax.js +626 -52
  61. package/dist/internal/cli-cursor.d.ts.map +1 -1
  62. package/dist/internal/cli-cursor.js +8 -36
  63. package/dist/internal/cli-deploy.d.ts +59 -3
  64. package/dist/internal/cli-deploy.d.ts.map +1 -1
  65. package/dist/internal/cli-deploy.js +316 -38
  66. package/dist/internal/cli-github.js +13 -13
  67. package/dist/internal/cursor/account-mcp.js +3 -3
  68. package/dist/internal/cursor/backend-client.js +1 -1
  69. package/dist/internal/cursor/credentials.d.ts +14 -3
  70. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  71. package/dist/internal/cursor/credentials.js +21 -6
  72. package/dist/internal/cursor/github-credentials.js +3 -3
  73. package/dist/internal/cursor-event-relay.js +1 -1
  74. package/dist/internal/cursor-relay-core.d.ts +1 -1
  75. package/dist/internal/cursor-relay-core.d.ts.map +1 -1
  76. package/dist/internal/cursor-relay-core.js +2 -1
  77. package/dist/internal/cursor-slack-relay.js +1 -1
  78. package/dist/internal/deploy-client.d.ts +9 -1
  79. package/dist/internal/deploy-client.d.ts.map +1 -1
  80. package/dist/internal/deploy-client.js +23 -3
  81. package/dist/internal/deploy-source.d.ts +35 -0
  82. package/dist/internal/deploy-source.d.ts.map +1 -0
  83. package/dist/internal/deploy-source.js +118 -0
  84. package/dist/internal/discovery.d.ts +11 -0
  85. package/dist/internal/discovery.d.ts.map +1 -1
  86. package/dist/internal/discovery.js +43 -14
  87. package/dist/internal/distribution.d.ts +7 -0
  88. package/dist/internal/distribution.d.ts.map +1 -1
  89. package/dist/internal/distribution.js +7 -0
  90. package/dist/internal/docs-site.js +3 -3
  91. package/dist/internal/eval-run-store.d.ts.map +1 -1
  92. package/dist/internal/eval-run-store.js +10 -9
  93. package/dist/internal/eval-runner.d.ts +2 -0
  94. package/dist/internal/eval-runner.d.ts.map +1 -1
  95. package/dist/internal/eval-runner.js +2 -0
  96. package/dist/internal/event-mapper.d.ts +54 -1
  97. package/dist/internal/event-mapper.d.ts.map +1 -1
  98. package/dist/internal/event-mapper.js +151 -41
  99. package/dist/internal/github-fanout.js +2 -2
  100. package/dist/internal/host-platforms.js +5 -5
  101. package/dist/internal/init-project.d.ts +88 -1
  102. package/dist/internal/init-project.d.ts.map +1 -1
  103. package/dist/internal/init-project.js +221 -31
  104. package/dist/internal/install-cursor-skills.d.ts +64 -0
  105. package/dist/internal/install-cursor-skills.d.ts.map +1 -0
  106. package/dist/internal/install-cursor-skills.js +274 -0
  107. package/dist/internal/logs-client.d.ts +60 -0
  108. package/dist/internal/logs-client.d.ts.map +1 -0
  109. package/dist/internal/logs-client.js +311 -0
  110. package/dist/internal/mcp-endpoint.d.ts.map +1 -1
  111. package/dist/internal/mcp-endpoint.js +1 -1
  112. package/dist/internal/open-browser.d.ts +5 -0
  113. package/dist/internal/open-browser.d.ts.map +1 -0
  114. package/dist/internal/open-browser.js +34 -0
  115. package/dist/internal/playground/toolchain.d.ts.map +1 -1
  116. package/dist/internal/playground/toolchain.js +19 -14
  117. package/dist/internal/playground-proxy.d.ts +69 -0
  118. package/dist/internal/playground-proxy.d.ts.map +1 -0
  119. package/dist/internal/playground-proxy.js +468 -0
  120. package/dist/internal/prompt-context.d.ts +35 -0
  121. package/dist/internal/prompt-context.d.ts.map +1 -0
  122. package/dist/internal/prompt-context.js +71 -0
  123. package/dist/internal/reminder-runner.d.ts.map +1 -1
  124. package/dist/internal/reminder-runner.js +11 -11
  125. package/dist/internal/request-headers.d.ts +11 -0
  126. package/dist/internal/request-headers.d.ts.map +1 -0
  127. package/dist/internal/request-headers.js +14 -0
  128. package/dist/internal/resolve-prod-target.d.ts +44 -0
  129. package/dist/internal/resolve-prod-target.d.ts.map +1 -0
  130. package/dist/internal/resolve-prod-target.js +134 -0
  131. package/dist/internal/resolved-connections.js +5 -5
  132. package/dist/internal/run-client.d.ts +2 -2
  133. package/dist/internal/run-client.d.ts.map +1 -1
  134. package/dist/internal/run-client.js +38 -23
  135. package/dist/internal/schedule-runner.js +1 -1
  136. package/dist/internal/server.d.ts.map +1 -1
  137. package/dist/internal/server.js +23 -17
  138. package/dist/internal/session-engine.d.ts +1 -1
  139. package/dist/internal/session-engine.d.ts.map +1 -1
  140. package/dist/internal/session-engine.js +34 -19
  141. package/dist/internal/sessions-client.d.ts +34 -0
  142. package/dist/internal/sessions-client.d.ts.map +1 -0
  143. package/dist/internal/sessions-client.js +193 -0
  144. package/dist/internal/storage-coordinator.js +6 -6
  145. package/dist/internal/stream-progress.d.ts.map +1 -1
  146. package/dist/internal/stream-progress.js +31 -3
  147. package/dist/internal/terminal-style.d.ts +22 -0
  148. package/dist/internal/terminal-style.d.ts.map +1 -0
  149. package/dist/internal/terminal-style.js +49 -0
  150. package/dist/internal/trajectory.d.ts +10 -5
  151. package/dist/internal/trajectory.d.ts.map +1 -1
  152. package/dist/internal/trajectory.js +82 -10
  153. package/dist/internal/update-check.d.ts +93 -0
  154. package/dist/internal/update-check.d.ts.map +1 -0
  155. package/dist/internal/update-check.js +431 -0
  156. package/dist/internal/workspace.d.ts +11 -0
  157. package/dist/internal/workspace.d.ts.map +1 -1
  158. package/dist/internal/workspace.js +38 -4
  159. package/dist/playground/assets/index-Ct_Usdm8.css +1 -0
  160. package/dist/playground/assets/index-Dsyb-Vaj.js +319 -0
  161. package/dist/playground/index.html +2 -2
  162. package/dist/types.d.ts +29 -2
  163. package/dist/types.d.ts.map +1 -1
  164. package/docs/README.md +0 -1
  165. package/docs/quickstart.md +22 -7
  166. package/docs/reference/cli.md +51 -3
  167. package/package.json +4 -1
  168. package/skills/ab/SKILL.md +8 -8
  169. package/skills/create-agent/SKILL.md +28 -22
  170. package/skills/debug/SKILL.md +11 -11
  171. package/skills/evals/SKILL.md +16 -16
  172. package/skills/framework-map/SKILL.md +6 -6
  173. package/skills/github/SKILL.md +13 -13
  174. package/skills/hillclimb/SKILL.md +10 -10
  175. package/skills/setup-slack/SKILL.md +14 -14
  176. package/src/bin/agent-serve.ts +451 -191
  177. package/src/channels/slack/log.ts +5 -5
  178. package/src/channels/slack/setup.ts +1 -1
  179. package/src/channels/slack/socket-mode.ts +11 -9
  180. package/src/internal/ab-collector.ts +3 -3
  181. package/src/internal/ab-fold.ts +1 -1
  182. package/src/internal/chat-client.ts +252 -37
  183. package/src/internal/cli-ax.ts +761 -72
  184. package/src/internal/cli-cursor.ts +14 -42
  185. package/src/internal/cli-deploy.ts +428 -49
  186. package/src/internal/cli-github.ts +13 -15
  187. package/src/internal/cursor/account-mcp.ts +3 -3
  188. package/src/internal/cursor/backend-client.ts +1 -1
  189. package/src/internal/cursor/credentials.ts +26 -7
  190. package/src/internal/cursor/github-credentials.ts +3 -3
  191. package/src/internal/cursor-event-relay.ts +1 -1
  192. package/src/internal/cursor-relay-core.ts +4 -2
  193. package/src/internal/cursor-slack-relay.ts +1 -1
  194. package/src/internal/deploy-client.ts +45 -4
  195. package/src/internal/deploy-source.ts +133 -0
  196. package/src/internal/discovery.ts +53 -16
  197. package/src/internal/distribution.ts +8 -0
  198. package/src/internal/docs-site.ts +3 -3
  199. package/src/internal/eval-run-store.ts +10 -11
  200. package/src/internal/eval-runner.ts +5 -0
  201. package/src/internal/event-mapper.ts +222 -42
  202. package/src/internal/github-fanout.ts +2 -2
  203. package/src/internal/host-platforms.ts +5 -5
  204. package/src/internal/init-project.ts +333 -51
  205. package/src/internal/install-cursor-skills.ts +327 -0
  206. package/src/internal/logs-client.ts +442 -0
  207. package/src/internal/mcp-endpoint.ts +1 -3
  208. package/src/internal/open-browser.ts +41 -0
  209. package/src/internal/playground/toolchain.ts +18 -16
  210. package/src/internal/playground-proxy.ts +576 -0
  211. package/src/internal/prompt-context.ts +95 -0
  212. package/src/internal/reminder-runner.ts +11 -17
  213. package/src/internal/request-headers.ts +23 -0
  214. package/src/internal/resolve-prod-target.ts +182 -0
  215. package/src/internal/resolved-connections.ts +5 -5
  216. package/src/internal/run-client.ts +39 -36
  217. package/src/internal/schedule-runner.ts +1 -1
  218. package/src/internal/server.ts +25 -16
  219. package/src/internal/session-engine.ts +35 -18
  220. package/src/internal/sessions-client.ts +216 -0
  221. package/src/internal/storage-coordinator.ts +6 -6
  222. package/src/internal/stream-progress.ts +36 -2
  223. package/src/internal/terminal-style.ts +74 -0
  224. package/src/internal/trajectory.ts +91 -13
  225. package/src/internal/update-check.ts +552 -0
  226. package/src/internal/workspace.ts +42 -4
  227. package/src/types.ts +45 -7
  228. package/dist/docs/assets/chunks/@localSearchIndexroot.zwQ9RCQ7.js +0 -1
  229. package/dist/playground/assets/index-B1Qc9h2u.css +0 -1
  230. package/dist/playground/assets/index-CpDYCj8W.js +0 -79
  231. /package/dist/docs/assets/{index.md.m81y7TY7.lean.js → index.md.Cylk70gg.lean.js} +0 -0
  232. /package/dist/docs/assets/{quickstart.md.CfU8_uTC.lean.js → quickstart.md.BU6Iwi_9.lean.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"stream-progress.d.ts","sourceRoot":"","sources":["../../src/internal/stream-progress.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAC7C,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,cAAc,CAmLjB"}
1
+ {"version":3,"file":"stream-progress.d.ts","sourceRoot":"","sources":["../../src/internal/stream-progress.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAC7C,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,cAAc,CAqNjB"}
@@ -21,7 +21,7 @@ export function createStreamProgress(options) {
21
21
  const elapsed = (since) => `${Date.now() - since}ms`;
22
22
  return {
23
23
  onEvent(event) {
24
- var _a, _b;
24
+ var _a, _b, _c;
25
25
  switch (event.type) {
26
26
  case "session.started": {
27
27
  write(c.dim(`session ${event.sessionId}\n`));
@@ -49,6 +49,9 @@ export function createStreamProgress(options) {
49
49
  break;
50
50
  }
51
51
  case "reasoning.appended": {
52
+ if (event.data.parentCallId !== undefined) {
53
+ break;
54
+ }
52
55
  if (!thinkingShown) {
53
56
  thinkingShown = true;
54
57
  write(c.dim(" · thinking…\n"));
@@ -56,6 +59,11 @@ export function createStreamProgress(options) {
56
59
  break;
57
60
  }
58
61
  case "message.appended": {
62
+ // Nested subagent deltas stay inside the task chip/indent, not
63
+ // the parent agent stream.
64
+ if (event.data.parentCallId !== undefined) {
65
+ break;
66
+ }
59
67
  if (!assistantOpen) {
60
68
  write(`${c.green("‹ agent")} `);
61
69
  assistantOpen = true;
@@ -64,6 +72,9 @@ export function createStreamProgress(options) {
64
72
  break;
65
73
  }
66
74
  case "message.completed": {
75
+ if (event.data.parentCallId !== undefined) {
76
+ break;
77
+ }
67
78
  closeAssistant();
68
79
  break;
69
80
  }
@@ -79,8 +90,16 @@ export function createStreamProgress(options) {
79
90
  closeAssistant();
80
91
  const now = Date.now();
81
92
  for (const call of event.data.calls) {
93
+ if (call.toolName === "task" && call.parentCallId === undefined) {
94
+ // Covered by subagent.called; avoid a duplicate bare `task` line.
95
+ continue;
96
+ }
82
97
  toolStartedAt.set(call.callId, now);
83
- write(` ${c.magenta("⚙")} ${c.bold(call.toolName)}${c.dim(formatArgs(call.args))}\n`);
98
+ const indent = call.parentCallId !== undefined ||
99
+ event.data.parentCallId !== undefined
100
+ ? " "
101
+ : " ";
102
+ write(`${indent}${c.magenta("⚙")} ${c.bold(call.toolName)}${c.dim(formatArgs(call.args))}\n`);
84
103
  }
85
104
  break;
86
105
  }
@@ -95,11 +114,16 @@ export function createStreamProgress(options) {
95
114
  break;
96
115
  }
97
116
  case "action.result": {
117
+ if (event.data.toolName === "task" &&
118
+ event.data.parentCallId === undefined) {
119
+ break;
120
+ }
98
121
  const started = toolStartedAt.get(event.data.callId);
99
122
  toolStartedAt.delete(event.data.callId);
100
123
  const dur = started === undefined ? "" : c.dim(` ${elapsed(started)}`);
101
124
  const mark = event.data.isError ? c.red("✗") : c.magenta("✓");
102
- write(` ${mark} ${c.bold(event.data.toolName)}${dur} ${c.dim(truncate(stringify(event.data.output), 90))}\n`);
125
+ const indent = event.data.parentCallId !== undefined ? " " : " ";
126
+ write(`${indent}${mark} ${c.bold(event.data.toolName)}${dur} ${c.dim(truncate(stringify(event.data.output), 90))}\n`);
103
127
  break;
104
128
  }
105
129
  case "subagent.called": {
@@ -110,6 +134,10 @@ export function createStreamProgress(options) {
110
134
  write(` ${c.magenta("task")} ${c.bold((_b = event.data.name) !== null && _b !== void 0 ? _b : "subagent")}${c.dim(detail)}\n`);
111
135
  break;
112
136
  }
137
+ case "subagent.completed": {
138
+ write(` ${c.magenta("✓")} ${c.bold((_c = event.data.name) !== null && _c !== void 0 ? _c : "subagent")} ${c.dim("done")}\n`);
139
+ break;
140
+ }
113
141
  case "turn.completed": {
114
142
  closeAssistant();
115
143
  const usage = event.data.usage;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Tiny ANSI helpers for CLI progress output. Respects `NO_COLOR` and
3
+ * only enables when the target stream is a TTY.
4
+ */
5
+ export interface TerminalPalette {
6
+ dim: (s: string) => string;
7
+ bold: (s: string) => string;
8
+ cyan: (s: string) => string;
9
+ green: (s: string) => string;
10
+ red: (s: string) => string;
11
+ magenta: (s: string) => string;
12
+ yellow: (s: string) => string;
13
+ }
14
+ export declare function colorEnabledFor(stream?: NodeJS.WriteStream): boolean;
15
+ export declare function makePalette(enabled: boolean): TerminalPalette;
16
+ /** Palette for human-facing stdout (init summaries, next steps). */
17
+ export declare function stdoutPalette(): TerminalPalette;
18
+ /** Palette for human-facing stderr (login progress, warnings). */
19
+ export declare function stderrPalette(): TerminalPalette;
20
+ /** Wipe the terminal before a `dev` Enter-to-restart cycle. */
21
+ export declare function clearTerminal(stream?: NodeJS.WriteStream): void;
22
+ //# sourceMappingURL=terminal-style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-style.d.ts","sourceRoot":"","sources":["../../src/internal/terminal-style.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7B,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/B;AAcD,wBAAgB,eAAe,CAC7B,MAAM,GAAE,MAAM,CAAC,WAA4B,GAC1C,OAAO,CAET;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,CAiB7D;AAED,oEAAoE;AACpE,wBAAgB,aAAa,IAAI,eAAe,CAE/C;AAED,kEAAkE;AAClE,wBAAgB,aAAa,IAAI,eAAe,CAE/C;AAED,+DAA+D;AAC/D,wBAAgB,aAAa,CAC3B,MAAM,GAAE,MAAM,CAAC,WAA4B,GAC1C,IAAI,CAMN"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Tiny ANSI helpers for CLI progress output. Respects `NO_COLOR` and
3
+ * only enables when the target stream is a TTY.
4
+ */
5
+ import { clearScreenDown, cursorTo } from "node:readline";
6
+ const IDENTITY = (s) => s;
7
+ const PLAIN = {
8
+ dim: IDENTITY,
9
+ bold: IDENTITY,
10
+ cyan: IDENTITY,
11
+ green: IDENTITY,
12
+ red: IDENTITY,
13
+ magenta: IDENTITY,
14
+ yellow: IDENTITY,
15
+ };
16
+ export function colorEnabledFor(stream = process.stdout) {
17
+ return stream.isTTY === true && process.env.NO_COLOR === undefined;
18
+ }
19
+ export function makePalette(enabled) {
20
+ if (!enabled) {
21
+ return PLAIN;
22
+ }
23
+ const wrap = (code) => (s) => `\u001b[${code}m${s}\u001b[0m`;
24
+ return {
25
+ dim: wrap("2"),
26
+ bold: wrap("1"),
27
+ cyan: wrap("36"),
28
+ green: wrap("32"),
29
+ red: wrap("31"),
30
+ magenta: wrap("35"),
31
+ yellow: wrap("33"),
32
+ };
33
+ }
34
+ /** Palette for human-facing stdout (init summaries, next steps). */
35
+ export function stdoutPalette() {
36
+ return makePalette(colorEnabledFor(process.stdout));
37
+ }
38
+ /** Palette for human-facing stderr (login progress, warnings). */
39
+ export function stderrPalette() {
40
+ return makePalette(colorEnabledFor(process.stderr));
41
+ }
42
+ /** Wipe the terminal before a `dev` Enter-to-restart cycle. */
43
+ export function clearTerminal(stream = process.stdout) {
44
+ if (stream.isTTY !== true) {
45
+ return;
46
+ }
47
+ cursorTo(stream, 0, 0);
48
+ clearScreenDown(stream);
49
+ }
@@ -14,6 +14,15 @@ export interface TrajectoryToolCall {
14
14
  isError: boolean;
15
15
  /** Present when the tool required human approval before execute. */
16
16
  approvalDecision?: "approve" | "deny";
17
+ /** Parent task/subagent call id when this tool ran inside a subagent. */
18
+ parentCallId?: string;
19
+ }
20
+ export interface TrajectorySubagent {
21
+ callId: string;
22
+ name?: string;
23
+ description?: string;
24
+ /** Nested tool calls streamed while this subagent was running. */
25
+ toolCalls: TrajectoryToolCall[];
17
26
  }
18
27
  export interface TrajectoryTurn {
19
28
  turnId: string;
@@ -21,11 +30,7 @@ export interface TrajectoryTurn {
21
30
  assistantText: string;
22
31
  reasoningText?: string;
23
32
  toolCalls: TrajectoryToolCall[];
24
- subagents: Array<{
25
- callId: string;
26
- name?: string;
27
- description?: string;
28
- }>;
33
+ subagents: TrajectorySubagent[];
29
34
  usage?: TurnUsage;
30
35
  result?: string;
31
36
  failed: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"trajectory.d.ts","sourceRoot":"","sources":["../../src/internal/trajectory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,SAAS,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU,CAuKlE;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAc9D;AAED,sDAAsD;AACtD,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAwCnE"}
1
+ {"version":3,"file":"trajectory.d.ts","sourceRoot":"","sources":["../../src/internal/trajectory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACtC,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,SAAS,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU,CA4NlE;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAc9D;AAED,sDAAsD;AACtD,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAuDnE"}
@@ -20,7 +20,7 @@ import { readFile } from "node:fs/promises";
20
20
  * folded into final assistant / reasoning text per turn.
21
21
  */
22
22
  export function buildTrajectory(events) {
23
- var _a;
23
+ var _a, _b;
24
24
  let sessionId = "";
25
25
  let sdkAgentId;
26
26
  let agentUrl;
@@ -65,12 +65,20 @@ export function buildTrajectory(events) {
65
65
  break;
66
66
  }
67
67
  case "message.completed": {
68
+ // Nested subagent text must not overwrite the parent turn reply.
69
+ if (event.data.parentCallId !== undefined) {
70
+ break;
71
+ }
68
72
  if (event.turnId !== undefined && event.data.text !== "") {
69
73
  ensureTurn(event.turnId).assistantText = event.data.text;
70
74
  }
71
75
  break;
72
76
  }
73
77
  case "reasoning.appended": {
78
+ // Nested subagent thinking stays off the parent turn transcript.
79
+ if (event.data.parentCallId !== undefined) {
80
+ break;
81
+ }
74
82
  if (event.turnId !== undefined) {
75
83
  ensureTurn(event.turnId).reasoningText = event.data.text;
76
84
  }
@@ -82,9 +90,29 @@ export function buildTrajectory(events) {
82
90
  }
83
91
  const turn = ensureTurn(event.turnId);
84
92
  for (const call of event.data.calls) {
85
- const entry = Object.assign({ callId: call.callId, toolName: call.toolName, isError: false }, (call.args === undefined ? {} : { args: call.args }));
93
+ const parentCallId = (_a = call.parentCallId) !== null && _a !== void 0 ? _a : event.data.parentCallId;
94
+ // Keep bare top-level `task` in toolCalls so evals like
95
+ // `calledTool("task")` / `notCalledTool("task")` keep working.
96
+ // Nested progress also appears under `subagents`.
97
+ const entry = {
98
+ callId: call.callId,
99
+ toolName: call.toolName,
100
+ isError: false,
101
+ args: call.args,
102
+ parentCallId,
103
+ };
86
104
  pendingCalls.set(call.callId, entry);
87
- turn.toolCalls.push(entry);
105
+ if (parentCallId !== undefined) {
106
+ let sub = turn.subagents.find((s) => s.callId === parentCallId);
107
+ if (sub === undefined) {
108
+ sub = { callId: parentCallId, toolCalls: [] };
109
+ turn.subagents.push(sub);
110
+ }
111
+ sub.toolCalls.push(entry);
112
+ }
113
+ else {
114
+ turn.toolCalls.push(entry);
115
+ }
88
116
  }
89
117
  break;
90
118
  }
@@ -107,20 +135,47 @@ export function buildTrajectory(events) {
107
135
  pending.toolName = event.data.toolName;
108
136
  }
109
137
  else if (event.turnId !== undefined) {
110
- ensureTurn(event.turnId).toolCalls.push({
138
+ const turn = ensureTurn(event.turnId);
139
+ const entry = {
111
140
  callId: event.data.callId,
112
141
  toolName: event.data.toolName,
113
142
  output: event.data.output,
114
143
  isError: event.data.isError,
115
- });
144
+ parentCallId: event.data.parentCallId,
145
+ };
146
+ if (event.data.parentCallId !== undefined) {
147
+ let sub = turn.subagents.find((s) => s.callId === event.data.parentCallId);
148
+ if (sub === undefined) {
149
+ sub = {
150
+ callId: event.data.parentCallId,
151
+ toolCalls: [],
152
+ };
153
+ turn.subagents.push(sub);
154
+ }
155
+ sub.toolCalls.push(entry);
156
+ }
157
+ else {
158
+ turn.toolCalls.push(entry);
159
+ }
116
160
  }
117
161
  break;
118
162
  }
119
163
  case "subagent.called": {
120
164
  if (event.turnId !== undefined) {
121
- ensureTurn(event.turnId).subagents.push(Object.assign(Object.assign({ callId: event.data.callId }, (event.data.name === undefined ? {} : { name: event.data.name })), (event.data.description === undefined
122
- ? {}
123
- : { description: event.data.description })));
165
+ const turn = ensureTurn(event.turnId);
166
+ const existing = turn.subagents.find((s) => s.callId === event.data.callId);
167
+ if (existing !== undefined) {
168
+ existing.name = event.data.name;
169
+ existing.description = event.data.description;
170
+ }
171
+ else {
172
+ turn.subagents.push({
173
+ callId: event.data.callId,
174
+ name: event.data.name,
175
+ description: event.data.description,
176
+ toolCalls: [],
177
+ });
178
+ }
124
179
  }
125
180
  break;
126
181
  }
@@ -163,9 +218,11 @@ export function buildTrajectory(events) {
163
218
  }
164
219
  const turns = turnOrder.map((id) => turnsById.get(id));
165
220
  const turnsFailed = turns.filter((t) => t.failed).length;
166
- const toolCallCount = turns.reduce((n, t) => n + t.toolCalls.length, 0);
221
+ const toolCallCount = turns.reduce((n, t) => n +
222
+ t.toolCalls.length +
223
+ t.subagents.reduce((m, s) => m + s.toolCalls.length, 0), 0);
167
224
  const lastGood = [...turns].reverse().find((t) => t.assistantText !== "");
168
- return Object.assign(Object.assign(Object.assign(Object.assign({ sessionId }, (sdkAgentId === undefined ? {} : { sdkAgentId })), (agentUrl === undefined ? {} : { agentUrl })), (channelId === undefined ? {} : { channelId })), { ok: turnsFailed === 0 && turns.length > 0, finalText: (_a = lastGood === null || lastGood === void 0 ? void 0 : lastGood.assistantText) !== null && _a !== void 0 ? _a : "", turnsFailed,
225
+ return Object.assign(Object.assign(Object.assign(Object.assign({ sessionId }, (sdkAgentId === undefined ? {} : { sdkAgentId })), (agentUrl === undefined ? {} : { agentUrl })), (channelId === undefined ? {} : { channelId })), { ok: turnsFailed === 0 && turns.length > 0, finalText: (_b = lastGood === null || lastGood === void 0 ? void 0 : lastGood.assistantText) !== null && _b !== void 0 ? _b : "", turnsFailed,
169
226
  toolCallCount,
170
227
  turns });
171
228
  }
@@ -195,6 +252,7 @@ export function loadTrajectoryFromEventsFile(path) {
195
252
  }
196
253
  /** Human-readable one-line-per-turn dump (for non-JSON CLI output). */
197
254
  export function formatTrajectoryText(trajectory) {
255
+ var _a;
198
256
  const lines = [];
199
257
  lines.push(`session ${trajectory.sessionId || "(unknown)"} ok=${trajectory.ok}`);
200
258
  if (trajectory.sdkAgentId !== undefined) {
@@ -217,6 +275,20 @@ export function formatTrajectoryText(trajectory) {
217
275
  lines.push(` ${truncate(stringify(call.output), 160)}`);
218
276
  }
219
277
  }
278
+ for (const sub of turn.subagents) {
279
+ const label = (_a = sub.name) !== null && _a !== void 0 ? _a : "subagent";
280
+ const detail = sub.description !== undefined
281
+ ? ` — ${truncate(sub.description, 80)}`
282
+ : "";
283
+ lines.push(` task ${label}${detail}`);
284
+ for (const call of sub.toolCalls) {
285
+ const mark = call.isError ? "✗" : "→";
286
+ lines.push(` ${mark} ${call.toolName}${formatArgs(call.args)}`);
287
+ if (call.output !== undefined) {
288
+ lines.push(` ${truncate(stringify(call.output), 160)}`);
289
+ }
290
+ }
291
+ }
220
292
  if (turn.assistantText.length > 0) {
221
293
  lines.push(` agent: ${truncate(turn.assistantText, 400)}`);
222
294
  }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Outdated-version warning + `agentkit update`.
3
+ *
4
+ * Every CLI run of a published install compares its own version against the
5
+ * npm registry's `latest` dist-tag and warns on stderr when behind. The
6
+ * registry lookup is cached under the config dir
7
+ * (`~/.config/agent-serve/update-check.json`) so most runs never touch the
8
+ * network; a stale cache refreshes inline under a short timeout, and any
9
+ * network failure is silent (the warning is best-effort, never a blocker).
10
+ *
11
+ * `agentkit update` re-runs the lookup fresh, figures out how this copy was
12
+ * installed (global npm/pnpm/yarn/bun, or a project dependency), and runs the
13
+ * matching install command.
14
+ */
15
+ import { z } from "zod";
16
+ /**
17
+ * Semver-style ordering: negative when `a < b`, 0 when equal, positive when
18
+ * `a > b`. Unparseable versions compare equal (never warn on garbage).
19
+ */
20
+ export declare function compareVersions(a: string, b: string): number;
21
+ /**
22
+ * Latest published version of the package, from the registry's `latest`
23
+ * dist-tag. Returns undefined on any failure (offline, 404 pre-publish, …).
24
+ */
25
+ export declare function fetchLatestPublishedVersion(options?: {
26
+ fetchImpl?: typeof fetch;
27
+ timeoutMs?: number;
28
+ packageName?: string;
29
+ }): Promise<string | undefined>;
30
+ declare const cacheSchema: z.ZodObject<{
31
+ checkedAt: z.ZodNumber;
32
+ latestVersion: z.ZodOptional<z.ZodString>;
33
+ }, "strip">;
34
+ export type UpdateCheckCache = z.infer<typeof cacheSchema>;
35
+ export declare function updateCheckCachePath(configDir?: string): string;
36
+ export declare function readUpdateCheckCache(configDir?: string): Promise<UpdateCheckCache | undefined>;
37
+ export declare function writeUpdateCheckCache(cache: UpdateCheckCache, configDir?: string): Promise<void>;
38
+ export interface WarnIfOutdatedOptions {
39
+ /** Defaults to the running package's own version. */
40
+ currentVersion?: string;
41
+ /** Test seam; defaults to the shared config dir. */
42
+ configDir?: string;
43
+ fetchImpl?: typeof fetch;
44
+ /** Test seam; defaults to Date.now(). */
45
+ now?: number;
46
+ env?: NodeJS.ProcessEnv;
47
+ /** Defaults to process.stderr.write. */
48
+ err?: (text: string) => void;
49
+ /** Skip the source-checkout guard (tests exercise the full path). */
50
+ force?: boolean;
51
+ }
52
+ /**
53
+ * Print an outdated-version warning to stderr when a newer release exists.
54
+ *
55
+ * Never throws and never blocks longer than {@link WARN_FETCH_TIMEOUT_MS}.
56
+ * Suppressed on source-checkout runs (there is no installed copy to update),
57
+ * in CI, and via NO_UPDATE_NOTIFIER / AGENT_SERVE_NO_UPDATE_CHECK.
58
+ */
59
+ export declare function warnIfOutdated(options?: WarnIfOutdatedOptions): Promise<void>;
60
+ export interface UpdateCommand {
61
+ cmd: string;
62
+ args: string[];
63
+ /** Working directory for local project installs. */
64
+ cwd?: string;
65
+ /** One-line human description of what will run and why. */
66
+ reason: string;
67
+ }
68
+ /**
69
+ * Figure out how the running copy was installed and which command upgrades
70
+ * it. Detection is path-shape based (global stores have recognizable
71
+ * layouts), then falls back to walking up to the project that declares the
72
+ * dependency. Returns undefined for layouts we cannot safely upgrade
73
+ * (npx cache, unrecognized stores).
74
+ */
75
+ export declare function detectUpdateCommand(args: {
76
+ packageRoot: string;
77
+ packageName?: string;
78
+ }): Promise<UpdateCommand | undefined>;
79
+ export interface UpdateCliOptions {
80
+ /** Test seams. */
81
+ fetchImpl?: typeof fetch;
82
+ currentVersion?: string;
83
+ packageRoot?: string;
84
+ configDir?: string;
85
+ runCommand?: (command: UpdateCommand) => Promise<number>;
86
+ compiled?: boolean;
87
+ out?: (text: string) => void;
88
+ err?: (text: string) => void;
89
+ }
90
+ /** `agentkit update` — upgrade this install to the latest published version. */
91
+ export declare function cmdUpdate(options?: UpdateCliOptions): Promise<number>;
92
+ export {};
93
+ //# sourceMappingURL=update-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/internal/update-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA6CxB;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA0C5D;AAQD;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,CAAC,EAAE;IAC1D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAqB9B;AAMD,QAAA,MAAM,WAAW,EAAE,CAAC,CAAC,SAAS,CAC5B;IAAE,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC;IAAC,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;CAAE,EACrE,OAAO,CAMP,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAE3D,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAsB,oBAAoB,CACxC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAavC;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,gBAAgB,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAQf;AAMD,MAAM,WAAW,qBAAqB;IACpC,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,wCAAwC;IACxC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,qEAAqE;IACrE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAUD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAoErC;AA+ED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,gFAAgF;AAChF,wBAAsB,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwE3E"}