@cursor/july 0.1.2 → 0.1.3

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 (174) 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 +389 -152
  6. package/dist/docs/404.html +2 -2
  7. package/dist/docs/ab.html +3 -3
  8. package/dist/docs/assets/{app.Oje4vhlk.js → app.BR0RbIdx.js} +1 -1
  9. package/dist/docs/assets/chunks/@localSearchIndexroot.DtIOQzGj.js +1 -0
  10. package/dist/docs/assets/chunks/{VPLocalSearchBox.H5XZ2zCB.js → VPLocalSearchBox.qjsVTneI.js} +1 -1
  11. package/dist/docs/assets/chunks/{theme.CTR_TuaE.js → theme.2Kg8jIp_.js} +2 -2
  12. package/dist/docs/assets/{quickstart.md.CfU8_uTC.js → quickstart.md.BU6Iwi_9.js} +18 -6
  13. package/dist/docs/assets/{reference_cli.md.DA730zCu.js → reference_cli.md.Bv6pOxcF.js} +11 -6
  14. package/dist/docs/assets/{reference_cli.md.DA730zCu.lean.js → reference_cli.md.Bv6pOxcF.lean.js} +1 -1
  15. package/dist/docs/building-with-agents.html +3 -3
  16. package/dist/docs/concepts.html +3 -3
  17. package/dist/docs/deployment.html +3 -3
  18. package/dist/docs/evals.html +3 -3
  19. package/dist/docs/guides/agent-to-agent.html +3 -3
  20. package/dist/docs/guides/cloud-runtime.html +3 -3
  21. package/dist/docs/guides/github.html +3 -3
  22. package/dist/docs/guides/human-in-the-loop.html +3 -3
  23. package/dist/docs/guides/slack.html +3 -3
  24. package/dist/docs/guides/webhooks.html +3 -3
  25. package/dist/docs/hashmap.json +1 -1
  26. package/dist/docs/hillclimbing.html +3 -3
  27. package/dist/docs/index.html +3 -3
  28. package/dist/docs/quickstart.html +22 -10
  29. package/dist/docs/reference/agent-config.html +3 -3
  30. package/dist/docs/reference/channels.html +3 -3
  31. package/dist/docs/reference/cli.html +14 -9
  32. package/dist/docs/reference/connections.html +3 -3
  33. package/dist/docs/reference/hooks.html +3 -3
  34. package/dist/docs/reference/http-api.html +3 -3
  35. package/dist/docs/reference/instructions.html +3 -3
  36. package/dist/docs/reference/playground.html +3 -3
  37. package/dist/docs/reference/project-layout.html +3 -3
  38. package/dist/docs/reference/schedules.html +3 -3
  39. package/dist/docs/reference/sessions.html +3 -3
  40. package/dist/docs/reference/skills.html +3 -3
  41. package/dist/docs/reference/subagents.html +3 -3
  42. package/dist/docs/reference/tools.html +3 -3
  43. package/dist/docs/scaffolding-agents.html +3 -3
  44. package/dist/docs/storage.html +3 -3
  45. package/dist/docs/troubleshooting.html +3 -3
  46. package/dist/internal/chat-client.d.ts +29 -3
  47. package/dist/internal/chat-client.d.ts.map +1 -1
  48. package/dist/internal/chat-client.js +180 -27
  49. package/dist/internal/cli-ax.d.ts +75 -2
  50. package/dist/internal/cli-ax.d.ts.map +1 -1
  51. package/dist/internal/cli-ax.js +600 -52
  52. package/dist/internal/cli-cursor.d.ts.map +1 -1
  53. package/dist/internal/cli-cursor.js +8 -36
  54. package/dist/internal/cli-deploy.d.ts +59 -3
  55. package/dist/internal/cli-deploy.d.ts.map +1 -1
  56. package/dist/internal/cli-deploy.js +316 -38
  57. package/dist/internal/cursor/credentials.d.ts +9 -0
  58. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  59. package/dist/internal/cursor/credentials.js +12 -0
  60. package/dist/internal/deploy-client.d.ts +9 -1
  61. package/dist/internal/deploy-client.d.ts.map +1 -1
  62. package/dist/internal/deploy-client.js +23 -3
  63. package/dist/internal/deploy-source.d.ts +35 -0
  64. package/dist/internal/deploy-source.d.ts.map +1 -0
  65. package/dist/internal/deploy-source.js +118 -0
  66. package/dist/internal/discovery.d.ts +11 -0
  67. package/dist/internal/discovery.d.ts.map +1 -1
  68. package/dist/internal/discovery.js +43 -14
  69. package/dist/internal/eval-run-store.d.ts.map +1 -1
  70. package/dist/internal/eval-run-store.js +2 -1
  71. package/dist/internal/eval-runner.d.ts +2 -0
  72. package/dist/internal/eval-runner.d.ts.map +1 -1
  73. package/dist/internal/eval-runner.js +2 -0
  74. package/dist/internal/event-mapper.d.ts +54 -1
  75. package/dist/internal/event-mapper.d.ts.map +1 -1
  76. package/dist/internal/event-mapper.js +151 -41
  77. package/dist/internal/init-project.d.ts +88 -1
  78. package/dist/internal/init-project.d.ts.map +1 -1
  79. package/dist/internal/init-project.js +221 -31
  80. package/dist/internal/install-cursor-skills.d.ts +64 -0
  81. package/dist/internal/install-cursor-skills.d.ts.map +1 -0
  82. package/dist/internal/install-cursor-skills.js +274 -0
  83. package/dist/internal/logs-client.d.ts +60 -0
  84. package/dist/internal/logs-client.d.ts.map +1 -0
  85. package/dist/internal/logs-client.js +311 -0
  86. package/dist/internal/open-browser.d.ts +5 -0
  87. package/dist/internal/open-browser.d.ts.map +1 -0
  88. package/dist/internal/open-browser.js +34 -0
  89. package/dist/internal/playground/toolchain.d.ts.map +1 -1
  90. package/dist/internal/playground/toolchain.js +16 -11
  91. package/dist/internal/playground-proxy.d.ts +69 -0
  92. package/dist/internal/playground-proxy.d.ts.map +1 -0
  93. package/dist/internal/playground-proxy.js +468 -0
  94. package/dist/internal/prompt-context.d.ts +35 -0
  95. package/dist/internal/prompt-context.d.ts.map +1 -0
  96. package/dist/internal/prompt-context.js +71 -0
  97. package/dist/internal/request-headers.d.ts +11 -0
  98. package/dist/internal/request-headers.d.ts.map +1 -0
  99. package/dist/internal/request-headers.js +14 -0
  100. package/dist/internal/resolve-prod-target.d.ts +42 -0
  101. package/dist/internal/resolve-prod-target.d.ts.map +1 -0
  102. package/dist/internal/resolve-prod-target.js +111 -0
  103. package/dist/internal/run-client.d.ts +2 -2
  104. package/dist/internal/run-client.d.ts.map +1 -1
  105. package/dist/internal/run-client.js +38 -23
  106. package/dist/internal/server.d.ts.map +1 -1
  107. package/dist/internal/server.js +10 -4
  108. package/dist/internal/session-engine.d.ts +1 -1
  109. package/dist/internal/session-engine.d.ts.map +1 -1
  110. package/dist/internal/session-engine.js +21 -6
  111. package/dist/internal/sessions-client.d.ts +21 -0
  112. package/dist/internal/sessions-client.d.ts.map +1 -0
  113. package/dist/internal/sessions-client.js +168 -0
  114. package/dist/internal/stream-progress.d.ts.map +1 -1
  115. package/dist/internal/stream-progress.js +31 -3
  116. package/dist/internal/terminal-style.d.ts +22 -0
  117. package/dist/internal/terminal-style.d.ts.map +1 -0
  118. package/dist/internal/terminal-style.js +49 -0
  119. package/dist/internal/trajectory.d.ts +10 -5
  120. package/dist/internal/trajectory.d.ts.map +1 -1
  121. package/dist/internal/trajectory.js +82 -10
  122. package/dist/internal/workspace.d.ts +11 -0
  123. package/dist/internal/workspace.d.ts.map +1 -1
  124. package/dist/internal/workspace.js +38 -4
  125. package/dist/playground/assets/index-D-vo2lV_.css +1 -0
  126. package/dist/playground/assets/index-x60b9q2j.js +312 -0
  127. package/dist/playground/index.html +2 -2
  128. package/dist/types.d.ts +26 -1
  129. package/dist/types.d.ts.map +1 -1
  130. package/docs/quickstart.md +22 -7
  131. package/docs/reference/cli.md +51 -3
  132. package/package.json +3 -1
  133. package/skills/ab/SKILL.md +8 -8
  134. package/skills/create-agent/SKILL.md +28 -22
  135. package/skills/debug/SKILL.md +11 -11
  136. package/skills/evals/SKILL.md +16 -16
  137. package/skills/framework-map/SKILL.md +6 -6
  138. package/skills/github/SKILL.md +13 -13
  139. package/skills/hillclimb/SKILL.md +10 -10
  140. package/skills/setup-slack/SKILL.md +13 -13
  141. package/src/bin/agent-serve.ts +422 -188
  142. package/src/internal/chat-client.ts +252 -37
  143. package/src/internal/cli-ax.ts +722 -72
  144. package/src/internal/cli-cursor.ts +14 -42
  145. package/src/internal/cli-deploy.ts +428 -49
  146. package/src/internal/cursor/credentials.ts +14 -0
  147. package/src/internal/deploy-client.ts +45 -4
  148. package/src/internal/deploy-source.ts +133 -0
  149. package/src/internal/discovery.ts +53 -16
  150. package/src/internal/eval-run-store.ts +2 -1
  151. package/src/internal/eval-runner.ts +5 -0
  152. package/src/internal/event-mapper.ts +222 -42
  153. package/src/internal/init-project.ts +333 -51
  154. package/src/internal/install-cursor-skills.ts +327 -0
  155. package/src/internal/logs-client.ts +442 -0
  156. package/src/internal/open-browser.ts +41 -0
  157. package/src/internal/playground/toolchain.ts +15 -13
  158. package/src/internal/playground-proxy.ts +576 -0
  159. package/src/internal/prompt-context.ts +95 -0
  160. package/src/internal/request-headers.ts +23 -0
  161. package/src/internal/resolve-prod-target.ts +150 -0
  162. package/src/internal/run-client.ts +39 -36
  163. package/src/internal/server.ts +12 -3
  164. package/src/internal/session-engine.ts +22 -3
  165. package/src/internal/sessions-client.ts +182 -0
  166. package/src/internal/stream-progress.ts +36 -2
  167. package/src/internal/terminal-style.ts +74 -0
  168. package/src/internal/trajectory.ts +91 -13
  169. package/src/internal/workspace.ts +42 -4
  170. package/src/types.ts +42 -6
  171. package/dist/docs/assets/chunks/@localSearchIndexroot.zwQ9RCQ7.js +0 -1
  172. package/dist/playground/assets/index-B1Qc9h2u.css +0 -1
  173. package/dist/playground/assets/index-CpDYCj8W.js +0 -79
  174. /package/dist/docs/assets/{quickstart.md.CfU8_uTC.lean.js → quickstart.md.BU6Iwi_9.lean.js} +0 -0
@@ -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
  }
@@ -18,6 +18,17 @@ export interface MaterializeWorkspaceOptions {
18
18
  }
19
19
  /** Relative path of an agent-side tool script inside the session workspace. */
20
20
  export declare function agentToolScriptPath(toolName: string): string;
21
+ /**
22
+ * Always-on identity line prepended when composing instructions. Sourced from
23
+ * {@link ResolvedAgent.name} (`defineAgent({ name })`, else package/dir name)
24
+ * so agents know who they are without restating it in authored prose.
25
+ */
26
+ export declare function buildIdentityPreamble(name: string): string;
27
+ /**
28
+ * Prepend {@link buildIdentityPreamble} to authored instructions. Used when
29
+ * loading `instructions.md` / `.ts` / dir into {@link ResolvedAgent.instructions}.
30
+ */
31
+ export declare function withIdentityPreamble(name: string, instructions: string | undefined): string | undefined;
21
32
  /**
22
33
  * Markdown catalog of agent-side tools for AGENTS.md / cloud first prompt.
23
34
  *
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/internal/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACd,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;CACf;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAA8B,GAC/D,MAAM,CA6CR;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAmCf;AAmDD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAO3D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAMf"}
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/internal/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACd,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;CACf;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,MAAM,GAAG,SAAS,CAapB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAA8B,GAC/D,MAAM,CA6CR;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAqCf;AAmDD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAO3D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -18,10 +18,42 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
18
18
  import { chmod, copyFile, mkdir, stat, writeFile } from "node:fs/promises";
19
19
  import { dirname, join, relative, resolve } from "node:path";
20
20
  import { parseFrontmatter, serializeFrontmatter } from "./frontmatter.js";
21
+ import { buildIdentitySection } from "./prompt-context.js";
21
22
  /** Relative path of an agent-side tool script inside the session workspace. */
22
23
  export function agentToolScriptPath(toolName) {
23
24
  return `.agent-serve/tools/${toolName}.sh`;
24
25
  }
26
+ /**
27
+ * Always-on identity line prepended when composing instructions. Sourced from
28
+ * {@link ResolvedAgent.name} (`defineAgent({ name })`, else package/dir name)
29
+ * so agents know who they are without restating it in authored prose.
30
+ */
31
+ export function buildIdentityPreamble(name) {
32
+ const trimmed = name.trim();
33
+ if (trimmed === "") {
34
+ return "";
35
+ }
36
+ return `You are ${trimmed}. That is your name; use it when people ask who you are.`;
37
+ }
38
+ /**
39
+ * Prepend {@link buildIdentityPreamble} to authored instructions. Used when
40
+ * loading `instructions.md` / `.ts` / dir into {@link ResolvedAgent.instructions}.
41
+ */
42
+ export function withIdentityPreamble(name, instructions) {
43
+ var _a;
44
+ const preamble = buildIdentityPreamble(name);
45
+ const body = (_a = instructions === null || instructions === void 0 ? void 0 : instructions.trim()) !== null && _a !== void 0 ? _a : "";
46
+ if (preamble === "" && body === "") {
47
+ return undefined;
48
+ }
49
+ if (preamble === "") {
50
+ return body === "" ? undefined : body;
51
+ }
52
+ if (body === "") {
53
+ return preamble;
54
+ }
55
+ return `${preamble}\n\n${body}`;
56
+ }
25
57
  /**
26
58
  * Markdown catalog of agent-side tools for AGENTS.md / cloud first prompt.
27
59
  *
@@ -80,12 +112,14 @@ export function materializeWorkspace(options) {
80
112
  const agentToolsSection = buildAgentToolsCatalog(agent.tools, {
81
113
  includeScripts: false,
82
114
  });
83
- const agentsMd = [(_b = (_a = agent.instructions) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : "", agentToolsSection]
115
+ const agentsMd = [
116
+ (_b = (_a = agent.instructions) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : "",
117
+ buildIdentitySection(agent),
118
+ agentToolsSection,
119
+ ]
84
120
  .filter((part) => part !== "")
85
121
  .join("\n\n");
86
- if (agentsMd !== "") {
87
- yield writeFile(join(workspaceDir, "AGENTS.md"), agentsMd, "utf8");
88
- }
122
+ yield writeFile(join(workspaceDir, "AGENTS.md"), agentsMd, "utf8");
89
123
  for (const tool of agent.tools) {
90
124
  if (tool.execution !== "agent" || tool.script === undefined) {
91
125
  continue;