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.
- package/bundled-skills/.antigravity-install-manifest.json +5 -1
- package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +151 -0
- package/bundled-skills/create-pr/SKILL.md +4 -4
- package/bundled-skills/docs/README.md +1 -0
- package/bundled-skills/docs/contributors/quality-bar.md +1 -2
- package/bundled-skills/docs/integrations/jetski-cortex.md +5 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +3 -1
- package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-preview-profile.md +63 -0
- package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-v1-design.md +304 -0
- package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-v1-goal.md +171 -0
- package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-v1-worklog.md +104 -0
- package/bundled-skills/docs/maintainers/audit.md +3 -8
- package/bundled-skills/docs/maintainers/legacy-redirect-bridge.md +46 -0
- package/bundled-skills/docs/maintainers/merge-batch.md +3 -7
- package/bundled-skills/docs/maintainers/merging-prs.md +1 -1
- package/bundled-skills/docs/maintainers/pr-autonomy.md +2 -3
- package/bundled-skills/docs/maintainers/release-process.md +12 -5
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +16 -14
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/aas-core.md +182 -0
- package/bundled-skills/docs/users/agentic-awesome-skills-vs-awesome-claude-skills.md +10 -9
- package/bundled-skills/docs/users/ai-agent-skills.md +22 -19
- package/bundled-skills/docs/users/best-claude-code-skills-github.md +8 -8
- package/bundled-skills/docs/users/best-cursor-skills-github.md +5 -5
- package/bundled-skills/docs/users/bundles.md +3 -1
- package/bundled-skills/docs/users/claude-code-skills.md +23 -7
- package/bundled-skills/docs/users/codex-cli-skills.md +30 -13
- package/bundled-skills/docs/users/discovery-manifest.md +6 -3
- package/bundled-skills/docs/users/faq.md +37 -10
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/getting-started.md +24 -10
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/plugins.md +15 -3
- package/bundled-skills/docs/users/skills-vs-mcp-tools.md +68 -49
- package/bundled-skills/docs/users/usage.md +50 -25
- package/bundled-skills/docs/users/visual-guide.md +28 -22
- package/bundled-skills/docs/vietnamese/AAS_CORE.vi.md +28 -0
- package/bundled-skills/docs/vietnamese/README.vi.md +10 -6
- package/bundled-skills/game-development/2d-games/SKILL.md +22 -19
- package/bundled-skills/game-development/SKILL.md +27 -35
- package/bundled-skills/game-development/engine-selection/SKILL.md +115 -0
- package/bundled-skills/game-development/web-games/SKILL.md +47 -45
- package/bundled-skills/git-advanced-workflows/SKILL.md +1 -11
- package/bundled-skills/git-pushing/SKILL.md +4 -4
- package/bundled-skills/markstream-install/SKILL.md +187 -0
- package/bundled-skills/markstream-install/references/scenarios.md +48 -0
- package/bundled-skills/modellix/SKILL.md +80 -0
- package/bundled-skills/pptx-deck-creation/SKILL.md +15 -7
- package/bundled-skills/pptx-deck-creation/references/audit-checklist.md +7 -3
- package/bundled-skills/pptx-deck-creation/references/ooxml-parsing.md +58 -0
- package/bundled-skills/pptx-deck-creation/references/{python-snippets.md → reference-deck-analysis-patterns.md} +1 -1
- package/bundled-skills/pptx-deck-creation/references/reference-deck-analysis.md +30 -8
- package/bundled-skills/pptx-deck-creation/references/visual-asset-adapters.md +23 -13
- package/bundled-skills/pr-writer/SKILL.md +2 -2
- package/bundled-skills/repo-maintainer/SKILL.md +4 -2
- package/bundled-skills/tools-page-seo-optimizer/SKILL.md +6 -6
- package/package.json +1 -1
- package/skills_index.json +121 -7
- 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
|
|
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.
|
|
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 [
|
|
193
|
-
references.
|
|
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
|
|
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`
|
|
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:**
|
|
29
|
+
- **CJK / full-width text:** halve the characters-per-line value (full-width glyphs ≈ 2× 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,
|
|
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.
|
|
@@ -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
|
|
10
|
-
- `
|
|
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.
|
|
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
|
-
###
|
|
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
|
-
###
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
|
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
|
|
106
|
-
separate overwrite confirmation; do not silently
|
|
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
|
-
-
|
|
143
|
-
|
|
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
|
|
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 `
|
|
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 `
|
|
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
|
|