sticky-note-cli 2.9.2 → 3.1.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.
package/README.md CHANGED
@@ -50,6 +50,40 @@ their next session by relevance.
50
50
 
51
51
  ---
52
52
 
53
+ ## What's New in V3.1
54
+
55
+ - **Full transcript capture**: Every session's complete verbatim transcript
56
+ is now captured by default — not just the narrative summary — stored
57
+ alongside audit logs and presence data, keyed by thread ID rather than
58
+ commit SHA (a thread's transcript belongs to the whole session, not to
59
+ any single commit it produced).
60
+ - **Secret redaction**: Before anything is written or synced, transcripts
61
+ (and the narrative/last_note/prompts summary fields) are scrubbed of
62
+ common secret shapes — cloud provider keys, tokens, private key blocks,
63
+ labeled `key=value` pairs. Best-effort, not a guarantee — see
64
+ [What Gets Captured](#what-gets-captured).
65
+ - **Opt-out**: set `"capture_transcripts": false` in
66
+ `sticky-note-config.json` for repos where this isn't wanted.
67
+ - **New CLI command**: `npx sticky-note transcript <thread-id>` (`--list`,
68
+ `--raw`) to read a thread's captured transcript(s).
69
+ - **New MCP tool**: `get_full_transcript(id)` — 9 tools total now.
70
+
71
+ ## What's New in V3
72
+
73
+ - **Cloud backend (optional)**: Cloudflare KV-backed storage for real-time handoff — no git push/pull required. Hooks auto-detect `STICKY_URL` and switch between cloud and local mode. **Cloud is opt-in** — set `STICKY_URL` in `.env.sticky` to enable it; without it, the default git data-branch storage is used.
74
+ - **Git data-branch storage (default)**: Thread data stored in `sticky-note/data` orphan branch — offline-first, no cloud required, syncs via normal `git push/pull`.
75
+ - **Distributed presence**: Real-time heartbeat across all machines. See who's active *right now*, not at the time of your last pull. Conflict warnings when two developers edit the same file.
76
+ - **HTTP audit API**: Query audit trail by project, file, user, tool, and date range via cloud endpoints. No more grepping JSONL files.
77
+ - **MCP server**: 8 tools (`get_open_threads`, `get_stuck_threads`, `search_threads`, `get_session_context`, `write_thread`, `get_team_config`, `get_presence`, `get_audit_trail`) available via `npx sticky-note-cli mcp-server`.
78
+ - **GitHub Action auto-install**: Zero-touch org rollout via `sticky-note-install.yml`. Org secrets provide cloud config, repos get hooks on first push.
79
+ - **Codex cloud injection**: Codex wrapper reads thread context from cloud before session start — no longer blind to teammate activity.
80
+ - **New CLI commands**: `deploy-backend`, `migrate` (data-branch, default) / `migrate --to cloud` (opt-in), `mcp-server`, `init --v3`, `init --ci --no-prompts`
81
+ - **Backward compatible**: Without `STICKY_URL`, everything works exactly like V2.5. Cloud is opt-in.
82
+
83
+ See [V3 Migration Guide](docs/v3-migration-guide.md) and [Org Rollout Guide](docs/org-rollout.md).
84
+
85
+ ---
86
+
53
87
  ## What's New in V2.7
54
88
 
55
89
  - **Team Environment Sync**: Share your complete AI dev environment through git. Skills, agents, commands, MCP servers, and permissions auto-provision when teammates start a session — zero manual setup
@@ -257,6 +291,32 @@ Runs when the user stops a session. Builds a structured handoff summary
257
291
  (what was done, what failed, current status, next steps) and saves it to
258
292
  the thread's `handoff_summary` field.
259
293
 
294
+ ### Full Transcript Capture
295
+
296
+ `session-end.js` also persists the complete verbatim session transcript —
297
+ Claude Code's native `transcript_path` JSONL file — not just the narrative
298
+ summary the other hooks extract from it.
299
+
300
+ - **Storage**: one JSONL file per thread at `transcripts/<thread-id>.jsonl`
301
+ in the `sticky-note/data` storage layer, alongside `audit/` and
302
+ `presence/`. Keyed by thread ID rather than commit SHA — a thread's
303
+ transcript belongs to the whole session, which may span zero, one, or
304
+ many commits, so it doesn't fit the commit-anchored git-notes model used
305
+ for line attribution. One entry is appended per contributing session, so
306
+ a thread resumed across multiple sessions accumulates its full history.
307
+ - **Redaction**: before anything is written, both the full transcript and
308
+ the narrative/last_note/prompts summary fields are scrubbed of
309
+ recognizable secret shapes (AWS/GitHub/Slack tokens, PEM private key
310
+ blocks, bearer tokens, JWTs, labeled `key=value` pairs). This is a
311
+ pattern-matching floor, not a guarantee — it won't catch a secret in an
312
+ unrecognized shape. Disable with `"redact_transcripts": false` if you'd
313
+ rather have the raw text (not recommended for a shared remote).
314
+ - **Opt-out**: set `"capture_transcripts": false` in
315
+ `sticky-note-config.json` to turn this off entirely for a repo.
316
+ - **Retrieval**: `npx sticky-note transcript <thread-id>` (`--list` to see
317
+ which threads have one, `--raw` for the untouched JSONL) or the
318
+ `get_full_transcript(id)` MCP tool.
319
+
260
320
  ---
261
321
 
262
322
  ## What Gets Captured
@@ -270,9 +330,16 @@ the thread's `handoff_summary` field.
270
330
  | Narrative | [OK] | "Fixed auth token refresh flow" |
271
331
  | Failed approaches | [OK] | What was tried, errors, files |
272
332
  | Work type | [OK] | bug-fix, feature, debugging, etc. |
273
- | Code content | [ERR] | Never captured |
274
- | Conversation | [ERR] | Never captured |
275
- | Credentials | [ERR] | Never captured |
333
+ | Full session transcript | [OK] — opt-out via `capture_transcripts: false` | Verbatim user/assistant messages, tool calls, tool output. See [Full Transcript Capture](#full-transcript-capture). |
334
+ | Code content | [OK] — as part of the transcript, not separately | Code you write or read shows up verbatim in the transcript's tool_use/tool_result entries |
335
+ | Credentials | [WARN] best-effort redacted, not guaranteed | Recognizable secret shapes (cloud keys, tokens, private key blocks, labeled key=value pairs) are scrubbed before anything is written or synced — see [Full Transcript Capture](#full-transcript-capture) |
336
+
337
+ > [!NOTE]
338
+ > Prior to V3.1, this table said conversations and code content were never
339
+ > captured — that was true when only summary fields (narrative, prompts)
340
+ > existed. Full transcript capture changes that by design (see
341
+ > [What's New in V3.1](#whats-new-in-v31)). If your team doesn't want this,
342
+ > set `capture_transcripts: false`.
276
343
 
277
344
  ---
278
345
 
@@ -334,15 +401,21 @@ CLAUDE.md # AI instructions for Claude Code
334
401
  ## CLI Commands
335
402
 
336
403
  ```bash
337
- npx sticky-note-cli init # Interactive setup
338
- npx sticky-note-cli init --codex # Setup with Codex wrapper
339
- npx sticky-note-cli update # Update hook scripts (preserves data)
340
- npx sticky-note-cli status # Diagnostic report (includes attribution health)
341
- npx sticky-note-cli threads # List threads with status icons
404
+ npx sticky-note-cli init # Interactive setup
405
+ npx sticky-note-cli init --v3 # V3 setup with cloud backend config
406
+ npx sticky-note-cli init --ci # Non-interactive for CI/GitHub Action
407
+ npx sticky-note-cli init --codex # Setup with Codex wrapper
408
+ npx sticky-note-cli update # Update hook scripts (preserves data)
409
+ npx sticky-note-cli deploy-backend # Provision Cloudflare KV + deploy Worker
410
+ npx sticky-note-cli migrate --to cloud # Migrate V2 local data to cloud
411
+ npx sticky-note-cli mcp-server # Start MCP server (stdio transport)
412
+ npx sticky-note-cli status # Diagnostic report (includes cloud health)
413
+ npx sticky-note-cli threads # List threads with status icons
342
414
  npx sticky-note-cli resume # List resumable threads
343
415
  npx sticky-note-cli resume <id> # Resume a previous thread
344
416
  npx sticky-note-cli resume --clear # Cancel active resume
345
417
  npx sticky-note-cli resume-thread # Smart resume: --query, --user, --file (V2.5)
418
+ npx sticky-note-cli transcript <id> # Show a thread's captured transcript (--list, --raw) (V3.1)
346
419
  npx sticky-note-cli audit # Query merged audit trail (all users)
347
420
  npx sticky-note-cli who # Show active and recent team members
348
421
  npx sticky-note-cli overlap # Detect file overlaps with teammates (V2.6)
@@ -397,6 +470,8 @@ Edit `.sticky-note/sticky-note-config.json`:
397
470
  | `mcp_servers` | Shared MCP server references | `[]` |
398
471
  | `skills` | Team skill definitions | `[]` |
399
472
  | `conventions` | Team coding conventions (injected) | `[]` |
473
+ | `capture_transcripts` | Persist each session's full verbatim transcript (V3.1) | `true` |
474
+ | `redact_transcripts` | Scrub recognizable secrets before writing transcripts/narrative/prompts (V3.1) | `true` |
400
475
 
401
476
  ---
402
477
 
@@ -456,6 +531,7 @@ Add to `.mcp.json` at your project root:
456
531
  | Tool | Description |
457
532
  |------|-------------|
458
533
  | `get_session_context(id)` | Full thread payload by ID |
534
+ | `get_full_transcript(id)` | Full verbatim session transcript(s) for a thread (V3.1) |
459
535
  | `get_stuck_threads()` | All stuck threads with failed approaches |
460
536
  | `search_threads(query)` | Keyword search across threads |
461
537
  | `get_audit_trail(file, user, since, ...)` | Query per-user audit logs |
@@ -558,7 +634,13 @@ design discussion.
558
634
  ## FAQ
559
635
 
560
636
  **Q: Does this capture my code or conversations?**
561
- A: No. Only file paths, timestamps, usernames, and status metadata.
637
+ A: As of V3.1, yes, by default — each session's full verbatim transcript is
638
+ captured (see [Full Transcript Capture](#full-transcript-capture)), which
639
+ necessarily includes code you write or read and the conversation itself.
640
+ Recognizable secrets are redacted before anything is written, but that's a
641
+ best-effort pattern match, not a guarantee. Set `"capture_transcripts": false`
642
+ in `sticky-note-config.json` to turn this off and go back to metadata-only
643
+ capture (files touched, timestamps, usernames, status, narrative summaries).
562
644
 
563
645
  **Q: What happens with merge conflicts in sticky-note.json?**
564
646
  A: `merge=union` in `.gitattributes` handles most cases automatically.
@@ -578,7 +660,9 @@ A: Run `npx sticky-note-cli init --codex`, then alias the wrapper:
578
660
 
579
661
  ## License
580
662
 
581
- [MIT](LICENSE) — fully open source, no restrictions.
663
+ Client (hooks, CLI, templates): [MIT](LICENSE) — fully open source, no restrictions.
664
+
665
+ Cloud backend (`sticky-server/`): [AGPL-3.0](sticky-server/LICENSE)
582
666
 
583
667
  ---
584
668