@pcircle/footprint 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +225 -123
  3. package/SKILL.md +72 -28
  4. package/bin/footprint.js +16 -0
  5. package/dist/src/adapters/claude.d.ts +2 -0
  6. package/dist/src/adapters/claude.d.ts.map +1 -0
  7. package/dist/src/adapters/claude.js +7 -0
  8. package/dist/src/adapters/claude.js.map +1 -0
  9. package/dist/src/adapters/codex.d.ts +2 -0
  10. package/dist/src/adapters/codex.d.ts.map +1 -0
  11. package/dist/src/adapters/codex.js +7 -0
  12. package/dist/src/adapters/codex.js.map +1 -0
  13. package/dist/src/adapters/gemini.d.ts +2 -0
  14. package/dist/src/adapters/gemini.d.ts.map +1 -0
  15. package/dist/src/adapters/gemini.js +7 -0
  16. package/dist/src/adapters/gemini.js.map +1 -0
  17. package/dist/src/adapters/index.d.ts +5 -0
  18. package/dist/src/adapters/index.d.ts.map +1 -0
  19. package/dist/src/adapters/index.js +12 -0
  20. package/dist/src/adapters/index.js.map +1 -0
  21. package/dist/src/adapters/structured-prefix.d.ts +10 -0
  22. package/dist/src/adapters/structured-prefix.d.ts.map +1 -0
  23. package/dist/src/adapters/structured-prefix.js +59 -0
  24. package/dist/src/adapters/structured-prefix.js.map +1 -0
  25. package/dist/src/adapters/types.d.ts +32 -0
  26. package/dist/src/adapters/types.d.ts.map +1 -0
  27. package/dist/src/adapters/types.js +2 -0
  28. package/dist/src/adapters/types.js.map +1 -0
  29. package/dist/src/cli/context-flow.d.ts +92 -0
  30. package/dist/src/cli/context-flow.d.ts.map +1 -0
  31. package/dist/src/cli/context-flow.js +724 -0
  32. package/dist/src/cli/context-flow.js.map +1 -0
  33. package/dist/src/cli/history-display.d.ts +27 -0
  34. package/dist/src/cli/history-display.d.ts.map +1 -0
  35. package/dist/src/cli/history-display.js +167 -0
  36. package/dist/src/cli/history-display.js.map +1 -0
  37. package/dist/src/cli/index.js +924 -0
  38. package/dist/src/cli/index.js.map +1 -1
  39. package/dist/src/cli/launch-spec.d.ts +31 -0
  40. package/dist/src/cli/launch-spec.d.ts.map +1 -0
  41. package/dist/src/cli/launch-spec.js +182 -0
  42. package/dist/src/cli/launch-spec.js.map +1 -0
  43. package/dist/src/cli/live-demo.d.ts +34 -0
  44. package/dist/src/cli/live-demo.d.ts.map +1 -0
  45. package/dist/src/cli/live-demo.js +254 -0
  46. package/dist/src/cli/live-demo.js.map +1 -0
  47. package/dist/src/cli/pty-transcript.d.ts +34 -0
  48. package/dist/src/cli/pty-transcript.d.ts.map +1 -0
  49. package/dist/src/cli/pty-transcript.js +174 -0
  50. package/dist/src/cli/pty-transcript.js.map +1 -0
  51. package/dist/src/cli/session-display.d.ts +74 -0
  52. package/dist/src/cli/session-display.d.ts.map +1 -0
  53. package/dist/src/cli/session-display.js +922 -0
  54. package/dist/src/cli/session-display.js.map +1 -0
  55. package/dist/src/cli/session-execution.d.ts +55 -0
  56. package/dist/src/cli/session-execution.d.ts.map +1 -0
  57. package/dist/src/cli/session-execution.js +817 -0
  58. package/dist/src/cli/session-execution.js.map +1 -0
  59. package/dist/src/cli/session-runtime.d.ts +5 -0
  60. package/dist/src/cli/session-runtime.d.ts.map +1 -0
  61. package/dist/src/cli/session-runtime.js +11 -0
  62. package/dist/src/cli/session-runtime.js.map +1 -0
  63. package/dist/src/cli/setup.d.ts.map +1 -1
  64. package/dist/src/cli/setup.js +2 -0
  65. package/dist/src/cli/setup.js.map +1 -1
  66. package/dist/src/index.d.ts +4 -0
  67. package/dist/src/index.d.ts.map +1 -1
  68. package/dist/src/index.js +148 -7
  69. package/dist/src/index.js.map +1 -1
  70. package/dist/src/ingestion/deterministic.d.ts +3 -0
  71. package/dist/src/ingestion/deterministic.d.ts.map +1 -0
  72. package/dist/src/ingestion/deterministic.js +862 -0
  73. package/dist/src/ingestion/deterministic.js.map +1 -0
  74. package/dist/src/ingestion/index.d.ts +5 -0
  75. package/dist/src/ingestion/index.d.ts.map +1 -0
  76. package/dist/src/ingestion/index.js +27 -0
  77. package/dist/src/ingestion/index.js.map +1 -0
  78. package/dist/src/ingestion/semantic.d.ts +6 -0
  79. package/dist/src/ingestion/semantic.d.ts.map +1 -0
  80. package/dist/src/ingestion/semantic.js +627 -0
  81. package/dist/src/ingestion/semantic.js.map +1 -0
  82. package/dist/src/ingestion/types.d.ts +10 -0
  83. package/dist/src/ingestion/types.d.ts.map +1 -0
  84. package/dist/src/ingestion/types.js +2 -0
  85. package/dist/src/ingestion/types.js.map +1 -0
  86. package/dist/src/lib/context-memory.d.ts +140 -0
  87. package/dist/src/lib/context-memory.d.ts.map +1 -0
  88. package/dist/src/lib/context-memory.js +974 -0
  89. package/dist/src/lib/context-memory.js.map +1 -0
  90. package/dist/src/lib/history-handoff.d.ts +43 -0
  91. package/dist/src/lib/history-handoff.d.ts.map +1 -0
  92. package/dist/src/lib/history-handoff.js +179 -0
  93. package/dist/src/lib/history-handoff.js.map +1 -0
  94. package/dist/src/lib/observability.d.ts +3 -0
  95. package/dist/src/lib/observability.d.ts.map +1 -0
  96. package/dist/src/lib/observability.js +63 -0
  97. package/dist/src/lib/observability.js.map +1 -0
  98. package/dist/src/lib/session-artifacts.d.ts +51 -0
  99. package/dist/src/lib/session-artifacts.d.ts.map +1 -0
  100. package/dist/src/lib/session-artifacts.js +132 -0
  101. package/dist/src/lib/session-artifacts.js.map +1 -0
  102. package/dist/src/lib/session-filters.d.ts +11 -0
  103. package/dist/src/lib/session-filters.d.ts.map +1 -0
  104. package/dist/src/lib/session-filters.js +16 -0
  105. package/dist/src/lib/session-filters.js.map +1 -0
  106. package/dist/src/lib/session-history.d.ts +50 -0
  107. package/dist/src/lib/session-history.d.ts.map +1 -0
  108. package/dist/src/lib/session-history.js +73 -0
  109. package/dist/src/lib/session-history.js.map +1 -0
  110. package/dist/src/lib/session-trends.d.ts +129 -0
  111. package/dist/src/lib/session-trends.d.ts.map +1 -0
  112. package/dist/src/lib/session-trends.js +361 -0
  113. package/dist/src/lib/session-trends.js.map +1 -0
  114. package/dist/src/lib/storage/database.d.ts +212 -1
  115. package/dist/src/lib/storage/database.d.ts.map +1 -1
  116. package/dist/src/lib/storage/database.js +1694 -114
  117. package/dist/src/lib/storage/database.js.map +1 -1
  118. package/dist/src/lib/storage/export-sessions.d.ts +33 -0
  119. package/dist/src/lib/storage/export-sessions.d.ts.map +1 -0
  120. package/dist/src/lib/storage/export-sessions.js +525 -0
  121. package/dist/src/lib/storage/export-sessions.js.map +1 -0
  122. package/dist/src/lib/storage/index.d.ts +7 -6
  123. package/dist/src/lib/storage/index.d.ts.map +1 -1
  124. package/dist/src/lib/storage/index.js +6 -5
  125. package/dist/src/lib/storage/index.js.map +1 -1
  126. package/dist/src/lib/storage/schema.d.ts +6 -1
  127. package/dist/src/lib/storage/schema.d.ts.map +1 -1
  128. package/dist/src/lib/storage/schema.js +337 -2
  129. package/dist/src/lib/storage/schema.js.map +1 -1
  130. package/dist/src/lib/storage/types.d.ts +122 -0
  131. package/dist/src/lib/storage/types.d.ts.map +1 -1
  132. package/dist/src/prompts/skill-prompt.d.ts.map +1 -1
  133. package/dist/src/prompts/skill-prompt.js +13 -0
  134. package/dist/src/prompts/skill-prompt.js.map +1 -1
  135. package/dist/src/tools/confirm-context-link.d.ts +62 -0
  136. package/dist/src/tools/confirm-context-link.d.ts.map +1 -0
  137. package/dist/src/tools/confirm-context-link.js +36 -0
  138. package/dist/src/tools/confirm-context-link.js.map +1 -0
  139. package/dist/src/tools/context-schemas.d.ts +694 -0
  140. package/dist/src/tools/context-schemas.d.ts.map +1 -0
  141. package/dist/src/tools/context-schemas.js +171 -0
  142. package/dist/src/tools/context-schemas.js.map +1 -0
  143. package/dist/src/tools/export-sessions.d.ts +111 -0
  144. package/dist/src/tools/export-sessions.d.ts.map +1 -0
  145. package/dist/src/tools/export-sessions.js +136 -0
  146. package/dist/src/tools/export-sessions.js.map +1 -0
  147. package/dist/src/tools/get-context.d.ts +208 -0
  148. package/dist/src/tools/get-context.d.ts.map +1 -0
  149. package/dist/src/tools/get-context.js +27 -0
  150. package/dist/src/tools/get-context.js.map +1 -0
  151. package/dist/src/tools/get-history-handoff.d.ts +109 -0
  152. package/dist/src/tools/get-history-handoff.d.ts.map +1 -0
  153. package/dist/src/tools/get-history-handoff.js +85 -0
  154. package/dist/src/tools/get-history-handoff.js.map +1 -0
  155. package/dist/src/tools/get-history-trends.d.ts +155 -0
  156. package/dist/src/tools/get-history-trends.d.ts.map +1 -0
  157. package/dist/src/tools/get-history-trends.js +123 -0
  158. package/dist/src/tools/get-history-trends.js.map +1 -0
  159. package/dist/src/tools/get-session-artifacts.d.ts +151 -0
  160. package/dist/src/tools/get-session-artifacts.d.ts.map +1 -0
  161. package/dist/src/tools/get-session-artifacts.js +184 -0
  162. package/dist/src/tools/get-session-artifacts.js.map +1 -0
  163. package/dist/src/tools/get-session-decisions.d.ts +69 -0
  164. package/dist/src/tools/get-session-decisions.d.ts.map +1 -0
  165. package/dist/src/tools/get-session-decisions.js +99 -0
  166. package/dist/src/tools/get-session-decisions.js.map +1 -0
  167. package/dist/src/tools/get-session-messages.d.ts +55 -0
  168. package/dist/src/tools/get-session-messages.d.ts.map +1 -0
  169. package/dist/src/tools/get-session-messages.js +89 -0
  170. package/dist/src/tools/get-session-messages.js.map +1 -0
  171. package/dist/src/tools/get-session-narrative.d.ts +72 -0
  172. package/dist/src/tools/get-session-narrative.d.ts.map +1 -0
  173. package/dist/src/tools/get-session-narrative.js +106 -0
  174. package/dist/src/tools/get-session-narrative.js.map +1 -0
  175. package/dist/src/tools/get-session-timeline.d.ts +55 -0
  176. package/dist/src/tools/get-session-timeline.d.ts.map +1 -0
  177. package/dist/src/tools/get-session-timeline.js +93 -0
  178. package/dist/src/tools/get-session-timeline.js.map +1 -0
  179. package/dist/src/tools/get-session-trends.d.ts +108 -0
  180. package/dist/src/tools/get-session-trends.d.ts.map +1 -0
  181. package/dist/src/tools/get-session-trends.js +130 -0
  182. package/dist/src/tools/get-session-trends.js.map +1 -0
  183. package/dist/src/tools/get-session.d.ts +251 -0
  184. package/dist/src/tools/get-session.d.ts.map +1 -0
  185. package/dist/src/tools/get-session.js +290 -0
  186. package/dist/src/tools/get-session.js.map +1 -0
  187. package/dist/src/tools/index.d.ts +22 -0
  188. package/dist/src/tools/index.d.ts.map +1 -1
  189. package/dist/src/tools/index.js +22 -0
  190. package/dist/src/tools/index.js.map +1 -1
  191. package/dist/src/tools/list-contexts.d.ts +50 -0
  192. package/dist/src/tools/list-contexts.d.ts.map +1 -0
  193. package/dist/src/tools/list-contexts.js +28 -0
  194. package/dist/src/tools/list-contexts.js.map +1 -0
  195. package/dist/src/tools/list-sessions.d.ts +86 -0
  196. package/dist/src/tools/list-sessions.d.ts.map +1 -0
  197. package/dist/src/tools/list-sessions.js +97 -0
  198. package/dist/src/tools/list-sessions.js.map +1 -0
  199. package/dist/src/tools/merge-contexts.d.ts +58 -0
  200. package/dist/src/tools/merge-contexts.d.ts.map +1 -0
  201. package/dist/src/tools/merge-contexts.js +27 -0
  202. package/dist/src/tools/merge-contexts.js.map +1 -0
  203. package/dist/src/tools/move-session-context.d.ts +62 -0
  204. package/dist/src/tools/move-session-context.d.ts.map +1 -0
  205. package/dist/src/tools/move-session-context.js +33 -0
  206. package/dist/src/tools/move-session-context.js.map +1 -0
  207. package/dist/src/tools/reingest-session.d.ts +31 -0
  208. package/dist/src/tools/reingest-session.d.ts.map +1 -0
  209. package/dist/src/tools/reingest-session.js +43 -0
  210. package/dist/src/tools/reingest-session.js.map +1 -0
  211. package/dist/src/tools/reject-context-link.d.ts +58 -0
  212. package/dist/src/tools/reject-context-link.d.ts.map +1 -0
  213. package/dist/src/tools/reject-context-link.js +26 -0
  214. package/dist/src/tools/reject-context-link.js.map +1 -0
  215. package/dist/src/tools/resolve-context.d.ts +287 -0
  216. package/dist/src/tools/resolve-context.d.ts.map +1 -0
  217. package/dist/src/tools/resolve-context.js +35 -0
  218. package/dist/src/tools/resolve-context.js.map +1 -0
  219. package/dist/src/tools/search-history.d.ts +86 -0
  220. package/dist/src/tools/search-history.d.ts.map +1 -0
  221. package/dist/src/tools/search-history.js +103 -0
  222. package/dist/src/tools/search-history.js.map +1 -0
  223. package/dist/src/tools/session-ui-metadata.d.ts +15 -0
  224. package/dist/src/tools/session-ui-metadata.d.ts.map +1 -0
  225. package/dist/src/tools/session-ui-metadata.js +15 -0
  226. package/dist/src/tools/session-ui-metadata.js.map +1 -0
  227. package/dist/src/tools/set-active-context.d.ts +58 -0
  228. package/dist/src/tools/set-active-context.d.ts.map +1 -0
  229. package/dist/src/tools/set-active-context.js +26 -0
  230. package/dist/src/tools/set-active-context.js.map +1 -0
  231. package/dist/src/tools/split-context.d.ts +62 -0
  232. package/dist/src/tools/split-context.d.ts.map +1 -0
  233. package/dist/src/tools/split-context.js +36 -0
  234. package/dist/src/tools/split-context.js.map +1 -0
  235. package/dist/src/tools/verify-footprint.js +1 -1
  236. package/dist/src/tools/verify-footprint.js.map +1 -1
  237. package/dist/src/types.d.ts +2 -0
  238. package/dist/src/types.d.ts.map +1 -1
  239. package/dist/src/ui/register.d.ts +6 -1
  240. package/dist/src/ui/register.d.ts.map +1 -1
  241. package/dist/src/ui/register.js +60 -16
  242. package/dist/src/ui/register.js.map +1 -1
  243. package/dist/ui/dashboard.html +236 -865
  244. package/dist/ui/detail.html +107 -248
  245. package/dist/ui/export.html +115 -298
  246. package/dist/ui/session-dashboard-live.html +264 -0
  247. package/dist/ui/session-dashboard.html +329 -0
  248. package/dist/ui/session-detail-live.html +336 -0
  249. package/dist/ui/session-detail.html +355 -0
  250. package/package.json +49 -9
@@ -0,0 +1,34 @@
1
+ export type ScriptTranscriptDirection = "s" | "i" | "o" | "e";
2
+ export interface ScriptTranscriptRecord {
3
+ payloadLength: number;
4
+ seconds: number;
5
+ micros: number;
6
+ direction: ScriptTranscriptDirection;
7
+ payload: Buffer;
8
+ }
9
+ export interface ParsedScriptTranscript {
10
+ records: ScriptTranscriptRecord[];
11
+ remainder: Buffer;
12
+ }
13
+ export interface UtilLinuxTranscriptRecord {
14
+ delaySeconds: number;
15
+ direction: "i" | "o";
16
+ payloadLength: number;
17
+ payload: Buffer;
18
+ }
19
+ export interface ParsedUtilLinuxTranscript {
20
+ records: UtilLinuxTranscriptRecord[];
21
+ inputRemainder: Buffer;
22
+ outputRemainder: Buffer;
23
+ }
24
+ export declare function parseScriptTranscript(buffer: Buffer): ParsedScriptTranscript;
25
+ export declare function parseUtilLinuxTranscript(options: {
26
+ timing: Buffer | string;
27
+ input: Buffer;
28
+ output: Buffer;
29
+ }): ParsedUtilLinuxTranscript;
30
+ export declare function decodeScriptTranscriptPayload(payload: Buffer): string;
31
+ export declare function decodeTranscriptInputText(payload: Buffer): string;
32
+ export declare function decodeTranscriptOutputText(payload: Buffer): string;
33
+ export declare function controlEchoTokens(payload: Buffer): string[];
34
+ //# sourceMappingURL=pty-transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-transcript.d.ts","sourceRoot":"","sources":["../../../src/cli/pty-transcript.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,yBAAyB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE9D,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,yBAAyB,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,GAAG,GAAG,GAAG,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAkCD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,CAqC5E;AAgCD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAChD,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,yBAAyB,CA+C5B;AAyCD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAc3D"}
@@ -0,0 +1,174 @@
1
+ const SCRIPT_RECORD_HEADER_BYTES = 24;
2
+ function trimUtilLinuxScriptBanner(buffer) {
3
+ const startPrefix = Buffer.from("Script started on ", "utf8");
4
+ if (!buffer.subarray(0, startPrefix.length).equals(startPrefix)) {
5
+ return buffer;
6
+ }
7
+ const firstNewline = buffer.indexOf(0x0a);
8
+ if (firstNewline === -1) {
9
+ return buffer;
10
+ }
11
+ return buffer.subarray(firstNewline + 1);
12
+ }
13
+ function trimUtilLinuxScriptFooter(buffer) {
14
+ const footerMarker = Buffer.from("\nScript done on ", "utf8");
15
+ const footerStart = buffer.lastIndexOf(footerMarker);
16
+ if (footerStart === -1) {
17
+ return buffer;
18
+ }
19
+ return buffer.subarray(0, footerStart);
20
+ }
21
+ function normalizeUtilLinuxTranscriptStream(buffer) {
22
+ return trimUtilLinuxScriptFooter(trimUtilLinuxScriptBanner(buffer));
23
+ }
24
+ function isKnownDirection(value) {
25
+ return value === "s" || value === "i" || value === "o" || value === "e";
26
+ }
27
+ export function parseScriptTranscript(buffer) {
28
+ const records = [];
29
+ let offset = 0;
30
+ while (offset + SCRIPT_RECORD_HEADER_BYTES <= buffer.length) {
31
+ const payloadLengthBig = buffer.readBigUInt64LE(offset);
32
+ if (payloadLengthBig > BigInt(Number.MAX_SAFE_INTEGER)) {
33
+ break;
34
+ }
35
+ const payloadLength = Number(payloadLengthBig);
36
+ const recordEnd = offset + SCRIPT_RECORD_HEADER_BYTES + payloadLength;
37
+ if (recordEnd > buffer.length) {
38
+ break;
39
+ }
40
+ const direction = String.fromCharCode(buffer.readUInt32LE(offset + 20)).toLowerCase();
41
+ if (!isKnownDirection(direction)) {
42
+ break;
43
+ }
44
+ records.push({
45
+ payloadLength,
46
+ seconds: Number(buffer.readBigUInt64LE(offset + 8)),
47
+ micros: buffer.readUInt32LE(offset + 16),
48
+ direction,
49
+ payload: buffer.subarray(offset + SCRIPT_RECORD_HEADER_BYTES, recordEnd),
50
+ });
51
+ offset = recordEnd;
52
+ }
53
+ return {
54
+ records,
55
+ remainder: buffer.subarray(offset),
56
+ };
57
+ }
58
+ function parseUtilLinuxTimingLine(line) {
59
+ const trimmed = line.trim();
60
+ if (!trimmed) {
61
+ return null;
62
+ }
63
+ const [entryType, delayText, payloadLengthText] = trimmed.split(/\s+/, 4);
64
+ if (entryType !== "I" && entryType !== "O") {
65
+ return null;
66
+ }
67
+ const delaySeconds = Number.parseFloat(delayText ?? "");
68
+ const payloadLength = Number.parseInt(payloadLengthText ?? "", 10);
69
+ if (!Number.isFinite(delaySeconds) ||
70
+ !Number.isInteger(payloadLength) ||
71
+ payloadLength < 0) {
72
+ return null;
73
+ }
74
+ return {
75
+ delaySeconds,
76
+ direction: entryType.toLowerCase(),
77
+ payloadLength,
78
+ };
79
+ }
80
+ export function parseUtilLinuxTranscript(options) {
81
+ const timingText = Buffer.isBuffer(options.timing)
82
+ ? options.timing.toString("utf8")
83
+ : options.timing;
84
+ const normalizedInput = normalizeUtilLinuxTranscriptStream(options.input);
85
+ const normalizedOutput = normalizeUtilLinuxTranscriptStream(options.output);
86
+ const records = [];
87
+ let inputOffset = 0;
88
+ let outputOffset = 0;
89
+ for (const line of timingText.split(/\r?\n/)) {
90
+ const record = parseUtilLinuxTimingLine(line);
91
+ if (!record) {
92
+ continue;
93
+ }
94
+ if (record.direction === "i") {
95
+ const nextOffset = inputOffset + record.payloadLength;
96
+ if (nextOffset > normalizedInput.length) {
97
+ break;
98
+ }
99
+ records.push({
100
+ ...record,
101
+ payload: normalizedInput.subarray(inputOffset, nextOffset),
102
+ });
103
+ inputOffset = nextOffset;
104
+ continue;
105
+ }
106
+ const nextOffset = outputOffset + record.payloadLength;
107
+ if (nextOffset > normalizedOutput.length) {
108
+ break;
109
+ }
110
+ records.push({
111
+ ...record,
112
+ payload: normalizedOutput.subarray(outputOffset, nextOffset),
113
+ });
114
+ outputOffset = nextOffset;
115
+ }
116
+ return {
117
+ records,
118
+ inputRemainder: normalizedInput.subarray(inputOffset),
119
+ outputRemainder: normalizedOutput.subarray(outputOffset),
120
+ };
121
+ }
122
+ function stripControlBytes(text) {
123
+ let result = "";
124
+ for (const char of text) {
125
+ const code = char.charCodeAt(0);
126
+ const isControl = (code >= 0x00 && code <= 0x08) ||
127
+ code === 0x0b ||
128
+ code === 0x0c ||
129
+ (code >= 0x0e && code <= 0x1f) ||
130
+ code === 0x7f;
131
+ if (!isControl) {
132
+ result += char;
133
+ }
134
+ }
135
+ return result;
136
+ }
137
+ function normalizeLineEndings(text) {
138
+ return text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
139
+ }
140
+ function applyBackspaces(text) {
141
+ let result = "";
142
+ for (const char of text) {
143
+ if (char === "\b" || char === "\u007f") {
144
+ result = result.slice(0, -1);
145
+ continue;
146
+ }
147
+ result += char;
148
+ }
149
+ return result;
150
+ }
151
+ export function decodeScriptTranscriptPayload(payload) {
152
+ return payload.toString("utf8");
153
+ }
154
+ export function decodeTranscriptInputText(payload) {
155
+ return normalizeLineEndings(stripControlBytes(decodeScriptTranscriptPayload(payload)));
156
+ }
157
+ export function decodeTranscriptOutputText(payload) {
158
+ return normalizeLineEndings(applyBackspaces(Array.from(decodeScriptTranscriptPayload(payload))
159
+ .filter((char) => char.charCodeAt(0) !== 0x00)
160
+ .join("")));
161
+ }
162
+ export function controlEchoTokens(payload) {
163
+ const tokens = [];
164
+ for (const byte of payload) {
165
+ if (byte === 0x09 || byte === 0x0a || byte === 0x0d) {
166
+ continue;
167
+ }
168
+ if (byte >= 1 && byte <= 26) {
169
+ tokens.push(`^${String.fromCharCode(byte + 64)}`);
170
+ }
171
+ }
172
+ return tokens;
173
+ }
174
+ //# sourceMappingURL=pty-transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-transcript.js","sourceRoot":"","sources":["../../../src/cli/pty-transcript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { getContextReport } from "../lib/context-memory.js";
2
+ import { type ArtifactType, type NarrativeKind, type SessionHost, type SessionStatus } from "../lib/storage/index.js";
3
+ type LineWriter = (line: string) => void;
4
+ export declare function printJson(value: unknown): void;
5
+ export declare function printSection(title: string, lines: string[], writeLine?: LineWriter): void;
6
+ export declare function printContextBriefing(report: ReturnType<typeof getContextReport>, writeLine?: LineWriter): void;
7
+ export declare function listSessionsCli(options?: {
8
+ json?: boolean;
9
+ query?: string;
10
+ issueKey?: string;
11
+ host?: SessionHost;
12
+ status?: SessionStatus;
13
+ }): void;
14
+ export declare function showSessionCli(id: string, options?: {
15
+ json?: boolean;
16
+ messageLimit?: number;
17
+ messageOffset?: number;
18
+ trendLimit?: number;
19
+ trendOffset?: number;
20
+ timelineLimit?: number;
21
+ timelineOffset?: number;
22
+ artifactLimit?: number;
23
+ artifactOffset?: number;
24
+ narrativeLimit?: number;
25
+ narrativeOffset?: number;
26
+ decisionLimit?: number;
27
+ decisionOffset?: number;
28
+ }): void;
29
+ export declare function exportSessionsCli(sessionIds?: string[], options?: {
30
+ json?: boolean;
31
+ outputMode?: "file" | "base64" | "both";
32
+ query?: string;
33
+ issueKey?: string;
34
+ host?: SessionHost;
35
+ status?: SessionStatus;
36
+ groupBy?: "issue" | "family";
37
+ }): Promise<void>;
38
+ export declare function ingestSessionCli(id: string, options?: {
39
+ json?: boolean;
40
+ }): void;
41
+ export declare function showSessionMessagesCli(id: string, options?: {
42
+ json?: boolean;
43
+ limit?: number;
44
+ offset?: number;
45
+ }): void;
46
+ export declare function showSessionTrendsCli(id: string, options?: {
47
+ json?: boolean;
48
+ limit?: number;
49
+ offset?: number;
50
+ }): void;
51
+ export declare function showSessionTimelineCli(id: string, options?: {
52
+ json?: boolean;
53
+ limit?: number;
54
+ offset?: number;
55
+ }): void;
56
+ export declare function showSessionArtifactsCli(id: string, options?: {
57
+ json?: boolean;
58
+ artifactType?: ArtifactType;
59
+ limit?: number;
60
+ offset?: number;
61
+ }): void;
62
+ export declare function showSessionNarrativesCli(id: string, options?: {
63
+ json?: boolean;
64
+ kind?: NarrativeKind;
65
+ limit?: number;
66
+ offset?: number;
67
+ }): void;
68
+ export declare function showSessionDecisionsCli(id: string, options?: {
69
+ json?: boolean;
70
+ limit?: number;
71
+ offset?: number;
72
+ }): void;
73
+ export {};
74
+ //# sourceMappingURL=session-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-display.d.ts","sourceRoot":"","sources":["../../../src/cli/session-display.ts"],"names":[],"mappings":"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"}