@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.
- package/.claude-plugin/plugin.json +1 -1
- package/dist/fileq.mjs +180 -59
- package/generated/fileq-NOTICE +4 -4
- package/generated/skills/iq/SKILL.md +1 -0
- package/package.json +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "intentic",
|
|
3
3
|
"displayName": "Intentic",
|
|
4
|
-
"version": "1.
|
|
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
|
|
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(
|
|
9222
|
-
|
|
9223
|
-
|
|
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({
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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(
|
|
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(
|
|
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 [
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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 [
|
|
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 [
|
|
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 {
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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 ? [
|
|
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(
|
|
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(
|
|
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(
|
|
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 {
|
|
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(
|
|
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
|
|
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 {
|
|
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(
|
|
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
|
-
|
|
51276
|
-
|
|
51277
|
-
|
|
51278
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
148851
|
-
|
|
148968
|
+
init_pdf();
|
|
148969
|
+
init_pptx();
|
|
148852
148970
|
init_profile2();
|
|
148853
148971
|
init_rtf();
|
|
148854
|
-
|
|
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(() =>
|
|
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
|
}
|
package/generated/fileq-NOTICE
CHANGED
|
@@ -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.
|
|
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.
|
|
44
|
-
"@intentic/iq": "1.
|
|
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",
|