Commit graph

135 commits

Author SHA1 Message Date
Richard McCorkle
bcafa61059 chore: bump to 1.4.6
Release highlights since 1.4.5:
- Transcript: OpenRouter and Google model fetchers now store token
  limits even when the API omits a max-output figure, so the model
  parameters panel prefills real values.
- Settings: removed the duplicate standalone "Max tokens" field; the
  "Model parameters" panel is the single token-limit control on every
  provider.
- Model/provider notices reworded to "output budget" so the figure is
  honestly labelled as a derived value, not a hidden setting.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-19 00:07:50 +02:00
Richard McCorkle
58d3a7d99c fix(ui): reword model/provider notices — "output budget" not "max tokens"
The standalone "Max tokens" field was removed, but the model- and
provider-change notices still announced "Max tokens updated to N",
implying a setting the user could go look at. N is a derived value
(max output x (1 - reserve)). Reword the notices to "Output budget:
N tokens (max output minus reserve)" so the number is honestly
labelled as a computed result, not a hidden field.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-19 00:04:42 +02:00
Richard McCorkle
12737a376b docs: fix stale comment referencing removed Max tokens field
The comment described updating a field that was deleted with the
standalone Max tokens field. The this.display() call it precedes is
unchanged and still correct.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 23:50:51 +02:00
Richard McCorkle
cfcf5386ed docs(ui): reword model-parameters panel sub-description
With the standalone Max tokens field removed, the panel is the sole
token-limit control and its fields are always prefilled. The old
"Optional: registry defaults apply when these are blank" text was
inaccurate — the fields are never blank. Reword to describe the panel
as the model's prefilled, editable token limits.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 23:49:44 +02:00
Richard McCorkle
cb2f61814a fix(llm): capture Google model limits even without max output
fetchGoogleModels only stored a model's limits when the API returned
both context and output token limits. Mirror the OpenRouter fetcher:
store an entry whenever a context window is present, deriving max
output (8k, capped to context) when the API omits it, so the model
parameters panel prefills real values instead of the 128/16 fallback.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 23:47:46 +02:00
Richard McCorkle
48e276adb3 refactor(ui): remove standalone Max tokens field
The "Model parameters" override panel and a separate "Max tokens"
field both controlled output tokens, shown together for any model
outside the small static registry — confusingly, on every provider.
Remove the standalone field and its isCustomModel / maxTokensField /
refreshMaxTokensField plumbing; the panel is now the single source.
settings.maxTokens stays correct via the existing getEffectiveMaxTokens
calls in the dropdown and panel onChange handlers.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 23:43:31 +02:00
Richard McCorkle
a3cb62000b fix(llm): store OpenRouter model limits even without max output
fetchOpenRouterModels only recorded a model's limits when the API
returned both context_length and top_provider.max_completion_tokens.
OpenRouter leaves max_completion_tokens null for many models, so
those got no customModelLimits entry and the model-parameters panel
fell back to the generic 128/16 placeholder — making it look like the
overrides never updated when switching OpenRouter models.

Now store an entry whenever context_length is present, deriving max
output (8k, capped to context) when the API omits it.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 23:17:59 +02:00
Richard McCorkle
cbc3346087 chore: bump to 1.4.5
Docs-only release: refreshes the README on the Obsidian community
plugins page. The demo poster now links to a publicly accessible
user-attachments video URL (the prior one came from an unsubmitted
issue draft and was not public). Plugin code unchanged from 1.4.4.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 20:24:41 +02:00
Richard McCorkle
1ce30de2d3 docs: point demo poster at the public user-attachments video URL
The previous user-attachments URL came from an unsubmitted issue
draft, so it was only accessible to the uploader. Re-uploaded via a
posted issue (#2) on the public repo; the new asset URL is publicly
accessible. The poster thumbnail now links to it.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 20:24:22 +02:00
Richard McCorkle
de1803017b chore: bump to 1.4.4
Docs-only release: refreshes the README on the Obsidian community
plugins page. The demo section now uses the clickable poster
thumbnail (works on both GitHub and the community page) instead of
the GitHub-only inline embed. Plugin code unchanged from 1.4.3.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 19:02:15 +02:00
Richard McCorkle
ca12405ef1 docs: use the clickable poster thumbnail for the demo, not the embed
The bare user-attachments URL only embeds inline on GitHub; on the
Obsidian community page it shows as a raw link. The poster thumbnail
works as a clickable image on both surfaces and links to the same CDN
video. Keep the thumbnail, drop the bare-URL embed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 19:00:23 +02:00
Richard McCorkle
604c2af25e chore: bump to 1.4.3
Patch release: fix the settings info icons (ScrapeCreators, Supadata,
OpenRouter, and section headings) which rendered on a centred line
below the title. inline-flex places them immediately after the title.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 18:53:47 +02:00
Richard McCorkle
e9994971e0 fix(ui): render settings info icon inline after the title
.tubesage-settings-info-icon used display:flex, making the icon span
block-level so it dropped to its own centred line below the setting
title. Switch to inline-flex (+ small left margin, vertical-align)
so it sits immediately after the title text, as intended. Affects
the ScrapeCreators / Supadata / OpenRouter key settings and the
section-heading info icons.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 18:49:31 +02:00
Richard McCorkle
c8fd2acf5d chore: bump to 1.4.2
Docs-only release: refreshes the README on the Obsidian community
plugins page (which updates on release, not on main). Plugin code is
unchanged from 1.4.1 — README demo section cleaned up to a single
inline video embed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 18:41:47 +02:00
Richard McCorkle
bcf18a6337 docs: drop redundant poster thumbnail from README demo
The bare user-attachments URL already renders an inline video player
on GitHub; the poster image below it made the page look like it had
two videos. Keep just the single inline embed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 18:40:57 +02:00
Richard McCorkle
8b30edaa3d docs: add clickable poster thumbnail alongside the video embed
The user-attachments embed plays inline on GitHub but the Obsidian
community plugins page can't render it. Add the poster image back as
a clickable thumbnail (linking to the same CDN video URL) so that
page still has a visual demo.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 18:30:29 +02:00
Richard McCorkle
45caf35e96 docs: embed walkthrough video inline via GitHub user-attachments
Replace the poster-thumbnail link with a github.com/user-attachments
asset URL. GitHub renders a bare user-attachments URL as an inline
video player, sidestepping the repo-blob size limit entirely.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 18:28:30 +02:00
Richard McCorkle
fc879c603e docs: compress TubeSage.mp4 further to ~4.7MB
7.5MB still tripped GitHub's blob-size limit. Re-encode from the
original (recovered from git history, to avoid stacking compression)
at ~330 kbps -> ~4.7MB, frame size unchanged (860x720).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 18:18:48 +02:00
Richard McCorkle
7fdf2e102c chore: bump to 1.4.1
Patch release: fix the mobile example-template viewer, which 1.4.0
shipped collapsed to ~2 lines. flex-shrink:0 stops the mobile modal's
flex column from squeezing the content box below its set height.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 17:53:16 +02:00
Richard McCorkle
b4d6e01c45 docs: add clickable poster image for the demo video in README
Extract a poster frame (the TubeSage settings panel) and use it as a
clickable thumbnail linking to the walkthrough video. Absolute
raw.githubusercontent.com URL so the image also renders on the
Obsidian community plugins page, which sanitizes inline video.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 17:49:20 +02:00
Richard McCorkle
26bdd9a217 docs: compress TubeSage.mp4 to ~7.5MB for inline GitHub playback
Two-pass H.264 re-encode at ~550 kbps, frame size unchanged
(860x720, 114s). The previous 22MB file exceeded GitHub's ~10MB
inline-video limit ("can't show files this big"); 7.5MB plays
inline in the blob view.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 17:46:41 +02:00
Richard McCorkle
b4f5c29b82 fix: stop flexbox squeezing the mobile template viewer
The 1.4.0 mobile fix set height:50vh on the template content box, but
the mobile modal content is a flex column and the box (default
flex-shrink:1) was squeezed back down to ~2 lines by its siblings.
Add flex-shrink:0 so the set height actually holds.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 16:53:36 +02:00
Richard McCorkle
986e8e961d chore: stop tracking docs/superpowers workflow docs
The superpowers specs/plans are internal workflow scaffolding, not
distributable project docs. Untrack them and add docs/superpowers/
to .gitignore. Files are kept locally. This also clears a GitHub
secret-scanning false positive: a spec quoted YouTube's public
InnerTube key, which matches the AIzaSy* Google-API-key pattern.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 16:32:29 +02:00
Richard McCorkle
f72baf6e60 docs: clarify clipboard access is write-only in README
State explicitly that TubeSage only writes to the clipboard (Obsidian
-> clipboard, via Copy template) and never reads it, so it cannot
expose content copied from outside Obsidian.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 15:23:56 +02:00
Richard McCorkle
261554505c chore: bump to 1.4.0
Highlights since 1.3.3:
- Transcript extraction reworked onto the YouTube iOS InnerTube
  player API; the four broken free local fallbacks removed.
- OpenRouter model-list refresh with a vendor-grouped dropdown.
- Service-URL info icons for ScrapeCreators, Supadata, OpenRouter.
- Desktop processing no longer leaves a blank popup.
- Mobile example-template viewer enlarged so content is visible.
- UI primitives migrated to native Obsidian components (Tier A).
- README network/base64 disclosures completed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 15:14:02 +02:00
Richard McCorkle
503d50bcb2 docs: note the bundled-library base64 calls in README
Static analysis flags atob()/btoa() calls in the bundle. Disclose in
Privacy & Security that they all originate in bundled libraries and
are routine base64 operations, not obfuscation.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 15:09:48 +02:00
Richard McCorkle
600caee96f docs: disclose ScrapeCreators and Supadata in README network section
The Privacy & Security > Network requests list omitted the two
optional paid transcript APIs the plugin contacts when a key is
configured. Add them so the disclosure is complete.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 15:06:48 +02:00
Richard McCorkle
8eb95a25ce refactor: remove broken watch-page/ANDROID/MWEB/WEB transcript methods
Delete the four obsolete local transcript methods, their six helper
methods, the YouTubeConfig interface, and the now-unused statics. The
iOS player method added earlier is the sole local fallback.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 14:28:30 +02:00
Richard McCorkle
314a737437 feat: route transcript fallback through the iOS player method
fetchTranscript now uses a three-rung ladder (ScrapeCreators, iOS
player, Supadata). getVideoMetadata is sourced from the iOS player
response instead of the watch-page HTML scrape.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 14:20:40 +02:00
Richard McCorkle
45b2baa4ba feat: add iOS InnerTube player transcript method
Add fetchIosPlayerData and fetchViaIosPlayer, built from the YouTube
iOS player approach. Not yet wired into the fallback ladder.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 14:13:58 +02:00
Richard McCorkle
33eeaedb8f docs: implementation plan for iOS-player transcript fallback
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 14:11:52 +02:00
Richard McCorkle
a9e54fc0bd docs: design spec for iOS-player transcript fallback replacement
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 14:01:58 +02:00
Richard McCorkle
4dc4d8589f fix: enlarge mobile example-template viewer so content is visible
The template-viewer content box used only max-height, so on mobile it
collapsed to a blank single line. Add a mobile size override for the
modal and a definite height for the content container inside the
existing max-width:768px media query. Desktop is unchanged.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 13:48:48 +02:00
Richard McCorkle
80df0c1b33 docs: implementation plan for mobile template-viewer height fix
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 13:47:33 +02:00
Richard McCorkle
b7db064d48 docs: design spec for mobile template-viewer height fix
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 13:33:44 +02:00
Richard McCorkle
04e1190e7f Merge info-openrouter-spinner: service info icons, OpenRouter refresh, desktop spinner fix
- Info (i) icons with service URLs on the ScrapeCreators, Supadata,
  and OpenRouter settings.
- fetchOpenRouterModels: refresh the full OpenRouter model list from
  the public API, vendor-grouped dropdown, auto-stored token limits.
- Desktop processing no longer shows a blank popup: the modal closes
  on desktop (status-bar spinner only); mobile keeps the in-modal spinner.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 13:27:03 +02:00
Richard McCorkle
17dec2f218 fix(ui): close create-note modal on desktop during processing (no blank popup)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 12:23:40 +02:00
Richard McCorkle
f74915e08d feat(llm): add OpenRouter model-list refresh with vendor-grouped dropdown
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 12:18:43 +02:00
Richard McCorkle
74e7d81695 feat(settings): add service-URL info icons for ScrapeCreators, Supadata, OpenRouter 2026-05-18 12:14:07 +02:00
Richard McCorkle
68c7aa7472 docs: implementation plan for info icons, OpenRouter refresh, desktop spinner fix
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 12:12:02 +02:00
Richard McCorkle
d7d2d06198 docs: design spec for service info icons, OpenRouter refresh, desktop spinner fix
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 12:07:53 +02:00
Richard McCorkle
0b6d8efcb9 Merge tier-a-native: migrate UI primitives to native Obsidian components
Tier A of the UI native-component audit, no intended look-and-feel change:
- info icon and icon buttons -> setIcon / ExtraButtonComponent
- text buttons -> ButtonComponent (Process uses setCta)
- create-note modal URL/title inputs -> TextComponent, video-count
  select -> DropdownComponent

Deferred: MarkdownRenderer for README/license modals, FuzzySuggestModal
for the pickers (both visibly change look).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 11:01:29 +02:00
Richard McCorkle
229d375d42 refactor(ui): convert create-note modal inputs to native components
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 10:47:48 +02:00
Richard McCorkle
b6f240c07a refactor(ui): convert text buttons to ButtonComponent
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 10:41:58 +02:00
Richard McCorkle
0d80f094de refactor(ui): convert icon buttons to ExtraButtonComponent
Replace three hand-rolled <button> + createElementNS SVG + mouseenter/mouseleave
hover handlers with ExtraButtonComponent (license eye, readme eye, copy button).
Remove now-dead tubesage-icon-button and tubesage-icon-button-hover CSS rules.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 10:38:42 +02:00
Richard McCorkle
950a087df5 refactor(ui): render settings info icon with native setIcon 2026-05-18 10:28:10 +02:00
Richard McCorkle
c4aa28afad docs: implementation plan for Tier A native-component migration
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 10:21:44 +02:00
Richard McCorkle
f1bd48ab46 docs: design spec for Tier A native-component migration
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 10:16:36 +02:00
Richard McCorkle
58f0e2a480 chore: bump to 1.3.3
Releases the current state as a stable before/after boundary:
- Copy template button restored (mobile users cannot scroll the
  template example), plus a mobile touch-scroll hint.
- Settings info-icon tooltips fixed: native Obsidian setTooltip
  replaces the flaky custom hover tooltip; OpenRouter reliability
  note added to the LLM tooltip.
- Workflow and data-flow mermaid diagrams refreshed to current
  architecture.
- README links made absolute so they resolve on the community site;
  demo video linked.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 10:08:55 +02:00
Richard McCorkle
b6a67fe822 Merge docs-absolute-links: fix community-site README links
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 09:58:43 +02:00