sidekick-shared 0.29.1 → 0.30.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 (109) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +171 -60
  3. package/dist/aggregation/EventAggregator.d.ts +79 -4
  4. package/dist/aggregation/EventAggregator.js +391 -37
  5. package/dist/aggregation/types.d.ts +27 -3
  6. package/dist/browser.d.ts +7 -3
  7. package/dist/browser.js +23 -3
  8. package/dist/context/sessionContext.js +5 -1
  9. package/dist/esm/aggregation/EventAggregator.js +392 -38
  10. package/dist/esm/browser.js +3 -1
  11. package/dist/esm/context/sessionContext.js +6 -2
  12. package/dist/esm/fileContinuity.js +149 -0
  13. package/dist/esm/index.js +5 -2
  14. package/dist/esm/node.js +2 -0
  15. package/dist/esm/parsers/codexParser.js +192 -3
  16. package/dist/esm/parsers/subagentEndState.js +61 -0
  17. package/dist/esm/parsers/subagentScanner.js +4 -0
  18. package/dist/esm/parsers/subagentTraceParser.js +6 -0
  19. package/dist/esm/promptHistory.js +22 -11
  20. package/dist/esm/providers/claudeCode.js +50 -27
  21. package/dist/esm/providers/codex.js +153 -163
  22. package/dist/esm/providers/codexCompressedReader.js +184 -0
  23. package/dist/esm/providers/codexDatabase.js +47 -2
  24. package/dist/esm/providers/codexRollouts.js +20 -2
  25. package/dist/esm/providers/codexSubagents.js +456 -0
  26. package/dist/esm/providers/compressedRollouts.js +330 -0
  27. package/dist/esm/providers/factory.js +4 -1
  28. package/dist/esm/providers/rolloutWalker.js +32 -4
  29. package/dist/esm/schemas/sessionEvent.js +32 -4
  30. package/dist/esm/sessionMonitor.js +7 -1
  31. package/dist/esm/sessionPreviews.js +9 -0
  32. package/dist/esm/sessionPromptHistory.js +5 -3
  33. package/dist/esm/subagentActivity.js +125 -0
  34. package/dist/esm/subagentDisplayState.js +81 -0
  35. package/dist/esm/subagentSpawn.js +206 -6
  36. package/dist/esm/testing/codexSubagentFixtures.js +336 -0
  37. package/dist/esm/toolCallOrigins.js +17 -10
  38. package/dist/esm/toolCategory.js +6 -2
  39. package/dist/esm/transcript.js +6 -2
  40. package/dist/esm/turns/assistantTurn.js +6 -3
  41. package/dist/esm/usage/usageEvents.js +4 -1
  42. package/dist/esm/watchers/eventBridge.js +31 -1
  43. package/dist/esm/watchers/jsonlTail.js +11 -42
  44. package/dist/esm/watchers/jsonlWatcher.js +19 -9
  45. package/dist/esm/watchers/providerReaderWatcher.js +5 -4
  46. package/dist/fileContinuity.d.ts +95 -0
  47. package/dist/fileContinuity.js +187 -0
  48. package/dist/index.d.ts +14 -7
  49. package/dist/index.js +39 -10
  50. package/dist/node.d.ts +4 -0
  51. package/dist/node.js +16 -2
  52. package/dist/parsers/codexParser.d.ts +44 -0
  53. package/dist/parsers/codexParser.js +192 -3
  54. package/dist/parsers/subagentEndState.d.ts +20 -0
  55. package/dist/parsers/subagentEndState.js +65 -0
  56. package/dist/parsers/subagentScanner.js +4 -0
  57. package/dist/parsers/subagentTraceParser.d.ts +8 -0
  58. package/dist/parsers/subagentTraceParser.js +6 -0
  59. package/dist/promptHistory.d.ts +13 -3
  60. package/dist/promptHistory.js +22 -11
  61. package/dist/providers/claudeCode.js +50 -27
  62. package/dist/providers/codex.d.ts +35 -5
  63. package/dist/providers/codex.js +150 -160
  64. package/dist/providers/codexCompressedReader.d.ts +58 -0
  65. package/dist/providers/codexCompressedReader.js +221 -0
  66. package/dist/providers/codexDatabase.d.ts +25 -0
  67. package/dist/providers/codexDatabase.js +48 -2
  68. package/dist/providers/codexRollouts.d.ts +16 -2
  69. package/dist/providers/codexRollouts.js +20 -2
  70. package/dist/providers/codexSubagents.d.ts +66 -0
  71. package/dist/providers/codexSubagents.js +495 -0
  72. package/dist/providers/compressedRollouts.d.ts +114 -0
  73. package/dist/providers/compressedRollouts.js +380 -0
  74. package/dist/providers/factory.d.ts +5 -0
  75. package/dist/providers/factory.js +4 -1
  76. package/dist/providers/rolloutWalker.d.ts +15 -2
  77. package/dist/providers/rolloutWalker.js +33 -4
  78. package/dist/providers/types.d.ts +22 -1
  79. package/dist/schemas/sessionEvent.d.ts +26 -2
  80. package/dist/schemas/sessionEvent.js +31 -3
  81. package/dist/sessionMonitor.d.ts +6 -0
  82. package/dist/sessionMonitor.js +7 -1
  83. package/dist/sessionPreviews.js +9 -0
  84. package/dist/sessionPromptHistory.d.ts +5 -0
  85. package/dist/sessionPromptHistory.js +5 -36
  86. package/dist/subagentActivity.d.ts +91 -0
  87. package/dist/subagentActivity.js +132 -0
  88. package/dist/subagentDisplayState.d.ts +81 -0
  89. package/dist/subagentDisplayState.js +86 -0
  90. package/dist/subagentSpawn.d.ts +100 -5
  91. package/dist/subagentSpawn.js +218 -7
  92. package/dist/testing/codexSubagentFixtures.d.ts +48 -0
  93. package/dist/testing/codexSubagentFixtures.js +344 -0
  94. package/dist/toolCallOrigins.d.ts +5 -0
  95. package/dist/toolCallOrigins.js +17 -10
  96. package/dist/toolCategory.js +6 -2
  97. package/dist/transcript.js +5 -1
  98. package/dist/turns/assistantTurn.d.ts +4 -1
  99. package/dist/turns/assistantTurn.js +5 -2
  100. package/dist/types/codex.d.ts +71 -2
  101. package/dist/types/sessionEvent.d.ts +38 -3
  102. package/dist/usage/usageEvents.d.ts +4 -1
  103. package/dist/usage/usageEvents.js +4 -1
  104. package/dist/watchers/eventBridge.js +30 -0
  105. package/dist/watchers/jsonlTail.js +11 -42
  106. package/dist/watchers/jsonlWatcher.d.ts +5 -1
  107. package/dist/watchers/jsonlWatcher.js +18 -8
  108. package/dist/watchers/providerReaderWatcher.js +5 -4
  109. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,32 @@ All notable changes to sidekick-shared will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.30.0] - 2026-11-01
9
+
10
+ ### Added
11
+
12
+ - **Codex subagent activity (opt-in).** `CodexRolloutParserOptions.includeSubagentActivity` turns Codex's `SubAgentActivity` records (`started`, `completed`, `interacted`, `interrupted`) and `FINAL_ANSWER` agent messages into `system` events with `origin: { kind: 'subagent-activity' }`. Read them with `subagentActivityFromEvent()` / `isSubagentActivitySystemEvent()`; `describeSubagentActivity()` and `parseCodexAgentMessageText()` help display them. The Codex reader turns the option on; transcripts, context sources and the aggregator's counters skip these events.
13
+ - **Codex subagent lifecycles.** `EventAggregator` follows `spawn_agent` from its `{"task_name"}` launch to `completed` or `FINAL_ANSWER` (matched by agent path); `followup_task` reopens a child, `interrupt_agent` stops it, and a failed spawn is `failed`. `isCodexSubagentSpawnTool()` and `parseCodexSpawnLaunch()` are exported.
14
+ - **Codex child discovery.** `scanSubagents()` recurses to every depth and reports `SubagentStats.filePath`, `spawnToolUseId`, `agentNickname`, `agentPath`, `parentAgentId`, `depth` and `endedCleanly`, with stats from the child's own records. `CodexDatabase.getSpawnedDescendantThreads()` and `isCodexSubagentThread()` are exported.
15
+ - **Settling agents that never report.** `EventAggregator.applySubagentEvidence({ agentId?, toolUseId?, finished?, stoppedByUser? }, timestamp)` lets a host apply meta-file evidence. In-stream evidence settles running agents too: `agents_killed` system lines (`SystemSessionEvent.subtype` is kept), stop notices (`parseAgentsStoppedNotice()`, `agentsStoppedNoticeFromEvent()`) and post-compaction task status (`taskStatusFromAttachment()`, `taskStatusFromEvent()`, `isTaskStatusSystemEvent()`). `SubagentLifecycle` gains `settledBy` and `agentPath`. `resolveSubagentDisplayState(lifecycle, trace?, { now, parentLastActivity })` adds the reversible display states `finished-unreported` (clean end, quiet for `SUBAGENT_UNREPORTED_QUIET_MS`) and `ended` (parent idle for `SUBAGENT_PARENT_IDLE_ENDED_MS`); `subagentDisplayLabel()` names them. `SubagentTrace` gains `lastActivityAt` and `endedCleanly`. `EventAggregator.getLastEventTime()` is a cheap getter.
16
+ - **Compressed Codex rollouts (opt-in).** `includeCompressedRollouts` on `createSessionProviders()` / `CodexProviderOptions`, `collectPromptHistory()`, `collectSessionPromptHistory()` and `findToolCallOrigins()` reads `.jsonl.zst` rollouts when `zlib.zstdDecompressSync` exists (`isZstdDecompressionAvailable()`), and skips them with a diagnostic otherwise. `readRolloutText()`, `readRolloutBuffer()`, `resolveRolloutPath()`, `isCompressedRolloutPath()` and `COMPRESSED_ROLLOUT_SUFFIX` are exported; `walkRolloutFiles()` and `findCodexRolloutFile()` take `includeCompressed`. Live tailing stays `.jsonl`-only, and a `.jsonl` is preferred over its `.zst` twin.
17
+ - **Reader resets.** Optional `SessionReader.lastReset()` returns `{ reason: 'truncated' | 'rewritten' | 'replaced', previousPosition }` for the last restart.
18
+
19
+ ### Fixed
20
+
21
+ - **Rewritten or replaced session files.** The Claude Code and Codex readers check the open file's identity and first 4 KiB on every changed read, as `createJsonlTail()` does, and restart from 0 when the file was rewritten or replaced, not only when it shrank. `ProviderReaderSessionWatcher` and `SessionMonitor.poll()` checked `wasTruncated()` before reading, which counted a truncated file's events twice (and left `SessionMonitor`'s aggregator wrong); both now read first and reset before delivering the replay.
22
+ - **Codex child rollouts.** Records a forked child inherits from its parent (before `subagent_history_start_ordinal`, after an embedded ancestor `session_meta`) are no longer parsed as the child's, and the child's own first `session_meta` is kept. Inherited tool calls were counted in subagent stats; token totals were unaffected.
23
+ - **Codex active-session detection** skips subagent threads.
24
+
25
+ ### Changed
26
+
27
+ - `PermissionMode` (and `permissionModeSchema`) add `'auto'` and `'dontAsk'`; unknown future modes are still dropped rather than rejected. `EventAggregator` now tracks the mode from followed events too.
28
+ - `SessionReader.wasTruncated()` is true whenever the last `readNew()` restarted from offset 0: after a truncation, a rewrite or a replacement.
29
+ - `isSubagentSpawnTool()` also matches Codex `spawn_agent`. `SUBAGENT_SPAWN_TOOL_NAMES` and `isAssistantTurnSubagentTool()` stay Claude Code-only.
30
+ - With `includeTaskNotifications`, `extractSessionEvents()` and the JSONL watcher also emit `system` events for post-compaction `task_status` attachments and stop notices. The Claude Code provider's reader turns it on, so its consumers can see these rare events.
31
+ - `classifyTool()`: `wait` is `other` (Codex code-mode cell waits) and `interrupt_agent` is `subagent`.
32
+ - `SNAPSHOT_SCHEMA_VERSION` is 7, so saved aggregator snapshots replay once.
33
+
8
34
  ## [0.29.1] - 2026-11-01
9
35
 
10
36
  ### Fixed