neoctl 0.1.4 → 0.1.6

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 (69) hide show
  1. package/README.md +369 -151
  2. package/dist/agents/smoke-agents.js +21 -4
  3. package/dist/agents/smoke-agents.js.map +1 -1
  4. package/dist/core/query-engine.d.ts +20 -1
  5. package/dist/core/query-engine.js +86 -12
  6. package/dist/core/query-engine.js.map +1 -1
  7. package/dist/core/query.d.ts +2 -1
  8. package/dist/core/query.js +2 -0
  9. package/dist/core/query.js.map +1 -1
  10. package/dist/core/smoke-core-loop.js +19 -3
  11. package/dist/core/smoke-core-loop.js.map +1 -1
  12. package/dist/index.d.ts +0 -1
  13. package/dist/index.js +0 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/model/communication-logger.d.ts +2 -1
  16. package/dist/model/communication-logger.js +3 -0
  17. package/dist/model/communication-logger.js.map +1 -1
  18. package/dist/model/config.d.ts +7 -4
  19. package/dist/model/config.js +41 -12
  20. package/dist/model/config.js.map +1 -1
  21. package/dist/model/deepseek-adapter.d.ts +29 -0
  22. package/dist/model/deepseek-adapter.js +108 -0
  23. package/dist/model/deepseek-adapter.js.map +1 -0
  24. package/dist/model/env.js +25 -13
  25. package/dist/model/env.js.map +1 -1
  26. package/dist/model/model-metadata.json +677 -677
  27. package/dist/model/openai-adapter.d.ts +1 -1
  28. package/dist/model/openai-chat-mapper.d.ts +3 -1
  29. package/dist/model/openai-chat-mapper.js +26 -8
  30. package/dist/model/openai-chat-mapper.js.map +1 -1
  31. package/dist/model/openai-mappers.d.ts +5 -2
  32. package/dist/model/openai-mappers.js +17 -4
  33. package/dist/model/openai-mappers.js.map +1 -1
  34. package/dist/model/openai-responses-mapper.d.ts +1 -1
  35. package/dist/model/openai-responses-mapper.js +2 -1
  36. package/dist/model/openai-responses-mapper.js.map +1 -1
  37. package/dist/model/provider-factory.js +16 -0
  38. package/dist/model/provider-factory.js.map +1 -1
  39. package/dist/model/smoke-deepseek-mapper.d.ts +1 -0
  40. package/dist/model/smoke-deepseek-mapper.js +65 -0
  41. package/dist/model/smoke-deepseek-mapper.js.map +1 -0
  42. package/dist/model/smoke-openai.js +1 -1
  43. package/dist/model/smoke-openai.js.map +1 -1
  44. package/dist/model/smoke-responses-mapper.js +6 -6
  45. package/dist/model/smoke-responses-mapper.js.map +1 -1
  46. package/dist/repl/commands.d.ts +5 -0
  47. package/dist/repl/commands.js +6 -0
  48. package/dist/repl/commands.js.map +1 -1
  49. package/dist/repl/index.js +542 -40
  50. package/dist/repl/index.js.map +1 -1
  51. package/dist/repl/render.js +0 -2
  52. package/dist/repl/render.js.map +1 -1
  53. package/dist/repl/status-line.d.ts +0 -1
  54. package/dist/repl/status-line.js +27 -34
  55. package/dist/repl/status-line.js.map +1 -1
  56. package/dist/session/session-export.d.ts +33 -0
  57. package/dist/session/session-export.js +351 -0
  58. package/dist/session/session-export.js.map +1 -0
  59. package/dist/session/smoke-session.js +22 -1
  60. package/dist/session/smoke-session.js.map +1 -1
  61. package/dist/skills/smoke-skills.js +1 -1
  62. package/dist/tools/builtins/search-providers.d.ts +15 -1
  63. package/dist/tools/builtins/search-providers.js +195 -1
  64. package/dist/tools/builtins/search-providers.js.map +1 -1
  65. package/dist/tools/builtins/search-tool.js +2 -2
  66. package/dist/tools/builtins/search-tool.js.map +1 -1
  67. package/dist/tools/smoke-tool-system.js +43 -9
  68. package/dist/tools/smoke-tool-system.js.map +1 -1
  69. package/package.json +50 -49
@@ -6,8 +6,6 @@ export function renderEvent(event) {
6
6
  return undefined;
7
7
  case "assistant.delta":
8
8
  return event.text;
9
- case "thinking.delta":
10
- return `thinking> ${event.text}`;
11
9
  case "message":
12
10
  return event.message.blocks
13
11
  .map((block) => {
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/repl/render.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpF,KAAK,iBAAiB;YACpB,OAAO,SAAS,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,KAAK,gBAAgB;YACnB,OAAO,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM;iBACxB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACb,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBACrE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,OAAO,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChE,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;oBAAE,OAAO,eAAe,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtG,OAAO,YAAY,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/C,KAAK,eAAe;YAClB,OAAO,kBAAkB,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC;QAChF,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,mCAAmC,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9G,KAAK,UAAU;YACb,OAAO,aAAa,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChF,KAAK,OAAO;YACV,OAAO,UAAU,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,KAAK,CAAC,UAAU,CAAC;SACjB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/repl/render.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpF,KAAK,iBAAiB;YACpB,OAAO,SAAS,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM;iBACxB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACb,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBACrE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,OAAO,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChE,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;oBAAE,OAAO,eAAe,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtG,OAAO,YAAY,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/C,KAAK,eAAe;YAClB,OAAO,kBAAkB,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC;QAChF,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,mCAAmC,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9G,KAAK,UAAU;YACb,OAAO,aAAa,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChF,KAAK,OAAO;YACV,OAAO,UAAU,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,KAAK,CAAC,UAAU,CAAC;SACjB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
@@ -8,7 +8,6 @@ export declare class ReplStatusLine {
8
8
  private lastUsage?;
9
9
  private outputTokensStreamed;
10
10
  private visible;
11
- private pulseFrame;
12
11
  constructor(output: Writable & {
13
12
  isTTY?: boolean;
14
13
  });
@@ -7,7 +7,6 @@ export class ReplStatusLine {
7
7
  lastUsage;
8
8
  outputTokensStreamed = 0;
9
9
  visible = false;
10
- pulseFrame = 0;
11
10
  constructor(output) {
12
11
  this.output = output;
13
12
  }
@@ -56,20 +55,17 @@ export class ReplStatusLine {
56
55
  const context = renderContext(this.metrics);
57
56
  const model = this.metrics?.model ?? "model?";
58
57
  const source = this.metrics?.contextWindowSource ?? "unknown";
59
- const detail = this.lastDetail ? ` - ${this.lastDetail}` : "";
58
+ const detail = this.lastDetail ? ` ${this.lastDetail}` : "";
60
59
  const width = terminalWidth(this.output);
61
- const label = animatedPhaseLabel(this.phase, this.pulseFrame);
62
- if (isActivePhase(this.phase))
63
- this.pulseFrame += 1;
64
60
  const fixedPrefix = [
65
- fixed(label, 12, "left"),
66
- contextMeter(this.metrics, 10),
67
- `model ${fixed(truncateMiddle(model, 20), 20, "left")}`,
68
- `in ${fixed(formatCompact(input), 7, "left")}`,
69
- `out ${fixed(formatCompact(output), 7, "left")}`,
70
- `ctx ${fixed(context, 20, "left")}`,
71
- `src ${fixed(source, 7, "left")}`,
72
- ].join(" ");
61
+ statusIndicator(this.phase),
62
+ fixed(phaseLabel(this.phase), 10, "left"),
63
+ `MDL ${fixed(truncateMiddle(model, 20), 20, "left")}`,
64
+ `IN ${fixed(formatCompact(input), 7, "left")}`,
65
+ `OUT ${fixed(formatCompact(output), 7, "left")}`,
66
+ `CTX ${fixed(context, 20, "left")}`,
67
+ `SRC ${fixed(source, 7, "left")}`,
68
+ ].join(" | ");
73
69
  return fitToWidth(`${fixedPrefix}${detail}`, width);
74
70
  }
75
71
  }
@@ -106,11 +102,24 @@ function trimFixed(value) {
106
102
  function terminalWidth(output) {
107
103
  return Math.max(72, Math.min(output.columns ?? 100, 160)) - 1;
108
104
  }
109
- function animatedPhaseLabel(phase, tick) {
110
- const label = phaseLabel(phase).toUpperCase();
111
- if (!isActivePhase(phase))
112
- return label;
113
- return `${label}${STATUS_PULSE_FRAMES[tick % STATUS_PULSE_FRAMES.length]}`;
105
+ function statusIndicator(phase) {
106
+ if (phase === "ready")
107
+ return "[=]";
108
+ if (phase === "calling_model")
109
+ return "[>]";
110
+ if (phase === "running_tools")
111
+ return "[*]";
112
+ if (phase === "compacting")
113
+ return "[#]";
114
+ if (phase === "preparing")
115
+ return "[.]";
116
+ if (phase === "injecting_context")
117
+ return "[+]";
118
+ if (phase === "stopped")
119
+ return "[-]";
120
+ if (phase === "failed")
121
+ return "[x]";
122
+ return "[~]";
114
123
  }
115
124
  function phaseLabel(phase) {
116
125
  if (phase === "calling_model")
@@ -121,21 +130,6 @@ function phaseLabel(phase) {
121
130
  return "context";
122
131
  return phase;
123
132
  }
124
- function isActivePhase(phase) {
125
- return phase === "running" ||
126
- phase === "preparing" ||
127
- phase === "calling_model" ||
128
- phase === "running_tools" ||
129
- phase === "compacting" ||
130
- phase === "injecting_context";
131
- }
132
- function contextMeter(metrics, width) {
133
- if (!metrics || metrics.contextUsageRatio === undefined)
134
- return `[${"-".repeat(width)}]`;
135
- const ratio = Math.max(0, Math.min(1, metrics.contextUsageRatio));
136
- const filled = Math.min(width, Math.max(0, Math.round(ratio * width)));
137
- return `[${"#".repeat(filled)}${"-".repeat(width - filled)}]`;
138
- }
139
133
  function fixed(value, width, align = "right") {
140
134
  const clipped = value.length > width ? value.slice(0, width) : value;
141
135
  return align === "left" ? clipped.padEnd(width, " ") : clipped.padStart(width, " ");
@@ -156,5 +150,4 @@ function truncateMiddle(value, maxLength) {
156
150
  const right = Math.floor((maxLength - 3) / 2);
157
151
  return `${value.slice(0, left)}...${value.slice(value.length - right)}`;
158
152
  }
159
- const STATUS_PULSE_FRAMES = ["", ".", "..", "..."];
160
153
  //# sourceMappingURL=status-line.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/repl/status-line.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status-line.js","sourceRoot":"","sources":["../../src/repl/status-line.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AAKrC,MAAM,OAAO,cAAc;IAQI;IAPrB,KAAK,GAAG,OAAO,CAAC;IAChB,UAAU,GAAG,EAAE,CAAC;IAChB,OAAO,CAAkB;IACzB,SAAS,CAAc;IACvB,oBAAoB,GAAG,CAAC,CAAC;IACzB,OAAO,GAAG,KAAK,CAAC;IAExB,YAA6B,MAAsC;QAAtC,WAAM,GAAN,MAAM,CAAgC;IAAG,CAAC;IAEvE,MAAM,CAAC,KAAiB;QACtB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBAChC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC3B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC/B,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACrC,IAAI,CAAC,oBAAoB,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO;QAChD,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,UAAU;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;QAChF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,IAAI,IAAI,CAAC,oBAAoB,CAAC;QACzE,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,QAAQ,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,mBAAmB,IAAI,SAAS,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG;YAClB,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC;YACzC,OAAO,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE;YACrD,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE;YAC9C,OAAO,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE;YAChD,OAAO,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE;YACnC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE;SAClC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,OAAO,UAAU,CAAC,GAAG,WAAW,GAAG,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;CACF;AAED,SAAS,aAAa,CAAC,OAAmC;IACxD,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzD,IAAI,CAAC,OAAO,CAAC,mBAAmB;QAAE,OAAO,GAAG,IAAI,IAAI,CAAC;IACrD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACnH,OAAO,GAAG,IAAI,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,aAAa,CAAC,KAAyB;IAC9C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,IAAI,OAAO,IAAI,SAAS;QAAE,OAAO,GAAG,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC;IACtE,IAAI,OAAO,IAAI,MAAM;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IAC/D,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,GAAG,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;IAC5D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,aAAa,CAAC,MAAuC;IAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,KAAK,KAAK,eAAe;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,KAAK,eAAe;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,KAAK,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,KAAK,KAAK,mBAAmB;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,KAAK,eAAe;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,KAAK,KAAK,eAAe;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,KAAK,KAAK,mBAAmB;QAAE,OAAO,SAAS,CAAC;IACpD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,KAAa,EAAE,QAA0B,OAAO;IAC5E,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrE,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,KAAa;IAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,SAAiB;IACtD,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { SessionStoreSnapshot } from "./session-store.js";
2
+ export interface SessionPromptExportSnapshot {
3
+ model?: string;
4
+ fallbackModel?: string;
5
+ reasoning?: unknown;
6
+ systemPrompt?: string;
7
+ baseSystemPrompt?: string;
8
+ promptSections?: unknown;
9
+ userContext?: unknown;
10
+ systemContext?: unknown;
11
+ userContextPrompt?: string;
12
+ toolDefinitions?: unknown;
13
+ commands?: readonly string[];
14
+ agents?: readonly string[];
15
+ skills?: readonly string[];
16
+ plugins?: readonly string[];
17
+ }
18
+ export interface SessionMarkdownExportOptions {
19
+ outputPath: string;
20
+ session: SessionStoreSnapshot;
21
+ agentId?: string;
22
+ promptSnapshot?: SessionPromptExportSnapshot;
23
+ engineSnapshot?: unknown;
24
+ exportedAt?: string;
25
+ maxToolResultLines?: number;
26
+ }
27
+ export interface SessionMarkdownExportResult {
28
+ outputPath: string;
29
+ bytes: number;
30
+ entries: number;
31
+ messages: number;
32
+ }
33
+ export declare function writeSessionMarkdownExport(options: SessionMarkdownExportOptions): Promise<SessionMarkdownExportResult>;
@@ -0,0 +1,351 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { PERSISTED_OUTPUT_TAG } from "./tool-result-memory.js";
4
+ const DEFAULT_MAX_TOOL_RESULT_LINES = 500;
5
+ export async function writeSessionMarkdownExport(options) {
6
+ const outputPath = normalizeOutputPath(options.outputPath);
7
+ const entries = await readTranscriptEntries(options.session.transcriptPath);
8
+ const markdown = await renderSessionMarkdown({
9
+ ...options,
10
+ outputPath,
11
+ entries,
12
+ exportedAt: options.exportedAt ?? new Date().toISOString(),
13
+ maxToolResultLines: options.maxToolResultLines ?? DEFAULT_MAX_TOOL_RESULT_LINES,
14
+ });
15
+ await ensureOutputParentDirectory(outputPath);
16
+ await fs.writeFile(outputPath, markdown, "utf8");
17
+ const stat = await fs.stat(outputPath);
18
+ return {
19
+ outputPath,
20
+ bytes: stat.size,
21
+ entries: entries.length,
22
+ messages: entries.filter((line) => line.ok && line.entry.type === "message").length,
23
+ };
24
+ }
25
+ function normalizeOutputPath(rawPath) {
26
+ const unquoted = stripSurroundingQuotes(rawPath.trim());
27
+ if (!unquoted)
28
+ throw new Error("/export requires an absolute markdown file path");
29
+ if (!path.isAbsolute(unquoted))
30
+ throw new Error(`/export requires an absolute path: ${rawPath}`);
31
+ return path.resolve(unquoted);
32
+ }
33
+ function stripSurroundingQuotes(value) {
34
+ if (value.length >= 2) {
35
+ const first = value[0];
36
+ const last = value[value.length - 1];
37
+ if ((first === '"' && last === '"') || (first === "'" && last === "'"))
38
+ return value.slice(1, -1);
39
+ }
40
+ return value;
41
+ }
42
+ async function ensureOutputParentDirectory(outputPath) {
43
+ const directory = path.dirname(outputPath);
44
+ const parsed = path.parse(outputPath);
45
+ if (directory === parsed.root)
46
+ return;
47
+ await fs.mkdir(directory, { recursive: true });
48
+ }
49
+ async function readTranscriptEntries(transcriptPath) {
50
+ const text = await fs.readFile(transcriptPath, "utf8");
51
+ const entries = [];
52
+ const lines = text.split(/\r?\n/);
53
+ for (let index = 0; index < lines.length; index += 1) {
54
+ const raw = lines[index];
55
+ if (!raw.trim())
56
+ continue;
57
+ try {
58
+ entries.push({ lineNumber: index + 1, ok: true, entry: JSON.parse(raw) });
59
+ }
60
+ catch (error) {
61
+ entries.push({
62
+ lineNumber: index + 1,
63
+ ok: false,
64
+ raw,
65
+ error: error instanceof Error ? error.message : String(error),
66
+ });
67
+ }
68
+ }
69
+ return entries;
70
+ }
71
+ async function renderSessionMarkdown(input) {
72
+ const lines = [];
73
+ const title = input.session.title ? ` — ${input.session.title}` : "";
74
+ lines.push(`# Neo Session Export${title}`);
75
+ lines.push("");
76
+ lines.push("## Export Metadata");
77
+ lines.push(`- Exported at: ${input.exportedAt}`);
78
+ lines.push(`- Agent: ${input.agentId ?? "<unknown>"}`);
79
+ lines.push(`- Session ID: ${input.session.sessionId}`);
80
+ if (input.session.title)
81
+ lines.push(`- Session title: ${input.session.title}`);
82
+ if (input.session.titleKind)
83
+ lines.push(`- Session title kind: ${input.session.titleKind}`);
84
+ lines.push(`- Session directory: ${inlineCode(input.session.sessionDir)}`);
85
+ lines.push(`- Transcript: ${inlineCode(input.session.transcriptPath)}`);
86
+ lines.push(`- Export file: ${inlineCode(input.outputPath)}`);
87
+ lines.push(`- Transcript entries: ${input.entries.length}`);
88
+ lines.push(`- Messages: ${input.entries.filter((line) => line.ok && line.entry.type === "message").length}`);
89
+ lines.push(`- Tool result display cap: ${input.maxToolResultLines} lines per tool result`);
90
+ lines.push("");
91
+ renderPromptSnapshot(lines, input.promptSnapshot);
92
+ renderJsonSection(lines, "Engine Snapshot", input.engineSnapshot);
93
+ lines.push("---");
94
+ lines.push("");
95
+ lines.push("## Transcript");
96
+ lines.push("");
97
+ for (let index = 0; index < input.entries.length; index += 1) {
98
+ const line = input.entries[index];
99
+ lines.push("---");
100
+ lines.push("");
101
+ lines.push(`## Entry ${index + 1} (transcript line ${line.lineNumber})`);
102
+ lines.push("");
103
+ if (!line.ok) {
104
+ lines.push("- Type: malformed JSONL entry");
105
+ lines.push(`- Error: ${line.error}`);
106
+ lines.push("");
107
+ lines.push(fenced(line.raw, "json"));
108
+ lines.push("");
109
+ continue;
110
+ }
111
+ await renderTranscriptEntry(lines, line.entry, input.session.sessionDir, input.maxToolResultLines);
112
+ }
113
+ return `${lines.join("\n").replace(/[ \t]+$/gm, "")}\n`;
114
+ }
115
+ function renderPromptSnapshot(lines, snapshot) {
116
+ lines.push("## Prompt Context Snapshot");
117
+ lines.push("");
118
+ if (!snapshot) {
119
+ lines.push("No prompt context snapshot was available at export time.");
120
+ lines.push("");
121
+ return;
122
+ }
123
+ lines.push("### Model Settings");
124
+ lines.push(`- Model: ${snapshot.model ?? "<default>"}`);
125
+ lines.push(`- Fallback model: ${snapshot.fallbackModel ?? "<none>"}`);
126
+ lines.push(`- Reasoning: ${formatInlineValue(snapshot.reasoning ?? "<default>")}`);
127
+ lines.push("");
128
+ if (snapshot.systemPrompt !== undefined) {
129
+ lines.push("### Effective System Prompt");
130
+ lines.push("");
131
+ lines.push(fenced(snapshot.systemPrompt, "text"));
132
+ lines.push("");
133
+ }
134
+ if (snapshot.baseSystemPrompt !== undefined && snapshot.baseSystemPrompt !== snapshot.systemPrompt) {
135
+ lines.push("### Base System Prompt (before runtime system context)");
136
+ lines.push("");
137
+ lines.push(fenced(snapshot.baseSystemPrompt, "text"));
138
+ lines.push("");
139
+ }
140
+ if (snapshot.userContextPrompt !== undefined) {
141
+ lines.push("### Injected User Context Prompt");
142
+ lines.push("");
143
+ lines.push(fenced(snapshot.userContextPrompt, "text"));
144
+ lines.push("");
145
+ }
146
+ renderJsonSection(lines, "Prompt Sections", snapshot.promptSections);
147
+ renderJsonSection(lines, "System Context", snapshot.systemContext);
148
+ renderJsonSection(lines, "User Context", snapshot.userContext);
149
+ renderJsonSection(lines, "Tool Definitions", snapshot.toolDefinitions);
150
+ renderJsonSection(lines, "REPL Commands", snapshot.commands);
151
+ renderJsonSection(lines, "Agents", snapshot.agents);
152
+ renderJsonSection(lines, "Skills", snapshot.skills);
153
+ renderJsonSection(lines, "Plugins", snapshot.plugins);
154
+ }
155
+ function renderJsonSection(lines, title, value) {
156
+ if (value === undefined)
157
+ return;
158
+ lines.push(`### ${title}`);
159
+ lines.push("");
160
+ lines.push(fenced(stableStringify(value), "json"));
161
+ lines.push("");
162
+ }
163
+ async function renderTranscriptEntry(lines, entry, sessionDir, maxToolResultLines) {
164
+ lines.push(`- Type: ${entry.type}`);
165
+ lines.push(`- Agent: ${"agentId" in entry ? entry.agentId : "<unknown>"}`);
166
+ lines.push(`- Session: ${"sessionId" in entry ? entry.sessionId : "<unknown>"}`);
167
+ if (entry.type === "message") {
168
+ renderMessageHeader(lines, entry.message);
169
+ for (let index = 0; index < entry.message.blocks.length; index += 1) {
170
+ await renderMessageBlock(lines, entry.message.blocks[index], index + 1, sessionDir, maxToolResultLines);
171
+ }
172
+ return;
173
+ }
174
+ if (entry.type === "content-replacement") {
175
+ lines.push("");
176
+ lines.push("### Content Replacements");
177
+ lines.push("");
178
+ lines.push(fenced(stableStringify(entry.replacements), "json"));
179
+ lines.push("");
180
+ return;
181
+ }
182
+ if (entry.type === "title") {
183
+ lines.push(`- Created at: ${entry.createdAt}`);
184
+ lines.push(`- Kind: ${entry.kind ?? "initial"}`);
185
+ lines.push(`- Title: ${entry.title}`);
186
+ lines.push("");
187
+ return;
188
+ }
189
+ if (entry.type === "compact" || entry.type === "reset") {
190
+ lines.push(`- Created at: ${entry.createdAt}`);
191
+ lines.push("");
192
+ }
193
+ }
194
+ function renderMessageHeader(lines, message) {
195
+ lines.push(`- Message role: ${message.role}`);
196
+ lines.push(`- Message ID: ${message.id}`);
197
+ lines.push(`- Created at: ${message.createdAt}`);
198
+ if (message.providerMessageId)
199
+ lines.push(`- Provider message ID: ${message.providerMessageId}`);
200
+ if (message.requestId)
201
+ lines.push(`- Request ID: ${message.requestId}`);
202
+ if (message.isMeta !== undefined)
203
+ lines.push(`- Meta message: ${message.isMeta}`);
204
+ if (message.isApiErrorMessage !== undefined)
205
+ lines.push(`- API error message: ${message.isApiErrorMessage}`);
206
+ if (message.usage !== undefined) {
207
+ lines.push("- Usage:");
208
+ lines.push(indentBlock(stableStringify(message.usage), " "));
209
+ }
210
+ if (message.metadata !== undefined) {
211
+ lines.push("- Metadata:");
212
+ lines.push(indentBlock(stableStringify(message.metadata), " "));
213
+ }
214
+ lines.push("");
215
+ }
216
+ async function renderMessageBlock(lines, block, index, sessionDir, maxToolResultLines) {
217
+ lines.push(`### Block ${index}: ${block.type}`);
218
+ lines.push("");
219
+ if (block.type === "text") {
220
+ lines.push(fenced(block.text, "text"));
221
+ lines.push("");
222
+ return;
223
+ }
224
+ if (block.type === "thinking") {
225
+ lines.push("Stored model thinking/reasoning block:");
226
+ if (block.signature)
227
+ lines.push(`- Signature: ${block.signature}`);
228
+ lines.push("");
229
+ lines.push(fenced(block.text, "text"));
230
+ lines.push("");
231
+ return;
232
+ }
233
+ if (block.type === "tool_use") {
234
+ lines.push(`- Tool: ${block.name}`);
235
+ lines.push(`- Tool use ID: ${block.id}`);
236
+ lines.push("");
237
+ lines.push("Input:");
238
+ lines.push(fenced(stableStringify(block.input), "json"));
239
+ lines.push("");
240
+ return;
241
+ }
242
+ if (block.type === "tool_result") {
243
+ lines.push(`- Tool: ${block.name}`);
244
+ lines.push(`- Tool use ID: ${block.toolUseId}`);
245
+ lines.push(`- OK: ${block.ok}`);
246
+ lines.push("");
247
+ const output = await renderToolResultOutput(block.output, sessionDir, maxToolResultLines);
248
+ if (output.sourcePath)
249
+ lines.push(`- Persisted full output source: ${inlineCode(output.sourcePath)}`);
250
+ if (output.truncated)
251
+ lines.push(`- Truncated: showing first ${output.shownLines} of ${output.totalLines} lines`);
252
+ lines.push("Output:");
253
+ lines.push(fenced(output.text, output.language));
254
+ lines.push("");
255
+ return;
256
+ }
257
+ if (block.type === "image") {
258
+ lines.push(`- MIME type: ${block.mimeType}`);
259
+ if (block.label)
260
+ lines.push(`- Label: ${block.label}`);
261
+ lines.push(`- Data bytes (base64 chars): ${block.data.length}`);
262
+ lines.push("- Data omitted from markdown body for readability.");
263
+ lines.push("");
264
+ }
265
+ }
266
+ async function renderToolResultOutput(output, sessionDir, maxLines) {
267
+ const persistedPath = typeof output === "string" ? extractPersistedOutputPath(output) : undefined;
268
+ if (persistedPath) {
269
+ const sourcePath = path.isAbsolute(persistedPath) ? persistedPath : path.resolve(sessionDir, persistedPath);
270
+ const persisted = await fs.readFile(sourcePath, "utf8").catch(() => undefined);
271
+ if (persisted !== undefined) {
272
+ const text = maybePrettyJson(persisted);
273
+ const limited = limitLines(text, maxLines);
274
+ return { ...limited, language: looksLikeJson(text) ? "json" : "text", sourcePath };
275
+ }
276
+ }
277
+ const text = typeof output === "string" ? output : stableStringify(output);
278
+ const limited = limitLines(text, maxLines);
279
+ return { ...limited, language: typeof output === "string" && !looksLikeJson(text) ? "text" : "json", sourcePath: persistedPath };
280
+ }
281
+ function extractPersistedOutputPath(output) {
282
+ if (!output.startsWith(PERSISTED_OUTPUT_TAG))
283
+ return undefined;
284
+ const match = /^Output too large \([^\n]+\)\. Full output saved to:\s*(.+)$/m.exec(output);
285
+ return match?.[1]?.trim();
286
+ }
287
+ function maybePrettyJson(text) {
288
+ if (!looksLikeJson(text))
289
+ return text;
290
+ try {
291
+ return stableStringify(JSON.parse(text));
292
+ }
293
+ catch {
294
+ return text;
295
+ }
296
+ }
297
+ function looksLikeJson(text) {
298
+ const trimmed = text.trimStart();
299
+ return trimmed.startsWith("{") || trimmed.startsWith("[");
300
+ }
301
+ function limitLines(text, maxLines) {
302
+ const lines = text.split(/\r?\n/);
303
+ if (lines.length <= maxLines)
304
+ return { text, truncated: false, shownLines: lines.length, totalLines: lines.length };
305
+ return {
306
+ text: lines.slice(0, maxLines).join("\n"),
307
+ truncated: true,
308
+ shownLines: maxLines,
309
+ totalLines: lines.length,
310
+ };
311
+ }
312
+ function fenced(content, language) {
313
+ const fence = chooseFence(content);
314
+ return `${fence}${language}\n${content}\n${fence}`;
315
+ }
316
+ function chooseFence(content) {
317
+ const matches = content.match(/`{3,}/g) ?? [];
318
+ const max = matches.reduce((value, match) => Math.max(value, match.length), 2);
319
+ return "`".repeat(max + 1);
320
+ }
321
+ function inlineCode(value) {
322
+ return `\`${value.replace(/`/g, "\\`")}\``;
323
+ }
324
+ function indentBlock(value, prefix) {
325
+ return value.split(/\r?\n/).map((line) => `${prefix}${line}`).join("\n");
326
+ }
327
+ function formatInlineValue(value) {
328
+ if (typeof value === "string")
329
+ return value;
330
+ return inlineCode(stableStringify(value));
331
+ }
332
+ function stableStringify(value) {
333
+ const seen = new WeakSet();
334
+ return JSON.stringify(value, (_key, nested) => {
335
+ if (typeof nested === "bigint")
336
+ return nested.toString();
337
+ if (typeof nested === "function")
338
+ return `[Function ${nested.name || "anonymous"}]`;
339
+ if (nested instanceof Set)
340
+ return [...nested];
341
+ if (nested instanceof Map)
342
+ return Object.fromEntries(nested.entries());
343
+ if (nested && typeof nested === "object") {
344
+ if (seen.has(nested))
345
+ return "[Circular]";
346
+ seen.add(nested);
347
+ }
348
+ return nested;
349
+ }, 2);
350
+ }
351
+ //# sourceMappingURL=session-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-export.js","sourceRoot":"","sources":["../../src/session/session-export.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { FileToolResultMemory, PERSISTED_OUTPUT_TAG } from "./tool-result-memory.js";
5
5
  import { SessionStore } from "./session-store.js";
6
+ import { writeSessionMarkdownExport } from "./session-export.js";
6
7
  async function main() {
7
8
  const root = await fs.mkdtemp(path.join(os.tmpdir(), "agent-session-smoke-"));
8
9
  const sessionId = "smoke-session";
@@ -22,6 +23,21 @@ async function main() {
22
23
  const latest = await SessionStore.open({ agentId: "main", rootDir: root, resume: true });
23
24
  const listed = await SessionStore.list({ agentId: "main", rootDir: root });
24
25
  const resumedBudget = await resumed.toolResultMemory.applyBudget(resumed.getInitialMessages(), { maxSerializedLength: 180 });
26
+ const exportPath = path.join(root, "exports", "session.md");
27
+ const exportResult = await writeSessionMarkdownExport({
28
+ outputPath: exportPath,
29
+ session: resumed.snapshot(),
30
+ agentId: "main",
31
+ promptSnapshot: {
32
+ model: "smoke-model",
33
+ systemPrompt: "system prompt smoke",
34
+ userContextPrompt: "User context:\ncurrentDate: 2026-05-09",
35
+ toolDefinitions: [{ name: "alpha", description: "Alpha tool", inputSchema: { type: "object" } }],
36
+ commands: ["/export <absolute-md-path>"],
37
+ },
38
+ maxToolResultLines: 3,
39
+ });
40
+ const exportedMarkdown = await fs.readFile(exportPath, "utf8");
25
41
  const afterReset = await SessionStore.open({ agentId: "main", rootDir: root, sessionId, resume: true });
26
42
  afterReset.reset();
27
43
  const resetResume = await SessionStore.open({ agentId: "main", rootDir: root, sessionId, resume: true });
@@ -45,10 +61,15 @@ async function main() {
45
61
  listed[0]?.title === "Refined Smoke Session Title" &&
46
62
  resumedBudget.records.length === 0 &&
47
63
  resumedBudget.messages.some((message) => message.blocks.some((block) => block.type === "tool_result" && String(block.output).startsWith(PERSISTED_OUTPUT_TAG))) &&
64
+ exportResult.bytes > 0 &&
65
+ exportedMarkdown.includes("# Neo Session Export") &&
66
+ exportedMarkdown.includes("system prompt smoke") &&
67
+ exportedMarkdown.includes("## Transcript") &&
68
+ exportedMarkdown.includes("Tool use ID: call_a") &&
48
69
  resetResume.snapshot().resumedMessages === 0 &&
49
70
  deleted &&
50
71
  listedAfterDelete.length === 0;
51
- console.log(JSON.stringify({ ok, firstRecords: first.records.length, persistedBlocks: persistedBlocks.length, resumed: resumed.snapshot(), latest: latest.snapshot(), listed, reset: resetResume.snapshot(), deleted, listedAfterDelete }, null, 2));
72
+ console.log(JSON.stringify({ ok, firstRecords: first.records.length, persistedBlocks: persistedBlocks.length, exportResult, resumed: resumed.snapshot(), latest: latest.snapshot(), listed, reset: resetResume.snapshot(), deleted, listedAfterDelete }, null, 2));
52
73
  if (!ok)
53
74
  process.exitCode = 1;
54
75
  }