skilldrop-cli 1.1.3 → 1.2.0
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/catalogue.json +7 -8
- package/model-routing.json +0 -16
- package/package.json +1 -1
- package/packs/ai-engineering/skills/ai-usage-report/examples/weekly-engineering-team.md +1 -1
- package/packs/ai-engineering/skills/ai-usage-report/templates/usage-event-schema.md +2 -2
- package/packs/converters/pack.json +3 -14
- package/packs/converters/skills/file-to-markdown/SKILL.md +28 -11
- package/packs/converters/skills/file-to-markdown/evals/evals.json +30 -0
- package/packs/converters/skills/file-to-markdown/evals/files/5/supplier_agreement_v3.docx +0 -0
- package/packs/converters/skills/file-to-markdown/evals/files/6/numbers.xlsx +0 -0
- package/packs/converters/skills/file-to-markdown/evals/files/6/offsite_q3.pptx +0 -0
- package/packs/converters/skills/file-to-markdown/examples/inputs/acme-brief.docx +0 -0
- package/packs/converters/skills/file-to-markdown/examples/inputs/northwind-roadmap.pptx +0 -0
- package/packs/converters/skills/file-to-markdown/examples/mixed-inputs.md +24 -16
- package/packs/converters/skills/file-to-markdown/manifest.json +2 -3
- package/packs/converters/skills/file-to-markdown/scripts/to_markdown.py +103 -10
- package/packs/converters/skills/md-to-confluence/SKILL.md +2 -2
- package/packs/converters/skills/md-to-confluence/manifest.json +2 -9
- package/packs/converters/skills/md-to-docx/SKILL.md +3 -4
- package/packs/converters/skills/md-to-docx/evals/evals.json +1 -1
- package/packs/converters/skills/md-to-docx/evals/files/1/brand/brand.json +1 -1
- package/packs/converters/skills/md-to-docx/manifest.json +4 -11
- package/packs/converters/skills/md-to-docx/reference.md +1 -1
- package/packs/converters/skills/md-to-docx/scripts/md_to_docx.py +1 -1
- package/packs/converters/skills/md-to-pptx/SKILL.md +3 -5
- package/packs/converters/skills/md-to-pptx/manifest.json +3 -16
- package/packs/converters/skills/md-to-pptx/scripts/md_to_pptx.py +1 -1
- package/packs/converters/skills/md-to-xlsx/SKILL.md +1 -1
- package/packs/converters/skills/md-to-xlsx/manifest.json +2 -2
- package/packs/core/skills/brief-intake/SKILL.md +2 -2
- package/packs/core/skills/brief-intake/manifest.json +2 -2
- package/packs/core/skills/brief-intake/templates/brief-deck.md +3 -3
- package/packs/core/skills/doc-critique/rubrics/deck.md +1 -1
- package/packs/design/pack.json +11 -21
- package/packs/design/skills/brand-kit/SKILL.md +6 -8
- package/packs/design/skills/brand-kit/manifest.json +3 -17
- package/packs/design/skills/brand-kit/templates/brand.json +1 -1
- package/packs/solution-architect/skills/interactive-diagram/SKILL.md +1 -1
- package/packs/solution-architect/skills/interactive-diagram/manifest.json +1 -2
- package/packs/stakeholder-comms/skills/audience-profile/SKILL.md +3 -3
- package/packs/stakeholder-comms/skills/audience-profile/manifest.json +2 -2
- package/packs/stakeholder-comms/skills/audience-profile/reference.md +1 -1
- package/packs/converters/skills/md-to-html/SKILL.md +0 -108
- package/packs/converters/skills/md-to-html/evals/eval_queries.json +0 -34
- package/packs/converters/skills/md-to-html/evals/evals.json +0 -44
- package/packs/converters/skills/md-to-html/evals/files/1/brand/brand.json +0 -80
- package/packs/converters/skills/md-to-html/evals/files/1/brand/logo-white.png +0 -0
- package/packs/converters/skills/md-to-html/evals/files/1/brand/logo.png +0 -0
- package/packs/converters/skills/md-to-html/evals/files/1/brand/mark.png +0 -0
- package/packs/converters/skills/md-to-html/evals/files/1/docs/q3-review.md +0 -35
- package/packs/converters/skills/md-to-html/evals/files/1/img/dashboard.png +0 -0
- package/packs/converters/skills/md-to-html/evals/files/2/brand.json +0 -13
- package/packs/converters/skills/md-to-html/evals/files/2/img/kick-net.png +0 -0
- package/packs/converters/skills/md-to-html/evals/files/2/river-survey-guide.md +0 -53
- package/packs/converters/skills/md-to-html/evals/files/3/nanas-lentil-soup.md +0 -21
- package/packs/converters/skills/md-to-html/evals/files/3/pot.png +0 -0
- package/packs/converters/skills/md-to-html/examples/inputs/chart.svg +0 -8
- package/packs/converters/skills/md-to-html/examples/inputs/ops-review.md +0 -48
- package/packs/converters/skills/md-to-html/examples/ops-review.md +0 -83
- package/packs/converters/skills/md-to-html/manifest.json +0 -43
- package/packs/converters/skills/md-to-html/reference.md +0 -70
- package/packs/converters/skills/md-to-html/scripts/md_to_html.py +0 -662
- package/packs/converters/skills/mermaid-render/SKILL.md +0 -117
- package/packs/converters/skills/mermaid-render/evals/eval_queries.json +0 -30
- package/packs/converters/skills/mermaid-render/evals/evals.json +0 -43
- package/packs/converters/skills/mermaid-render/evals/files/1/docs/contoso-orders.md +0 -23
- package/packs/converters/skills/mermaid-render/evals/files/2/dispensing-diagrams.md +0 -39
- package/packs/converters/skills/mermaid-render/examples/broken-diagrams.md +0 -147
- package/packs/converters/skills/mermaid-render/examples/inputs/broken-flowchart.mmd +0 -8
- package/packs/converters/skills/mermaid-render/examples/inputs/broken-sequence.mmd +0 -11
- package/packs/converters/skills/mermaid-render/examples/inputs/checkout-flow.mmd +0 -9
- package/packs/converters/skills/mermaid-render/examples/inputs/design-notes.md +0 -35
- package/packs/converters/skills/mermaid-render/examples/inputs/fixed-flowchart.mmd +0 -9
- package/packs/converters/skills/mermaid-render/examples/inputs/typo.mmd +0 -2
- package/packs/converters/skills/mermaid-render/manifest.json +0 -50
- package/packs/converters/skills/mermaid-render/reference.md +0 -70
- package/packs/converters/skills/mermaid-render/scripts/render_mermaid.py +0 -487
- package/packs/design/skills/deck-builder/SKILL.md +0 -209
- package/packs/design/skills/deck-builder/evals/eval_queries.json +0 -14
- package/packs/design/skills/deck-builder/evals/evals.json +0 -67
- package/packs/design/skills/deck-builder/evals/files/4/ashby-vale-board-notes.md +0 -36
- package/packs/design/skills/deck-builder/examples/exec-board-update.md +0 -108
- package/packs/design/skills/deck-builder/examples/templated-brand-deck.md +0 -148
- package/packs/design/skills/deck-builder/manifest.json +0 -18
- package/packs/design/skills/deck-builder/reference.md +0 -180
- package/packs/design/skills/deck-builder/requirements.txt +0 -3
- package/packs/design/skills/deck-builder/scripts/build_deck.py +0 -1144
- package/packs/design/skills/deck-builder/templates/deck-spec.json +0 -168
- package/packs/design/skills/deck-builder/templates/palettes.json +0 -59
- package/packs/design/skills/marketing-flyer/SKILL.md +0 -113
- package/packs/design/skills/marketing-flyer/evals/eval_queries.json +0 -30
- package/packs/design/skills/marketing-flyer/evals/evals.json +0 -45
- package/packs/design/skills/marketing-flyer/evals/files/1/brand/brand.json +0 -80
- package/packs/design/skills/marketing-flyer/evals/files/1/brand/logo-white.png +0 -0
- package/packs/design/skills/marketing-flyer/evals/files/1/brand/logo.png +0 -0
- package/packs/design/skills/marketing-flyer/evals/files/1/brand/mark.png +0 -0
- package/packs/design/skills/marketing-flyer/evals/files/2/brand.json +0 -14
- package/packs/design/skills/marketing-flyer/evals/files/2/larchfield-logo.svg +0 -4
- package/packs/design/skills/marketing-flyer/evals/files/2/manager-email.txt +0 -6
- package/packs/design/skills/marketing-flyer/evals/files/2/open-day-brief.md +0 -15
- package/packs/design/skills/marketing-flyer/examples/community-health-fair.md +0 -68
- package/packs/design/skills/marketing-flyer/manifest.json +0 -40
- package/packs/design/skills/marketing-flyer/reference.md +0 -54
- package/packs/design/skills/marketing-flyer/scripts/build_flyer.py +0 -332
- package/packs/design/skills/marketing-flyer/templates/flyer-spec.json +0 -26
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
# Example: a quarterly ops review as one HTML file
|
|
2
|
-
|
|
3
|
-
**What the user said:** *"Turn `ops-review.md` into something the operations committee can
|
|
4
|
-
open from an email and print. Add a contents box."*
|
|
5
|
-
|
|
6
|
-
The input is [`inputs/ops-review.md`](inputs/ops-review.md). It has nested and task lists, a
|
|
7
|
-
quote, an aligned table, a local SVG chart ([`inputs/chart.svg`](inputs/chart.svg)), a Mermaid
|
|
8
|
-
fence, a Python code block, and two things that should not survive as-is: an inline
|
|
9
|
-
`<script>` and a pasted `<div>` block. (A `javascript:` link would also be dropped, with a
|
|
10
|
-
warning naming it.)
|
|
11
|
-
|
|
12
|
-
## Command
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
python3 scripts/md_to_html.py examples/inputs/ops-review.md -o ops-review.html --toc
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## What the script printed (real output)
|
|
19
|
-
|
|
20
|
-
```text
|
|
21
|
-
warning: 1 Mermaid diagram(s) kept as text; use --mermaid cdn to draw them (needs network when opened), or render them to SVG with mermaid-render
|
|
22
|
-
warning: raw HTML found and shown as text (2 place(s)); this is deliberate, see --allow-html
|
|
23
|
-
wrote ops-review.html (6 KB): 5 headings, 1 tables, 1 code blocks, 1 Mermaid, 1 images embedded, 0 remote, 0 missing
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## The `<main>` of the output (real, base64 shortened)
|
|
27
|
-
|
|
28
|
-
```html
|
|
29
|
-
<h1 id="northwind-health-q3-platform-review">Northwind Health: Q3 platform review<a class="anchor" href="#northwind-health-q3-platform-review" aria-hidden="true">#</a></h1>
|
|
30
|
-
<nav class="toc" aria-label="Contents"><p>Contents</p><ul><li><a href="#summary">Summary</a></li><li><a href="#numbers">Numbers</a></li><li><a href="#how-a-reminder-is-sent">How a reminder is sent</a></li><li><a href="#notes">Notes</a></li></ul></nav>
|
|
31
|
-
<p>Prepared for the <strong>operations committee</strong>. Figures are <em>placeholders</em> for this example.</p>
|
|
32
|
-
<h2 id="summary">Summary<a class="anchor" href="#summary" aria-hidden="true">#</a></h2>
|
|
33
|
-
<ul>
|
|
34
|
-
<li>Uptime held at the target for the quarter</li>
|
|
35
|
-
<li>Two incidents, both under 30 minutes
|
|
36
|
-
<ul>
|
|
37
|
-
<li>INC-101: login latency</li>
|
|
38
|
-
<li>INC-102: delayed reminder emails</li>
|
|
39
|
-
</ul></li>
|
|
40
|
-
<li class="task"><input type="checkbox" disabled checked> Migrate reminders to the new queue</li>
|
|
41
|
-
<li class="task"><input type="checkbox" disabled> Retire the old scheduler</li>
|
|
42
|
-
</ul>
|
|
43
|
-
<blockquote><p>Decision needed: approve the scheduler retirement for October.</p></blockquote>
|
|
44
|
-
<h2 id="numbers">Numbers<a class="anchor" href="#numbers" aria-hidden="true">#</a></h2>
|
|
45
|
-
<div class="table-wrap"><table><thead><tr><th style="text-align:left">Metric</th><th style="text-align:right">Q2</th><th style="text-align:right">Q3</th><th style="text-align:center">Change</th></tr></thead><tbody><tr><td style="text-align:left">Uptime</td><td style="text-align:right">99.90%</td><td style="text-align:right">99.95%</td><td style="text-align:center">up</td></tr><tr><td style="text-align:left">Incidents</td><td style="text-align:right">4</td><td style="text-align:right">2</td><td style="text-align:center">down</td></tr><tr><td style="text-align:left"><code>p95</code> login (ms)</td><td style="text-align:right">410</td><td style="text-align:right">380</td><td style="text-align:center">down</td></tr></tbody></table></div>
|
|
46
|
-
<p><img src="data:image/svg+xml;base64,…" alt="Weekly active members"></p>
|
|
47
|
-
<h2 id="how-a-reminder-is-sent">How a reminder is sent<a class="anchor" href="#how-a-reminder-is-sent" aria-hidden="true">#</a></h2>
|
|
48
|
-
<pre class="mermaid">flowchart LR
|
|
49
|
-
Sched([Scheduler]) -->|enqueue| Q{{Reminder queue}}
|
|
50
|
-
Q --> W[Worker]
|
|
51
|
-
W -->|SMTP| Mail[(Mail relay)]</pre>
|
|
52
|
-
<p>The worker retries with this rule:</p>
|
|
53
|
-
<pre><code class="language-python">def backoff(attempt):
|
|
54
|
-
return min(2 ** attempt, 300) # seconds, capped at 5 minutes</code></pre>
|
|
55
|
-
<h2 id="notes">Notes<a class="anchor" href="#notes" aria-hidden="true">#</a></h2>
|
|
56
|
-
<p>Raw HTML is shown as text, not run: <script>alert("hi")</script></p>
|
|
57
|
-
<pre class="raw-html"><div style="color:red">This block came from a pasted email.</div></pre>
|
|
58
|
-
<p>See the <a href="https://northwindhealth.example/runbooks/reminders">runbook</a> for the retry rules.</p>
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## With `--mermaid cdn`
|
|
62
|
-
|
|
63
|
-
The same command with `--mermaid cdn` adds exactly one script and a policy that allows only it
|
|
64
|
-
(real output):
|
|
65
|
-
|
|
66
|
-
```html
|
|
67
|
-
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data: https:; style-src 'unsafe-inline'; font-src data: https:; script-src 'sha256-FFdGvPoYRnPQ2cUJFzJW6IyZn0u1kdvZbGgLe0Qjl8Y=' https://cdn.jsdelivr.net; connect-src https://cdn.jsdelivr.net">
|
|
68
|
-
<script type="module">import mermaid from "https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.esm.min.mjs";mermaid.initialize({startOnLoad:true,securityLevel:"strict"});</script>
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Opened in headless Chrome with network, the `<pre class="mermaid">` was replaced by a drawn
|
|
72
|
-
flowchart SVG.
|
|
73
|
-
|
|
74
|
-
## What to tell the user
|
|
75
|
-
|
|
76
|
-
> `ops-review.html` is ready: one 6 KB file with the chart embedded, so it works as an email
|
|
77
|
-
> attachment. Three things to know:
|
|
78
|
-
> - The reminder diagram shows as text. If the committee will be online, I can rebuild with
|
|
79
|
-
> the diagram drawn (it then needs network when opened), or render it to an SVG and embed it.
|
|
80
|
-
> - The pasted `<div>` and `<script>` show as text on purpose. Delete them from the source if they
|
|
81
|
-
> were not meant to be there.
|
|
82
|
-
>
|
|
83
|
-
> Print-preview it once: the table header repeats on each page and the runbook link prints its address.
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "md-to-html",
|
|
3
|
-
"version": "0.1.3",
|
|
4
|
-
"description": "Turn a Markdown draft into one self-contained, print-friendly HTML file that survives being emailed or attached, with headings that have anchor links, tables, code, quotes, an optional table of contents, local images embedded, brand colours and fonts from a brand.json, Mermaid diagrams kept as text or drawn from a pinned CDN, and raw HTML escaped so nothing in the source runs. Use when the user wants Markdown \"as a web page\", \"as an HTML file I can send\", \"something people can open in a browser and print\", or says \"convert this to HTML\".",
|
|
5
|
-
"entrypoint": "SKILL.md",
|
|
6
|
-
"deps": {
|
|
7
|
-
"npm": [],
|
|
8
|
-
"pip": []
|
|
9
|
-
},
|
|
10
|
-
"env": {
|
|
11
|
-
"required": [],
|
|
12
|
-
"optional": []
|
|
13
|
-
},
|
|
14
|
-
"related": [
|
|
15
|
-
"brand-kit",
|
|
16
|
-
"guide-builder",
|
|
17
|
-
"marketing-flyer",
|
|
18
|
-
"md-to-docx",
|
|
19
|
-
"md-to-xlsx",
|
|
20
|
-
"mermaid-render"
|
|
21
|
-
],
|
|
22
|
-
"handoff": [
|
|
23
|
-
{
|
|
24
|
-
"to": "mermaid-render",
|
|
25
|
-
"when": "the document has Mermaid diagrams and readers may be offline",
|
|
26
|
-
"purpose": "Render each diagram to SVG so it can be embedded and needs no network.",
|
|
27
|
-
"fallback": "If mermaid-render is absent, keep the diagrams as text (the default) and tell the user they show as source, or use --mermaid cdn and say it needs network."
|
|
28
|
-
}
|
|
29
|
-
],
|
|
30
|
-
"tags": [
|
|
31
|
-
"html",
|
|
32
|
-
"markdown",
|
|
33
|
-
"convert",
|
|
34
|
-
"print",
|
|
35
|
-
"export",
|
|
36
|
-
"brand"
|
|
37
|
-
],
|
|
38
|
-
"permissions": {"network": [], "commands": [], "files": "named-paths", "notes": "The script makes no network calls. With --mermaid cdn, the HTML it writes loads Mermaid from cdn.jsdelivr.net when someone opens it."},
|
|
39
|
-
"model": {
|
|
40
|
-
"tier": "light",
|
|
41
|
-
"rationale": "A deterministic stdlib script does the conversion; the model picks options, fixes a few unsupported Markdown constructs and relays the script's warnings. Little judgment."
|
|
42
|
-
}
|
|
43
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
# md-to-html reference
|
|
2
|
-
|
|
3
|
-
## Markdown the script supports
|
|
4
|
-
|
|
5
|
-
| Construct | Supported | Notes |
|
|
6
|
-
|---|---|---|
|
|
7
|
-
| ATX headings `#` to `######` | ✅ | Each gets an `id` from its text (`## Rollout plan` becomes `#rollout-plan`); duplicates get `-1`, `-2` |
|
|
8
|
-
| Setext headings (`Title` over `===`) | ❌ | Comes through as a paragraph. Rewrite as `# Title` |
|
|
9
|
-
| Paragraphs, hard breaks (two trailing spaces or `\`) | ✅ | |
|
|
10
|
-
| `**bold**`, `*italic*`, `_italic_`, `~~strike~~`, `` `code` `` | ✅ | |
|
|
11
|
-
| Links `[text](...)` with an optional `"title"`, `<https://…>`, bare `https://…` | ✅ | `javascript:`, `vbscript:` and non-image `data:` targets are dropped with a warning |
|
|
12
|
-
| Reference links `[text][id]` | ❌ | Rewrite as inline links |
|
|
13
|
-
| Images `` | ✅ | Local files embedded as data URIs; remote URLs kept and warned about; missing files shown as `[image not found: alt]` |
|
|
14
|
-
| Ordered, unordered, nested lists; `- [ ]` task lists | ✅ | A blank line between items makes the list loose (each item a paragraph) |
|
|
15
|
-
| GFM pipe tables with `:---:` alignment | ✅ | `\|` for a literal pipe; pipes inside `` `code` `` are kept |
|
|
16
|
-
| Fenced code (```` ``` ```` or `~~~`) with a language | ✅ | `class="language-x"` on the `<code>`, no colouring |
|
|
17
|
-
| Indented code (4 spaces) | ✅ | |
|
|
18
|
-
| Blockquotes `>` | ✅ | Nested Markdown inside is rendered |
|
|
19
|
-
| `---` / `***` rules | ✅ | |
|
|
20
|
-
| YAML front matter at the top | ✅ | Removed from the output |
|
|
21
|
-
| Footnotes `[^1]`, definition lists, math | ❌ | Plain text. Rewrite footnotes as a Notes section |
|
|
22
|
-
| Raw HTML | Escaped | Shown as text; see below |
|
|
23
|
-
|
|
24
|
-
## Why raw HTML is escaped by default
|
|
25
|
-
|
|
26
|
-
The output is usually shared: attached to email, uploaded to an intranet, opened by people who
|
|
27
|
-
did not write the source. Markdown drafts pick up pasted HTML from emails, web pages and other
|
|
28
|
-
tools, and a `<script>`, an `onerror=` attribute or a `<form>` in that paste would run in every
|
|
29
|
-
reader's browser. Escaping shows the HTML as text, so nothing is lost and nothing runs.
|
|
30
|
-
`--allow-html` passes raw HTML *blocks* through (a line that starts with a tag, up to the next
|
|
31
|
-
blank line). Inline tags inside a paragraph stay escaped either way.
|
|
32
|
-
|
|
33
|
-
The file also carries a Content-Security-Policy that allows no scripts at all, or, with
|
|
34
|
-
`--mermaid cdn`, only the one Mermaid loader (by hash) and jsDelivr.
|
|
35
|
-
|
|
36
|
-
## brand.json fields read
|
|
37
|
-
|
|
38
|
-
From the `brand-kit` shape:
|
|
39
|
-
|
|
40
|
-
| Field | Used for |
|
|
41
|
-
|---|---|
|
|
42
|
-
| `colors.primary` | Headings, table header background, the header rule |
|
|
43
|
-
| `colors.secondary` | Links |
|
|
44
|
-
| `colors.accent` | Blockquote bar |
|
|
45
|
-
| `colors.background`, `colors.text` | Page background and body text |
|
|
46
|
-
| `fonts.heading.family` + `fallback` | Headings |
|
|
47
|
-
| `fonts.body.family` + `fallback` | Body text |
|
|
48
|
-
| `logo.primary` | Embedded at the top of the page, path relative to brand.json |
|
|
49
|
-
| `legal.footer` | Footer line |
|
|
50
|
-
|
|
51
|
-
A colour that is not a hex code is ignored with a warning. Fonts are named, not embedded: the
|
|
52
|
-
reader's machine must have them, or the fallback is used. Say so when the brand font is not a
|
|
53
|
-
common system font.
|
|
54
|
-
|
|
55
|
-
## Print rules in the stylesheet
|
|
56
|
-
|
|
57
|
-
- Page margins 18 mm top and bottom, 16 mm left and right; body text 11 pt.
|
|
58
|
-
- Table header rows repeat on every page; tables, code blocks, quotes and images avoid page breaks inside.
|
|
59
|
-
- Headings avoid being the last line on a page.
|
|
60
|
-
- Code wraps instead of running off the page.
|
|
61
|
-
- External links print their address after the link text.
|
|
62
|
-
- Anchor `#` markers are hidden.
|
|
63
|
-
|
|
64
|
-
## Mermaid
|
|
65
|
-
|
|
66
|
-
| Mode | What the reader sees | Needs network |
|
|
67
|
-
|---|---|---|
|
|
68
|
-
| default (`--mermaid none`) | The diagram source in a box | No |
|
|
69
|
-
| `--mermaid cdn` | The drawn diagram, by Mermaid 11.4.1 from jsDelivr, pinned to that exact version | Yes, each time the file is opened |
|
|
70
|
-
| Pre-render with `mermaid-render`, reference the SVG as an image | The drawn diagram, embedded | No |
|