elliot-stack 1.0.29 → 1.0.33

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 (128) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +5 -0
  3. package/bin/install.cjs +981 -950
  4. package/hooks/repo-search-nudge.js +32 -32
  5. package/package.json +1 -1
  6. package/skills/estack-active-learning-tutor/SKILL.md +339 -339
  7. package/skills/estack-better-title/SKILL.md +64 -64
  8. package/skills/estack-better-title/scripts/rename.sh +55 -55
  9. package/skills/estack-chris-voss/SKILL.md +80 -80
  10. package/skills/estack-chris-voss/references/elliot-notes.md +120 -120
  11. package/skills/estack-chris-voss/references/voss-principles.md +210 -210
  12. package/skills/estack-customer-discovery/SKILL.md +60 -60
  13. package/skills/estack-flight-planner/SKILL.md +332 -332
  14. package/skills/estack-flight-planner/references/config_schema.md +156 -156
  15. package/skills/estack-flight-planner/references/flight_history_schema.md +97 -97
  16. package/skills/estack-flight-planner/references/shuttle_schedules.md +98 -98
  17. package/skills/estack-flight-planner/scripts/check_setup.sh +89 -89
  18. package/skills/estack-flight-planner/scripts/fetch_flights.py +99 -99
  19. package/skills/estack-flight-planner/scripts/filter_flights.py +265 -265
  20. package/skills/estack-flight-planner/scripts/pair_shuttles.py +173 -173
  21. package/skills/estack-github-issue-tracker/SKILL.md +322 -322
  22. package/skills/estack-github-issue-tracker/bin/tracker-tools.cjs +1358 -1358
  23. package/skills/estack-github-issue-tracker/references/gh-cli-patterns.md +124 -124
  24. package/skills/estack-github-issue-tracker/references/result-file-schema.md +156 -156
  25. package/skills/estack-github-issue-tracker/references/tracker-schema.md +96 -96
  26. package/skills/estack-github-issue-tracker/tracker-template.md +58 -58
  27. package/skills/estack-leadership-coach/SKILL.md +235 -0
  28. package/skills/estack-leadership-coach/adding-references.md +280 -0
  29. package/skills/estack-leadership-coach/frameworks/delegation/flows/post-mortem.md +120 -0
  30. package/skills/estack-leadership-coach/frameworks/delegation/flows/pre-delegation.md +138 -0
  31. package/skills/estack-leadership-coach/frameworks/delegation/phases/1-intake.md +145 -0
  32. package/skills/estack-leadership-coach/frameworks/delegation/phases/2-trm-assessment.md +119 -0
  33. package/skills/estack-leadership-coach/frameworks/delegation/phases/3-enrollment.md +132 -0
  34. package/skills/estack-leadership-coach/frameworks/delegation/phases/4-build-brief.md +171 -0
  35. package/skills/estack-leadership-coach/frameworks/delegation/phases/5-monitoring.md +134 -0
  36. package/skills/estack-leadership-coach/frameworks/delegation/phases/6-reverse-delegation.md +118 -0
  37. package/skills/estack-leadership-coach/frameworks/delegation/phases/7-diagnose.md +200 -0
  38. package/skills/estack-leadership-coach/references/.source-files/deci-ryan_self-determination-theory__deci-olafsen-ryan-2017-self-determination-theory-in-work-organizations.md +1881 -0
  39. package/skills/estack-leadership-coach/references/.source-files/deci-ryan_self-determination-theory__gagne-deci-2005-self-determination-theory-and-work-motivation.md +2058 -0
  40. package/skills/estack-leadership-coach/references/.source-files/deci-ryan_self-determination-theory__selfdeterminationtheory-org-theory-overview-page.md +61 -0
  41. package/skills/estack-leadership-coach/references/.source-files/gallup_engagement-research__gallup-3-key-insights-into-the-global-workplace-2024.md +57 -0
  42. package/skills/estack-leadership-coach/references/.source-files/gallup_engagement-research__gallup-managers-account-for-70-percent-of-variance-in-employee-engagement-2015.md +40 -0
  43. package/skills/estack-leadership-coach/references/.source-files/gallup_engagement-research__gallup-state-of-the-global-workplace-2026-global-data-summary.md +73 -0
  44. package/skills/estack-leadership-coach/references/.source-files/gallup_engagement-research__gallup-state-of-the-global-workplace-2026-report-landing.md +42 -0
  45. package/skills/estack-leadership-coach/references/.source-files/hormozi-leila_4-stages__leila-hormozi-the-art-of-delegation-blog-post.md +91 -0
  46. package/skills/estack-leadership-coach/references/.source-files/oncken-wass_monkeys-hbr-1974__oncken-wass-management-time-whos-got-the-monkey-hbr-classic-1974.md +969 -0
  47. package/skills/estack-leadership-coach/references/.source-files/sanchez_main-street-millionaire__codie-sanchez-afford-anything-podcast-ep-565-show-notes.md +89 -0
  48. package/skills/estack-leadership-coach/references/.source-files/sullivan_who-not-how__dan-sullivan-impact-filter-tool-and-guide-booklet.md +565 -0
  49. package/skills/estack-leadership-coach/references/.source-files/van-edwards_cues__vanessa-van-edwards-lewis-howes-school-of-greatness-ep-1231-show-notes.md +122 -0
  50. package/skills/estack-leadership-coach/references/.source-files/van-edwards_cues__vanessa-van-edwards-roger-dooley-cues-interview.md +194 -0
  51. package/skills/estack-leadership-coach/references/deci-ryan_self-determination-theory.md +166 -0
  52. package/skills/estack-leadership-coach/references/doerr_measure-what-matters.md +154 -0
  53. package/skills/estack-leadership-coach/references/ferriss_4hww.md +189 -0
  54. package/skills/estack-leadership-coach/references/gallup_engagement-research.md +105 -0
  55. package/skills/estack-leadership-coach/references/gerber_e-myth-revisited.md +118 -0
  56. package/skills/estack-leadership-coach/references/grove_high-output-management.md +95 -0
  57. package/skills/estack-leadership-coach/references/hormozi-alex_followthrough.md +152 -0
  58. package/skills/estack-leadership-coach/references/hormozi-leila_4-stages.md +146 -0
  59. package/skills/estack-leadership-coach/references/oncken-wass_monkeys-hbr-1974.md +128 -0
  60. package/skills/estack-leadership-coach/references/sanchez_main-street-millionaire.md +196 -0
  61. package/skills/estack-leadership-coach/references/sullivan_who-not-how.md +137 -0
  62. package/skills/estack-leadership-coach/references/van-edwards_cues.md +189 -0
  63. package/skills/estack-migrate-claude-session-history/SKILL.md +226 -0
  64. package/skills/estack-migrate-claude-session-history/references/path-encoding.md +55 -0
  65. package/skills/estack-migrate-claude-session-history/references/troubleshooting.md +96 -0
  66. package/skills/estack-migrate-claude-session-history/scripts/migrate-claude-history.js +1123 -0
  67. package/skills/estack-migrate-claude-session-history/scripts/test-append-note.js +48 -0
  68. package/skills/estack-migrate-claude-session-history/scripts/test-validate-migration.py +326 -0
  69. package/skills/estack-migrate-claude-session-history/scripts/validate-migration.py +493 -0
  70. package/skills/estack-pdf-to-md/SKILL.md +180 -0
  71. package/skills/estack-pdf-to-md/scripts/pdf_to_md.py +596 -0
  72. package/skills/estack-productivity-prioritization-coach/SKILL.md +124 -0
  73. package/skills/estack-productivity-prioritization-coach/sources/01-tony-robbins-rpm.md +39 -0
  74. package/skills/estack-productivity-prioritization-coach/sources/02-justin-sung-task-prioritization.md +34 -0
  75. package/skills/estack-prompt-builder-coach/SKILL.md +81 -81
  76. package/skills/estack-prompt-builder-coach/definition-of-done-generator.md +42 -42
  77. package/skills/estack-prompt-builder-coach/prompt-builder.md +37 -37
  78. package/skills/estack-prompt-builder-coach/task-shaper.md +36 -36
  79. package/skills/estack-prompt-builder-coach/vague-ask-auditor.md +37 -37
  80. package/skills/estack-read-claude-session-history/SKILL.md +204 -204
  81. package/skills/estack-read-claude-session-history/references/jsonl-schema.md +126 -126
  82. package/skills/estack-read-claude-session-history/references/modes.md +423 -423
  83. package/skills/estack-read-claude-session-history/references/recipes.md +271 -271
  84. package/skills/estack-read-claude-session-history/scripts/lib/__init__.py +1 -1
  85. package/skills/estack-read-claude-session-history/scripts/lib/parser.py +460 -460
  86. package/skills/estack-read-claude-session-history/scripts/lib/paths.py +234 -234
  87. package/skills/estack-read-claude-session-history/scripts/lib/search.py +179 -179
  88. package/skills/estack-read-claude-session-history/scripts/lib/subagents.py +88 -88
  89. package/skills/estack-read-claude-session-history/scripts/lib/tools.py +144 -144
  90. package/skills/estack-read-claude-session-history/scripts/read_transcript.py +1776 -1776
  91. package/skills/estack-read-claude-session-history/scripts/tests/conftest.py +40 -40
  92. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/README.md +20 -20
  93. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/all-noise.jsonl +4 -4
  94. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/basic-session.jsonl +2 -2
  95. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-gaps.jsonl +9 -9
  96. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-noise.jsonl +7 -7
  97. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-parallel-a.jsonl +3 -3
  98. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-parallel-b.jsonl +3 -3
  99. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-waiting.jsonl +5 -5
  100. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/interrupted.jsonl +2 -2
  101. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/multi-compact.jsonl +8 -8
  102. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/pending-user.jsonl +2 -2
  103. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-no-meta/subagents/agent-aaa.jsonl +2 -2
  104. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-no-meta.jsonl +2 -2
  105. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-parent/subagents/agent-xyz123.jsonl +2 -2
  106. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-parent/subagents/agent-xyz123.meta.json +1 -1
  107. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-parent.jsonl +4 -4
  108. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/time-spread.jsonl +6 -6
  109. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/timeline-day-test.jsonl +5 -5
  110. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/tool-zoo.jsonl +10 -10
  111. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/truncated.jsonl +2 -2
  112. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/unicode.jsonl +2 -2
  113. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/with-advisor.jsonl +3 -3
  114. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/with-compact.jsonl +5 -5
  115. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/with-thinking.jsonl +2 -2
  116. package/skills/estack-read-claude-session-history/scripts/tests/test_backup_roots.py +56 -56
  117. package/skills/estack-read-claude-session-history/scripts/tests/test_engagement.py +239 -239
  118. package/skills/estack-read-claude-session-history/scripts/tests/test_json_format.py +201 -201
  119. package/skills/estack-read-claude-session-history/scripts/tests/test_modes.py +199 -199
  120. package/skills/estack-read-claude-session-history/scripts/tests/test_parser.py +195 -195
  121. package/skills/estack-read-claude-session-history/scripts/tests/test_paths.py +133 -133
  122. package/skills/estack-read-claude-session-history/scripts/tests/test_search.py +78 -78
  123. package/skills/estack-read-claude-session-history/scripts/tests/test_subagents.py +43 -43
  124. package/skills/estack-read-claude-session-history/scripts/tests/test_timeline.py +179 -179
  125. package/skills/estack-read-claude-session-history/scripts/tests/test_timezone_and_project.py +212 -212
  126. package/skills/estack-read-claude-session-history/scripts/tests/test_tools.py +80 -80
  127. package/skills/estack-repo-search/SKILL.md +65 -65
  128. package/skills/estack-vscode-file-recovery/SKILL.md +188 -0
@@ -1,68 +1,68 @@
1
- ---
2
- name: estack-repo-search
3
- version: 1.0.2
4
- description: >-
5
- (repo-search) Clone and search external GitHub repositories to answer questions about their
6
- code. Use this skill whenever the user references a repo you don't have local
7
- context for, asks about code in an external project, wants to compare
8
- implementations across repos, or needs information from a codebase that isn't
9
- in the current working directory. Also use when the user says things like
10
- "check how X does it", "look at the source for Y", "search that repo",
11
- "clone it and find...", or references a GitHub URL. If you're unsure whether
12
- you have enough context about an external codebase to answer accurately,
13
- use this skill to clone it and look.
14
- ---
15
-
16
- # Repo Search
17
-
18
- Search external repositories by cloning them into a persistent sandbox and exploring with subagents.
19
-
20
- ## Available repos
21
-
22
- ```!
23
- mkdir -p ~/repo-search-storage
24
- echo "=== Repo Sandbox: ~/repo-search-storage ==="
25
- echo ""
26
- found=0
27
- for dir in ~/repo-search-storage/*/; do
28
- [ -d "$dir/.git" ] || continue
29
- found=1
30
- name=$(basename "$dir")
31
- url=$(cd "$dir" && git remote get-url origin 2>/dev/null || echo "(no remote)")
32
- echo "- $name → $url"
33
- echo " Updating..."
34
- (cd "$dir" && git pull --ff-only 2>&1) | sed 's/^/ /'
35
- echo ""
36
- done
37
- if [ "$found" -eq 0 ]; then
38
- echo "(no repos cached yet)"
39
- fi
40
- ```
41
-
42
- Present the user with the repos listed above and offer to search any of them or clone a new one.
43
-
44
- ## Finding the correct repo
45
-
46
- Before cloning, you must have the exact GitHub URL. Follow these rules:
47
-
48
- - **If the user gave a full GitHub URL** (e.g. `https://github.com/org/repo`), use it directly.
49
- - **If the user gave only a name** (e.g. "openclaw", "langchain"), use WebSearch to find the correct GitHub repository URL first. Never guess a repo URL — confirm it via search.
50
- - **Always verify** the search result matches what the user is asking about before cloning. It doesn't hurt to confirm with the user — "I found X repo, is that the one you meant?" — before spending time cloning. Wrong repo = wasted time and misleading answers.
51
-
52
- ## Cloning
53
-
54
- Once you have a confirmed URL, shallow clone into the sandbox:
55
-
56
- ```bash
57
- git clone --depth 1 <repo-url> ~/repo-search-storage/<repo-name>
58
- ```
59
-
60
- ## Searching
61
-
62
- To explore a repo, spawn one or more **Haiku** subagents using the Agent tool with `model: "haiku"` and `subagent_type: "Explore"`. In the prompt, always include the **full absolute path** to the cloned repo (e.g. `C:/Users/2supe/repo-search-storage/gstack`) and tell the subagent to search within that directory. Without this, the subagent won't know where to look.
63
-
64
- If the question spans multiple areas of the repo, spawn multiple subagents in parallel — each focused on a different aspect — to get answers faster.
65
-
1
+ ---
2
+ name: estack-repo-search
3
+ version: 1.0.2
4
+ description: >-
5
+ (repo-search) Clone and search external GitHub repositories to answer questions about their
6
+ code. Use this skill whenever the user references a repo you don't have local
7
+ context for, asks about code in an external project, wants to compare
8
+ implementations across repos, or needs information from a codebase that isn't
9
+ in the current working directory. Also use when the user says things like
10
+ "check how X does it", "look at the source for Y", "search that repo",
11
+ "clone it and find...", or references a GitHub URL. If you're unsure whether
12
+ you have enough context about an external codebase to answer accurately,
13
+ use this skill to clone it and look.
14
+ ---
15
+
16
+ # Repo Search
17
+
18
+ Search external repositories by cloning them into a persistent sandbox and exploring with subagents.
19
+
20
+ ## Available repos
21
+
22
+ ```!
23
+ mkdir -p ~/repo-search-storage
24
+ echo "=== Repo Sandbox: ~/repo-search-storage ==="
25
+ echo ""
26
+ found=0
27
+ for dir in ~/repo-search-storage/*/; do
28
+ [ -d "$dir/.git" ] || continue
29
+ found=1
30
+ name=$(basename "$dir")
31
+ url=$(cd "$dir" && git remote get-url origin 2>/dev/null || echo "(no remote)")
32
+ echo "- $name → $url"
33
+ echo " Updating..."
34
+ (cd "$dir" && git pull --ff-only 2>&1) | sed 's/^/ /'
35
+ echo ""
36
+ done
37
+ if [ "$found" -eq 0 ]; then
38
+ echo "(no repos cached yet)"
39
+ fi
40
+ ```
41
+
42
+ Present the user with the repos listed above and offer to search any of them or clone a new one.
43
+
44
+ ## Finding the correct repo
45
+
46
+ Before cloning, you must have the exact GitHub URL. Follow these rules:
47
+
48
+ - **If the user gave a full GitHub URL** (e.g. `https://github.com/org/repo`), use it directly.
49
+ - **If the user gave only a name** (e.g. "openclaw", "langchain"), use WebSearch to find the correct GitHub repository URL first. Never guess a repo URL — confirm it via search.
50
+ - **Always verify** the search result matches what the user is asking about before cloning. It doesn't hurt to confirm with the user — "I found X repo, is that the one you meant?" — before spending time cloning. Wrong repo = wasted time and misleading answers.
51
+
52
+ ## Cloning
53
+
54
+ Once you have a confirmed URL, shallow clone into the sandbox:
55
+
56
+ ```bash
57
+ git clone --depth 1 <repo-url> ~/repo-search-storage/<repo-name>
58
+ ```
59
+
60
+ ## Searching
61
+
62
+ To explore a repo, spawn one or more **Haiku** subagents using the Agent tool with `model: "haiku"` and `subagent_type: "Explore"`. In the prompt, always include the **full absolute path** to the cloned repo (e.g. `C:/Users/2supe/repo-search-storage/gstack`) and tell the subagent to search within that directory. Without this, the subagent won't know where to look.
63
+
64
+ If the question spans multiple areas of the repo, spawn multiple subagents in parallel — each focused on a different aspect — to get answers faster.
65
+
66
66
  ---
67
67
 
68
68
  ## Skill Feedback
@@ -0,0 +1,188 @@
1
+ ---
2
+ name: estack-vscode-file-recovery
3
+ version: 1.2.0
4
+ description: >
5
+ (vscode-file-recovery) Recover files that were permanently deleted (via rm, bash delete, or any method that bypasses the Recycle Bin) using VS Code's or Cursor's Local History snapshots, or from Claude session transcripts.
6
+ Use this skill immediately whenever: a file was deleted and git can't recover it (untracked or not committed), the user says "get it back", "restore that file", "I lost that file", "can you undo that delete", or any variation of wanting a deleted file recovered. Also use proactively after any rm or bash delete of files that weren't committed to git.
7
+ VS Code and Cursor silently save a snapshot every time you open or edit a file in the editor — this is often the only recovery path when git and Recycle Bin both fail.
8
+ ---
9
+
10
+ # VS Code / Cursor File Recovery
11
+
12
+ When a file is deleted outside of git (with `rm`, bash, or any method that bypasses the Recycle Bin), this skill recovers it from editor Local History or Claude session transcripts.
13
+
14
+ ## Recovery Sources — Try in Order
15
+
16
+ 1. **Editor Local History** (VS Code or Cursor) — covered below
17
+ 2. **Claude session transcript** — if Claude read the file in a prior session, its content may be in the JSONL. Use `/read-transcript` to search session history.
18
+ 3. **Git** — only if the file was ever committed
19
+ 4. **Cloud sync** (OneDrive, Dropbox) — check the cloud recycle bin / version history
20
+
21
+ ---
22
+
23
+ ## How Editor Local History Works
24
+
25
+ VS Code and Cursor automatically save timestamped snapshots of every file opened in the editor. These live at:
26
+
27
+ ```
28
+ VS Code (Windows): C:\Users\[username]\AppData\Roaming\Code\User\History\
29
+ Cursor (Windows): C:\Users\[username]\AppData\Roaming\Cursor\User\History\
30
+ VS Code (Mac): ~/Library/Application Support/Code/User/History/
31
+ Cursor (Mac): ~/Library/Application Support/Cursor/User/History/
32
+ VS Code (Linux): ~/.config/Code/User/History/
33
+ Cursor (Linux): ~/.config/Cursor/User/History/
34
+ ```
35
+
36
+ Each file gets a hash-named folder containing:
37
+ - `entries.json` — maps the original file path to snapshot IDs and timestamps
38
+ - `[id].[ext]` — the actual snapshot content (e.g., `dtgz.md`, `F9gm.txt`)
39
+
40
+ **Critical limitation:** VS Code only snapshots files that were actually *opened as a tab in the editor*. Files visible only in the sidebar Explorer are not captured.
41
+
42
+ ---
43
+
44
+ ## Recovery Steps
45
+
46
+ ### Step 1: Identify what to search for
47
+
48
+ Collect from the user (or from the deletion event):
49
+ - The filename (e.g., `Untitled-1.md`)
50
+ - The full path if known (e.g., `C:\Users\2supe\All Coding\akiflow-mcp\Untitled-1.md`)
51
+ - Any partial path segments (folder name, project name)
52
+
53
+ ### Step 2: Search editor history for the file
54
+
55
+ Search `entries.json` files in both VS Code and Cursor History directories.
56
+
57
+ **Windows (PowerShell) — searches both editors:**
58
+ ```powershell
59
+ @("Code", "Cursor") | ForEach-Object {
60
+ $histPath = "$env:APPDATA\$_\User\History"
61
+ if (Test-Path $histPath) {
62
+ Get-ChildItem $histPath -Recurse |
63
+ Where-Object { $_.Name -eq "entries.json" } |
64
+ ForEach-Object {
65
+ $content = Get-Content $_.FullName -Raw -ErrorAction SilentlyContinue
66
+ if ($content -like "*FILENAME_OR_PATH_PATTERN*") {
67
+ $_.FullName
68
+ $content
69
+ }
70
+ }
71
+ }
72
+ }
73
+ ```
74
+
75
+ Replace `FILENAME_OR_PATH_PATTERN` with the filename or path fragment. **Use `-like "*filename*"` rather than `-match "filename"` to avoid regex metacharacter issues** (`.`, `(`, `)`, `+` in filenames break `-match`).
76
+
77
+ If matching a full path, note that editors URL-encode it in `entries.json`: drive colons become `%3A`, backslashes become `/`, and spaces become `%20`. Example: `C:\Users\2supe\My App (v2).md` → `file:///c%3A/Users/2supe/My%20App%20%28v2%29.md`. **Searching by filename alone is simpler and usually sufficient.**
78
+
79
+ **Mac (bash) — searches both editors:**
80
+ ```bash
81
+ for app in "Code" "Cursor"; do
82
+ grep -rl "FILENAME_OR_PATH_PATTERN" "$HOME/Library/Application Support/$app/User/History/" 2>/dev/null
83
+ done
84
+ ```
85
+
86
+ ### Step 3: Read the entries.json to find the latest snapshot
87
+
88
+ The `entries.json` looks like:
89
+ ```json
90
+ {
91
+ "version": 1,
92
+ "resource": "file:///c%3A/Users/2supe/path/to/Untitled-1.md",
93
+ "entries": [
94
+ {"id": "F9gm.md", "source": "Workspace Edit", "timestamp": 1776196985353},
95
+ {"id": "U4ha.md", "source": "Workspace Edit", "timestamp": 1776197058059},
96
+ {"id": "dtgz.md", "source": "Workspace Edit", "timestamp": 1776197128275}
97
+ ]
98
+ }
99
+ ```
100
+
101
+ The **last entry** in the array is the most recent snapshot. Take its `id` field.
102
+
103
+ ### Step 4: Read the snapshot content
104
+
105
+ ```powershell
106
+ Get-Content "C:\Users\[username]\AppData\Roaming\Code\User\History\[hash-folder]\[id]"
107
+ ```
108
+
109
+ Or use the Read tool with the full path.
110
+
111
+ ### Step 5: Restore the file
112
+
113
+ Write the content back to the original location using the Write tool.
114
+
115
+ ---
116
+
117
+ ## When Editor History Won't Help
118
+
119
+ - **File was never opened as an editor tab** — files only visible in the sidebar Explorer are not snapshotted.
120
+ - **History was cleared** — default retention is 30 days / 50 entries per file.
121
+
122
+ If editor history doesn't have the file, fall back to:
123
+ 1. **`/read-transcript`** — if Claude read the file in a prior session, the content is in the session JSONL. Use `--mode search --query "filename"` to find it. Note: you need to point it at the right project's sessions — if the file lived in a different project folder, search that project's transcript directory instead.
124
+ 2. **Windows Shadow Copies** (last resort, requires admin) — Windows VSS may have a snapshot of the volume. Check if any exist first:
125
+ ```powershell
126
+ vssadmin list shadows
127
+ ```
128
+ If a shadow copy exists, mount it and browse (**requires an elevated/admin shell**; the trailing backslash on the device path is required or `mklink` fails silently):
129
+ ```powershell
130
+ cmd /c mklink /d C:\shadow \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\
131
+ ```
132
+ Replace the device path with the one from `vssadmin list shadows`. Browse `C:\shadow\` like a normal drive to find and copy the file back. Clean up after: `cmd /c rmdir C:\shadow`.
133
+ 3. **File recovery software** (Recuva on Windows) — only works if the disk blocks haven't been overwritten yet.
134
+
135
+ ---
136
+
137
+ ## Example
138
+
139
+ **Scenario:** `rm` deleted `Untitled-1.md` which was untracked by git.
140
+
141
+ ```powershell
142
+ # Search
143
+ Get-ChildItem "$env:APPDATA\Code\User\History" -Recurse |
144
+ Where-Object { $_.Name -eq "entries.json" } |
145
+ ForEach-Object {
146
+ $content = Get-Content $_.FullName -Raw -ErrorAction SilentlyContinue
147
+ if ($content -like "*Untitled-1*") { $_.FullName; $content }
148
+ }
149
+
150
+ # Result shows: C:\...\History\-6e228c75\entries.json
151
+ # entries.json has latest id: "dtgz.md"
152
+
153
+ # Read snapshot
154
+ Get-Content "C:\Users\2supe\AppData\Roaming\Code\User\History\-6e228c75\dtgz.md"
155
+
156
+ # Restore
157
+ # (Use Write tool to recreate the file at original path)
158
+ ```
159
+ ---
160
+
161
+ ## Skill Feedback
162
+
163
+ If the user shares feedback about this skill — a bug, something confusing, a missing feature, or a suggestion — ask them to describe it in a bit more detail (what they expected, what happened, and any relevant context). Then file the issue using whichever method is available:
164
+
165
+ **If `gh` is installed** (`gh --version` succeeds), create the issue directly:
166
+
167
+ ```bash
168
+ gh issue create \
169
+ --repo ElliotDrel/e-stack \
170
+ --title "estack-vscode-file-recovery: <concise summary>" \
171
+ --body "<description from user feedback — expected vs. actual behavior and context>"
172
+ ```
173
+
174
+ **If `gh` is not installed**, build a pre-filled URL:
175
+
176
+ ```bash
177
+ python3 -c "
178
+ import urllib.parse
179
+ title = 'estack-vscode-file-recovery: <concise summary>'
180
+ body = '<description from user feedback — expected vs. actual behavior and context>'
181
+ base = 'https://github.com/ElliotDrel/e-stack/issues/new'
182
+ print(base + '?title=' + urllib.parse.quote(title) + '&body=' + urllib.parse.quote(body))
183
+ "
184
+ ```
185
+
186
+ Share the printed URL with the user and offer to open it in their browser.
187
+
188
+ They can also click it directly, review the pre-filled title and body, and click **Submit new issue**.