@intentic/claude-plugin 1.319.0 → 1.320.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "intentic",
3
3
  "displayName": "Intentic",
4
- "version": "1.319.0",
4
+ "version": "1.320.0",
5
5
  "description": "Cheaper, sharper Claude Code sessions: Bash output trimmed before Claude reads it, a project map and this project's field notes at session start, iq code search and fileq document reading taught, and /intentic:stats to show what each one saved. Every mechanism is a switch in /config.",
6
6
  "author": {
7
7
  "name": "intentic"
package/dist/fileq.mjs CHANGED
@@ -9176,10 +9176,10 @@ var init_package = __esm({
9176
9176
  }
9177
9177
  });
9178
9178
 
9179
- // ../fileq/src/lib/check/docx.ts
9179
+ // ../fileq/src/lib/check/check-docx.ts
9180
9180
  var DEFAULT_MAIN, EMU_PER_TWIP, BUILT_IN_ANCHORS, COMPUTED_FIELDS, CROSS_REFERENCES, TYPED_BULLET, headingLevels, headingOf, paragraphText, locate, paragraphIndex, stepField, fieldsIn, bookmarkArgument, fieldFindings, referenceFindings, referenceFinding, textWidths, wideImageFindings, draftFindings, paragraphFindings, controlFindings, linkFindings, storyFindings, openDocx, checkDocx;
9181
- var init_docx = __esm({
9182
- "../fileq/src/lib/check/docx.ts"() {
9181
+ var init_check_docx = __esm({
9182
+ "../fileq/src/lib/check/check-docx.ts"() {
9183
9183
  "use strict";
9184
9184
  init_finding();
9185
9185
  init_package();
@@ -9218,10 +9218,12 @@ var init_docx = __esm({
9218
9218
  const basedOn = childNamed(style, "w:basedOn")?.attrs["w:val"];
9219
9219
  return basedOn === void 0 ? void 0 : levelOf(basedOn, depth + 1);
9220
9220
  };
9221
- return new Map([...byId.keys()].flatMap((id) => {
9222
- const level = levelOf(id, 0);
9223
- return level === void 0 ? [] : [[id, level]];
9224
- }));
9221
+ return new Map(
9222
+ [...byId.keys()].flatMap((id) => {
9223
+ const level = levelOf(id, 0);
9224
+ return level === void 0 ? [] : [[id, level]];
9225
+ })
9226
+ );
9225
9227
  };
9226
9228
  headingOf = (paragraph, levels) => {
9227
9229
  const pPr = childNamed(paragraph, "w:pPr");
@@ -9273,7 +9275,12 @@ var init_docx = __esm({
9273
9275
  current.separated = true;
9274
9276
  } else if (type === "end") {
9275
9277
  open.pop();
9276
- fields.push({ instruction: current.instruction.trim(), result: current.result, hasResult: current.separated && current.result.trim() !== "", where: current.where });
9278
+ fields.push({
9279
+ instruction: current.instruction.trim(),
9280
+ result: current.result,
9281
+ hasResult: current.separated && current.result.trim() !== "",
9282
+ where: current.where
9283
+ });
9277
9284
  }
9278
9285
  };
9279
9286
  fieldsIn = (body, whereOfNode) => {
@@ -9312,18 +9319,30 @@ var init_docx = __esm({
9312
9319
  fieldFindings = (fields, bookmarks, updatesOnOpen) => fields.flatMap((field2) => {
9313
9320
  const keyword = (field2.instruction.split(/\s+/)[0] ?? "").toUpperCase();
9314
9321
  if (field2.result.trim().startsWith("Error!")) {
9315
- return [error("field-error", field2.where, `the ${keyword} field shows ${excerpt(field2.result)}: fix what it points at, then update fields`)];
9322
+ return [
9323
+ error("field-error", field2.where, `the ${keyword} field shows ${excerpt(field2.result)}: fix what it points at, then update fields`)
9324
+ ];
9316
9325
  }
9317
9326
  const bookmark = bookmarkArgument(field2.instruction);
9318
9327
  if (bookmark !== void 0 && !bookmarks.has(bookmark) && !BUILT_IN_ANCHORS.has(bookmark)) {
9319
- return [error("broken-reference", field2.where, `the ${keyword} field points to bookmark "${bookmark}", which is not in the document: Word shows "Error! Reference source not found."`)];
9328
+ return [
9329
+ error(
9330
+ "broken-reference",
9331
+ field2.where,
9332
+ `the ${keyword} field points to bookmark "${bookmark}", which is not in the document: Word shows "Error! Reference source not found."`
9333
+ )
9334
+ ];
9320
9335
  }
9321
9336
  if (keyword === "MERGEFIELD") {
9322
- return [warning("merge-field", field2.where, `a mail-merge field is left in (${field2.instruction}): it prints its placeholder, not a value`)];
9337
+ return [
9338
+ warning("merge-field", field2.where, `a mail-merge field is left in (${field2.instruction}): it prints its placeholder, not a value`)
9339
+ ];
9323
9340
  }
9324
9341
  if (keyword === "TOC" && !field2.hasResult) {
9325
9342
  const when = updatesOnOpen ? "Word offers to update fields when the file opens" : "nothing fills it until someone updates fields (F9 in Word)";
9326
- return [warning("empty-toc", field2.where, `the table of contents has no entries saved: ${when}, and previews and LibreOffice show it empty`)];
9343
+ return [
9344
+ warning("empty-toc", field2.where, `the table of contents has no entries saved: ${when}, and previews and LibreOffice show it empty`)
9345
+ ];
9327
9346
  }
9328
9347
  if (!field2.hasResult && keyword !== "" && !COMPUTED_FIELDS.has(keyword) && keyword !== "TOC") {
9329
9348
  return [warning("empty-field", field2.where, `the ${keyword} field has no saved result, so it shows blank until fields are updated`)];
@@ -9350,10 +9369,18 @@ var init_docx = __esm({
9350
9369
  referenceFinding = (pkg, node, relationship, id, where) => {
9351
9370
  const isImage = node.name === "a:blip" || node.name === "v:imagedata";
9352
9371
  if (relationship === void 0) {
9353
- return error(isImage ? "missing-image" : "missing-part", where, `${isImage ? "an image" : node.name} refers to ${id}, which the document does not define: it shows as missing`);
9372
+ return error(
9373
+ isImage ? "missing-image" : "missing-part",
9374
+ where,
9375
+ `${isImage ? "an image" : node.name} refers to ${id}, which the document does not define: it shows as missing`
9376
+ );
9354
9377
  }
9355
9378
  if (relationship.external) {
9356
- return isImage ? warning("linked-image", where, `an image is linked from outside the file (${relationship.target}), so it will not show on anyone else's machine; embed it`) : void 0;
9379
+ return isImage ? warning(
9380
+ "linked-image",
9381
+ where,
9382
+ `an image is linked from outside the file (${relationship.target}), so it will not show on anyone else's machine; embed it`
9383
+ ) : void 0;
9357
9384
  }
9358
9385
  if (pkg.has(relationship.target)) {
9359
9386
  return void 0;
@@ -9391,16 +9418,28 @@ var init_docx = __esm({
9391
9418
  return [];
9392
9419
  }
9393
9420
  const where = paragraph === void 0 ? "" : context.whereOf.get(paragraph) ?? "";
9394
- return [warning("wide-image", where, `a picture is ${inches(cx)} wide in a ${inches(width)} text column, so it runs into the margin or is cut off; scale it to fit`)];
9421
+ return [
9422
+ warning(
9423
+ "wide-image",
9424
+ where,
9425
+ `a picture is ${inches(cx)} wide in a ${inches(width)} text column, so it runs into the margin or is cut off; scale it to fit`
9426
+ )
9427
+ ];
9395
9428
  });
9396
9429
  };
9397
9430
  draftFindings = (context, body) => {
9398
9431
  const findings = [];
9399
- const changes = everyElement(body).filter((node) => ["w:ins", "w:del", "w:moveFrom", "w:moveTo"].includes(node.name) && node.children.some(isElement)).length;
9432
+ const changes = everyElement(body).filter(
9433
+ (node) => ["w:ins", "w:del", "w:moveFrom", "w:moveTo"].includes(node.name) && node.children.some(isElement)
9434
+ ).length;
9400
9435
  if (changes > 0) {
9401
- findings.push(warning("tracked-changes", "", `${plural2(changes, "tracked change")} still in the document: accept or reject them before it goes out`));
9436
+ findings.push(
9437
+ warning("tracked-changes", "", `${plural2(changes, "tracked change")} still in the document: accept or reject them before it goes out`)
9438
+ );
9402
9439
  }
9403
- const commentsPart = [...context.pkg.rels(context.main).values()].find((relationship) => relationship.kind === "comments" && !relationship.external);
9440
+ const commentsPart = [...context.pkg.rels(context.main).values()].find(
9441
+ (relationship) => relationship.kind === "comments" && !relationship.external
9442
+ );
9404
9443
  const comments = commentsPart === void 0 ? void 0 : context.pkg.xml(commentsPart.target);
9405
9444
  const count = comments === void 0 ? 0 : childrenNamed(comments, "w:comment").length;
9406
9445
  if (count > 0) {
@@ -9418,7 +9457,13 @@ var init_docx = __esm({
9418
9457
  const hasPicture = descendantsNamed(located.paragraph, "w:drawing").length > 0 || descendantsNamed(located.paragraph, "w:pict").length > 0;
9419
9458
  if (located.heading !== void 0 && located.text.trim() === "" && !hasPicture) {
9420
9459
  const level = located.heading === 0 ? "title" : `heading ${located.heading}`;
9421
- findings.push(warning("empty-heading", where, `empty ${level}: a blank line in the text and an empty entry in the navigation pane and any table of contents; delete it`));
9460
+ findings.push(
9461
+ warning(
9462
+ "empty-heading",
9463
+ where,
9464
+ `empty ${level}: a blank line in the text and an empty entry in the navigation pane and any table of contents; delete it`
9465
+ )
9466
+ );
9422
9467
  }
9423
9468
  if (TYPED_BULLET.test(located.text) && childAt(located.paragraph, "w:pPr", "w:numPr") === void 0) {
9424
9469
  typedBullets += 1;
@@ -9427,7 +9472,11 @@ var init_docx = __esm({
9427
9472
  }
9428
9473
  if (firstBullet !== void 0) {
9429
9474
  findings.push(
9430
- warning("typed-bullets", firstBullet, `${plural2(typedBullets, "paragraph")} ${typedBullets === 1 ? "starts" : "start"} with a typed bullet character instead of a list style, so the list will not indent or renumber; use a list style`)
9475
+ warning(
9476
+ "typed-bullets",
9477
+ firstBullet,
9478
+ `${plural2(typedBullets, "paragraph")} ${typedBullets === 1 ? "starts" : "start"} with a typed bullet character instead of a list style, so the list will not indent or renumber; use a list style`
9479
+ )
9431
9480
  );
9432
9481
  }
9433
9482
  return findings;
@@ -9435,26 +9484,43 @@ var init_docx = __esm({
9435
9484
  controlFindings = (body, whereOfNode) => descendantsNamed(body, "w:sdt").filter((control) => childAt(control, "w:sdtPr", "w:showingPlcHdr") !== void 0).map((control) => {
9436
9485
  const prompt = textIn(childNamed(control, "w:sdtContent") ?? control, "w:t");
9437
9486
  const where = whereOfNode(descendantsNamed(control, "w:p")[0] ?? control);
9438
- return error("placeholder-control", where, `a content control still shows its prompt ${excerpt(prompt)}: enter the value or remove the control`);
9487
+ return error(
9488
+ "placeholder-control",
9489
+ where,
9490
+ `a content control still shows its prompt ${excerpt(prompt)}: enter the value or remove the control`
9491
+ );
9439
9492
  });
9440
9493
  linkFindings = (body, bookmarks, whereOfNode) => descendantsNamed(body, "w:hyperlink").flatMap((link) => {
9441
9494
  const anchor = link.attrs["w:anchor"];
9442
9495
  if (anchor === void 0 || bookmarks.has(anchor) || BUILT_IN_ANCHORS.has(anchor)) {
9443
9496
  return [];
9444
9497
  }
9445
- return [error("broken-link", whereOfNode(link), `the link ${excerpt(textIn(link, "w:t"))} points to bookmark "${anchor}", which is not in the document, so clicking it goes nowhere`)];
9498
+ return [
9499
+ error(
9500
+ "broken-link",
9501
+ whereOfNode(link),
9502
+ `the link ${excerpt(textIn(link, "w:t"))} points to bookmark "${anchor}", which is not in the document, so clicking it goes nowhere`
9503
+ )
9504
+ ];
9446
9505
  });
9447
9506
  storyFindings = (context, stories) => stories.flatMap((story) => {
9448
9507
  const label = story.part.replace(/^word\//, "").replace(/\.xml$/, "");
9449
9508
  const referenced = /* @__PURE__ */ new Set();
9450
- return [...referenceFindings(context, story.part, story.tree, () => label, referenced), ...missingTargetFindings(context.pkg, story.part, label, referenced)];
9509
+ return [
9510
+ ...referenceFindings(context, story.part, story.tree, () => label, referenced),
9511
+ ...missingTargetFindings(context.pkg, story.part, label, referenced)
9512
+ ];
9451
9513
  });
9452
9514
  openDocx = (bytes) => {
9453
9515
  try {
9454
9516
  return openPackage(bytes);
9455
9517
  } catch (cause) {
9456
9518
  if (cause instanceof NotAPackage) {
9457
- return { format: "docx", findings: [error("unreadable", "", `${cause.message}: this is not a Word file (or it is password-protected)`)], notes: [] };
9519
+ return {
9520
+ format: "docx",
9521
+ findings: [error("unreadable", "", `${cause.message}: this is not a Word file (or it is password-protected)`)],
9522
+ notes: []
9523
+ };
9458
9524
  }
9459
9525
  throw cause;
9460
9526
  }
@@ -9485,7 +9551,9 @@ var init_docx = __esm({
9485
9551
  return tree === void 0 ? [] : [{ part: relationship.target, tree }];
9486
9552
  });
9487
9553
  const bookmarks = new Set(
9488
- [body, ...stories.map((story) => story.tree)].flatMap((tree) => descendantsNamed(tree, "w:bookmarkStart").flatMap((mark) => mark.attrs["w:name"] ?? []))
9554
+ [body, ...stories.map((story) => story.tree)].flatMap(
9555
+ (tree) => descendantsNamed(tree, "w:bookmarkStart").flatMap((mark) => mark.attrs["w:name"] ?? [])
9556
+ )
9489
9557
  );
9490
9558
  const context = { pkg, main, paragraphs: located, whereOf, bookmarks };
9491
9559
  if (located.every((item) => item.text.trim() === "") && descendantsNamed(body, "w:drawing").length === 0) {
@@ -9504,7 +9572,9 @@ var init_docx = __esm({
9504
9572
  ...wideImageFindings(context, body, owner),
9505
9573
  ...draftFindings(context, body)
9506
9574
  );
9507
- const explained = new Set(findings.filter((finding) => finding.rule === "field-error" || finding.rule === "placeholder-control").map((finding) => finding.where));
9575
+ const explained = new Set(
9576
+ findings.filter((finding) => finding.rule === "field-error" || finding.rule === "placeholder-control").map((finding) => finding.where)
9577
+ );
9508
9578
  return {
9509
9579
  format: "docx",
9510
9580
  extent: plural2(located.length, "paragraph"),
@@ -49190,10 +49260,10 @@ var init_dist2 = __esm({
49190
49260
  }
49191
49261
  });
49192
49262
 
49193
- // ../fileq/src/lib/check/pdf.ts
49263
+ // ../fileq/src/lib/check/check-pdf.ts
49194
49264
  var MAX_PAGES, POINTS_PER_INCH, STANDARD_FONTS, paintersOf, isGlyph, visibleCharacters, fontOf, scanPage, linkFindings2, sizeLabel, pageList, openPdf, checkPdf;
49195
- var init_pdf = __esm({
49196
- "../fileq/src/lib/check/pdf.ts"() {
49265
+ var init_check_pdf = __esm({
49266
+ "../fileq/src/lib/check/check-pdf.ts"() {
49197
49267
  "use strict";
49198
49268
  init_dist2();
49199
49269
  init_finding();
@@ -49289,7 +49359,13 @@ var init_pdf = __esm({
49289
49359
  const named = String(dest);
49290
49360
  const target = await pdf.getDestination(named).catch(() => null);
49291
49361
  if (target === null) {
49292
- findings.push(error("broken-link", `page ${number}`, `a link goes to "${named}", a destination the file does not define, so clicking it does nothing`));
49362
+ findings.push(
49363
+ error(
49364
+ "broken-link",
49365
+ `page ${number}`,
49366
+ `a link goes to "${named}", a destination the file does not define, so clicking it does nothing`
49367
+ )
49368
+ );
49293
49369
  }
49294
49370
  }
49295
49371
  return findings;
@@ -49337,14 +49413,24 @@ var init_pdf = __esm({
49337
49413
  }
49338
49414
  for (const [font, pages] of unembedded) {
49339
49415
  findings.push(
49340
- warning("font-not-embedded", `page ${pageList(pages)}`, `text is set in ${font}, which the file does not carry: a reader without that font substitutes another, and lines can break differently; embed it`)
49416
+ warning(
49417
+ "font-not-embedded",
49418
+ `page ${pageList(pages)}`,
49419
+ `text is set in ${font}, which the file does not carry: a reader without that font substitutes another, and lines can break differently; embed it`
49420
+ )
49341
49421
  );
49342
49422
  }
49343
49423
  if (sizes.size > 1) {
49344
49424
  const [common] = [...sizes.entries()].toSorted((a2, b3) => b3[1].length - a2[1].length);
49345
49425
  const odd = [...sizes.entries()].filter(([label]) => label !== common?.[0]);
49346
49426
  for (const [label, pages] of odd) {
49347
- findings.push(warning("page-size", `page ${pageList(pages)}`, `${plural2(pages.length, "page is", "pages are")} ${label}, the rest ${common?.[0] ?? "another size"}`));
49427
+ findings.push(
49428
+ warning(
49429
+ "page-size",
49430
+ `page ${pageList(pages)}`,
49431
+ `${plural2(pages.length, "page is", "pages are")} ${label}, the rest ${common?.[0] ?? "another size"}`
49432
+ )
49433
+ );
49348
49434
  }
49349
49435
  }
49350
49436
  if (characters === 0 && total > 0) {
@@ -50615,10 +50701,10 @@ var init_text_fit = __esm({
50615
50701
  }
50616
50702
  });
50617
50703
 
50618
- // ../fileq/src/lib/check/pptx.ts
50704
+ // ../fileq/src/lib/check/check-pptx.ts
50619
50705
  var PRESENTATION, EMU_PER_PT, DEFAULT_SIZE_HUNDREDTHS, DEFAULT_INSET_X, DEFAULT_INSET_Y, OVERFLOW_MARGIN, CROP_WHOLE, DRAWABLE, SELF_FILLING, PROMPTS, promptOf, KINDS, drawingName, drawableChildren, placeholderOf, masterType, findPlaceholder, inheritanceChain, ownTransform, boxOf, coveredBox, geometryFindings, firstOf, masterStyleFor, textStyleOf, hundredthsAt, paragraphsOf, bodyPropsOf, overflowFindings, tableFindings, referenceFinding2, referenceFindings2, pictureFindings, stretchFindings, drawingFindings, layoutsOf, slideFindings, checkPptx;
50620
- var init_pptx = __esm({
50621
- "../fileq/src/lib/check/pptx.ts"() {
50706
+ var init_check_pptx = __esm({
50707
+ "../fileq/src/lib/check/check-pptx.ts"() {
50622
50708
  "use strict";
50623
50709
  init_esm2();
50624
50710
  init_finding();
@@ -50860,7 +50946,13 @@ var init_pptx = __esm({
50860
50946
  }
50861
50947
  const needed = estimate.heightPt * EMU_PER_PT + body.top + body.bottom;
50862
50948
  if (body.autofit === "grow") {
50863
- return box.y + needed > context.height * 1.02 ? [warning("text-overflow", where, `the box grows to fit its text, and about ${plural2(estimate.lines, "line")} of ${estimate.sizePt} pt take it past the bottom of the slide ${look}`)] : [];
50949
+ return box.y + needed > context.height * 1.02 ? [
50950
+ warning(
50951
+ "text-overflow",
50952
+ where,
50953
+ `the box grows to fit its text, and about ${plural2(estimate.lines, "line")} of ${estimate.sizePt} pt take it past the bottom of the slide ${look}`
50954
+ )
50955
+ ] : [];
50864
50956
  }
50865
50957
  if (estimate.heightPt <= innerHeight * OVERFLOW_MARGIN) {
50866
50958
  return [];
@@ -50897,7 +50989,11 @@ var init_pptx = __esm({
50897
50989
  const tcPr = childNamed(cell, "a:tcPr");
50898
50990
  const marginX = (intAttr(tcPr, "marL") ?? DEFAULT_INSET_X) + (intAttr(tcPr, "marR") ?? DEFAULT_INSET_X);
50899
50991
  const marginY = (intAttr(tcPr, "marT") ?? DEFAULT_INSET_Y) + (intAttr(tcPr, "marB") ?? DEFAULT_INSET_Y);
50900
- const estimate = estimateText(paragraphsOf(txBody, { listStyles: [childNamed(txBody, "a:lstStyle")] }, 1, 0), (cellWidth - marginX) / EMU_PER_PT, true);
50992
+ const estimate = estimateText(
50993
+ paragraphsOf(txBody, { listStyles: [childNamed(txBody, "a:lstStyle")] }, 1, 0),
50994
+ (cellWidth - marginX) / EMU_PER_PT,
50995
+ true
50996
+ );
50901
50997
  rowHeight = Math.max(rowHeight, estimate.heightPt * EMU_PER_PT + marginY);
50902
50998
  }
50903
50999
  total += rowHeight;
@@ -50922,7 +51018,11 @@ var init_pptx = __esm({
50922
51018
  return error(rule, where, `${isImage ? "image" : node.name} refers to ${id}, which the slide does not define: ${what}`);
50923
51019
  }
50924
51020
  if (relationship.external) {
50925
- return isImage ? warning("linked-image", where, `image is linked from outside the file (${relationship.target}), so it will not show on anyone else's machine; embed it`) : void 0;
51021
+ return isImage ? warning(
51022
+ "linked-image",
51023
+ where,
51024
+ `image is linked from outside the file (${relationship.target}), so it will not show on anyone else's machine; embed it`
51025
+ ) : void 0;
50926
51026
  }
50927
51027
  if (context.pkg.has(relationship.target)) {
50928
51028
  return void 0;
@@ -51044,7 +51144,9 @@ var init_pptx = __esm({
51044
51144
  const findings = [];
51045
51145
  const slideWhere = `slide ${context.number}`;
51046
51146
  if (tree.attrs["show"] === "0") {
51047
- findings.push(warning("hidden-slide", slideWhere, "the slide is hidden, so the slide show skips it; delete it if it is not meant to be delivered"));
51147
+ findings.push(
51148
+ warning("hidden-slide", slideWhere, "the slide is hidden, so the slide show skips it; delete it if it is not meant to be delivered")
51149
+ );
51048
51150
  }
51049
51151
  const referenced = /* @__PURE__ */ new Set();
51050
51152
  const background = childAt(tree, "p:cSld", "p:bg");
@@ -51068,7 +51170,11 @@ var init_pptx = __esm({
51068
51170
  pkg = openPackage(bytes);
51069
51171
  } catch (cause) {
51070
51172
  if (cause instanceof NotAPackage) {
51071
- return { format: "pptx", findings: [error("unreadable", "", `${cause.message}: this is not a PowerPoint file (or it is password-protected)`)], notes: [] };
51173
+ return {
51174
+ format: "pptx",
51175
+ findings: [error("unreadable", "", `${cause.message}: this is not a PowerPoint file (or it is password-protected)`)],
51176
+ notes: []
51177
+ };
51072
51178
  }
51073
51179
  throw cause;
51074
51180
  }
@@ -51097,7 +51203,13 @@ var init_pptx = __esm({
51097
51203
  const number = index + 1;
51098
51204
  const relationship = rels.get(slideId.attrs["r:id"] ?? "");
51099
51205
  if (relationship === void 0 || relationship.external || !pkg.has(relationship.target)) {
51100
- findings.push(error("missing-part", `slide ${number}`, "the slide list names a slide that is not in the file; PowerPoint will offer to repair the deck"));
51206
+ findings.push(
51207
+ error(
51208
+ "missing-part",
51209
+ `slide ${number}`,
51210
+ "the slide list names a slide that is not in the file; PowerPoint will offer to repair the deck"
51211
+ )
51212
+ );
51101
51213
  return;
51102
51214
  }
51103
51215
  const tree = pkg.xml(relationship.target);
@@ -51121,10 +51233,10 @@ var init_pptx = __esm({
51121
51233
  }
51122
51234
  });
51123
51235
 
51124
- // ../fileq/src/lib/check/xlsx.ts
51236
+ // ../fileq/src/lib/check/check-xlsx.ts
51125
51237
  var DEFAULT_MAIN2, LISTED_PER_SHEET, CELL, FORMULA, VALUE, INLINE, attributeIn, cellRef, scanSheet, uncachedFinding, openWorkbook, namesFindings, externalFindings, sheetsFindings, checkXlsx;
51126
- var init_xlsx = __esm({
51127
- "../fileq/src/lib/check/xlsx.ts"() {
51238
+ var init_check_xlsx = __esm({
51239
+ "../fileq/src/lib/check/check-xlsx.ts"() {
51128
51240
  "use strict";
51129
51241
  init_xml();
51130
51242
  init_finding();
@@ -51191,7 +51303,11 @@ var init_xlsx = __esm({
51191
51303
  return openPackage(bytes);
51192
51304
  } catch (cause) {
51193
51305
  if (cause instanceof NotAPackage) {
51194
- return { format: "xlsx", findings: [error("unreadable", "", `${cause.message}: this is not an Excel file (or it is password-protected)`)], notes: [] };
51306
+ return {
51307
+ format: "xlsx",
51308
+ findings: [error("unreadable", "", `${cause.message}: this is not an Excel file (or it is password-protected)`)],
51309
+ notes: []
51310
+ };
51195
51311
  }
51196
51312
  throw cause;
51197
51313
  }
@@ -51218,7 +51334,9 @@ var init_xlsx = __esm({
51218
51334
  const name = sheet.attrs["name"] ?? "?";
51219
51335
  const relationship = rels.get(sheet.attrs["r:id"] ?? "");
51220
51336
  if (relationship === void 0 || relationship.external || !pkg.has(relationship.target)) {
51221
- findings.push(error("missing-part", name, "the sheet list names a sheet that is not in the file; Excel will offer to repair the workbook"));
51337
+ findings.push(
51338
+ error("missing-part", name, "the sheet list names a sheet that is not in the file; Excel will offer to repair the workbook")
51339
+ );
51222
51340
  continue;
51223
51341
  }
51224
51342
  const xml = relationship.kind === "worksheet" ? pkg.text(relationship.target) : void 0;
@@ -51272,10 +51390,10 @@ var init_check = __esm({
51272
51390
  "use strict";
51273
51391
  init_errors();
51274
51392
  init_formats();
51275
- init_docx();
51276
- init_pdf();
51277
- init_pptx();
51278
- init_xlsx();
51393
+ init_check_docx();
51394
+ init_check_pdf();
51395
+ init_check_pptx();
51396
+ init_check_xlsx();
51279
51397
  CHECKERS = /* @__PURE__ */ new Map([
51280
51398
  ["docx", checkDocx],
51281
51399
  ["pptx", checkPptx],
@@ -90758,7 +90876,7 @@ var require_lib6 = __commonJS({
90758
90876
 
90759
90877
  // ../fileq/src/lib/derivers/docx.ts
90760
90878
  var STYLE_WARNING, MAX_NOTES, notesOf, docxDeriver;
90761
- var init_docx2 = __esm({
90879
+ var init_docx = __esm({
90762
90880
  "../fileq/src/lib/derivers/docx.ts"() {
90763
90881
  "use strict";
90764
90882
  init_dom();
@@ -105321,7 +105439,7 @@ import { tmpdir } from "node:os";
105321
105439
  import { join as join3 } from "node:path";
105322
105440
  import { promisify as promisify2 } from "node:util";
105323
105441
  var SCAN_THRESHOLD_CHARS_PER_PAGE, MAX_OCR_PAGES, OCR_DPI, run3, ocrAvailable, recognisePages, pagesToMarkdown, furnitureNotes, withoutFurniture, pdfDeriver;
105324
- var init_pdf2 = __esm({
105442
+ var init_pdf = __esm({
105325
105443
  "../fileq/src/lib/derivers/pdf.ts"() {
105326
105444
  "use strict";
105327
105445
  init_dist2();
@@ -105403,7 +105521,7 @@ ${page === "" ? "(no text on this page)" : page}`).join("\n\n");
105403
105521
  // ../fileq/src/lib/derivers/pptx.ts
105404
105522
  import { readFile as readFile11 } from "node:fs/promises";
105405
105523
  var SLIDE_PART, NOTES_PART, slideParagraphs, partsByNumber, pptxDeriver;
105406
- var init_pptx2 = __esm({
105524
+ var init_pptx = __esm({
105407
105525
  "../fileq/src/lib/derivers/pptx.ts"() {
105408
105526
  "use strict";
105409
105527
  init_esm();
@@ -148568,7 +148686,7 @@ var require_excel = __commonJS({
148568
148686
 
148569
148687
  // ../fileq/src/lib/derivers/xlsx.ts
148570
148688
  var MAX_ROWS_PER_SHEET2, MAX_COLUMNS2, cellText2, tableRow4, xlsxDeriver;
148571
- var init_xlsx2 = __esm({
148689
+ var init_xlsx = __esm({
148572
148690
  "../fileq/src/lib/derivers/xlsx.ts"() {
148573
148691
  "use strict";
148574
148692
  MAX_ROWS_PER_SHEET2 = 200;
@@ -148838,7 +148956,7 @@ var init_derive = __esm({
148838
148956
  init_formats();
148839
148957
  init_deriver();
148840
148958
  init_archive();
148841
- init_docx2();
148959
+ init_docx();
148842
148960
  init_epub();
148843
148961
  init_html2();
148844
148962
  init_image();
@@ -148847,11 +148965,11 @@ var init_derive = __esm({
148847
148965
  init_odp();
148848
148966
  init_ods();
148849
148967
  init_odt();
148850
- init_pdf2();
148851
- init_pptx2();
148968
+ init_pdf();
148969
+ init_pptx();
148852
148970
  init_profile2();
148853
148971
  init_rtf();
148854
- init_xlsx2();
148972
+ init_xlsx();
148855
148973
  init_content_cache();
148856
148974
  init_sidecar();
148857
148975
  DERIVERS = {
@@ -148937,7 +149055,10 @@ var init_derive = __esm({
148937
149055
  return rendered.kind === "fresh" ? { kind: "fresh", relPath, format, sidecarPath: written.path, body: written.body, tokens: written.tokens } : { kind: "derived", relPath, format, sidecarPath: written.path, body: written.body, doc: rendered.doc, tokens: written.tokens };
148938
149056
  };
148939
149057
  renderByContent = async (workspaceRoot2, absPath, now = () => /* @__PURE__ */ new Date()) => {
148940
- const format = await detectFormat(absPath).catch(() => void 0);
149058
+ const format = await detectFormat(absPath).catch((cause) => {
149059
+ console.warn("Could not detect the document format", cause);
149060
+ return void 0;
149061
+ });
148941
149062
  if (format === void 0) {
148942
149063
  return { kind: "failed", reason: "unsupported or missing" };
148943
149064
  }
@@ -18,12 +18,12 @@ changed:
18
18
 
19
19
  src/skill-authoring.ts authoring rules, from
20
20
  docker/sandbox/skills/{pptx,docx,xlsx,pdf}/SKILL.md
21
- src/lib/check/pptx.ts geometry, crop and missing-media rules, from
21
+ src/lib/check/check-pptx.ts geometry, crop and missing-media rules, from
22
22
  surfsense_backend/app/artifacts/verification/formats/pptx.py
23
- src/lib/check/docx.ts the literal-bullet rule, from .../formats/docx.py
24
- src/lib/check/xlsx.ts error-value and missing-cached-value rules, from
23
+ src/lib/check/check-docx.ts the literal-bullet rule, from .../formats/docx.py
24
+ src/lib/check/check-xlsx.ts error-value and missing-cached-value rules, from
25
25
  .../formats/xlsx.py
26
- src/lib/check/pdf.ts blank-page and unembedded-font rules, from
26
+ src/lib/check/check-pdf.ts blank-page and unembedded-font rules, from
27
27
  .../formats/pdf.py
28
28
 
29
29
  The code in those files is written for fileq, in TypeScript; what it carries
@@ -30,6 +30,7 @@ iq "where do we enforce the secrets floor?"
30
30
  | recent changes | `iq recent --since 2d` |
31
31
  | git history | `iq log "MAX_MATCHES" --path src` |
32
32
  | several at once | `iq multi "def foo" "refs bar"` |
33
+ | do an answer's anchors hold? | `iq verify answer.md` (or pipe it in) |
33
34
 
34
35
  Every answer opens with a capsule (`answer:`, `candidates:`, `more:`). Read that and stop — do not pipe through `head`; `--budget` already caps output. Scope with `--in`, `--repo`, `--lang`, `--glob`. Wrong grep habits (`iq search`, `iq ask`) are rewritten to `q`; use canonical forms next time. Full verb list: `iq --help`.
35
36
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentic/claude-plugin",
3
- "version": "1.319.0",
3
+ "version": "1.320.0",
4
4
  "description": "The intentic Claude Code plugin: trimmed Bash output, a project map and field notes at session start, iq search and fileq teaching, and a /intentic:stats report of what each saved",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -40,8 +40,8 @@
40
40
  },
41
41
  "devDependencies": {
42
42
  "@intentic/agent-context": "0.0.0",
43
- "@intentic/fileq": "1.319.0",
44
- "@intentic/iq": "1.319.0",
43
+ "@intentic/fileq": "1.320.0",
44
+ "@intentic/iq": "1.320.0",
45
45
  "@intentic/output-cleaners": "0.0.0",
46
46
  "@intentic/testing": "0.0.0",
47
47
  "@intentic/tsconfig": "0.0.0",