@floh-solutions/pharos-cli 0.17.1 → 0.17.2

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 +3 -3
  2. package/skill/SKILL.md +40 -11
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floh-solutions/pharos-cli",
3
- "version": "0.17.1",
3
+ "version": "0.17.2",
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",
@@ -24,8 +24,8 @@
24
24
  "node": ">=22"
25
25
  },
26
26
  "dependencies": {
27
- "@floh-solutions/plan-to-board": "0.1.1",
28
- "@floh-solutions/ado-core": "0.8.0"
27
+ "@floh-solutions/ado-core": "0.8.0",
28
+ "@floh-solutions/plan-to-board": "0.1.1"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^22.10.2",
package/skill/SKILL.md CHANGED
@@ -251,24 +251,49 @@ Two ways this fails **silently**, both measured on a real work item:
251
251
  deck and looks like it worked. For a slide deck, or a scanned PDF, the payload
252
252
  is usually the images — extract them and actually look at them.
253
253
 
254
- **Known-good on a Claude Code machine provisioned by us, measured 2026-08-08.**
255
- Conditional on purpose: this skill also runs under other agents on machines
256
- nobody here set up, so read a missing command as "find your own", not as a bug.
254
+ ### First ask whether you read PDFs natively. If you do, this is one command.
255
+
256
+ Many agents Claude Code among them — read a PDF **visually**, page by page,
257
+ the way a person looks at it. That covers a scan with no text in it at all, with
258
+ no OCR step. If that is you, the whole problem collapses to one conversion:
259
+
260
+ ```bash
261
+ soffice --headless --convert-to pdf f.docx --outdir ./out # .pptx, .xlsx too
262
+ # then read ./out/f.pdf with your own file-reading tool
263
+ ```
264
+
265
+ **This is the route that keeps the pictures**, which is the whole failure this
266
+ section is about. Measured on the deck described above — the one whose seven
267
+ text fragments lost the specification: converted to PDF and read, it gives up
268
+ the flow diagram, the screenshot of the configuration UI with its actual
269
+ threshold values, and every row and column of the target output table. One
270
+ command, one read, nothing dropped. The same is true of a `.docx` whose content
271
+ is in a chart or a screenshot.
272
+
273
+ Prefer it whenever layout or images might carry meaning — a deck always, a
274
+ report usually, a spreadsheet when the shape matters more than the numbers.
275
+
276
+ ### If you only read text, extract it per format
257
277
 
258
278
  | file | how |
259
279
  |---|---|
260
- | `.pdf` | `pdftotext -layout f.pdf -` — poppler; keeps the table layout |
280
+ | `.pdf` | `pdftotext -layout f.pdf -` — poppler; keeps the table layout. **Empty output means a scan**, not an empty document |
261
281
  | scanned `.pdf` | `pdftoppm -png -r 150 f.pdf page`, then look at the PNGs it wrote |
262
- | `.docx` | `soffice --headless --convert-to "txt:Text (encoded):UTF8" f.docx --outdir ./out` — LibreOffice; tables come out tab-separated |
282
+ | `.docx` | `soffice --headless --convert-to "txt:Text (encoded):UTF8" f.docx --outdir ./out` — tables come out tab-separated |
263
283
  | `.xlsx` | `soffice --headless --convert-to csv f.xlsx --outdir ./out` — **first sheet only**, so check whether the workbook has more |
264
284
  | `.pptx` | `~/.claude/skills/pptx/.venv/bin/python -m markitdown deck.pptx` — slide text, and it NAMES the embedded images without extracting them |
265
- | images in a `.pptx` | `unzip -o -q deck.pptx 'ppt/media/*' -d ./out` `out/ppt/media/*.png` |
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` |
266
286
 
267
- **Do not predict what `pdftoppm` names its output.** The page number is padded
268
- to the width of the page COUNT, so a one-page scan — which is what an attachment
269
- usually is gives `page-1.png` while a forty-page one gives `page-01.png`. List
270
- the directory rather than guessing the name; a guessed name that is not there
271
- reads as "the render failed" when it worked.
287
+ Two traps in that table, both measured:
288
+
289
+ - **Do not predict what `pdftoppm` names its output.** The page number is padded
290
+ to the width of the page COUNT, so a one-page scan what an attachment
291
+ usually is gives `page-1.png` while a forty-page one gives `page-01.png`.
292
+ List the directory. A guessed name that is not there reads as "the render
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.
272
297
 
273
298
  `pandoc` is **not** installed here, whatever another skill's instructions say.
274
299
  `markitdown` in that venv does `.pptx` and nothing else: it went in without the
@@ -276,6 +301,10 @@ reads as "the render failed" when it worked.
276
301
  for all three. That is why LibreOffice, not markitdown, is the line above for
277
302
  everything except a deck.
278
303
 
304
+ **Known-good on a Claude Code machine provisioned by us, measured 2026-08-08.**
305
+ Conditional on purpose: this skill also runs under other agents on machines
306
+ nobody here set up, so read a missing command as "find your own", not as a bug.
307
+
279
308
  ## Mentioning somebody
280
309
 
281
310
  **A mention is `@<guid>` and nothing else notifies.** `@Ada Lovelace` written