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.
- package/LICENSE +21 -21
- package/README.md +5 -0
- package/bin/install.cjs +981 -950
- package/hooks/repo-search-nudge.js +32 -32
- package/package.json +1 -1
- package/skills/estack-active-learning-tutor/SKILL.md +339 -339
- package/skills/estack-better-title/SKILL.md +64 -64
- package/skills/estack-better-title/scripts/rename.sh +55 -55
- package/skills/estack-chris-voss/SKILL.md +80 -80
- package/skills/estack-chris-voss/references/elliot-notes.md +120 -120
- package/skills/estack-chris-voss/references/voss-principles.md +210 -210
- package/skills/estack-customer-discovery/SKILL.md +60 -60
- package/skills/estack-flight-planner/SKILL.md +332 -332
- package/skills/estack-flight-planner/references/config_schema.md +156 -156
- package/skills/estack-flight-planner/references/flight_history_schema.md +97 -97
- package/skills/estack-flight-planner/references/shuttle_schedules.md +98 -98
- package/skills/estack-flight-planner/scripts/check_setup.sh +89 -89
- package/skills/estack-flight-planner/scripts/fetch_flights.py +99 -99
- package/skills/estack-flight-planner/scripts/filter_flights.py +265 -265
- package/skills/estack-flight-planner/scripts/pair_shuttles.py +173 -173
- package/skills/estack-github-issue-tracker/SKILL.md +322 -322
- package/skills/estack-github-issue-tracker/bin/tracker-tools.cjs +1358 -1358
- package/skills/estack-github-issue-tracker/references/gh-cli-patterns.md +124 -124
- package/skills/estack-github-issue-tracker/references/result-file-schema.md +156 -156
- package/skills/estack-github-issue-tracker/references/tracker-schema.md +96 -96
- package/skills/estack-github-issue-tracker/tracker-template.md +58 -58
- package/skills/estack-leadership-coach/SKILL.md +235 -0
- package/skills/estack-leadership-coach/adding-references.md +280 -0
- package/skills/estack-leadership-coach/frameworks/delegation/flows/post-mortem.md +120 -0
- package/skills/estack-leadership-coach/frameworks/delegation/flows/pre-delegation.md +138 -0
- package/skills/estack-leadership-coach/frameworks/delegation/phases/1-intake.md +145 -0
- package/skills/estack-leadership-coach/frameworks/delegation/phases/2-trm-assessment.md +119 -0
- package/skills/estack-leadership-coach/frameworks/delegation/phases/3-enrollment.md +132 -0
- package/skills/estack-leadership-coach/frameworks/delegation/phases/4-build-brief.md +171 -0
- package/skills/estack-leadership-coach/frameworks/delegation/phases/5-monitoring.md +134 -0
- package/skills/estack-leadership-coach/frameworks/delegation/phases/6-reverse-delegation.md +118 -0
- package/skills/estack-leadership-coach/frameworks/delegation/phases/7-diagnose.md +200 -0
- 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
- 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
- package/skills/estack-leadership-coach/references/.source-files/deci-ryan_self-determination-theory__selfdeterminationtheory-org-theory-overview-page.md +61 -0
- package/skills/estack-leadership-coach/references/.source-files/gallup_engagement-research__gallup-3-key-insights-into-the-global-workplace-2024.md +57 -0
- 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
- package/skills/estack-leadership-coach/references/.source-files/gallup_engagement-research__gallup-state-of-the-global-workplace-2026-global-data-summary.md +73 -0
- package/skills/estack-leadership-coach/references/.source-files/gallup_engagement-research__gallup-state-of-the-global-workplace-2026-report-landing.md +42 -0
- package/skills/estack-leadership-coach/references/.source-files/hormozi-leila_4-stages__leila-hormozi-the-art-of-delegation-blog-post.md +91 -0
- 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
- package/skills/estack-leadership-coach/references/.source-files/sanchez_main-street-millionaire__codie-sanchez-afford-anything-podcast-ep-565-show-notes.md +89 -0
- package/skills/estack-leadership-coach/references/.source-files/sullivan_who-not-how__dan-sullivan-impact-filter-tool-and-guide-booklet.md +565 -0
- 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
- package/skills/estack-leadership-coach/references/.source-files/van-edwards_cues__vanessa-van-edwards-roger-dooley-cues-interview.md +194 -0
- package/skills/estack-leadership-coach/references/deci-ryan_self-determination-theory.md +166 -0
- package/skills/estack-leadership-coach/references/doerr_measure-what-matters.md +154 -0
- package/skills/estack-leadership-coach/references/ferriss_4hww.md +189 -0
- package/skills/estack-leadership-coach/references/gallup_engagement-research.md +105 -0
- package/skills/estack-leadership-coach/references/gerber_e-myth-revisited.md +118 -0
- package/skills/estack-leadership-coach/references/grove_high-output-management.md +95 -0
- package/skills/estack-leadership-coach/references/hormozi-alex_followthrough.md +152 -0
- package/skills/estack-leadership-coach/references/hormozi-leila_4-stages.md +146 -0
- package/skills/estack-leadership-coach/references/oncken-wass_monkeys-hbr-1974.md +128 -0
- package/skills/estack-leadership-coach/references/sanchez_main-street-millionaire.md +196 -0
- package/skills/estack-leadership-coach/references/sullivan_who-not-how.md +137 -0
- package/skills/estack-leadership-coach/references/van-edwards_cues.md +189 -0
- package/skills/estack-migrate-claude-session-history/SKILL.md +226 -0
- package/skills/estack-migrate-claude-session-history/references/path-encoding.md +55 -0
- package/skills/estack-migrate-claude-session-history/references/troubleshooting.md +96 -0
- package/skills/estack-migrate-claude-session-history/scripts/migrate-claude-history.js +1123 -0
- package/skills/estack-migrate-claude-session-history/scripts/test-append-note.js +48 -0
- package/skills/estack-migrate-claude-session-history/scripts/test-validate-migration.py +326 -0
- package/skills/estack-migrate-claude-session-history/scripts/validate-migration.py +493 -0
- package/skills/estack-pdf-to-md/SKILL.md +180 -0
- package/skills/estack-pdf-to-md/scripts/pdf_to_md.py +596 -0
- package/skills/estack-productivity-prioritization-coach/SKILL.md +124 -0
- package/skills/estack-productivity-prioritization-coach/sources/01-tony-robbins-rpm.md +39 -0
- package/skills/estack-productivity-prioritization-coach/sources/02-justin-sung-task-prioritization.md +34 -0
- package/skills/estack-prompt-builder-coach/SKILL.md +81 -81
- package/skills/estack-prompt-builder-coach/definition-of-done-generator.md +42 -42
- package/skills/estack-prompt-builder-coach/prompt-builder.md +37 -37
- package/skills/estack-prompt-builder-coach/task-shaper.md +36 -36
- package/skills/estack-prompt-builder-coach/vague-ask-auditor.md +37 -37
- package/skills/estack-read-claude-session-history/SKILL.md +204 -204
- package/skills/estack-read-claude-session-history/references/jsonl-schema.md +126 -126
- package/skills/estack-read-claude-session-history/references/modes.md +423 -423
- package/skills/estack-read-claude-session-history/references/recipes.md +271 -271
- package/skills/estack-read-claude-session-history/scripts/lib/__init__.py +1 -1
- package/skills/estack-read-claude-session-history/scripts/lib/parser.py +460 -460
- package/skills/estack-read-claude-session-history/scripts/lib/paths.py +234 -234
- package/skills/estack-read-claude-session-history/scripts/lib/search.py +179 -179
- package/skills/estack-read-claude-session-history/scripts/lib/subagents.py +88 -88
- package/skills/estack-read-claude-session-history/scripts/lib/tools.py +144 -144
- package/skills/estack-read-claude-session-history/scripts/read_transcript.py +1776 -1776
- package/skills/estack-read-claude-session-history/scripts/tests/conftest.py +40 -40
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/README.md +20 -20
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/all-noise.jsonl +4 -4
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/basic-session.jsonl +2 -2
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-gaps.jsonl +9 -9
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-noise.jsonl +7 -7
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-parallel-a.jsonl +3 -3
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-parallel-b.jsonl +3 -3
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-waiting.jsonl +5 -5
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/interrupted.jsonl +2 -2
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/multi-compact.jsonl +8 -8
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/pending-user.jsonl +2 -2
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-no-meta/subagents/agent-aaa.jsonl +2 -2
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-no-meta.jsonl +2 -2
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-parent/subagents/agent-xyz123.jsonl +2 -2
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-parent/subagents/agent-xyz123.meta.json +1 -1
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-parent.jsonl +4 -4
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/time-spread.jsonl +6 -6
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/timeline-day-test.jsonl +5 -5
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/tool-zoo.jsonl +10 -10
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/truncated.jsonl +2 -2
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/unicode.jsonl +2 -2
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/with-advisor.jsonl +3 -3
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/with-compact.jsonl +5 -5
- package/skills/estack-read-claude-session-history/scripts/tests/fixtures/with-thinking.jsonl +2 -2
- package/skills/estack-read-claude-session-history/scripts/tests/test_backup_roots.py +56 -56
- package/skills/estack-read-claude-session-history/scripts/tests/test_engagement.py +239 -239
- package/skills/estack-read-claude-session-history/scripts/tests/test_json_format.py +201 -201
- package/skills/estack-read-claude-session-history/scripts/tests/test_modes.py +199 -199
- package/skills/estack-read-claude-session-history/scripts/tests/test_parser.py +195 -195
- package/skills/estack-read-claude-session-history/scripts/tests/test_paths.py +133 -133
- package/skills/estack-read-claude-session-history/scripts/tests/test_search.py +78 -78
- package/skills/estack-read-claude-session-history/scripts/tests/test_subagents.py +43 -43
- package/skills/estack-read-claude-session-history/scripts/tests/test_timeline.py +179 -179
- package/skills/estack-read-claude-session-history/scripts/tests/test_timezone_and_project.py +212 -212
- package/skills/estack-read-claude-session-history/scripts/tests/test_tools.py +80 -80
- package/skills/estack-repo-search/SKILL.md +65 -65
- package/skills/estack-vscode-file-recovery/SKILL.md +188 -0
|
@@ -1,124 +1,124 @@
|
|
|
1
|
-
# gh CLI Patterns
|
|
2
|
-
|
|
3
|
-
Reusable command templates for all GitHub API calls in this skill. Replace CAPS placeholders
|
|
4
|
-
with actual values.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Issue Metadata
|
|
9
|
-
|
|
10
|
-
Fetch state, labels, comment count, timestamps:
|
|
11
|
-
```bash
|
|
12
|
-
gh api repos/OWNER/REPO/issues/NUMBER --jq '{state: .state, labels: [.labels[].name], comments: .comments, updated: .updated_at, created: .created_at}'
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Issue Comments
|
|
16
|
-
|
|
17
|
-
Last 3 comments with author, date, full body:
|
|
18
|
-
```bash
|
|
19
|
-
gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '.[-3:] | .[] | {author: .user.login, date: (.created_at | split("T")[0]), body: .body}'
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
All comments (for drafting — verify claims before posting):
|
|
23
|
-
```bash
|
|
24
|
-
gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '.[] | {author: .user.login, date: .created_at, body: .body}'
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
Comments since a date:
|
|
28
|
-
```bash
|
|
29
|
-
gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '[.[] | select(.created_at > "DATE")] | .[] | {author: .user.login, date: (.created_at | split("T")[0]), body: .body}'
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
**Truncation rules:** Never truncate comments on the primary issue being reviewed — technical
|
|
33
|
-
details (addresses, error codes, test counts) get lost. For secondary fetches (known
|
|
34
|
-
duplicates, upstream), `[0:1500]` is acceptable to manage context size.
|
|
35
|
-
|
|
36
|
-
## Issue Body
|
|
37
|
-
|
|
38
|
-
Full issue body (read before commenting on unfamiliar issues):
|
|
39
|
-
```bash
|
|
40
|
-
gh api repos/OWNER/REPO/issues/NUMBER --jq '.body'
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## Search: Issues Involving User
|
|
44
|
-
|
|
45
|
-
Open issues with recent activity:
|
|
46
|
-
```bash
|
|
47
|
-
gh api "search/issues?q=involves:USERNAME+updated:>DATE+is:open" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at)]"'
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Search: Issues by Author
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
gh api "search/issues?q=author:USERNAME+is:open&per_page=100&sort=updated" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at | split("T")[0])]"'
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## Search: Issues by Commenter (excluding authored)
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
gh api "search/issues?q=commenter:USERNAME+is:open+-author:USERNAME&per_page=100&sort=updated" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at | split("T")[0])]"'
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Search: Keyword Search for Duplicates
|
|
63
|
-
|
|
64
|
-
Search for issues matching keywords, created after a specific date:
|
|
65
|
-
```bash
|
|
66
|
-
gh api "search/issues?q=repo:OWNER/REPO+is:open+created:>DATE+KEYWORD1+KEYWORD2&per_page=10" --jq '.items[] | "#\(.number) — \(.title) [\(.created_at | split("T")[0])] @\(.user.login)"'
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Use multiple keyword variations per search to catch different phrasings. Example for an OAuth issue:
|
|
70
|
-
- Search 1: `OAuth redirect MCP`
|
|
71
|
-
- Search 2: `clientId mcp add`
|
|
72
|
-
- Search 3: `Slack plugin authentication`
|
|
73
|
-
|
|
74
|
-
## Search: Recently Closed Issues
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
gh api "search/issues?q=involves:USERNAME+is:closed+closed:>DATE&per_page=50&sort=updated" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [closed: \(.closed_at | split("T")[0])]"'
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## Post Comment
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
gh issue comment NUMBER --repo OWNER/REPO --body "$(cat <<'EOF'
|
|
84
|
-
Comment body here.
|
|
85
|
-
Supports **markdown**.
|
|
86
|
-
EOF
|
|
87
|
-
)"
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
Always use heredoc (`<<'EOF'`) for comment bodies to handle special characters and newlines.
|
|
91
|
-
|
|
92
|
-
## Quick State Check
|
|
93
|
-
|
|
94
|
-
Check if an issue is still open (fast, minimal data):
|
|
95
|
-
```bash
|
|
96
|
-
gh api repos/OWNER/REPO/issues/NUMBER --jq '.state'
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## PR Status Check
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
gh api repos/OWNER/REPO/pulls/NUMBER --jq '{state: .state, merged: .merged, title: .title, updated: .updated_at}'
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## Rate Limiting
|
|
108
|
-
|
|
109
|
-
GitHub API has rate limits. If running many parallel requests:
|
|
110
|
-
- Authenticated requests: 5000/hour
|
|
111
|
-
- Search API: 30 requests/minute
|
|
112
|
-
- If you hit limits, batch searches and add short delays between search batches
|
|
113
|
-
- Metadata fetches (repos/OWNER/REPO/issues/NUMBER) don't count against search limits
|
|
114
|
-
|
|
115
|
-
## Parallel Execution Strategy
|
|
116
|
-
|
|
117
|
-
To maximize speed, batch API calls by type:
|
|
118
|
-
|
|
119
|
-
**Batch 1 (parallel):** All active issue metadata + comments (these are REST calls, not search)
|
|
120
|
-
**Batch 2 (parallel):** All known duplicate/related issue checks (REST calls)
|
|
121
|
-
**Batch 3 (parallel):** All keyword searches for new duplicates (search API — respect 30/min limit)
|
|
122
|
-
**Batch 4 (parallel):** User involvement search + closed issue checks + upstream checks
|
|
123
|
-
|
|
124
|
-
Batches 1 and 2 can run simultaneously. Batch 3 should start after a brief pause if Batch 1+2 included many calls. Batch 4 can run with Batch 1.
|
|
1
|
+
# gh CLI Patterns
|
|
2
|
+
|
|
3
|
+
Reusable command templates for all GitHub API calls in this skill. Replace CAPS placeholders
|
|
4
|
+
with actual values.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Issue Metadata
|
|
9
|
+
|
|
10
|
+
Fetch state, labels, comment count, timestamps:
|
|
11
|
+
```bash
|
|
12
|
+
gh api repos/OWNER/REPO/issues/NUMBER --jq '{state: .state, labels: [.labels[].name], comments: .comments, updated: .updated_at, created: .created_at}'
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Issue Comments
|
|
16
|
+
|
|
17
|
+
Last 3 comments with author, date, full body:
|
|
18
|
+
```bash
|
|
19
|
+
gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '.[-3:] | .[] | {author: .user.login, date: (.created_at | split("T")[0]), body: .body}'
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
All comments (for drafting — verify claims before posting):
|
|
23
|
+
```bash
|
|
24
|
+
gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '.[] | {author: .user.login, date: .created_at, body: .body}'
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Comments since a date:
|
|
28
|
+
```bash
|
|
29
|
+
gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '[.[] | select(.created_at > "DATE")] | .[] | {author: .user.login, date: (.created_at | split("T")[0]), body: .body}'
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Truncation rules:** Never truncate comments on the primary issue being reviewed — technical
|
|
33
|
+
details (addresses, error codes, test counts) get lost. For secondary fetches (known
|
|
34
|
+
duplicates, upstream), `[0:1500]` is acceptable to manage context size.
|
|
35
|
+
|
|
36
|
+
## Issue Body
|
|
37
|
+
|
|
38
|
+
Full issue body (read before commenting on unfamiliar issues):
|
|
39
|
+
```bash
|
|
40
|
+
gh api repos/OWNER/REPO/issues/NUMBER --jq '.body'
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Search: Issues Involving User
|
|
44
|
+
|
|
45
|
+
Open issues with recent activity:
|
|
46
|
+
```bash
|
|
47
|
+
gh api "search/issues?q=involves:USERNAME+updated:>DATE+is:open" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at)]"'
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Search: Issues by Author
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
gh api "search/issues?q=author:USERNAME+is:open&per_page=100&sort=updated" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at | split("T")[0])]"'
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Search: Issues by Commenter (excluding authored)
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
gh api "search/issues?q=commenter:USERNAME+is:open+-author:USERNAME&per_page=100&sort=updated" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at | split("T")[0])]"'
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Search: Keyword Search for Duplicates
|
|
63
|
+
|
|
64
|
+
Search for issues matching keywords, created after a specific date:
|
|
65
|
+
```bash
|
|
66
|
+
gh api "search/issues?q=repo:OWNER/REPO+is:open+created:>DATE+KEYWORD1+KEYWORD2&per_page=10" --jq '.items[] | "#\(.number) — \(.title) [\(.created_at | split("T")[0])] @\(.user.login)"'
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Use multiple keyword variations per search to catch different phrasings. Example for an OAuth issue:
|
|
70
|
+
- Search 1: `OAuth redirect MCP`
|
|
71
|
+
- Search 2: `clientId mcp add`
|
|
72
|
+
- Search 3: `Slack plugin authentication`
|
|
73
|
+
|
|
74
|
+
## Search: Recently Closed Issues
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
gh api "search/issues?q=involves:USERNAME+is:closed+closed:>DATE&per_page=50&sort=updated" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [closed: \(.closed_at | split("T")[0])]"'
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Post Comment
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
gh issue comment NUMBER --repo OWNER/REPO --body "$(cat <<'EOF'
|
|
84
|
+
Comment body here.
|
|
85
|
+
Supports **markdown**.
|
|
86
|
+
EOF
|
|
87
|
+
)"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Always use heredoc (`<<'EOF'`) for comment bodies to handle special characters and newlines.
|
|
91
|
+
|
|
92
|
+
## Quick State Check
|
|
93
|
+
|
|
94
|
+
Check if an issue is still open (fast, minimal data):
|
|
95
|
+
```bash
|
|
96
|
+
gh api repos/OWNER/REPO/issues/NUMBER --jq '.state'
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## PR Status Check
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
gh api repos/OWNER/REPO/pulls/NUMBER --jq '{state: .state, merged: .merged, title: .title, updated: .updated_at}'
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Rate Limiting
|
|
108
|
+
|
|
109
|
+
GitHub API has rate limits. If running many parallel requests:
|
|
110
|
+
- Authenticated requests: 5000/hour
|
|
111
|
+
- Search API: 30 requests/minute
|
|
112
|
+
- If you hit limits, batch searches and add short delays between search batches
|
|
113
|
+
- Metadata fetches (repos/OWNER/REPO/issues/NUMBER) don't count against search limits
|
|
114
|
+
|
|
115
|
+
## Parallel Execution Strategy
|
|
116
|
+
|
|
117
|
+
To maximize speed, batch API calls by type:
|
|
118
|
+
|
|
119
|
+
**Batch 1 (parallel):** All active issue metadata + comments (these are REST calls, not search)
|
|
120
|
+
**Batch 2 (parallel):** All known duplicate/related issue checks (REST calls)
|
|
121
|
+
**Batch 3 (parallel):** All keyword searches for new duplicates (search API — respect 30/min limit)
|
|
122
|
+
**Batch 4 (parallel):** User involvement search + closed issue checks + upstream checks
|
|
123
|
+
|
|
124
|
+
Batches 1 and 2 can run simultaneously. Batch 3 should start after a brief pause if Batch 1+2 included many calls. Batch 4 can run with Batch 1.
|
|
@@ -1,156 +1,156 @@
|
|
|
1
|
-
# Result File Schema
|
|
2
|
-
|
|
3
|
-
> Written by analysis agents, consumed by `compile-report`, `build-tracker`, and `update-tracker`.
|
|
4
|
-
|
|
5
|
-
One file per issue: `issue-OWNER-REPO-NUMBER.md` in the temp directory.
|
|
6
|
-
Raw API data lives in `raw-OWNER-REPO-NUMBER.json` (written by `fetch-issues`).
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Frontmatter
|
|
11
|
-
|
|
12
|
-
```yaml
|
|
13
|
-
---
|
|
14
|
-
type: issue
|
|
15
|
-
owner: OWNER
|
|
16
|
-
repo: REPO
|
|
17
|
-
number: NUMBER
|
|
18
|
-
title: "Issue title"
|
|
19
|
-
state: open
|
|
20
|
-
state_changed: false # true if state changed since last check
|
|
21
|
-
labels: label1, label2
|
|
22
|
-
has_activity: false # true if new comments since last check
|
|
23
|
-
role: "SEE GUIDANCE BELOW"
|
|
24
|
-
filed: YYYY-MM-DD
|
|
25
|
-
last_check_date: null # date of previous check, null for first analysis
|
|
26
|
-
last_commenter: "@username"
|
|
27
|
-
last_comment_date: YYYY-MM-DD
|
|
28
|
-
comment_count: N
|
|
29
|
-
---
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### Role Field
|
|
33
|
-
|
|
34
|
-
The role MUST describe what the user **did**, not just a label.
|
|
35
|
-
|
|
36
|
-
Bad: `"Author"`, `"Commenter"`
|
|
37
|
-
Good: `"Author (filed with 3 crash instances, posted workaround)"`,
|
|
38
|
-
`"Commenter (confirmed bug + shared exact callbackPort: 3118 fix)"`
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## Body Sections
|
|
43
|
-
|
|
44
|
-
### ## Status Summary
|
|
45
|
-
|
|
46
|
-
Plain English: where does this issue stand and why does it matter? Write as if briefing
|
|
47
|
-
someone who hasn't looked at the issue in a week. Include dates, names, numbers.
|
|
48
|
-
|
|
49
|
-
Bad: "Issue is about a bug that causes crashes."
|
|
50
|
-
Good: "You filed this on Jan 15 about a crash when renaming MCP servers. Root cause is
|
|
51
|
-
tracked upstream in bun#28175. Workaround: name servers differently."
|
|
52
|
-
|
|
53
|
-
### ## Activity
|
|
54
|
-
|
|
55
|
-
What happened since last check (or full history if first analysis).
|
|
56
|
-
|
|
57
|
-
Format:
|
|
58
|
-
```
|
|
59
|
-
- @username (YYYY-MM-DD): What they said WITH specifics.
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### ## Duplicates and Related
|
|
63
|
-
|
|
64
|
-
Two subsections:
|
|
65
|
-
|
|
66
|
-
#### ### Known — updates
|
|
67
|
-
Status changes on previously known duplicates/adjacent issues. Or "No changes."
|
|
68
|
-
|
|
69
|
-
#### ### New finds
|
|
70
|
-
Newly discovered duplicates or related issues. Or "None found."
|
|
71
|
-
|
|
72
|
-
For each entry, explain whether it shares a **root cause** (duplicate) or just
|
|
73
|
-
**symptoms** (adjacent). Don't just list titles — explain WHY it's related.
|
|
74
|
-
|
|
75
|
-
Bad: `"#40693 — related rename issue"`
|
|
76
|
-
Good: `"#40693 — VS Code UI blocking during rename. Same symptom (rename fails) but
|
|
77
|
-
different root cause: UI thread blocking vs JSONL write. Adjacent, not duplicate."`
|
|
78
|
-
|
|
79
|
-
### ## Upstream
|
|
80
|
-
|
|
81
|
-
Upstream dependency status — is this issue blocked on or related to an upstream fix?
|
|
82
|
-
Write "N/A" if there are no upstream dependencies.
|
|
83
|
-
|
|
84
|
-
Bad: `"There's an upstream issue."`
|
|
85
|
-
Good: `"Blocked on bun#28175 (open, no activity since Mar 2). Fix landed in Node 22.4 but
|
|
86
|
-
Bun hasn't ported it. No workaround available upstream."`
|
|
87
|
-
|
|
88
|
-
### ## Cross-References
|
|
89
|
-
|
|
90
|
-
All issue numbers mentioned in the issue body and comments. Helps the tracker build
|
|
91
|
-
a cross-reference map. List each with a one-line explanation of why it was mentioned.
|
|
92
|
-
|
|
93
|
-
Bad: `"#100, #200, #300"`
|
|
94
|
-
Good:
|
|
95
|
-
```
|
|
96
|
-
- #28175 — upstream Bun issue causing the root crash
|
|
97
|
-
- #40693 — adjacent rename bug (different root cause, shared symptom)
|
|
98
|
-
- #41022 — PR that attempted a fix but was reverted
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### ## Next Steps
|
|
102
|
-
|
|
103
|
-
Specific, actionable items driven by the user's **Goal** for this issue (from the tracker).
|
|
104
|
-
If the goal is "get my fix merged", focus on what's blocking the merge.
|
|
105
|
-
If "get maintainer to respond", suggest ways to increase visibility.
|
|
106
|
-
If "monitor for upstream fix", focus on upstream signals.
|
|
107
|
-
|
|
108
|
-
Bad: `"Monitor for updates"`, `"Follow up"`
|
|
109
|
-
Good: `"Respond to @maintainer's request for memory profiling data"`,
|
|
110
|
-
`"Test fix in PR #4521 against your reproduction case"`,
|
|
111
|
-
`"Nothing to do — waiting on maintainer review. Check back next week."`
|
|
112
|
-
|
|
113
|
-
### ## Watch For
|
|
114
|
-
|
|
115
|
-
Specific, concrete signals to monitor for this issue. These drive what gets checked
|
|
116
|
-
on the next run. Avoid generic statements — name exact PRs, labels, or events.
|
|
117
|
-
|
|
118
|
-
Bad: `"Watch for updates"`, `"Monitor the repo"`
|
|
119
|
-
Good:
|
|
120
|
-
```
|
|
121
|
-
- PR #4521 merging (would fix root cause)
|
|
122
|
-
- `p0` label being added (escalation signal)
|
|
123
|
-
- @core-dev responding to the reproduction request from Mar 28
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### ## Key Context
|
|
127
|
-
|
|
128
|
-
Workarounds (exact commands, not paraphrases), severity signals, technical details
|
|
129
|
-
someone would need to discuss this issue knowledgeably.
|
|
130
|
-
|
|
131
|
-
Bad: `"Use different server names"`
|
|
132
|
-
Good: `"Workaround: set MIMALLOC_ARENA_EAGER_COMMIT=0 before starting. Reduces peak
|
|
133
|
-
RSS from 2.4GB to 1.1GB but doesn't eliminate growth."`
|
|
134
|
-
|
|
135
|
-
### ## Tracker Updates
|
|
136
|
-
|
|
137
|
-
Machine-readable lines consumed by `update-tracker` and `build-tracker`:
|
|
138
|
-
|
|
139
|
-
```
|
|
140
|
-
goal: Get my fix merged | Get maintainer response | Monitor for upstream fix | etc.
|
|
141
|
-
status_summary: Open. Labels: bug, p1. JSONL crash on rename. 12 comments total.
|
|
142
|
-
what_to_check: PRs modifying renameSession; JSONL title write logic changes.
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
Optional:
|
|
146
|
-
```
|
|
147
|
-
new_duplicate: #NUMBER — @author, "Title" (date). Why related. [duplicate|adjacent]
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
History entries (one per notable event):
|
|
151
|
-
```
|
|
152
|
-
history_entry: YYYY-MM-DD | Description of action or event
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
What to log: actions taken ("Posted comment"), external events ("Maintainer replied"),
|
|
156
|
-
state changes ("Closed via PR #123"). Don't log "no activity" — only real events.
|
|
1
|
+
# Result File Schema
|
|
2
|
+
|
|
3
|
+
> Written by analysis agents, consumed by `compile-report`, `build-tracker`, and `update-tracker`.
|
|
4
|
+
|
|
5
|
+
One file per issue: `issue-OWNER-REPO-NUMBER.md` in the temp directory.
|
|
6
|
+
Raw API data lives in `raw-OWNER-REPO-NUMBER.json` (written by `fetch-issues`).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Frontmatter
|
|
11
|
+
|
|
12
|
+
```yaml
|
|
13
|
+
---
|
|
14
|
+
type: issue
|
|
15
|
+
owner: OWNER
|
|
16
|
+
repo: REPO
|
|
17
|
+
number: NUMBER
|
|
18
|
+
title: "Issue title"
|
|
19
|
+
state: open
|
|
20
|
+
state_changed: false # true if state changed since last check
|
|
21
|
+
labels: label1, label2
|
|
22
|
+
has_activity: false # true if new comments since last check
|
|
23
|
+
role: "SEE GUIDANCE BELOW"
|
|
24
|
+
filed: YYYY-MM-DD
|
|
25
|
+
last_check_date: null # date of previous check, null for first analysis
|
|
26
|
+
last_commenter: "@username"
|
|
27
|
+
last_comment_date: YYYY-MM-DD
|
|
28
|
+
comment_count: N
|
|
29
|
+
---
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Role Field
|
|
33
|
+
|
|
34
|
+
The role MUST describe what the user **did**, not just a label.
|
|
35
|
+
|
|
36
|
+
Bad: `"Author"`, `"Commenter"`
|
|
37
|
+
Good: `"Author (filed with 3 crash instances, posted workaround)"`,
|
|
38
|
+
`"Commenter (confirmed bug + shared exact callbackPort: 3118 fix)"`
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Body Sections
|
|
43
|
+
|
|
44
|
+
### ## Status Summary
|
|
45
|
+
|
|
46
|
+
Plain English: where does this issue stand and why does it matter? Write as if briefing
|
|
47
|
+
someone who hasn't looked at the issue in a week. Include dates, names, numbers.
|
|
48
|
+
|
|
49
|
+
Bad: "Issue is about a bug that causes crashes."
|
|
50
|
+
Good: "You filed this on Jan 15 about a crash when renaming MCP servers. Root cause is
|
|
51
|
+
tracked upstream in bun#28175. Workaround: name servers differently."
|
|
52
|
+
|
|
53
|
+
### ## Activity
|
|
54
|
+
|
|
55
|
+
What happened since last check (or full history if first analysis).
|
|
56
|
+
|
|
57
|
+
Format:
|
|
58
|
+
```
|
|
59
|
+
- @username (YYYY-MM-DD): What they said WITH specifics.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### ## Duplicates and Related
|
|
63
|
+
|
|
64
|
+
Two subsections:
|
|
65
|
+
|
|
66
|
+
#### ### Known — updates
|
|
67
|
+
Status changes on previously known duplicates/adjacent issues. Or "No changes."
|
|
68
|
+
|
|
69
|
+
#### ### New finds
|
|
70
|
+
Newly discovered duplicates or related issues. Or "None found."
|
|
71
|
+
|
|
72
|
+
For each entry, explain whether it shares a **root cause** (duplicate) or just
|
|
73
|
+
**symptoms** (adjacent). Don't just list titles — explain WHY it's related.
|
|
74
|
+
|
|
75
|
+
Bad: `"#40693 — related rename issue"`
|
|
76
|
+
Good: `"#40693 — VS Code UI blocking during rename. Same symptom (rename fails) but
|
|
77
|
+
different root cause: UI thread blocking vs JSONL write. Adjacent, not duplicate."`
|
|
78
|
+
|
|
79
|
+
### ## Upstream
|
|
80
|
+
|
|
81
|
+
Upstream dependency status — is this issue blocked on or related to an upstream fix?
|
|
82
|
+
Write "N/A" if there are no upstream dependencies.
|
|
83
|
+
|
|
84
|
+
Bad: `"There's an upstream issue."`
|
|
85
|
+
Good: `"Blocked on bun#28175 (open, no activity since Mar 2). Fix landed in Node 22.4 but
|
|
86
|
+
Bun hasn't ported it. No workaround available upstream."`
|
|
87
|
+
|
|
88
|
+
### ## Cross-References
|
|
89
|
+
|
|
90
|
+
All issue numbers mentioned in the issue body and comments. Helps the tracker build
|
|
91
|
+
a cross-reference map. List each with a one-line explanation of why it was mentioned.
|
|
92
|
+
|
|
93
|
+
Bad: `"#100, #200, #300"`
|
|
94
|
+
Good:
|
|
95
|
+
```
|
|
96
|
+
- #28175 — upstream Bun issue causing the root crash
|
|
97
|
+
- #40693 — adjacent rename bug (different root cause, shared symptom)
|
|
98
|
+
- #41022 — PR that attempted a fix but was reverted
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### ## Next Steps
|
|
102
|
+
|
|
103
|
+
Specific, actionable items driven by the user's **Goal** for this issue (from the tracker).
|
|
104
|
+
If the goal is "get my fix merged", focus on what's blocking the merge.
|
|
105
|
+
If "get maintainer to respond", suggest ways to increase visibility.
|
|
106
|
+
If "monitor for upstream fix", focus on upstream signals.
|
|
107
|
+
|
|
108
|
+
Bad: `"Monitor for updates"`, `"Follow up"`
|
|
109
|
+
Good: `"Respond to @maintainer's request for memory profiling data"`,
|
|
110
|
+
`"Test fix in PR #4521 against your reproduction case"`,
|
|
111
|
+
`"Nothing to do — waiting on maintainer review. Check back next week."`
|
|
112
|
+
|
|
113
|
+
### ## Watch For
|
|
114
|
+
|
|
115
|
+
Specific, concrete signals to monitor for this issue. These drive what gets checked
|
|
116
|
+
on the next run. Avoid generic statements — name exact PRs, labels, or events.
|
|
117
|
+
|
|
118
|
+
Bad: `"Watch for updates"`, `"Monitor the repo"`
|
|
119
|
+
Good:
|
|
120
|
+
```
|
|
121
|
+
- PR #4521 merging (would fix root cause)
|
|
122
|
+
- `p0` label being added (escalation signal)
|
|
123
|
+
- @core-dev responding to the reproduction request from Mar 28
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### ## Key Context
|
|
127
|
+
|
|
128
|
+
Workarounds (exact commands, not paraphrases), severity signals, technical details
|
|
129
|
+
someone would need to discuss this issue knowledgeably.
|
|
130
|
+
|
|
131
|
+
Bad: `"Use different server names"`
|
|
132
|
+
Good: `"Workaround: set MIMALLOC_ARENA_EAGER_COMMIT=0 before starting. Reduces peak
|
|
133
|
+
RSS from 2.4GB to 1.1GB but doesn't eliminate growth."`
|
|
134
|
+
|
|
135
|
+
### ## Tracker Updates
|
|
136
|
+
|
|
137
|
+
Machine-readable lines consumed by `update-tracker` and `build-tracker`:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
goal: Get my fix merged | Get maintainer response | Monitor for upstream fix | etc.
|
|
141
|
+
status_summary: Open. Labels: bug, p1. JSONL crash on rename. 12 comments total.
|
|
142
|
+
what_to_check: PRs modifying renameSession; JSONL title write logic changes.
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Optional:
|
|
146
|
+
```
|
|
147
|
+
new_duplicate: #NUMBER — @author, "Title" (date). Why related. [duplicate|adjacent]
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
History entries (one per notable event):
|
|
151
|
+
```
|
|
152
|
+
history_entry: YYYY-MM-DD | Description of action or event
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
What to log: actions taken ("Posted comment"), external events ("Maintainer replied"),
|
|
156
|
+
state changes ("Closed via PR #123"). Don't log "no activity" — only real events.
|