Releases: demartinogiuseppe/antinomia
1.7.7
Antinomia v1.7.7 — Resilience boundary on critical flows
Resilience
- The user-triggered fire-and-forget flows now run inside a single
guardedRunboundary: Hunter, example-notes create/delete, clipboard / PDF / YouTube substrate, YouTube concept extraction, elevate, presupposition map, and AI title proposal. A flow launched asvoid plugin.x()that threw used to fail as a silent unhandled rejection (the same failure mode as the v1.7.6 dismiss bug) — it now surfaces a Notice + console error. - The boundary stays out of the way: user-initiated stops (
AbortError) are silent, and errors already reported upstream (API key, backend unreachable, Front Matter Title) are logged without a duplicate Notice. Value-returning AI helpers and flows with existing inner handling were left untouched.
Note
- The planned "False positives" navigation entry was already present (Hunter ▾ submenu → "False positives"), so no nav change was needed.
No user-visible runtime changes — unless an error occurs, which is now reported instead of swallowed.
Install
- Community store: Settings → Community plugins → Browse → "Antinomia".
- BRAT: add
demartinogiuseppe/antinomia.
1.7.6
Antinomia v1.7.6 — Fix: "Mark as false positive" button threw
Fixed
- Critical: the "Mark as false positive" button in Hunter Results called a method that never existed (
dismissContradiction) and threw at runtime. Implemented the missing method as the inverse mirror ofundismissContradiction: it adds the peer basename to each note'shunter_false_positivesfrontmatter array (idempotent — clicking twice doesn't duplicate entries). - The Hunter "Mark as false positive" → "Reincludi" round-trip now fully works:
- Mark: peer basename added to both notes'
hunter_false_positives, so the pair won't be proposed again. - Unmark (Dismissed Pairs view): peer basename removed.
- Mark: peer basename added to both notes'
This was a latent bug surfaced during the v1.7.5 typing pass.
Install
- Community store: Settings → Community plugins → Browse → "Antinomia".
- BRAT: add
demartinogiuseppe/antinomia.
1.7.5
Antinomia v1.7.5 — GraphView typing + residual unsafe-any cleanup
Community-store linter pass (Batch 5): type tightening of the any-flow buckets. No user-visible changes, no any shortcuts, no eslint-disable.
What changed
- AntinomiaGraphView (56 sites): new
AntinomiaNodeData/AntinomiaEdgeDatainterfaces for the Cytoscape graph data shape. Every.data()access andevt.targethandler (tap / mouseover / mouseout) is now typed; removed unnecessary assertions (closest<HTMLElement>,this.cy.pan(),position()). loadSettingsmigration: typed via a newLegacySettingsDatainterface —loadData()returnsany, so the whole v1→v2 profiles migration block was untyped.SubstrateFields.contenuto: added the AI-extraction key that flows through prefill; clears theNewSubstrateModalaccesses and the long-standingcontenutotype errors in the free-input and YouTube flows.- Misc: typed a
String.replacecallback param (youtubeFetch); removed unnecessary type assertions acrossfrontmatter,renderNoteCard,AuditVaultView,ConceptsPreviewModal,parseResponse.
Numbers
- Lint total: 278 → 186 problems. Unsafe-any family: 99 → 7.
npx tsc --noEmitsource errors: 24 → 18. Tests: 158/158.
Known / out of scope
core/utils.tsmoment().format(×6): Obsidian'smomentre-export has an unresolvable type — a types/env gap, not fixable withoutas any.- Surfaced a latent bug:
HunterResultsViewcalls a non-existentdismissContradictionplugin method. Left for a dedicated fix since it needs new logic, not typing.
Install
- Community store: Settings → Community plugins → Browse → "Antinomia".
- BRAT: add
demartinogiuseppe/antinomia.
1.7.4
Antinomia v1.7.4 — Store ERRORs cleared + unused-vars cleanup
Community-store linter pass (Batch 4). No user-visible changes, no any shortcuts, no eslint-disable.
What changed
- Mandatory store ERRORs → 0:
hardcoded-config-path(1): the Front Matter Title fallback path now usesapp.vault.configDirinstead of a literal.obsidian, so it works on vaults with a custom config folder.no-plugin-name-in-command-name(2): dropped "Antinomia" from two command names — Obsidian already prefixes the plugin name in the command palette.prefer-active-doc(2): the hover-bus DOM listeners now register onactiveDocumentinstead ofdocumentfor popout-window compatibility. (These are reported as warnings; fixed alongside the errors.)
- Unused-code cleanup: removed 39
no-unused-varssites — unused imports, dead local variables/counters, and an unused catch binding — across flows, helpers, views, andmain.ts. - Tooling fix:
eslint.config.jsnow ignoreseslint.async.config.js, which had been making the fullnpm run lintcrash on a type-aware rule. - Lint total: 327 → 278 problems (0 warnings).
Install
- Community store: Settings → Community plugins → Browse → "Antinomia".
- BRAT: add
demartinogiuseppe/antinomia.
1.7.3 — Linter tooling + async hygiene
Antinomia v1.7.3 — Linter tooling + async hygiene
Internal tooling and async-safety pass for the Obsidian Community store linter. No user-visible changes, no any shortcuts, no eslint-disable.
What changed
- ESLint added as repo tooling (dev-only): ESLint 9 + typescript-eslint 8 +
eslint-plugin-obsidianmd, via a flateslint.config.js. Newnpm run lint/lint:fix. These are devDependencies — esbuild externalizes them, so the shippedmain.jsis unchanged (~824 KB). - Measured lint baseline documented in
docs/lint-baseline.md(the local obsidianmd-recommended run is stricter than the store scorecard; the async subset matches). - Async hygiene → 0: fixed all 28
no-floating-promises+no-misused-promisessites. Fire-and-forget UI navigation is nowvoid-ed; modal/handler callbacks use propervoid | Promise<void>types. - Regression guard:
npm run lint:asyncruns in CI, so future changes can't reintroduce floating promises.
Install
- Community store: Settings → Community plugins → Browse → "Antinomia".
- BRAT: add
demartinogiuseppe/antinomia.
1.7.2 — Type tightening (frontmatter + AI response shapes)
Antinomia v1.7.2 — Type tightening (frontmatter + AI response shapes)
Internal type-safety pass for the Obsidian Community store linter (Batch 2). No user-visible changes — prompts, schema, graph, and Hunter logic are untouched, and no any shortcuts were introduced.
What changed
- Typed frontmatter: a new
AntinomiaFrontmatterinterface covers every field Antinomia reads or writes. A newreadFrontmatter(app, file)helper returns the typed shape — all 68 frontmatter reads and 21processFrontMattercallbacks use it. - Typed AI responses: new
AICompletionResponse/AIAnthropicResponse/HunterResponseinterfaces; response parsing andJSON.parseresults are typed at the boundary instead of leakingany. - Settings cleanup: removed a dead, untyped
formatfield that was passed to the AI call and ignored (also clears 4 pre-existing TypeScript errors).
Install
- Community store: Settings → Community plugins → Browse → "Antinomia".
- BRAT: add
demartinogiuseppe/antinomia.
1.7.1 — Popout compatibility + store-warning cleanup
Antinomia v1.7.1 — Popout compatibility + store-warning cleanup
Patch targeting the Obsidian Community store linter (Batch 1). No prompt, schema, graph, or Hunter logic changed — the plugin behaves identically.
Fixes
- Popout windows render correctly. Replaced
document→activeDocument,setTimeout/clearTimeout→window.*, andrequestAnimationFrame/cancelAnimationFrame→window.*across all DOM-touching code (49 sites). Opening an Antinomia note in a popout window now shows modals, badges, and the graph in the right DOM. - File deletion uses
FileManager.trashFile(), respecting your "system trash vs.trashfolder" preference. - Onboarding freeze (#189): the example-notes seeding loop now yields to the main thread every few files, so first-run no longer hangs.
- CSS: dropped
!importantfrom the hover-highlight (uses selector specificity instead). - UX: the Front Matter Title configure prompts use Obsidian's native confirm modal instead of a blocking
confirm().
Install
- Community store: Settings → Community plugins → Browse → "Antinomia".
- BRAT: add
demartinogiuseppe/antinomia.
1.7.0 — Mobile support + bridge-to-local LLMs
Antinomia v1.7.0 — Mobile support + bridge-to-local LLMs
Antinomia now runs on Obsidian mobile, and your local models stay usable from a phone. No prompt, schema, graph, or Hunter logic changed.
What's new
- Mobile support (
isDesktopOnly: false). Cloud backends (Anthropic, OpenAI, Groq, OpenRouter) work natively on mobile. - Local LLMs from mobile.
localhostis unreachable from a phone, so point the profilebaseUrlat a network-reachable address: Tailscale Magic DNS (*.ts.net), a LAN IP, or a Cloudflare Tunnel. The model still runs on your own machine — nothing goes to a cloud provider. isLocalBaseUrl()now treats Tailscale, RFC 1918 LAN ranges, and.lan/.home/.internalas local (privacy-equivalent to localhost), and the friction card / privacy notices label them "Local backend (Tailscale)" or "Local backend (LAN)".- On mobile, a profile still set to
localhostshows an inline bridge-setup hint in Settings, linking to the new README guide.
Heads-up
Requires Obsidian 1.7.2+ (unchanged from 1.6.x). See the README section "Using local LLMs from mobile" for Tailscale / LAN / Cloudflare setup.
Install
- Community store: Settings → Community plugins → Browse → "Antinomia".
- BRAT: add
demartinogiuseppe/antinomia.
1.6.6 — Type tightening (any -> concrete types)
Antinomia v1.6.6 — Type tightening (any → concrete types)
Pure tech-debt cleanup after the Obsidian Community store scan of v1.6.5. No feature, schema, or behavior change — the plugin runs identically.
What changed
- Replaced all 82 explicit
anysites flagged by the community lint with concrete types:unknown+ narrowing for dynamic runtime shapes (AI response JSON, frontmatter), dedicated interfaces for known shapes (Node http/https, pdf.js, Front Matter Title internals, Obsidian internal APIs), and proper Cytoscape types in the graph view. - Spread across 13 files (
views/,ai/,flows/,modals/,helpers/,core/,main.ts), committed file-by-file.
Side effect: the TypeScript baseline error count dropped from 30 to 29.
Install
- Community store: Settings → Community plugins → Browse → "Antinomia".
- BRAT: add
demartinogiuseppe/antinomia.
1.6.5 — README sync + Obsidian Community Store availability
Antinomia v1.6.5 — README sync + store availability
Docs-only release. No code, schema, or behavior changes.
- Now on the Obsidian Community Store — README announces it with a banner and a direct obsidian://show-plugin?id=antinomia link, and makes the store the recommended install path (BRAT kept for early/beta builds).
- Refreshed stale version references throughout the README (status line, version badge → 1.6.5, Obsidian requirement → 1.7.2+) and fixed the build-from-source instructions for the new root layout.
Install
- Community store: Settings → Community plugins → Browse → "Antinomia".
- BRAT: add
demartinogiuseppe/antinomia.