opencode-skills-collection 4.0.4 → 4.0.6

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 (59) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +5 -1
  2. package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +151 -0
  3. package/bundled-skills/create-pr/SKILL.md +4 -4
  4. package/bundled-skills/docs/README.md +1 -0
  5. package/bundled-skills/docs/contributors/quality-bar.md +1 -2
  6. package/bundled-skills/docs/integrations/jetski-cortex.md +5 -3
  7. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +3 -1
  8. package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-preview-profile.md +63 -0
  9. package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-v1-design.md +304 -0
  10. package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-v1-goal.md +171 -0
  11. package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-v1-worklog.md +104 -0
  12. package/bundled-skills/docs/maintainers/audit.md +3 -8
  13. package/bundled-skills/docs/maintainers/legacy-redirect-bridge.md +46 -0
  14. package/bundled-skills/docs/maintainers/merge-batch.md +3 -7
  15. package/bundled-skills/docs/maintainers/merging-prs.md +1 -1
  16. package/bundled-skills/docs/maintainers/pr-autonomy.md +2 -3
  17. package/bundled-skills/docs/maintainers/release-process.md +12 -5
  18. package/bundled-skills/docs/maintainers/repo-growth-seo.md +16 -14
  19. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  20. package/bundled-skills/docs/users/aas-core.md +182 -0
  21. package/bundled-skills/docs/users/agentic-awesome-skills-vs-awesome-claude-skills.md +10 -9
  22. package/bundled-skills/docs/users/ai-agent-skills.md +22 -19
  23. package/bundled-skills/docs/users/best-claude-code-skills-github.md +8 -8
  24. package/bundled-skills/docs/users/best-cursor-skills-github.md +5 -5
  25. package/bundled-skills/docs/users/bundles.md +3 -1
  26. package/bundled-skills/docs/users/claude-code-skills.md +23 -7
  27. package/bundled-skills/docs/users/codex-cli-skills.md +30 -13
  28. package/bundled-skills/docs/users/discovery-manifest.md +6 -3
  29. package/bundled-skills/docs/users/faq.md +37 -10
  30. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  31. package/bundled-skills/docs/users/getting-started.md +24 -10
  32. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  33. package/bundled-skills/docs/users/plugins.md +15 -3
  34. package/bundled-skills/docs/users/skills-vs-mcp-tools.md +68 -49
  35. package/bundled-skills/docs/users/usage.md +50 -25
  36. package/bundled-skills/docs/users/visual-guide.md +28 -22
  37. package/bundled-skills/docs/vietnamese/AAS_CORE.vi.md +28 -0
  38. package/bundled-skills/docs/vietnamese/README.vi.md +10 -6
  39. package/bundled-skills/game-development/2d-games/SKILL.md +22 -19
  40. package/bundled-skills/game-development/SKILL.md +27 -35
  41. package/bundled-skills/game-development/engine-selection/SKILL.md +115 -0
  42. package/bundled-skills/game-development/web-games/SKILL.md +47 -45
  43. package/bundled-skills/git-advanced-workflows/SKILL.md +1 -11
  44. package/bundled-skills/git-pushing/SKILL.md +4 -4
  45. package/bundled-skills/markstream-install/SKILL.md +187 -0
  46. package/bundled-skills/markstream-install/references/scenarios.md +48 -0
  47. package/bundled-skills/modellix/SKILL.md +80 -0
  48. package/bundled-skills/pptx-deck-creation/SKILL.md +15 -7
  49. package/bundled-skills/pptx-deck-creation/references/audit-checklist.md +7 -3
  50. package/bundled-skills/pptx-deck-creation/references/ooxml-parsing.md +58 -0
  51. package/bundled-skills/pptx-deck-creation/references/{python-snippets.md → reference-deck-analysis-patterns.md} +1 -1
  52. package/bundled-skills/pptx-deck-creation/references/reference-deck-analysis.md +30 -8
  53. package/bundled-skills/pptx-deck-creation/references/visual-asset-adapters.md +23 -13
  54. package/bundled-skills/pr-writer/SKILL.md +2 -2
  55. package/bundled-skills/repo-maintainer/SKILL.md +4 -2
  56. package/bundled-skills/tools-page-seo-optimizer/SKILL.md +6 -6
  57. package/package.json +1 -1
  58. package/skills_index.json +121 -7
  59. package/bundled-skills/docs/contributors/skill-scoring.md +0 -235
@@ -0,0 +1,187 @@
1
+ ---
2
+ name: markstream-install
3
+ description: "Install and configure Markstream streaming Markdown renderers for Vue, React, Svelte, Angular, Nuxt, Next.js, and Vue 2 applications."
4
+ category: frontend
5
+ risk: safe
6
+ source: https://github.com/Simon-He95/markstream-vue/tree/main/.agents/skills/markstream-install
7
+ source_repo: Simon-He95/markstream-vue
8
+ source_type: official
9
+ date_added: "2026-07-19"
10
+ author: Simon-He95
11
+ tags: [markdown, streaming, vue, react, svelte, angular, ai-chat]
12
+ tools: [claude, cursor, gemini, codex]
13
+ license: MIT
14
+ license_source: https://github.com/Simon-He95/markstream-vue/blob/main/license
15
+ ---
16
+
17
+ # Markstream Install
18
+
19
+ ## Overview
20
+
21
+ Integrate the correct [Markstream](https://github.com/Simon-He95/markstream-vue) streaming Markdown renderer into an existing frontend application. This skill selects the framework package, installs only requested optional peers, preserves safe HTML and Mermaid defaults, and handles CSS, streaming state, and SSR boundaries.
22
+
23
+ Read [references/scenarios.md](references/scenarios.md) before selecting packages or optional peers.
24
+
25
+ ## When to Use
26
+
27
+ Use this skill when the user asks to:
28
+
29
+ - add streaming Markdown rendering to an AI chat or document interface;
30
+ - install Markstream in Vue, Nuxt, React, Next.js, Svelte, Angular, or Vue 2;
31
+ - repair missing Markstream styles, an incorrect framework package, or an SSR failure;
32
+ - replace another Markdown renderer with Markstream;
33
+ - choose between static content, built-in smooth streaming, or externally parsed AST input.
34
+
35
+ ## How It Works
36
+
37
+ ### 1. Inspect the host application
38
+
39
+ Before changing dependencies, inspect:
40
+
41
+ - the framework and version in `package.json`;
42
+ - the existing package-manager lockfile;
43
+ - whether the application uses SSR;
44
+ - reset, Tailwind, UnoCSS, or design-system styles;
45
+ - required optional features such as highlighted code, Monaco, Mermaid, D2, or KaTeX.
46
+
47
+ Do not select `markstream-vue` merely because the source repository has Vue in its name. Choose the framework-specific package from the scenario table.
48
+
49
+ ### 2. Install the smallest dependency set
50
+
51
+ Install exactly one framework package and preserve the repository's package manager. Add optional peers only when the requested UI uses their feature.
52
+
53
+ Examples:
54
+
55
+ ```bash
56
+ npm install markstream-vue
57
+ npm install markstream-react
58
+ npm install markstream-svelte
59
+ npm install markstream-angular
60
+ npm install markstream-vue2
61
+ ```
62
+
63
+ For Vue 2.6, also install and register `@vue/composition-api`. Vue 2.7 has a built-in Composition API and must not install that plugin.
64
+
65
+ ### 3. Wire styles in the correct order
66
+
67
+ Import application resets before Markstream styles. Import package CSS explicitly instead of relying on component imports to inject it.
68
+
69
+ For Tailwind or UnoCSS, put the matching package stylesheet in a component layer:
70
+
71
+ ```css
72
+ @import 'markstream-vue/index.css' layer(components);
73
+ ```
74
+
75
+ When math rendering is enabled, also import:
76
+
77
+ ```css
78
+ @import 'katex/dist/katex.min.css';
79
+ ```
80
+
81
+ Vue CLI 4 and other Webpack 4-based Vue 2 projects do not understand package export maps. Use the published file path in those projects:
82
+
83
+ ```ts
84
+ import 'markstream-vue2/dist/index.css'
85
+ ```
86
+
87
+ ### 4. Add the smallest working renderer
88
+
89
+ Prefer `content` for static documents and most streaming chat interfaces. Markstream's built-in smooth streaming can pace irregular token delivery without requiring the host application to maintain an AST.
90
+
91
+ Use `nodes` plus `final` only when a worker, shared AST store, custom transform, or another application layer already owns parsing.
92
+
93
+ ### 5. Handle framework boundaries
94
+
95
+ - In Nuxt, keep browser-only optional peers behind client boundaries.
96
+ - In Next.js, use root `markstream-react` inside a `'use client'` component for live SSE or WebSocket streams.
97
+ - Use `markstream-react/next` for SSR-first HTML with hydration and `markstream-react/server` for server-only rendering.
98
+ - Use `markstream-svelte` only with Svelte 5.
99
+ - Confirm the host meets the current `markstream-angular` version requirement.
100
+ - In Vue 3, use `mode="chat"` for AI chat, `mode="docs"` for rich documents, and `mode="minimal"` for lightweight non-chat surfaces.
101
+
102
+ ### 6. Preserve safe defaults
103
+
104
+ HTML policy defaults to `safe`, and Mermaid uses strict mode. Do not broaden either setting unless the user explicitly identifies a trusted legacy surface that requires it. Scope any exception to that surface.
105
+
106
+ ### 7. Validate
107
+
108
+ Run the smallest relevant build, typecheck, or test command. Confirm:
109
+
110
+ 1. the selected package matches the framework;
111
+ 2. only requested optional peers were added;
112
+ 3. styles load after resets;
113
+ 4. SSR pages do not evaluate browser-only peers on the server;
114
+ 5. static content and at least one incremental update render correctly.
115
+
116
+ Report the selected package, added peers, CSS location, streaming input choice, and validation command.
117
+
118
+ ## Examples
119
+
120
+ ### Vue 3 streaming chat
121
+
122
+ ```vue
123
+ <MarkdownRender
124
+ mode="chat"
125
+ :content="markdown"
126
+ :final="false"
127
+ smooth-streaming="auto"
128
+ :fade="false"
129
+ typewriter
130
+ />
131
+ ```
132
+
133
+ ### Vue 3 completed chat history
134
+
135
+ ```vue
136
+ <MarkdownRender
137
+ mode="chat"
138
+ :content="markdown"
139
+ :final="true"
140
+ :smooth-streaming="false"
141
+ :fade="true"
142
+ :typewriter="false"
143
+ />
144
+ ```
145
+
146
+ Setting `final=true` tells the parser that the document is complete; disabling pacing alone does not finalize trailing constructs.
147
+
148
+ ## Best Practices
149
+
150
+ - Install the minimal peer set instead of every optional integration.
151
+ - Keep the renderer mode stable when a chat message transitions from streaming to history.
152
+ - Let an existing outer message virtualizer own mounted rows; coordinate Markstream height metrics instead of adding a competing virtualizer.
153
+ - Scope component overrides with `customId` or `custom-id` when multiple render surfaces coexist.
154
+ - Test SSR and incremental client updates separately.
155
+
156
+ ## Limitations
157
+
158
+ - This skill does not choose application-specific visual styling or chat architecture.
159
+ - Optional browser-heavy peers can require framework-specific client boundaries and bundler configuration.
160
+ - Vue 2.6 and legacy Webpack projects require the compatibility steps documented above.
161
+ - Current package and framework requirements must be checked against the host lockfile and Markstream documentation before installation.
162
+
163
+ ## Security & Safety Notes
164
+
165
+ - Package installation changes the dependency manifest and lockfile. Review the proposed package set before running the install command.
166
+ - Do not enable trusted HTML or non-strict Mermaid rendering for untrusted model output.
167
+ - Keep optional browser runtimes out of server-only execution paths.
168
+ - Run installs only inside the intended project directory and use its existing package manager.
169
+
170
+ ## Common Pitfalls
171
+
172
+ - **Problem:** Styles appear missing or are overwritten.
173
+ **Solution:** Load resets first, then the matching Markstream stylesheet explicitly.
174
+ - **Problem:** A completed response still looks incomplete.
175
+ **Solution:** Set `final=true` when the stream finishes, not only `smoothStreaming=false`.
176
+ - **Problem:** Next.js evaluates browser-only code on the server.
177
+ **Solution:** Select the root, `/next`, or `/server` entry according to the render boundary.
178
+ - **Problem:** Lightweight highlighting does not activate after installing `stream-markdown`.
179
+ **Solution:** On Vue, Vue 2, or React, configure `MarkdownCodeBlockNode` as the `code_block` override.
180
+
181
+ ## Additional Resources
182
+
183
+ - [Installation](https://markstream.simonhe.me/guide/installation)
184
+ - [AI chat and streaming](https://markstream.simonhe.me/guide/ai-chat-streaming)
185
+ - [Performance](https://markstream.simonhe.me/guide/performance)
186
+ - [Troubleshooting](https://markstream.simonhe.me/guide/troubleshooting)
187
+ - [Component overrides](https://markstream.simonhe.me/guide/component-overrides)
@@ -0,0 +1,48 @@
1
+ # Install Scenarios
2
+
3
+ ## Package selection
4
+
5
+ | Host app | Package and setup |
6
+ |----------|-------------------|
7
+ | Vue 3 / Nuxt 3 or 4 | `markstream-vue` |
8
+ | Vue 2.6 | `markstream-vue2` plus `@vue/composition-api`; register the plugin before mounting the app |
9
+ | Vue 2.7 | `markstream-vue2`; use Vue's built-in Composition API and do not install `@vue/composition-api` |
10
+ | React 18+ / Next.js | `markstream-react` |
11
+ | Angular 20+ | `markstream-angular` |
12
+ | Svelte 5 | `markstream-svelte` |
13
+
14
+ ## Peer selection
15
+
16
+ | Feature | Peer | Supported packages | Activation |
17
+ |---------|------|--------------------|------------|
18
+ | Lightweight highlighted code blocks | `stream-markdown` | `markstream-vue`, `markstream-vue2`, `markstream-react` | Configure the package's `MarkdownCodeBlockNode` as the `code_block` override |
19
+ | Monaco-powered code blocks | `stream-monaco` | All framework packages | Install only when Monaco interactions are required |
20
+ | Mermaid diagrams | `mermaid` | All framework packages | Install when Mermaid fences are rendered |
21
+ | D2 diagrams | `@terrastruct/d2` | All framework packages | Install when D2 fences are rendered |
22
+ | KaTeX math | `katex` | All framework packages | Install and load KaTeX CSS when math is rendered |
23
+
24
+ ## CSS checklist
25
+
26
+ - Load reset styles first.
27
+ - Load the framework-specific Markstream CSS after the reset.
28
+ - In Tailwind or UnoCSS projects, use `@import '...' layer(components)`.
29
+ - Import KaTeX CSS when math is enabled.
30
+ - When rendering standalone node components directly, wrap them with the relevant package root class such as `.markstream-vue`, `.markstream-react`, or `.markstream-svelte`.
31
+
32
+ ## Input choice
33
+
34
+ - `content`: static documents, low-frequency updates, and most SSE or token-streaming chat surfaces.
35
+ - `content` with built-in smooth streaming: irregular AI streams whose visible output should be paced independently from raw chunk cadence.
36
+ - `smoothStreaming="auto"` or `smooth-streaming="auto"` is the default.
37
+ - Auto pacing activates when `typewriter=true` or `maxLiveNodes <= 0` / `max-live-nodes <= 0`.
38
+ - `typewriter` controls the cursor and defaults to `false`.
39
+ - `fade` controls node-entry and streamed-text fade effects.
40
+ - `nodes` plus `final`: worker-preparsed content, shared AST stores, custom AST transforms, or cases where another layer already owns parsing.
41
+
42
+ ## Next.js entry selection
43
+
44
+ | Surface | Entry |
45
+ |---------|-------|
46
+ | Live SSE or WebSocket output in a Client Component | `markstream-react` |
47
+ | SSR-first HTML with client hydration | `markstream-react/next` |
48
+ | Server-only Markdown rendering | `markstream-react/server` |
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: modellix
3
+ description: "Integrate Modellix unified API/CLI for async AI image and video generation (model run --wait, task download)."
4
+ category: creative
5
+ risk: critical
6
+ source: community
7
+ source_repo: Modellix/modellix-skill
8
+ source_type: official
9
+ date_added: "2026-07-16"
10
+ author: Modellix
11
+ tags: [image-generation, video-generation, modellix, cli, api]
12
+ tools: [claude, cursor, gemini]
13
+ license: "MIT"
14
+ license_source: "https://github.com/Modellix/modellix-skill/blob/main/LICENSE"
15
+ ---
16
+
17
+ # Modellix
18
+
19
+ ## Overview
20
+
21
+ Modellix is a Model-as-a-Service platform for AI image and video generation. This skill teaches agents to use the official `modellix-cli` workflow (doctor → model run --wait → task download).
22
+
23
+ Upstream package: https://github.com/Modellix/modellix-skill/tree/main/modellix-skill
24
+
25
+ ## When to Use This Skill
26
+
27
+ - Generate images from text prompts
28
+ - Generate or edit videos from text or images
29
+ - Call Modellix models through a unified API/CLI
30
+ - The user mentions Modellix, Seedream, Seedance, Nano Banana, or similar providers via Modellix
31
+
32
+ ## How It Works
33
+
34
+ 1. Authenticate with `MODELLIX_API_KEY` or `modellix-cli auth login`
35
+ 2. Run `modellix-cli doctor --json`
36
+ 3. Use default models when unspecified (T2I: `google/nano-banana-2-lite`, T2V: `bytedance/seedance-2.0-mini-t2v`)
37
+ 4. Submit with `modellix-cli model run --wait --json`
38
+ 5. Persist outputs with `modellix-cli task download`
39
+
40
+ ## Examples
41
+
42
+ ### Text-to-image
43
+
44
+ ```bash
45
+ modellix-cli model run \
46
+ --model-slug google/nano-banana-2-lite \
47
+ --body '{"prompt":"A cinematic sunset over a futuristic city"}' \
48
+ --wait --timeout 5m --json
49
+ ```
50
+
51
+ ### Text-to-video
52
+
53
+ ```bash
54
+ modellix-cli model run \
55
+ --model-slug bytedance/seedance-2.0-mini-t2v \
56
+ --body '{"prompt":"Ocean waves under a cloudy sunset"}' \
57
+ --wait --timeout 10m --json
58
+ ```
59
+
60
+ ## Best Practices
61
+
62
+ - Prefer CLI `model run --wait` over hand-rolled polling
63
+ - Before a paid submission, disclose the provider, model, prompt or source media that will leave the machine, expected cost, and output path; obtain explicit user approval
64
+ - Prefer session-scoped API-key use; run `modellix-cli auth login` only when the user approves persistent local credential storage
65
+ - Do not blindly retry paid submissions after unknown outcomes — check `task history`
66
+ - Confirm the destination and overwrite policy before `task download`; never replace an existing file without explicit approval
67
+ - Fetch request schemas from `model describe` `docs_url` or https://docs.modellix.ai/llms.txt
68
+
69
+ ## Security & Safety Notes
70
+
71
+ - Requires a Modellix API key; never print secrets in logs
72
+ - Prompts and uploaded source media leave the machine for `api.modellix.ai` and Modellix CDN processing
73
+ - Paid generation consumes account balance and must not be submitted or retried without the approval described above
74
+
75
+ ## Limitations
76
+
77
+ - Requires a Modellix account, network access, a valid API key, and sufficient account balance.
78
+ - Model availability, request schemas, pricing, quotas, moderation, and generation time are controlled by Modellix and may change.
79
+ - Generated outputs require human review for quality, rights, privacy, and policy compliance before publication.
80
+ - This skill documents the CLI workflow only; it does not define a REST fallback or guarantee that a completed remote task downloads successfully.
@@ -154,8 +154,10 @@ Own net-new PPTX creation in this workflow. When a PPTX file is required,
154
154
  create a small task-specific builder with the user's approved environment. Start
155
155
  slides from a blank layout and create native objects from the final bounding
156
156
  boxes. Enable word wrap, disable automatic text resizing, set text insets and
157
- alignment explicitly, and reject zero or negative bounding boxes before
158
- building.
157
+ alignment explicitly, and reject zero or negative bounding boxes for non-line
158
+ objects before building. Validate lines by requiring two distinct endpoints;
159
+ horizontal and vertical lines may have a zero-height or zero-width bounding
160
+ box.
159
161
 
160
162
  Save the authored specification, PPTX, build manifest, audit records, and
161
163
  source manifest together. Do not add a large shared renderer or copy source
@@ -181,7 +183,11 @@ with the slide ID, object ID, reason, owner, and review date.
181
183
 
182
184
  The skill provides a read-only analysis contract, not packaged code. For a
183
185
  specific task, use `python-pptx` and the Office Open XML package to inspect a
184
- presentation. Produce only the context needed for the task:
186
+ presentation. Use OOXML package inspection when `python-pptx` cannot expose
187
+ theme, master, layout, relationship, notes, comments, animation, media, or
188
+ non-modeled formatting evidence. Resolve the package relationship graph;
189
+ never infer slide order from filenames or copy source package parts. Produce
190
+ only the context needed for the task:
185
191
 
186
192
  * Compact prompt context with slide count, styles, brands, template, and layout
187
193
  * Full extraction with `layout_tree`, summary metrics, and render-aware elements
@@ -189,8 +195,10 @@ presentation. Produce only the context needed for the task:
189
195
  * Style-master analysis with colors, fonts, layout usage, and flow patterns
190
196
 
191
197
  Use [reference-deck analysis recipes](references/reference-deck-analysis.md)
192
- and [Python guidance](references/python-snippets.md) as static implementation
193
- references. Keep all extraction read-only.
198
+ and [reference-deck analysis patterns](references/reference-deck-analysis-patterns.md) as static implementation
199
+ references. Use the bundled `references/ooxml-parsing.md` guidance for the
200
+ package-part map, relationship resolution, namespace, and secure parsing
201
+ requirements. Keep all extraction read-only.
194
202
 
195
203
  ## Visual Assets
196
204
 
@@ -208,8 +216,8 @@ objects.
208
216
  Before any external generation call, disclose the provider and model, what
209
217
  prompt or source material will leave the machine, the likely cost, and the
210
218
  output path. Obtain explicit confirmation unless the user already authorized
211
- that exact operation. Never overwrite an existing output without separate
212
- confirmation.
219
+ that exact operation. Never overwrite an existing output or manifest without
220
+ separate explicit confirmation.
213
221
 
214
222
  ## Examples
215
223
 
@@ -20,16 +20,20 @@ A.y < B.y + B.h AND B.y < A.y + A.h
20
20
  For each text object estimate whether its text fits within its bbox.
21
21
 
22
22
  Rough capacity (Latin):
23
- - Characters per line ≈ `(bbox.w × 72) / (font_size × 0.5)`, using `0.5 em` as an average Latin glyph-width factor
23
+ - Characters per line ≈ `(bbox.w × 72) / (font_size × 0.5)`, using `0.5 em`
24
+ as an average Latin glyph-width factor
24
25
  - Lines available ≈ `(bbox.h × 72) / (font_size × 1.2)`
25
26
  _(bbox in inches, font_size in pt)_
26
27
 
27
28
  Adjustments:
28
- - **CJK / full-width text:** use a glyph-width factor near `1.0 em` instead of `0.5 em`. The extractor reports `non_ascii_text` — use it to flag CJK-heavy slides.
29
+ - **CJK / full-width text:** halve the characters-per-line value (full-width glyphs Latin advance). The extractor reports `non_ascii_text` — use it to flag CJK-heavy slides.
29
30
  - **Text on a shape/card:** subtract ≈0.1 in of inner padding from each side of the shape before computing capacity; the text occupies the inset inner area, not the full shape.
30
31
 
31
32
  - **Pass:** estimated text volume ≤ available capacity.
32
- - **Warning:** likely overflow → inspect the generated PPTX or rendered preview, then shorten bullets, enlarge the bbox, or split the slide when clipping is confirmed. This estimate is a triage heuristic, not a deterministic failure by itself.
33
+ - **Warning:** likely overflow → inspect the generated PPTX or rendered preview,
34
+ then shorten bullets, enlarge the bbox, or split the slide when clipping is
35
+ confirmed. This estimate is a triage heuristic, not a deterministic failure
36
+ by itself.
33
37
  **Never set `font_size` below 9 pt for `classification: "content"` objects.**
34
38
 
35
39
  ## 3. Font Size Minimums
@@ -0,0 +1,58 @@
1
+ # OOXML Parsing Reference
2
+
3
+ A `.pptx` is an Open Packaging Conventions ZIP archive. Inspect it read-only
4
+ by resolving its relationship graph; do not assume sequential filenames or
5
+ copy package parts into a generated deck.
6
+
7
+ ## Package-Part Map
8
+
9
+ | Need | Parts |
10
+ | --- | --- |
11
+ | Slide order | `ppt/presentation.xml`, `ppt/_rels/presentation.xml.rels` |
12
+ | Slide text and shapes | Slide parts resolved from presentation relationships (commonly `ppt/slides/slideN.xml`) |
13
+ | Layout, notes, images, charts | The slide's relationship part (commonly `ppt/slides/_rels/slideN.xml.rels`) |
14
+ | Template geometry | `ppt/slideLayouts/`, `ppt/slideMasters/` |
15
+ | Colors and fonts | Theme parts resolved from presentation/master relationships (commonly under `ppt/theme/`) |
16
+ | Notes and comments | `ppt/notesSlides/`, `ppt/comments/` |
17
+ | Media and embeddings | `ppt/media/`, `ppt/embeddings/` |
18
+
19
+ ## Relationship Resolution
20
+
21
+ 1. Start with `ppt/presentation.xml`; use its slide ID list and
22
+ `ppt/_rels/presentation.xml.rels` to resolve slides in presentation order.
23
+ 2. For every part that needs linked content, resolve targets from that part's
24
+ `.rels` file relative to the owning part rather than from a hard-coded path.
25
+ 3. Retain the relationship ID, type, resolved target, and any unreadable or
26
+ missing target in the analysis result.
27
+ 4. Treat raw element ordering as evidence for rendering, not as a reason to
28
+ reproduce a source slide or its package XML.
29
+
30
+ ## Namespaces
31
+
32
+ - PresentationML: `http://schemas.openxmlformats.org/presentationml/2006/main`
33
+ - DrawingML: `http://schemas.openxmlformats.org/drawingml/2006/main`
34
+ - Office relationships: `http://schemas.openxmlformats.org/officeDocument/2006/relationships`
35
+ - Package relationships: `http://schemas.openxmlformats.org/package/2006/relationships`
36
+
37
+ ## Analysis Output Guidance
38
+
39
+ For a read-only extraction, retain the slide number, resolved relationship
40
+ target, concatenated text, shape counts, notes, relationship types, and
41
+ OOXML-only markers such as animations, comments, transitions, unsupported
42
+ shapes, and non-modeled formatting. For design context, retain theme
43
+ color/font tokens without inventing an RGB value when a scheme or system color
44
+ cannot be fully resolved.
45
+
46
+ Record the input deck path, inspected parts, relationship-resolution errors,
47
+ and unreadable XML in the analysis manifest. Keep the result limited to the
48
+ evidence needed for the requested analysis.
49
+
50
+ ## Secure, Read-Only Handling
51
+
52
+ - Treat a source deck as untrusted input. Reject path traversal, symlinks,
53
+ oversized members, and compressed archive bombs before reading ZIP members.
54
+ - Parse XML with a secure parser. Disable DTD loading, entity expansion, and
55
+ network access.
56
+ - Preserve `xml:space="preserve"` semantics when collecting text.
57
+ - Do not modify the source archive, overwrite it, or blindly copy XML, media,
58
+ fonts, images, or embedded files into a new deck.
@@ -1,4 +1,4 @@
1
- # PPTX Python Snippets
1
+ # Reference-Deck Analysis Patterns
2
2
 
3
3
  It describes how to approach PPTX extraction and style analysis with `python-pptx`, using short illustrative
4
4
  snippets — not a packaged module to copy wholesale.
@@ -6,8 +6,9 @@ This file is static guidance for inspecting existing `.pptx` files and defining
6
6
 
7
7
  - Keep only static guidance for reference-deck prompt context, extraction, folder analysis, and style-master inspection.
8
8
  - Do not place runtime scripts, model assets, importable Python modules, or generated artifacts here.
9
- - This skill ships no importable code; implement the extraction/style-analysis contract on demand with `python-pptx`.
10
- - `python-snippets.md` holds documentation-only `python-pptx` guidance — approach notes plus short illustrative snippets. Do not import from it or recreate packaged `.py` resources from it.
9
+ - This skill ships no importable code; implement the extraction/style-analysis and read-only OOXML inspection contracts on demand with `python-pptx`, `zipfile`, and a secure XML parser.
10
+ - `reference-deck-analysis-patterns.md` holds documentation-only `python-pptx` guidance — approach notes plus short illustrative snippets. Do not import from it or recreate packaged `.py` resources from it.
11
+ - `ooxml-parsing.md` holds documentation-only package-part, relationship, namespace, and security guidance. It is not a runtime dependency or script template.
11
12
 
12
13
  ## Analysis Recipes
13
14
 
@@ -28,15 +29,34 @@ Produce a full JSON extraction including:
28
29
  - `summary` complexity metrics
29
30
  - `slides[*].layout_tree` with groups/objects
30
31
  - `ooxml_elements` for render-aware inspection
32
+ - resolved package relationships, OOXML-only markers, and parsing exceptions
31
33
 
32
- ### 3. Folder Batch Recipe
34
+ ### 3. OOXML Package Inspection Recipe
35
+
36
+ Use read-only package inspection when high-level APIs do not expose the needed
37
+ evidence: slide order, theme tokens, masters/layouts, notes, comments,
38
+ animations, media, charts, or non-modeled formatting.
39
+
40
+ - Resolve slide order from `ppt/presentation.xml` and its relationship part.
41
+ Do not derive it from `slideN.xml` filenames.
42
+ - Resolve every relationship target relative to its owning source part, not its
43
+ `.rels` part. Retain the relationship type, target, and unreadable XML errors
44
+ in the result.
45
+ - Preserve theme colors and fonts as tokens when they cannot be reliably
46
+ resolved to RGB values.
47
+ - Parse untrusted XML with a secure parser; do not enable DTDs, entity
48
+ expansion, or network access.
49
+ - Keep the source package read-only and never copy its XML parts into a new
50
+ deck.
51
+
52
+ ### 4. Folder Batch Recipe
33
53
 
34
54
  Process a folder of decks to produce:
35
55
 
36
56
  - One `.pptx-spec.json` file per deck
37
57
  - A `manifest.json` to track outputs
38
58
 
39
- ### 4. Style Master Recipe
59
+ ### 5. Style Master Recipe
40
60
 
41
61
  Run style-only analysis when you need design lock signals:
42
62
 
@@ -44,7 +64,7 @@ Run style-only analysis when you need design lock signals:
44
64
  - Typography and font-size distribution
45
65
  - Master/layout usage and flow patterns
46
66
 
47
- ### 5. Reference Template Catalog Recipe
67
+ ### 6. Reference Template Catalog Recipe
48
68
 
49
69
  When a reference deck should inform a new deck's layout rhythm, produce a
50
70
  human-readable catalog from the existing prompt-context, extraction, and
@@ -83,9 +103,11 @@ Suggested catalog shape:
83
103
  ## Related Responsibilities
84
104
 
85
105
  This reference covers PPTX prompt context, extraction, folder batch analysis,
86
- style-master inspection, and the derived reference-template catalog only.
106
+ style-master inspection, read-only OOXML package inspection, and the derived
107
+ reference-template catalog only. See [OOXML parsing guidance](ooxml-parsing.md)
108
+ for the package-part map and parser safety rules.
87
109
 
88
110
  - Use the parent `pptx-deck-creation` workflow for narrative/source preparation,
89
- together with [design profiles](design-profiles.md) for profile selection.
111
+ together with [design profiles](design-profiles.md) for profile selection.
90
112
  - Use [visual asset guidelines](visual-asset-adapters.md) for acquiring and
91
- placing icons, images, SVGs, and infographics.
113
+ placing icons, images, SVGs, and infographics.
@@ -19,9 +19,9 @@ Shared rules:
19
19
  - On failure, write a failure manifest; never substitute a placeholder and call it generated.
20
20
  - Never request secrets in chat or a prompt dialog. For cloud auth use `.env` or `az login`.
21
21
  - Before a billable generation call or any request that sends user-provided or
22
- source material to a third party, disclose the provider/model, the material
23
- that will leave the machine, likely cost, and output path. Obtain explicit
24
- confirmation unless the user already authorized that exact operation.
22
+ source material to a third party, disclose the provider/model, the material
23
+ that will leave the machine, likely cost, and output path. Obtain explicit
24
+ confirmation unless the user already authorized that exact operation.
25
25
 
26
26
  ---
27
27
 
@@ -62,7 +62,7 @@ def icon_search(query, limit=8, prefix=None, color=None, out_dir="assets/icons")
62
62
 
63
63
  ## 2. Web Image Search
64
64
 
65
- Prefer the browsing or image-search capability available in the current client.
65
+ Prefer the VS Code fetch tools (`fetch_webpage`) or an MCP image-search tool you have available.
66
66
  When you already have a direct image URL (from search results or the user), download it locally:
67
67
 
68
68
  ```python
@@ -102,8 +102,9 @@ Generate through a user-managed provider (OpenAI or Azure OpenAI). Read credenti
102
102
  never accept secrets via chat.
103
103
 
104
104
  Before running the snippet, obtain the external-call confirmation described in
105
- the shared rules. If `output_path` already exists, choose a new path or obtain
106
- separate overwrite confirmation; do not silently replace it.
105
+ the shared rules. If `output_path` or its manifest already exists, choose a new
106
+ path or obtain separate explicit overwrite confirmation; do not silently
107
+ replace either file.
107
108
 
108
109
  ```python
109
110
  import base64, json, os
@@ -111,15 +112,20 @@ from pathlib import Path
111
112
  from openai import OpenAI, AzureOpenAI # provided by the user's environment
112
113
 
113
114
  def text_to_infographic(prompt, output_path, provider="openai",
114
- model_or_deployment="gpt-image-1", size="1024x1024"):
115
+ model_or_deployment="gpt-image-1", size="1024x1024",
116
+ confirmed=False, allow_overwrite=False):
115
117
  output = Path(output_path)
116
118
  manifest_path = output.with_suffix(".manifest.json")
117
119
  existing = [path for path in (output, manifest_path) if path.exists()]
118
- if existing:
120
+ if existing and not allow_overwrite:
119
121
  raise FileExistsError(f"Refusing to overwrite existing paths: {existing}")
120
122
  manifest_path.parent.mkdir(parents=True, exist_ok=True)
121
123
  manifest = {"provider": provider, "model_or_deployment": model_or_deployment,
122
124
  "output_path": output_path}
125
+ if not confirmed:
126
+ manifest.update(status="cancelled", error="External generation was not confirmed")
127
+ manifest_path.write_text(json.dumps(manifest, indent=2), encoding="utf-8")
128
+ return manifest
123
129
  try:
124
130
  if provider == "azure-openai":
125
131
  client = AzureOpenAI(
@@ -130,17 +136,20 @@ def text_to_infographic(prompt, output_path, provider="openai",
130
136
  else:
131
137
  client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
132
138
  result = client.images.generate(model=model_or_deployment, prompt=prompt, size=size)
133
- output.parent.mkdir(parents=True, exist_ok=True)
134
139
  output.write_bytes(base64.b64decode(result.data[0].b64_json))
135
140
  manifest["status"] = "ok"
136
141
  except Exception as exc: # report, never fake-generate
137
142
  manifest.update(status="error", error=str(exc))
138
- manifest_path.write_text(json.dumps(manifest, indent=2))
143
+ manifest_path.write_text(json.dumps(manifest, indent=2), encoding="utf-8")
139
144
  return manifest
140
145
  ```
141
146
 
142
- - Ask the user for any missing non-secret values: provider, prompt,
143
- model/deployment, size, and output path.
147
+ - Collect missing values via `vscode_askQuestions`: provider, prompt, model/deployment, size, output path.
148
+ - Before calling the function, disclose the provider/model, material leaving
149
+ the machine, likely cost, and output path. Set `confirmed=True` only after
150
+ the user explicitly authorizes that exact external request. Set
151
+ `allow_overwrite=True` only after separate explicit approval to replace every
152
+ existing output or manifest path.
144
153
  - Use `.env` or `az login` for auth; never ask for keys/tokens in chat or the dialog.
145
154
  - Use generated art as a supporting visual. Recreate essential text, labels,
146
155
  metrics, and steps with native PowerPoint objects. Add a vector asset only
@@ -155,4 +164,5 @@ NotebookLM has no public generation API, so treat this as an optional, user-conf
155
164
  - If the user has a NotebookLM/MCP bridge tool configured, call it with `source_refs` + `prompt`,
156
165
  then save the returned image locally and record provenance.
157
166
  - If no bridge is configured, **fall back to Text → Infographic (section 4)** or omit the asset.
158
- - Apply the same provenance and failure-manifest rules as the other generation guidelines.
167
+ - Apply the same confirmation, overwrite, provenance, and failure-manifest
168
+ rules as the other generation guidelines.
@@ -18,14 +18,14 @@ Create pull requests following Sentry's engineering practices.
18
18
 
19
19
  ## Prerequisites
20
20
 
21
- Before creating a PR, ensure all changes are committed. If there are uncommitted changes, run the `sentry-skills:commit` skill first to commit them properly.
21
+ Before creating a PR, ensure all changes are committed. If there are uncommitted changes, run the available `commit` skill first to commit them properly.
22
22
 
23
23
  ```bash
24
24
  # Check for uncommitted changes
25
25
  git status --porcelain
26
26
  ```
27
27
 
28
- If the output shows any uncommitted changes (modified, added, or untracked files that should be included), invoke the `sentry-skills:commit` skill before proceeding.
28
+ If the output shows any uncommitted changes (modified, added, or untracked files that should be included), invoke the available `commit` skill before proceeding. If the client requires qualified skill names, use the qualifier for the plugin that supplied this skill.
29
29
 
30
30
  ## Process
31
31