@phnx-labs/agents-cli 1.22.83 → 1.22.85

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 (291) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +80 -53
  3. package/dist/bootstrap.d.ts +7 -6
  4. package/dist/bootstrap.js +20 -27
  5. package/dist/cli/command-registry.js +5 -1
  6. package/dist/commands/accounts.d.ts +6 -13
  7. package/dist/commands/accounts.js +330 -143
  8. package/dist/commands/apply.js +1 -1
  9. package/dist/commands/auth-mint.d.ts +7 -3
  10. package/dist/commands/auth-mint.js +21 -9
  11. package/dist/commands/auth.js +2 -3
  12. package/dist/commands/browser.js +10 -10
  13. package/dist/commands/daemon.d.ts +7 -3
  14. package/dist/commands/daemon.js +40 -25
  15. package/dist/commands/doctor.js +28 -2
  16. package/dist/commands/exec.js +87 -39
  17. package/dist/commands/fleet-capture.js +21 -2
  18. package/dist/commands/harness-wizard.js +2 -2
  19. package/dist/commands/lease.js +7 -12
  20. package/dist/commands/profiles.d.ts +2 -2
  21. package/dist/commands/profiles.js +20 -13
  22. package/dist/commands/repo.js +3 -3
  23. package/dist/commands/run-account-picker.d.ts +3 -3
  24. package/dist/commands/run-account-picker.js +29 -30
  25. package/dist/commands/secrets-passthrough.d.ts +20 -0
  26. package/dist/commands/secrets-passthrough.js +43 -0
  27. package/dist/commands/sessions-trace.d.ts +11 -0
  28. package/dist/commands/sessions-trace.js +71 -0
  29. package/dist/commands/setup-accounts.d.ts +3 -2
  30. package/dist/commands/setup-accounts.js +4 -4
  31. package/dist/commands/setup-secrets.d.ts +16 -21
  32. package/dist/commands/setup-secrets.js +43 -224
  33. package/dist/commands/ssh.js +2 -2
  34. package/dist/commands/sync.js +1 -1
  35. package/dist/commands/update.d.ts +10 -0
  36. package/dist/commands/update.js +43 -40
  37. package/dist/commands/versions.d.ts +11 -11
  38. package/dist/commands/versions.js +131 -83
  39. package/dist/commands/view.d.ts +1 -9
  40. package/dist/commands/view.js +41 -55
  41. package/dist/commands/webhook.js +5 -5
  42. package/dist/commands/workflows.js +2 -1
  43. package/dist/index.d.ts +12 -12
  44. package/dist/index.js +13 -42
  45. package/dist/lib/account-capabilities.d.ts +1 -1
  46. package/dist/lib/account-capabilities.js +1 -1
  47. package/dist/lib/account-catalog.d.ts +121 -6
  48. package/dist/lib/account-catalog.js +421 -7
  49. package/dist/lib/account-registry.d.ts +8 -30
  50. package/dist/lib/account-registry.js +36 -79
  51. package/dist/lib/account-schema.d.ts +1 -1
  52. package/dist/lib/account-schema.js +1 -1
  53. package/dist/lib/accounting/account-pool-collect.js +16 -4
  54. package/dist/lib/accounting/rotate.d.ts +20 -7
  55. package/dist/lib/accounting/rotate.js +89 -13
  56. package/dist/lib/accounting/usage.js +11 -16
  57. package/dist/lib/accounts/add.d.ts +138 -0
  58. package/dist/lib/accounts/add.js +651 -0
  59. package/dist/lib/accounts/migrate.d.ts +117 -0
  60. package/dist/lib/accounts/migrate.js +536 -0
  61. package/dist/lib/accounts/slots.d.ts +13 -0
  62. package/dist/lib/accounts/slots.js +100 -0
  63. package/dist/lib/agent-spec/agents.d.ts +16 -0
  64. package/dist/lib/agent-spec/agents.js +32 -4
  65. package/dist/lib/app-bundle-install.js +5 -4
  66. package/dist/lib/auth-health.d.ts +3 -0
  67. package/dist/lib/auth-health.js +11 -0
  68. package/dist/lib/auth-mint.d.ts +52 -16
  69. package/dist/lib/auth-mint.js +117 -39
  70. package/dist/lib/browser/chrome.d.ts +1 -1
  71. package/dist/lib/browser/chrome.js +5 -5
  72. package/dist/lib/byok-usage.js +3 -3
  73. package/dist/lib/claude-account-token.d.ts +47 -3
  74. package/dist/lib/claude-account-token.js +172 -50
  75. package/dist/lib/cloud/antigravity.js +4 -4
  76. package/dist/lib/cloud/cursor.js +4 -4
  77. package/dist/lib/crabbox/cli.d.ts +1 -1
  78. package/dist/lib/crabbox/cli.js +6 -6
  79. package/dist/lib/crabbox/runtimes.d.ts +3 -3
  80. package/dist/lib/crabbox/runtimes.js +5 -5
  81. package/dist/lib/daemon/account-state-daemon-service.d.ts +37 -1
  82. package/dist/lib/daemon/account-state-daemon-service.js +199 -3
  83. package/dist/lib/daemon/auth-sync-service.js +28 -1
  84. package/dist/lib/daemon/daemon.d.ts +6 -16
  85. package/dist/lib/daemon/daemon.js +52 -97
  86. package/dist/lib/daemon/daemon.test-fixture.d.ts +7 -9
  87. package/dist/lib/daemon/daemon.test-fixture.js +22 -40
  88. package/dist/lib/daemon/harness-update-service.d.ts +1 -1
  89. package/dist/lib/daemon/harness-update-service.js +1 -1
  90. package/dist/lib/daemon/runner.d.ts +15 -3
  91. package/dist/lib/daemon/runner.js +49 -24
  92. package/dist/lib/daemon-health.d.ts +1 -2
  93. package/dist/lib/daemon-health.js +7 -6
  94. package/dist/lib/daemon-services.d.ts +1 -1
  95. package/dist/lib/daemon-services.js +1 -11
  96. package/dist/lib/daemon-ticks.js +23 -2
  97. package/dist/lib/daemon-webhooks.d.ts +8 -7
  98. package/dist/lib/daemon-webhooks.js +10 -9
  99. package/dist/lib/device-config.js +1 -1
  100. package/dist/lib/devices/doctor-findings.d.ts +1 -1
  101. package/dist/lib/devices/harness-inventory.d.ts +39 -0
  102. package/dist/lib/devices/harness-inventory.js +126 -4
  103. package/dist/lib/doctor-diff.js +2 -1
  104. package/dist/lib/exec-account-home.d.ts +38 -0
  105. package/dist/lib/exec-account-home.js +164 -0
  106. package/dist/lib/exec.d.ts +30 -0
  107. package/dist/lib/exec.js +101 -31
  108. package/dist/lib/feed/activity-stream.d.ts +60 -0
  109. package/dist/lib/feed/activity-stream.js +271 -0
  110. package/dist/lib/feed/activity.d.ts +7 -0
  111. package/dist/lib/feed/activity.js +10 -4
  112. package/dist/lib/feed/watch.d.ts +9 -3
  113. package/dist/lib/feed/watch.js +72 -36
  114. package/dist/lib/fleet/apply.d.ts +2 -2
  115. package/dist/lib/fleet/apply.js +4 -4
  116. package/dist/lib/fleet/auth-sync.js +4 -3
  117. package/dist/lib/fleet-shared-repo-sync.js +6 -9
  118. package/dist/lib/fleet-shared-state.d.ts +6 -0
  119. package/dist/lib/harness/adapter.d.ts +7 -7
  120. package/dist/lib/harness/adapter.js +10 -6
  121. package/dist/lib/harness/adapters/grok.js +8 -3
  122. package/dist/lib/harness/adapters/muse.js +1 -1
  123. package/dist/lib/harness/adapters/opencode.js +12 -3
  124. package/dist/lib/harness-auth-capabilities.d.ts +61 -0
  125. package/dist/lib/harness-auth-capabilities.js +52 -0
  126. package/dist/lib/helper-versions.d.ts +6 -4
  127. package/dist/lib/helper-versions.js +5 -4
  128. package/dist/lib/hosts/credential-transport.d.ts +10 -0
  129. package/dist/lib/hosts/credential-transport.js +37 -0
  130. package/dist/lib/hosts/dispatch.d.ts +7 -0
  131. package/dist/lib/hosts/dispatch.js +13 -6
  132. package/dist/lib/identity/client.d.ts +3 -3
  133. package/dist/lib/identity/client.js +3 -3
  134. package/dist/lib/installations/index.d.ts +1 -1
  135. package/dist/lib/installations/index.js +1 -1
  136. package/dist/lib/installations/migrate.js +9 -0
  137. package/dist/lib/installations/resolve.js +1 -1
  138. package/dist/lib/installations/shims.d.ts +15 -0
  139. package/dist/lib/installations/shims.js +69 -0
  140. package/dist/lib/installations/store.d.ts +43 -0
  141. package/dist/lib/installations/store.js +75 -7
  142. package/dist/lib/installations/versions.js +1 -1
  143. package/dist/lib/menubar/install-menubar.d.ts +3 -3
  144. package/dist/lib/menubar/install-menubar.js +3 -3
  145. package/dist/lib/native-accounts.d.ts +35 -0
  146. package/dist/lib/native-accounts.js +41 -0
  147. package/dist/lib/net-close.d.ts +11 -0
  148. package/dist/lib/net-close.js +25 -0
  149. package/dist/lib/openclaw-keychain.js +27 -1
  150. package/dist/lib/profiles.js +22 -9
  151. package/dist/lib/project-resources.js +1 -1
  152. package/dist/lib/reserved-stores.d.ts +53 -0
  153. package/dist/lib/reserved-stores.js +120 -0
  154. package/dist/lib/secrets-client.d.ts +191 -0
  155. package/dist/lib/secrets-client.js +710 -0
  156. package/dist/lib/secrets-policy.d.ts +222 -0
  157. package/dist/lib/secrets-policy.js +483 -0
  158. package/dist/lib/secrets-types.d.ts +188 -0
  159. package/dist/lib/secrets-types.js +24 -0
  160. package/dist/lib/service-manifest.js +3 -4
  161. package/dist/lib/session/active.d.ts +38 -4
  162. package/dist/lib/session/active.js +36 -4
  163. package/dist/lib/session/bash-command.js +10 -0
  164. package/dist/lib/session/db.d.ts +65 -2
  165. package/dist/lib/session/db.js +178 -18
  166. package/dist/lib/session/mirror.d.ts +5 -0
  167. package/dist/lib/session/mirror.js +166 -0
  168. package/dist/lib/session/parse.d.ts +49 -0
  169. package/dist/lib/session/parse.js +324 -30
  170. package/dist/lib/session/prompt.d.ts +93 -2
  171. package/dist/lib/session/prompt.js +266 -15
  172. package/dist/lib/session/remote/peer-stream.d.ts +47 -0
  173. package/dist/lib/session/remote/peer-stream.js +142 -0
  174. package/dist/lib/session/remote/watch.d.ts +1 -1
  175. package/dist/lib/session/remote/watch.js +41 -42
  176. package/dist/lib/session/session-cache.d.ts +9 -0
  177. package/dist/lib/session/session-cache.js +40 -2
  178. package/dist/lib/session/sync/config.js +2 -2
  179. package/dist/lib/session/timeline-pass.d.ts +129 -0
  180. package/dist/lib/session/timeline-pass.js +323 -0
  181. package/dist/lib/session/timeline.d.ts +182 -0
  182. package/dist/lib/session/timeline.js +636 -0
  183. package/dist/lib/session/types.d.ts +155 -1
  184. package/dist/lib/sha256-asset.d.ts +11 -16
  185. package/dist/lib/sha256-asset.js +11 -16
  186. package/dist/lib/share/config.js +14 -5
  187. package/dist/lib/signin-badge.d.ts +26 -0
  188. package/dist/lib/signin-badge.js +42 -0
  189. package/dist/lib/staleness/detectors/workflows.js +3 -105
  190. package/dist/lib/staleness/writers/workflows.js +2 -1
  191. package/dist/lib/state.d.ts +7 -4
  192. package/dist/lib/state.js +18 -7
  193. package/dist/lib/summarizer/pass.d.ts +2 -0
  194. package/dist/lib/summarizer/pass.js +14 -1
  195. package/dist/lib/summarizer/summarize.d.ts +7 -0
  196. package/dist/lib/summarizer/summarize.js +3 -0
  197. package/dist/lib/sync-umbrella.js +2 -2
  198. package/dist/lib/teams/agents.js +1 -1
  199. package/dist/lib/types.d.ts +74 -33
  200. package/dist/lib/view-types.d.ts +6 -3
  201. package/dist/lib/workflows-registry.d.ts +71 -0
  202. package/dist/lib/workflows-registry.js +280 -0
  203. package/dist/lib/workflows.d.ts +21 -21
  204. package/dist/lib/workflows.js +12 -327
  205. package/package.json +2 -3
  206. package/scripts/postinstall.js +4 -29
  207. package/dist/commands/secrets-import.d.ts +0 -18
  208. package/dist/commands/secrets-import.js +0 -74
  209. package/dist/commands/secrets-migrate.d.ts +0 -25
  210. package/dist/commands/secrets-migrate.js +0 -334
  211. package/dist/commands/secrets-rotate-passphrase.d.ts +0 -17
  212. package/dist/commands/secrets-rotate-passphrase.js +0 -96
  213. package/dist/commands/secrets-sync.d.ts +0 -11
  214. package/dist/commands/secrets-sync.js +0 -153
  215. package/dist/commands/secrets-vault.d.ts +0 -10
  216. package/dist/commands/secrets-vault.js +0 -130
  217. package/dist/commands/secrets.d.ts +0 -212
  218. package/dist/commands/secrets.js +0 -3030
  219. package/dist/lib/accounts/connect.d.ts +0 -170
  220. package/dist/lib/accounts/connect.js +0 -383
  221. package/dist/lib/daemon/keychain-reap-service.d.ts +0 -17
  222. package/dist/lib/daemon/keychain-reap-service.js +0 -32
  223. package/dist/lib/daemon/secrets-broker-service.d.ts +0 -21
  224. package/dist/lib/daemon/secrets-broker-service.js +0 -51
  225. package/dist/lib/secrets/agent.d.ts +0 -358
  226. package/dist/lib/secrets/agent.js +0 -1291
  227. package/dist/lib/secrets/audit.d.ts +0 -46
  228. package/dist/lib/secrets/audit.js +0 -101
  229. package/dist/lib/secrets/bundles.d.ts +0 -290
  230. package/dist/lib/secrets/bundles.js +0 -1547
  231. package/dist/lib/secrets/download-keychain.d.ts +0 -47
  232. package/dist/lib/secrets/download-keychain.js +0 -70
  233. package/dist/lib/secrets/drivers/rush.d.ts +0 -14
  234. package/dist/lib/secrets/drivers/rush.js +0 -90
  235. package/dist/lib/secrets/fallback.d.ts +0 -48
  236. package/dist/lib/secrets/fallback.js +0 -48
  237. package/dist/lib/secrets/filestore.d.ts +0 -222
  238. package/dist/lib/secrets/filestore.js +0 -1099
  239. package/dist/lib/secrets/headless.d.ts +0 -43
  240. package/dist/lib/secrets/headless.js +0 -56
  241. package/dist/lib/secrets/icloud-import.d.ts +0 -79
  242. package/dist/lib/secrets/icloud-import.js +0 -206
  243. package/dist/lib/secrets/index.d.ts +0 -451
  244. package/dist/lib/secrets/index.js +0 -1568
  245. package/dist/lib/secrets/install-helper.d.ts +0 -72
  246. package/dist/lib/secrets/install-helper.js +0 -245
  247. package/dist/lib/secrets/lease.d.ts +0 -25
  248. package/dist/lib/secrets/lease.js +0 -44
  249. package/dist/lib/secrets/linux.d.ts +0 -77
  250. package/dist/lib/secrets/linux.js +0 -393
  251. package/dist/lib/secrets/list-filter.d.ts +0 -109
  252. package/dist/lib/secrets/list-filter.js +0 -261
  253. package/dist/lib/secrets/mcp.d.ts +0 -93
  254. package/dist/lib/secrets/mcp.js +0 -211
  255. package/dist/lib/secrets/profiles.d.ts +0 -10
  256. package/dist/lib/secrets/profiles.js +0 -13
  257. package/dist/lib/secrets/push.d.ts +0 -133
  258. package/dist/lib/secrets/push.js +0 -273
  259. package/dist/lib/secrets/rc-hygiene.d.ts +0 -63
  260. package/dist/lib/secrets/rc-hygiene.js +0 -143
  261. package/dist/lib/secrets/read-backoff.d.ts +0 -27
  262. package/dist/lib/secrets/read-backoff.js +0 -64
  263. package/dist/lib/secrets/reaper.d.ts +0 -90
  264. package/dist/lib/secrets/reaper.js +0 -243
  265. package/dist/lib/secrets/remote.d.ts +0 -152
  266. package/dist/lib/secrets/remote.js +0 -344
  267. package/dist/lib/secrets/reserved-sync.d.ts +0 -66
  268. package/dist/lib/secrets/reserved-sync.js +0 -147
  269. package/dist/lib/secrets/scope.d.ts +0 -26
  270. package/dist/lib/secrets/scope.js +0 -29
  271. package/dist/lib/secrets/session-store.d.ts +0 -107
  272. package/dist/lib/secrets/session-store.js +0 -342
  273. package/dist/lib/secrets/sync-backend.d.ts +0 -48
  274. package/dist/lib/secrets/sync-backend.js +0 -13
  275. package/dist/lib/secrets/sync-commands.d.ts +0 -21
  276. package/dist/lib/secrets/sync-commands.js +0 -21
  277. package/dist/lib/secrets/sync.d.ts +0 -48
  278. package/dist/lib/secrets/sync.js +0 -237
  279. package/dist/lib/secrets/unlock-hints.d.ts +0 -27
  280. package/dist/lib/secrets/unlock-hints.js +0 -36
  281. package/dist/lib/secrets/usage-db.d.ts +0 -46
  282. package/dist/lib/secrets/usage-db.js +0 -96
  283. package/dist/lib/secrets/vault-age-helper.d.ts +0 -1
  284. package/dist/lib/secrets/vault-age-helper.js +0 -34
  285. package/dist/lib/secrets/vault.d.ts +0 -49
  286. package/dist/lib/secrets/vault.js +0 -399
  287. package/dist/lib/secrets/windows.d.ts +0 -81
  288. package/dist/lib/secrets/windows.js +0 -556
  289. package/scripts/install-helper.js +0 -97
  290. /package/dist/lib/{secrets/sync-passphrase.d.ts → sync-passphrase.d.ts} +0 -0
  291. /package/dist/lib/{secrets/sync-passphrase.js → sync-passphrase.js} +0 -0
@@ -0,0 +1,182 @@
1
+ /**
2
+ * The narration-anchored session timeline (PHNX-3939) — a pure, resumable fold.
3
+ *
4
+ * A transcript is a flat event stream: the agent says a line, runs six tools,
5
+ * says the next line. A person reading a sidebar wants the LINES, with the tool
6
+ * calls collapsed underneath them. That is the whole model here: one
7
+ * {@link SessionStep} per narration beat, the calls until the next beat folded
8
+ * into counts, failures and milestones.
9
+ *
10
+ * Two properties this module is built around:
11
+ *
12
+ * - **Deterministic, no model.** The headline is the harness's OWN narration
13
+ * (Claude assistant text, Codex `AgentMessage` commentary, Gemini thought
14
+ * subject) and the per-tool label is the harness's own (`description`,
15
+ * `state.title`, the parsed command). Nothing is invented; the optional
16
+ * summarizer polishes ON TOP and is never required.
17
+ * - **Resumable.** {@link foldTimeline} takes the state from the previous fold
18
+ * and the events that arrived since, so the daemon reads only the bytes a
19
+ * transcript grew by. Folding the appended tail onto the prior state is
20
+ * identical to folding the whole file from zero — every piece of mutable
21
+ * state lives in the serializable {@link TimelineState}, nothing in a
22
+ * closure.
23
+ *
24
+ * No I/O: the pass (`timeline-pass.ts`) reads bytes and calls this. Same
25
+ * discipline as `digest.ts` and `trajectory.ts`.
26
+ */
27
+ import type { SessionEvent, SessionFileChange, SessionFiles, SessionRequest, SessionStep, SessionTimeline, SessionVerbClass } from './types.js';
28
+ /**
29
+ * Bumped when the fold's OUTPUT changes, so a cached state computed by an older
30
+ * CLI is recomputed rather than rendered. Same role as
31
+ * `SESSION_SUMMARY_EXTRACTOR_VERSION`.
32
+ */
33
+ export declare const TIMELINE_EXTRACTOR_VERSION = 1;
34
+ /** Steps carried on the row in full; everything older folds into a counter. */
35
+ export declare const TIMELINE_KEEP_STEPS = 8;
36
+ /** File rows carried on the row in full; `total` still reports the real count. */
37
+ export declare const TIMELINE_KEEP_FILES = 8;
38
+ /**
39
+ * Steps kept in the persisted resume state. A long session narrates for hours,
40
+ * and the state is re-read every tick, so the fold rolls everything past this
41
+ * into {@link TimelineState.dropped} — exact totals, bounded bytes.
42
+ */
43
+ export declare const TIMELINE_STATE_MAX_STEPS = 200;
44
+ /** Paths kept in the persisted resume state; older ones roll into `filesDropped`. */
45
+ export declare const TIMELINE_STATE_MAX_FILES = 200;
46
+ /** One file the session touched, as accumulated during the fold. */
47
+ interface TimelineFileEntry {
48
+ op: SessionFileChange['op'];
49
+ edits: number;
50
+ at: string;
51
+ /** True when a harness file ledger (not a tool argument) recorded this path. */
52
+ harness: boolean;
53
+ }
54
+ /**
55
+ * Everything the fold needs to continue from where it stopped. Serialized into
56
+ * `session_timelines.state_json`; every field is plain JSON on purpose (`open`
57
+ * and `pending` are indices, not object references) so a resume is exact.
58
+ */
59
+ export interface TimelineState {
60
+ version: number;
61
+ /** Byte offset just past the last COMPLETE record folded. */
62
+ offset: number;
63
+ steps: SessionStep[];
64
+ /** Index of the currently open step in {@link steps}, or -1. */
65
+ open: number;
66
+ /** Harness call id → index of the step that owns it, for results that arrive later. */
67
+ pending: Record<string, number>;
68
+ firstMs: number | null;
69
+ lastMs: number | null;
70
+ /** Genuine user turns seen so far. */
71
+ turns: number;
72
+ /** The latest genuine user turn, tidied — the session's operative request. */
73
+ request?: SessionRequest;
74
+ /** The FIRST genuine user turn, kept so history still shows where it started. */
75
+ firstRequest?: SessionRequest;
76
+ /** Path → accumulated change record. */
77
+ files: Record<string, TimelineFileEntry>;
78
+ /** Set when an event cap stopped the fold short: the projection reports `partial`. */
79
+ truncated?: boolean;
80
+ /**
81
+ * Steps rolled out of {@link steps} to keep the persisted state bounded. Their
82
+ * counts still ride the projection's `earlier` block and totals, so folding a
83
+ * compacted state and folding the whole file report the same numbers.
84
+ */
85
+ dropped?: {
86
+ steps: number;
87
+ tools: number;
88
+ failed: number;
89
+ blocked: number;
90
+ };
91
+ /** Paths rolled out of {@link files} for the same reason; `total` stays exact. */
92
+ filesDropped?: number;
93
+ }
94
+ /**
95
+ * Roll the oldest steps and file rows out of the state so a session that runs
96
+ * for hours does not grow its cached state without bound. Their tallies survive
97
+ * in {@link TimelineState.dropped} / {@link TimelineState.filesDropped}, which
98
+ * the projection adds back — so this changes the state's SIZE, never its
99
+ * reported numbers.
100
+ */
101
+ export declare function compactTimelineState(state: TimelineState, maxSteps?: number, maxFiles?: number): TimelineState;
102
+ /** A fresh state for a session nothing has been folded for yet. */
103
+ export declare function emptyTimelineState(): TimelineState;
104
+ /**
105
+ * Bucket one Bash command into a verb class, reusing the repo's single command
106
+ * classifier (`classifyBashCommand`) rather than re-deriving a second taxonomy.
107
+ * Its `category` answers most of it; the three things its taxonomy deliberately
108
+ * does not carry — a write redirection, `agents` subcommands, and whether a
109
+ * build tool is running tests — are added on top.
110
+ *
111
+ * Multi-segment commands take the most consequential class present, so
112
+ * `cd x && bun test` is a test, not a `cd`.
113
+ */
114
+ export declare function classifyCommandVerb(command: string | undefined): SessionVerbClass;
115
+ /** The verb class for one tool call: the harness's own if it classified it, else derived. */
116
+ export declare function verbClassForEvent(event: SessionEvent): SessionVerbClass;
117
+ /** Options the fold needs that are not on the events themselves. */
118
+ export interface FoldTimelineOptions {
119
+ /** Row attachments, so an image the prose never named still rides the request. */
120
+ attachments?: import('./types.js').SessionAttachment[];
121
+ /** Stop after this many events and mark the state `truncated` (the projection reads `partial`). */
122
+ maxEvents?: number;
123
+ /** Byte offset the folded events end at; stored so the next fold resumes there. */
124
+ offset?: number;
125
+ }
126
+ /**
127
+ * Fold `events` onto `prior` (or a fresh state) and return the new state.
128
+ *
129
+ * Pure: no clock, no filesystem, no database. The rules, in the order they are
130
+ * applied per event, are the plan's fold table — narration opens, thinking opens
131
+ * only when there is nothing open or the open step is already a wall of calls,
132
+ * tools attach, a genuine user turn is its own step, results resolve
133
+ * failed-vs-blocked, and a harness file ledger both marks the step and feeds the
134
+ * files projection.
135
+ */
136
+ export declare function foldTimeline(events: SessionEvent[], prior?: TimelineState, opts?: FoldTimelineOptions): TimelineState;
137
+ /** The activity values that mean the agent is mid-step, so the newest step is live. */
138
+ export type TimelineActivity = string | undefined;
139
+ /** How {@link projectTimeline} scrubs the transcript text it is about to ship. */
140
+ export interface ProjectTimelineOptions {
141
+ /** Redact secrets from every projected string. Default true — see below. */
142
+ redact?: boolean;
143
+ /** Known credential values to mask verbatim; defaults to {@link knownSecretValuesFromEnv}. */
144
+ knownSecrets?: readonly string[];
145
+ }
146
+ /**
147
+ * Project the folded state onto the bounded shape that rides a session row.
148
+ *
149
+ * `keep` newest steps travel in full; everything older collapses into
150
+ * `earlier`. The newest step is marked `live` while the session is working —
151
+ * that is what the sidebar renders with the amber now-line, using the `now`
152
+ * label the harness wrote for the call that is running.
153
+ *
154
+ * **This is the single place raw transcript text leaves the fold**, so it is
155
+ * where scrubbing happens — every consumer (the session row, the git-tracked
156
+ * fleet mirror `daemon-state.json`, and `sessions trace --steps`) is covered at
157
+ * the source rather than each remembering to do it. Two passes, and they are
158
+ * not the same thing:
159
+ *
160
+ * - **Terminal escapes are ALWAYS stripped.** A transcript is untrusted input
161
+ * and these labels are printed to a terminal; `sanitizeEvents` never runs on
162
+ * the fold's parse path (only `tail.ts` / `stream-render.ts` call it), so
163
+ * this is the only place that scrub happens for a timeline.
164
+ * - **Secrets are redacted unless the caller opts out.** `redact` defaults to
165
+ * ON; only the local-only `--no-redact` path passes `redact: false`, and it
166
+ * buys exactly that — not raw control characters.
167
+ */
168
+ export declare function projectTimeline(state: TimelineState, activity: TimelineActivity, keep?: number, options?: ProjectTimelineOptions): SessionTimeline;
169
+ /** The honest empty timeline for a harness that writes no parseable transcript. */
170
+ export declare function unavailableTimeline(reason: string): SessionTimeline;
171
+ /**
172
+ * Project the files the session changed. Bounded to `keep` rows, newest first,
173
+ * with `total` reporting the real count.
174
+ *
175
+ * `source` reports where the OPERATIONS came from: `harness` when at least one
176
+ * entry was written by the harness's own ledger (Codex `FileChange` carries
177
+ * add/update/delete per path, OpenCode `patch` and Claude `file-history-delta`
178
+ * carry the path set), `tools` when everything was derived from Edit/Write
179
+ * arguments because the harness records no ledger at all.
180
+ */
181
+ export declare function projectSessionFiles(state: TimelineState, keep?: number): SessionFiles | undefined;
182
+ export {};