@floh-solutions/pharos-cli 0.17.2 → 0.17.3

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 (2) hide show
  1. package/package.json +1 -1
  2. package/skill/SKILL.md +39 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floh-solutions/pharos-cli",
3
- "version": "0.17.2",
3
+ "version": "0.17.3",
4
4
  "description": "Azure DevOps from a headless shell, for an agent: the whole context of a task in one call, and the wiki/comment verbs Microsoft's MCP server does not ship.",
5
5
  "license": "UNLICENSED",
6
6
  "author": "FLOH Solutions",
package/skill/SKILL.md CHANGED
@@ -280,8 +280,8 @@ report usually, a spreadsheet when the shape matters more than the numbers.
280
280
  | `.pdf` | `pdftotext -layout f.pdf -` — poppler; keeps the table layout. **Empty output means a scan**, not an empty document |
281
281
  | scanned `.pdf` | `pdftoppm -png -r 150 f.pdf page`, then look at the PNGs it wrote |
282
282
  | `.docx` | `soffice --headless --convert-to "txt:Text (encoded):UTF8" f.docx --outdir ./out` — tables come out tab-separated |
283
- | `.xlsx` | `soffice --headless --convert-to csv f.xlsx --outdir ./out` — **first sheet only**, so check whether the workbook has more |
284
- | `.pptx` | `~/.claude/skills/pptx/.venv/bin/python -m markitdown deck.pptx` — slide text, and it NAMES the embedded images without extracting them |
283
+ | `.xlsx` | `soffice --headless --convert-to csv f.xlsx --outdir ./out` — **first sheet only**. Count them first: `unzip -p f.xlsx xl/workbook.xml \| grep -o '<sheet [^>]*name="[^"]*"'` |
284
+ | `.pptx` | `~/.claude/skills/pptx/.venv/bin/python -m markitdown deck.pptx` — slide text. Its `![](Graphic5.jpg)` lines are SHAPE names, not files: see below |
285
285
  | images inside any of them | `unzip -o -q f.pptx 'ppt/media/*' -d ./out` — also `word/media/` in a `.docx`, `xl/media/` in an `.xlsx` |
286
286
 
287
287
  Two traps in that table, both measured:
@@ -291,9 +291,43 @@ Two traps in that table, both measured:
291
291
  usually is — gives `page-1.png` while a forty-page one gives `page-01.png`.
292
292
  List the directory. A guessed name that is not there reads as "the render
293
293
  failed" when it worked.
294
- - **`--convert-to pdf` on a wide spreadsheet splits COLUMNS across pages.** A
295
- 40-column sheet became four pages. Still readable, but read them all and
296
- for pure numbers `csv` is the better half of the pair.
294
+ - **`--convert-to pdf` paginates a spreadsheet twice over, and only one of them
295
+ is obvious.** Long splits by ROW, which is ordinary. **Wide splits by
296
+ COLUMN** a 40-column sheet became four pages, each carrying a different
297
+ slice of the columns for the same rows. So a page count above one does not
298
+ tell you which kind you have: read every page, and if a row looks like it is
299
+ missing fields, look for them on the next one. For pure numbers `csv` is the
300
+ better half of the pair.
301
+
302
+ **Count the parts before you trust a conversion.** Every one of these formats is
303
+ a ZIP, so the file itself will tell you what it holds — and each of these has
304
+ been the thing that was quietly missing:
305
+
306
+ ```bash
307
+ unzip -p f.xlsx xl/workbook.xml | grep -o '<sheet [^>]*name="[^"]*"' # sheets
308
+ unzip -l f.pptx | grep -c 'ppt/slides/slide[0-9]*\.xml' # slides
309
+ unzip -l f.docx | grep 'word/media/' # images
310
+ ```
311
+
312
+ If the images list is empty, text extraction loses nothing and the cheap route
313
+ is safe. If it is not, that is your warning that the payload may not be text.
314
+
315
+ **`markitdown`'s image lines name SHAPES, not files.** A deck that emits
316
+ `![](Graphic5.jpg)`, `![](Graphic8.jpg)` and `![](Graphic9.jpg)` for one slide
317
+ turned out to contain exactly two media files in the whole archive — named
318
+ `image1.png` and `image2.svg`, matching none of them. Those are PowerPoint's
319
+ shape names. Do not go looking for a file by one, and do not read three of them
320
+ as three pictures. To map media to the slide that uses it, read the
321
+ relationships: `unzip -p f.pptx ppt/slides/_rels/slide6.xml.rels`.
322
+
323
+ **Text extraction tells you WHICH strings are on a slide and never WHERE.** That
324
+ is not a nuance — measured on a real deck, one slide carried both `IDENTITEIT`
325
+ and a leftover `Wat is ChatGPT?` from a different presentation, in the same
326
+ place, printing on top of each other. Extracted, they are two tidy lines and
327
+ read as a title with a subtitle. Rendered, the slide is visibly broken. So a
328
+ duplicated, stale or overlapping shape is invisible to every text route by
329
+ construction — if you are reviewing a deck rather than mining it for facts, look
330
+ at it.
297
331
 
298
332
  `pandoc` is **not** installed here, whatever another skill's instructions say.
299
333
  `markitdown` in that venv does `.pptx` and nothing else: it went in without the