opencode-skills-collection 3.0.24 → 3.0.25

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 (58) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +2 -1
  2. package/bundled-skills/007/scripts/scanners/dependency_scanner.py +1 -1
  3. package/bundled-skills/andrej-karpathy/SKILL.md +71 -1121
  4. package/bundled-skills/apify-actor-development/SKILL.md +2 -4
  5. package/bundled-skills/audit-skills/SKILL.md +1 -3
  6. package/bundled-skills/bun-development/SKILL.md +8 -5
  7. package/bundled-skills/claude-code-expert/SKILL.md +1 -3
  8. package/bundled-skills/cloud-penetration-testing/SKILL.md +3 -3
  9. package/bundled-skills/comfyui-gateway/references/integration.md +2 -2
  10. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  11. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +2 -2
  12. package/bundled-skills/docs/maintainers/full-repo-audit-2026-05-23.md +289 -0
  13. package/bundled-skills/docs/maintainers/merge-batch.md +2 -2
  14. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  15. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  16. package/bundled-skills/docs/users/agent-overload-recovery.md +2 -2
  17. package/bundled-skills/docs/users/bundles.md +1 -1
  18. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  19. package/bundled-skills/docs/users/faq.md +2 -2
  20. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  21. package/bundled-skills/docs/users/getting-started.md +3 -3
  22. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  23. package/bundled-skills/docs/users/usage.md +6 -6
  24. package/bundled-skills/docs/users/visual-guide.md +6 -6
  25. package/bundled-skills/docs/users/windows-truncation-recovery.md +1 -1
  26. package/bundled-skills/docs/vietnamese/FAQ.vi.md +2 -2
  27. package/bundled-skills/docs/vietnamese/GETTING_STARTED.vi.md +2 -2
  28. package/bundled-skills/docs/vietnamese/README.vi.md +6 -6
  29. package/bundled-skills/docs/vietnamese/SECURITY.vi.md +1 -1
  30. package/bundled-skills/docs/vietnamese/SKILLS_README.vi.md +8 -8
  31. package/bundled-skills/docs/vietnamese/VISUAL_GUIDE.vi.md +1 -1
  32. package/bundled-skills/environment-setup-guide/SKILL.md +6 -4
  33. package/bundled-skills/evolution/SKILL.md +3 -3
  34. package/bundled-skills/gitops-workflow/SKILL.md +6 -3
  35. package/bundled-skills/junta-leiloeiros/references/juntas_urls.md +1 -1
  36. package/bundled-skills/junta-leiloeiros/scripts/scraper/jucema.py +3 -3
  37. package/bundled-skills/junta-leiloeiros/scripts/scraper/jucesp.py +2 -2
  38. package/bundled-skills/junta-leiloeiros/scripts/scraper/jucisrs.py +7 -7
  39. package/bundled-skills/k8s-manifest-generator/resources/implementation-playbook.md +1 -3
  40. package/bundled-skills/linkerd-patterns/SKILL.md +6 -3
  41. package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package-lock.json +22 -22
  42. package/bundled-skills/openclaw-github-repo-commander/SKILL.md +4 -3
  43. package/bundled-skills/openclaw-github-repo-commander/scripts/repo-audit.sh +85 -0
  44. package/bundled-skills/pdf-conversion-router/SKILL.md +403 -0
  45. package/bundled-skills/remotion-best-practices/rules/charts.md +1 -1
  46. package/bundled-skills/security/aws-iam-best-practices/SKILL.md +1 -1
  47. package/bundled-skills/subagent-orchestrator/README.md +2 -2
  48. package/bundled-skills/subagent-orchestrator/scripts/install.js +4 -4
  49. package/bundled-skills/telegram/SKILL.md +14 -11
  50. package/bundled-skills/telegram/assets/boilerplate/nodejs/package.json +1 -2
  51. package/bundled-skills/telegram/assets/boilerplate/nodejs/src/bot-client.ts +24 -21
  52. package/bundled-skills/telegram/assets/boilerplate/nodejs/src/handlers.ts +34 -40
  53. package/bundled-skills/telegram/references/webhook-setup.md +16 -12
  54. package/bundled-skills/uv-package-manager/resources/implementation-playbook.md +4 -2
  55. package/bundled-skills/varlock/SKILL.md +6 -4
  56. package/bundled-skills/whatsapp-cloud-api/assets/boilerplate/nodejs/src/webhook-handler.ts +12 -4
  57. package/package.json +1 -1
  58. package/skills_index.json +24 -2
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ target="${1:-.}"
5
+
6
+ if [[ ! -d "$target" ]]; then
7
+ printf 'FAIL target directory does not exist: %s\n' "$target" >&2
8
+ exit 2
9
+ fi
10
+
11
+ cd "$target"
12
+
13
+ status=0
14
+
15
+ pass() {
16
+ printf 'PASS %s\n' "$1"
17
+ }
18
+
19
+ warn() {
20
+ printf 'WARN %s\n' "$1"
21
+ status=1
22
+ }
23
+
24
+ if command -v rg >/dev/null 2>&1; then
25
+ if rg --hidden --glob '!.git/**' --glob '!.github/workflows/**' --glob '!node_modules/**' --glob '!dist/**' --glob '!build/**' \
26
+ --regexp 'ghp_[A-Za-z0-9_]{20,}' \
27
+ --regexp 'sk-[A-Za-z0-9]{20,}' \
28
+ --regexp 'AKIA[0-9A-Z]{16}' \
29
+ --quiet .; then
30
+ warn 'possible hardcoded secret pattern found'
31
+ else
32
+ pass 'no common secret patterns found'
33
+ fi
34
+ else
35
+ warn 'ripgrep not installed; skipped secret-pattern scan'
36
+ fi
37
+
38
+ if find . -path './.git' -prune -o -path './node_modules' -type d -print -quit | grep -q .; then
39
+ warn 'tracked or local node_modules directory present'
40
+ else
41
+ pass 'no node_modules directory found outside .git'
42
+ fi
43
+
44
+ if find . -path './.git' -prune -o \( -path './dist' -o -path './build' \) -type d -print -quit | grep -q .; then
45
+ warn 'build artifact directory present'
46
+ else
47
+ pass 'no common build artifact directories found'
48
+ fi
49
+
50
+ if find . -path './.git' -prune -o -type f -size +1M -print -quit | grep -q .; then
51
+ warn 'large files over 1MB found'
52
+ else
53
+ pass 'no files over 1MB found'
54
+ fi
55
+
56
+ if [[ -f .gitignore ]]; then
57
+ pass '.gitignore exists'
58
+ else
59
+ warn '.gitignore missing'
60
+ fi
61
+
62
+ if command -v rg >/dev/null 2>&1 && [[ -f README.md ]]; then
63
+ broken_links=0
64
+ while IFS= read -r link; do
65
+ [[ "$link" =~ ^https?:// ]] && continue
66
+ [[ "$link" =~ ^# ]] && continue
67
+ [[ "$link" =~ ^mailto: ]] && continue
68
+ link="${link%%#*}"
69
+ [[ -z "$link" ]] && continue
70
+ if [[ ! -e "$link" ]]; then
71
+ broken_links=1
72
+ printf 'WARN broken README local link: %s\n' "$link"
73
+ fi
74
+ done < <(rg -o '\[[^]]+\]\(([^)]+)\)' README.md | sed -E 's/.*\(([^)]+)\)/\1/')
75
+
76
+ if [[ "$broken_links" -eq 0 ]]; then
77
+ pass 'README local links look resolvable'
78
+ else
79
+ status=1
80
+ fi
81
+ else
82
+ warn 'README.md or ripgrep missing; skipped README link scan'
83
+ fi
84
+
85
+ exit "$status"
@@ -0,0 +1,403 @@
1
+ ---
2
+ name: pdf-conversion-router
3
+ description: Use when converting a PDF into another format such as Markdown, HTML, text, JSON, DOCX, or structured notes and the agent must choose the best extraction route, settings, and cleanup strategy for maximum fidelity and readability.
4
+ risk: safe
5
+ source: community
6
+ date_added: "2026-05-23"
7
+ metadata:
8
+ category: technique
9
+ triggers: pdf conversion, convert pdf, pdf to markdown, pdf to html, pdf to text, pdf to json, pdf to docx, OCR pdf, slide deck pdf, medical pdf, scanned pdf
10
+ ---
11
+
12
+ # PDF Conversion Router
13
+
14
+ Route every PDF conversion through a short analysis step before choosing tools or CLI flags.
15
+
16
+ The goal is not "extract the most text". The goal is:
17
+ - preserve structure
18
+ - preserve attachment between labels and values
19
+ - choose the most faithful output shape
20
+ - avoid noisy defaults when a better route exists
21
+
22
+ ## When to Use
23
+
24
+ - The user wants a PDF converted into another format.
25
+ - The requested output is `.md`, `.html`, `.txt`, `.json`, `.docx`, or structured notes.
26
+ - The PDF may be scanned, OCR-heavy, table-heavy, slide-based, medical, academic, or multi-column.
27
+
28
+ ## Core Rule
29
+
30
+ Never start with one fixed default pipeline.
31
+
32
+ Always:
33
+ 1. classify the PDF
34
+ 2. classify the target output
35
+ 3. choose the strongest route for that combination
36
+ 4. validate the result on representative sections
37
+ 5. if needed, retry with better settings before delivering
38
+
39
+ Heuristics are starting points, not guarantees.
40
+
41
+ Do not promote one flag combination into a universal default just because it worked well on one PDF.
42
+ Prefer document-specific evidence over habit.
43
+
44
+ ## Primary Engine Rule
45
+
46
+ Use `opendataloader-pdf` as the primary conversion engine for every PDF conversion task by default.
47
+
48
+ This skill should assume:
49
+ - `opendataloader-pdf` is always the first conversion attempt
50
+ - other tools are used to classify, validate, OCR, inspect, or support cleanup
51
+ - other extractors are not the default replacement for the main conversion route
52
+
53
+ Use other tools only for one of these reasons:
54
+ - quick classification of the PDF
55
+ - OCR preprocessing before conversion
56
+ - validation against layout-preserving text
57
+ - manual repair when the generated output is still noisy
58
+ - fallback only if `opendataloader-pdf` cannot produce a usable result
59
+
60
+ ## Step 1: Classify the Source PDF
61
+
62
+ Identify the document class as quickly as possible:
63
+
64
+ - Native digital PDF with selectable text
65
+ - OCR PDF with noisy text
66
+ - Image-only/scanned PDF
67
+ - Slide deck / presentation export
68
+ - Medical or lab report
69
+ - Table-heavy business/finance document
70
+ - Narrative report / letter / article
71
+ - Mixed layout document with diagrams, tables, and prose
72
+
73
+ Useful fast checks:
74
+
75
+ ```bash
76
+ pdfinfo input.pdf
77
+ pdftotext -layout input.pdf -
78
+ ```
79
+
80
+ If text is missing or very poor, treat OCR as required.
81
+
82
+ ## Document-Type Heuristics
83
+
84
+ Use these as default starting points:
85
+
86
+ - medical / lab report
87
+ `markdown-with-html + --table-method cluster + --image-output off`
88
+
89
+ - slide deck / PowerPoint export
90
+ `markdown-with-html + --image-output off`
91
+ add `--table-method cluster` only if the default route under-structures important tabular content
92
+ if tables are visually obvious but missing or badly fused, treat this as a detection problem, not a Markdown formatting problem
93
+ if the selected route already reconstructs a real table but clips leading characters at column boundaries, treat that as a boundary-splitting defect, not a missing-table failure
94
+
95
+ - narrative / article / letter
96
+ start with `markdown` or `text`
97
+ use `markdown-with-html` only if structure clearly matters
98
+
99
+ - table-heavy business / finance PDF
100
+ start with `markdown-with-html`
101
+ add `--table-method cluster` when rows or columns flatten
102
+
103
+ - scanned / image-heavy PDF
104
+ OCR first, then convert with `opendataloader-pdf`
105
+
106
+ - mixed-layout PDF
107
+ prefer `markdown-with-html`
108
+ validate one easy section and one hard section before accepting output
109
+
110
+ ## Step 2: Choose the Output Shape
111
+
112
+ Pick the output that best matches the document and the user's goal.
113
+
114
+ - `markdown-with-html`
115
+ Use by default when the user wants Markdown and fidelity matters.
116
+ Prefer this for tables, medical reports, slides, mixed-layout PDFs, and anything likely to break in pure Markdown.
117
+
118
+ - `markdown`
119
+ Use only when clean plain Markdown matters more than layout fidelity.
120
+
121
+ - `html`
122
+ Use when visual structure matters more than LLM readability.
123
+
124
+ - `text`
125
+ Use for quick linear extraction, narrative documents, or when structure is unimportant.
126
+
127
+ - `json`
128
+ Use when downstream machine processing matters more than human readability.
129
+
130
+ - `docx`
131
+ Use when the user wants editable office output and layout reconstruction matters.
132
+
133
+ ## Step 3: Choose the Extraction Route
134
+
135
+ ### For OpenDataLoader CLI
136
+
137
+ Use OpenDataLoader as the default route.
138
+
139
+ Preferred defaults:
140
+
141
+ - For Markdown output with fidelity priority:
142
+ `-f markdown-with-html`
143
+
144
+ - For medical PDFs:
145
+ add `--table-method cluster`
146
+
147
+ - For table-heavy PDFs:
148
+ add `--table-method cluster`
149
+
150
+ - For slide decks:
151
+ start without `--table-method cluster`
152
+ add it only after a structure check shows meaningful improvement
153
+ if a pseudo-table is already collapsed inside one detected row, changing only the Markdown flavor usually will not fix it
154
+ if the active engine build recovers the pseudo-table structure, prefer fixing residual boundary artifacts before escalating to hybrid/full mode
155
+
156
+ - For conversions where images are not requested:
157
+ add `--image-output off`
158
+
159
+ - For slide decks, medical reports, and structure-sensitive PDFs:
160
+ prefer validating both the command success and the actual rendered structure
161
+
162
+ - For referts/reports where exact values matter:
163
+ validate key sections after conversion instead of trusting first pass
164
+
165
+ ### For medical or lab PDFs
166
+
167
+ Default route:
168
+
169
+ ```bash
170
+ opendataloader-pdf -f markdown-with-html --table-method cluster --image-output off
171
+ ```
172
+
173
+ Then verify:
174
+ - main table headers
175
+ - attachment of value, unit, and reference range
176
+ - legends/comments separated from result rows
177
+
178
+ If a clinical table is flattened, compare against `pdftotext -layout` before accepting output.
179
+
180
+ ### For slide decks
181
+
182
+ Prefer:
183
+
184
+ ```bash
185
+ opendataloader-pdf -f markdown-with-html --image-output off
186
+ ```
187
+
188
+ Then check for:
189
+ - repeated footers
190
+ - page numbers
191
+ - diagram pseudo-tables
192
+ - orphan symbols and chart labels
193
+
194
+ If CLI output is still poor, do a cleanup pass tuned for slides instead of assuming the raw extract is final.
195
+ If the slide contains obvious table-like blocks that are not detected as tables at all, prefer a same-engine retry with a stronger route such as hybrid/full mode before jumping to unrelated extractors.
196
+ If the slide now produces a real table, validate the first column and header boundaries before assuming the table is fully correct.
197
+
198
+ ### For scanned PDFs
199
+
200
+ If the text layer is poor or absent:
201
+ - run OCR first
202
+ - then convert the OCR'd PDF with `opendataloader-pdf`
203
+
204
+ Prefer conservative reconstruction over aggressive guessing.
205
+
206
+ ## Step 4: Validation Gates
207
+
208
+ Before claiming success, inspect the output for the patterns most likely to break.
209
+
210
+ For medical PDFs:
211
+ - values attached to correct exam names
212
+ - units and reference ranges not merged into neighbors
213
+ - comments not merged into rows
214
+
215
+ For slides:
216
+ - bullets normalized
217
+ - footers/page numbers removed when they are noise
218
+ - diagrams not causing crashes
219
+ - remaining tables readable enough to follow
220
+ - first column labels not losing their first character at inferred column boundaries
221
+ - pseudo-table recovery not breaking row grouping or spilling labels into the next column
222
+
223
+ For table-heavy documents:
224
+ - no catastrophic row flattening
225
+ - headers preserved
226
+ - repeated empty separator rows minimized
227
+ - sparse or single-column tables not accidentally collapsed into prose
228
+ - table bodies not fused into a single HTML or Markdown row containing many logical records
229
+
230
+ For every document class:
231
+ - check the first representative section, not just the top of the file
232
+ - check one complex section, not only a simple section
233
+ - prefer document-level confidence over success on page 1
234
+
235
+ ## Red Flags
236
+
237
+ Treat these as signals that the current output is not ready:
238
+
239
+ - table rows flattened into long prose lines
240
+ - table header looks correct but the entire body is fused into one row with multi-value cells
241
+ - labels detached from values
242
+ - units or reference ranges drifting into adjacent rows
243
+ - repeated page footers or page numbers
244
+ - pseudo-tables with mostly empty cells
245
+ - legitimate sparse tables collapsed into paragraphs
246
+ - single-column tables flattened because they looked "too simple"
247
+ - stray symbols, bullets, or OCR fragments
248
+ - good command exit code but visibly poor structure
249
+ - page 1 looks fine but a later complex section is broken
250
+ - switching from `markdown` to `markdown-with-html` improves wrapping but does not restore missing row boundaries
251
+ - a pseudo-table is now emitted as a table, but key labels are clipped at the left edge of cells
252
+
253
+ ## Never Trust Page 1
254
+
255
+ Do not accept a conversion just because the top of the file looks good.
256
+
257
+ Always validate:
258
+ - one early section
259
+ - one structurally difficult section
260
+ - one section likely to matter most to the user
261
+
262
+ For medical PDFs, this means checking a real lab table, not just the heading block.
263
+
264
+ For slide decks, this means checking at least one dense diagram or pseudo-table, not just the title slides.
265
+
266
+ ## Step 5: Post-Conversion Repair Pass
267
+
268
+ Conversion is not finished just because a file was generated.
269
+
270
+ If the output is structurally correct but still noisy or hard to read, perform a cleanup pass before delivering it.
271
+
272
+ Use three buckets:
273
+
274
+ - `cleanup`
275
+ For noise reduction without changing meaning.
276
+ Examples:
277
+ - repeated footers
278
+ - page numbers
279
+ - duplicated bullet markers
280
+ - stray symbols
281
+ - empty separator rows
282
+ - trivial one-cell pseudo-tables that should become plain text
283
+
284
+ Important:
285
+ do not collapse a table just because it is sparse, narrow, or mostly empty.
286
+ Preserve legitimate single-column and sparse tables if they still carry table meaning.
287
+
288
+ - `structural correction`
289
+ For repairing attachment and readability when the extractor found the right content but the wrong structure.
290
+ Examples:
291
+ - flattened tables
292
+ - fused columns
293
+ - notes merged into result rows
294
+ - legends mixed into measurements
295
+ - broken section boundaries
296
+
297
+ - `route retry`
298
+ For cases where the problem comes from the wrong extraction path, not from output cleanup.
299
+
300
+ Always prefer the least invasive repair that produces a faithful, readable result.
301
+
302
+ Do not leave raw noisy output untouched if it is clearly improvable.
303
+
304
+ ## Step 6: Retry Rules
305
+
306
+ Do one targeted retry if the first route is wrong.
307
+
308
+ Examples:
309
+ - Markdown too flat for tables -> switch to `markdown-with-html`
310
+ - Table detection weak -> retry with `--table-method cluster`
311
+ - Table wrapper exists but body rows are fused -> treat as structural extraction failure; inspect JSON or a structure-preserving view, then retry the route instead of only cleaning Markdown
312
+ - Table structure is recovered but leading characters are clipped at cell boundaries -> treat as a boundary-splitting defect; prefer tightening the same-engine structure logic over routing to an unrelated extractor
313
+ - OCR missing text -> OCR first, then reconvert
314
+ - Slide output noisy but structurally usable -> keep extractor, improve cleanup
315
+ - Slide pseudo-table not detected -> retry same engine with hybrid/full mode before non-OpenDataLoader fallback
316
+
317
+ Do not keep blindly retrying many variants. Choose the next attempt based on the failure mode.
318
+
319
+ Prefer this retry order:
320
+ 1. same engine, better flags
321
+ 2. same engine, different output shape
322
+ 3. same engine plus hybrid/full mode when available
323
+ 4. same engine plus cleanup/repair
324
+ 5. OCR preprocessing plus same engine
325
+ 6. only then consider a non-OpenDataLoader fallback if truly blocked
326
+
327
+ For `--table-method cluster`, treat it as a targeted retry or document-specific default, not a universal default.
328
+ It is often the best choice for medical PDFs, but not automatically for every slide deck or every business document.
329
+
330
+ ## Default Preferences
331
+
332
+ When the user does not specify otherwise:
333
+
334
+ - prefer `markdown-with-html` over pure `markdown`
335
+ - disable images unless the user wants them
336
+ - prefer `--table-method cluster` for medical PDFs
337
+ - consider `--table-method cluster` for table-heavy PDFs when rows or columns flatten
338
+ - do not assume `--table-method cluster` is the best default for slide decks
339
+ - do not assume `markdown-with-html` alone fixes fused table rows if the underlying table structure is already wrong
340
+ - do not assume hybrid/full is still necessary if the active engine now reconstructs the pseudo-table correctly enough
341
+ - verify the real output, not just the command exit code
342
+ - keep the original PDF untouched
343
+ - prefer creating the converted file in a dedicated output folder
344
+ - prefer giving the user the final chosen output path, not just a command summary
345
+
346
+ ## Benchmark Safety Rule
347
+
348
+ If the work involves changing `opendataloader-pdf` behavior itself, not just running a conversion:
349
+ - validate the target real-world PDF
350
+ - validate at least one difficult public benchmark case if available
351
+ - avoid cleanup rules that improve one document by degrading sparse or edge-case tables elsewhere
352
+ - explicitly check for the failure mode where a valid-looking table header is followed by a single fused body row
353
+ - if fixing a slide pseudo-table, also re-check a previously recovered dense-table case so the new heuristic does not reopen an old regression
354
+ - distinguish benchmark wins from cosmetic residual defects such as left-edge character clipping inside recovered cells
355
+
356
+ Wins on one PDF are useful, but they do not justify turning a heuristic into a global default without broader validation.
357
+
358
+ ## Limitations
359
+
360
+ - This skill routes and validates conversion work; it does not guarantee that `opendataloader-pdf`, OCR tools, or PDF utilities are installed in every environment.
361
+ - Complex PDFs can still require manual structural repair after the best route succeeds.
362
+ - OCR quality, source scan quality, and malformed PDF internals can limit fidelity no matter which route is chosen.
363
+ - Visual fidelity is secondary to document fidelity, so exact page layout may not be preserved unless the user explicitly requests it.
364
+
365
+ ## Delivery Checklist
366
+
367
+ Before finishing, make sure you can state:
368
+ - which `opendataloader-pdf` route was chosen
369
+ - whether a retry was needed
370
+ - whether cleanup or repair was applied
371
+ - which output file is the recommended final one
372
+ - any remaining limitations that still affect readability or fidelity
373
+
374
+ ## Fidelity Rule
375
+
376
+ Distinguish between:
377
+
378
+ - `document fidelity`
379
+ correct content, correct attachment, correct section structure
380
+
381
+ - `visual fidelity`
382
+ preserving the original visual layout as closely as possible
383
+
384
+ Optimize first for document fidelity.
385
+
386
+ Do not sacrifice semantic correctness just to imitate the original page visually.
387
+
388
+ For most conversions, a structurally correct and readable output is better than a visually similar but semantically broken one.
389
+
390
+ ## Recommended Final Answer Format
391
+
392
+ When reporting back, prefer saying:
393
+ - the chosen route
394
+ - whether a retry was needed
395
+ - whether cleanup or repair was applied
396
+ - the recommended output file
397
+ - the remaining limitations, if any
398
+
399
+ ## Delivery Rule
400
+
401
+ Do not deliver raw extractor output without a cleanup and validation pass when fidelity matters.
402
+
403
+ If the document is complex, say which route was chosen and why.
@@ -17,7 +17,7 @@ Instead, drive all animations from `useCurrentFrame()`.
17
17
 
18
18
  ## Bar Chart Animations
19
19
 
20
- See Bar Chart Example for a basic example implmentation.
20
+ See Bar Chart Example for a basic example implementation.
21
21
 
22
22
  ### Staggered Bars
23
23
 
@@ -112,7 +112,7 @@ while read user; do
112
112
  done
113
113
 
114
114
  # Rotate access key
115
- OLD_KEY="AKIAIOSFODNN7EXAMPLE"
115
+ OLD_KEY="<AWS_ACCESS_KEY_ID>"
116
116
  USER="myuser"
117
117
 
118
118
  # Create new key
@@ -26,8 +26,8 @@ node scripts/install.js
26
26
 
27
27
  **Manual install — copy this folder to:**
28
28
  ```
29
- Windows: %APPDATA%\.gemini\antigravity\skills\subagent-orchestrator\
30
- Mac/Linux: ~/.gemini/antigravity/skills/subagent-orchestrator/
29
+ Windows: %USERPROFILE%\.agents\skills\subagent-orchestrator\
30
+ Mac/Linux: ~/.agents/skills/subagent-orchestrator/
31
31
  ```
32
32
 
33
33
  Then restart your Antigravity session.
@@ -16,14 +16,14 @@ const SKILL_NAME = 'subagent-orchestrator';
16
16
 
17
17
  // Antigravity global skills path per OS
18
18
  const INSTALL_PATHS = {
19
- win32: path.join(os.homedir(), 'AppData', 'Roaming', '.gemini', 'antigravity', 'skills'),
20
- darwin: path.join(os.homedir(), '.gemini', 'antigravity', 'skills'),
21
- linux: path.join(os.homedir(), '.gemini', 'antigravity', 'skills'),
19
+ win32: path.join(os.homedir(), '.agents', 'skills'),
20
+ darwin: path.join(os.homedir(), '.agents', 'skills'),
21
+ linux: path.join(os.homedir(), '.agents', 'skills'),
22
22
  };
23
23
 
24
24
  const targetBase = INSTALL_PATHS[process.platform] || INSTALL_PATHS.linux;
25
25
  const targetDir = path.join(targetBase, SKILL_NAME);
26
- const sourceDir = path.join(__dirname);
26
+ const sourceDir = path.join(__dirname, '..');
27
27
 
28
28
  function copyDir(src, dest) {
29
29
  fs.mkdirSync(dest, { recursive: true });
@@ -131,23 +131,25 @@ TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
131
131
  ## Node.Js/Typescript
132
132
 
133
133
  ```typescript
134
- // Instalar: npm install node-telegram-bot-api dotenv
135
- // Para TypeScript: npm install -D @types/node-telegram-bot-api typescript
136
- import TelegramBot from 'node-telegram-bot-api';
134
+ // Instalar: npm install telegraf dotenv
135
+ // Para TypeScript: npm install -D typescript
136
+ import { Telegraf } from 'telegraf';
137
137
  import dotenv from 'dotenv';
138
138
  dotenv.config();
139
139
 
140
- const bot = new TelegramBot(process.env.TELEGRAM_BOT_TOKEN!, { polling: true });
140
+ const bot = new Telegraf(process.env.TELEGRAM_BOT_TOKEN!);
141
141
 
142
- bot.onText(/\/start/, (msg) => {
143
- bot.sendMessage(msg.chat.id, 'Ola! Eu sou seu bot. Como posso ajudar?');
142
+ bot.start((ctx) => {
143
+ ctx.reply('Ola! Eu sou seu bot. Como posso ajudar?');
144
144
  });
145
145
 
146
- bot.on('message', (msg) => {
147
- if (msg.text && !msg.text.startsWith('/')) {
148
- bot.sendMessage(msg.chat.id, `Voce disse: ${msg.text}`);
146
+ bot.on('text', (ctx) => {
147
+ if (!ctx.message.text.startsWith('/')) {
148
+ ctx.reply(`Voce disse: ${ctx.message.text}`);
149
149
  }
150
150
  });
151
+
152
+ bot.launch();
151
153
  ```
152
154
 
153
155
  ## Python
@@ -353,8 +355,9 @@ app.run_polling(allowed_updates=Update.ALL_TYPES)
353
355
  ```
354
356
 
355
357
  ```typescript
356
- // node-telegram-bot-api com polling
357
- const bot = new TelegramBot(token, { polling: true });
358
+ // Telegraf com polling
359
+ const bot = new Telegraf(token);
360
+ bot.launch();
358
361
  ```
359
362
 
360
363
  ## Webhooks (Producao)
@@ -10,12 +10,11 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "dotenv": "^16.4.0",
13
- "node-telegram-bot-api": "^0.66.0",
13
+ "telegraf": "^4.16.3",
14
14
  "express": "^4.18.0"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@types/node": "^20.0.0",
18
- "@types/node-telegram-bot-api": "^0.64.0",
19
18
  "@types/express": "^4.17.0",
20
19
  "typescript": "^5.4.0",
21
20
  "ts-node-dev": "^2.0.0"