Skip to content

Releases: demartinogiuseppe/antinomia

1.7.7

16 Jun 16:03

Choose a tag to compare

Antinomia v1.7.7 — Resilience boundary on critical flows

Resilience

  • The user-triggered fire-and-forget flows now run inside a single guardedRun boundary: Hunter, example-notes create/delete, clipboard / PDF / YouTube substrate, YouTube concept extraction, elevate, presupposition map, and AI title proposal. A flow launched as void 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

15 Jun 17:00

Choose a tag to compare

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 of undismissContradiction: it adds the peer basename to each note's hunter_false_positives frontmatter 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.

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

15 Jun 16:45

Choose a tag to compare

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 / AntinomiaEdgeData interfaces for the Cytoscape graph data shape. Every .data() access and evt.target handler (tap / mouseover / mouseout) is now typed; removed unnecessary assertions (closest<HTMLElement>, this.cy.pan(), position()).
  • loadSettings migration: typed via a new LegacySettingsData interface — loadData() returns any, so the whole v1→v2 profiles migration block was untyped.
  • SubstrateFields.contenuto: added the AI-extraction key that flows through prefill; clears the NewSubstrateModal accesses and the long-standing contenuto type errors in the free-input and YouTube flows.
  • Misc: typed a String.replace callback param (youtubeFetch); removed unnecessary type assertions across frontmatter, renderNoteCard, AuditVaultView, ConceptsPreviewModal, parseResponse.

Numbers

  • Lint total: 278 → 186 problems. Unsafe-any family: 99 → 7.
  • npx tsc --noEmit source errors: 24 → 18. Tests: 158/158.

Known / out of scope

  • core/utils.ts moment().format (×6): Obsidian's moment re-export has an unresolvable type — a types/env gap, not fixable without as any.
  • Surfaced a latent bug: HunterResultsView calls a non-existent dismissContradiction plugin 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

14 Jun 13:59

Choose a tag to compare

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 uses app.vault.configDir instead 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 on activeDocument instead of document for popout-window compatibility. (These are reported as warnings; fixed alongside the errors.)
  • Unused-code cleanup: removed 39 no-unused-vars sites — unused imports, dead local variables/counters, and an unused catch binding — across flows, helpers, views, and main.ts.
  • Tooling fix: eslint.config.js now ignores eslint.async.config.js, which had been making the full npm run lint crash 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

14 Jun 13:26

Choose a tag to compare

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 flat eslint.config.js. New npm run lint / lint:fix. These are devDependencies — esbuild externalizes them, so the shipped main.js is 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-promises sites. Fire-and-forget UI navigation is now void-ed; modal/handler callbacks use proper void | Promise<void> types.
  • Regression guard: npm run lint:async runs 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)

14 Jun 10:48

Choose a tag to compare

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 AntinomiaFrontmatter interface covers every field Antinomia reads or writes. A new readFrontmatter(app, file) helper returns the typed shape — all 68 frontmatter reads and 21 processFrontMatter callbacks use it.
  • Typed AI responses: new AICompletionResponse / AIAnthropicResponse / HunterResponse interfaces; response parsing and JSON.parse results are typed at the boundary instead of leaking any.
  • Settings cleanup: removed a dead, untyped format field 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

13 Jun 13:20

Choose a tag to compare

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 documentactiveDocument, setTimeout/clearTimeoutwindow.*, and requestAnimationFrame/cancelAnimationFramewindow.* 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 .trash folder" 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 !important from 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

12 Jun 20:39

Choose a tag to compare

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. localhost is unreachable from a phone, so point the profile baseUrl at 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/.internal as 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 localhost shows 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)

12 Jun 16:33

Choose a tag to compare

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 any sites 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

11 Jun 20:49

Choose a tag to compare

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.