373d10595b
Captures roughly forty version bumps (v0.2.6 → v0.2.47) of work that
accumulated without commits.
- Pluggable provider system under server/providers/: gemini, anthropic,
openai, openai-compatible, ollama, whisper-compatible, relay. Mix and
match transcription + analysis per request via the picker UI.
- Relay backend integration. Hardcoded relay URL in server/relay-default.js
(operator-controlled at build time, not user-configurable). New
/api/relay/{status,policy} endpoints proxy to the relay; balance pings
populate a cached credit display.
- Per-install identity in server/install-id.js for relay credit accounting.
Sent to the relay as X-Recap-Install-Id; persists across upgrades, lost
on a full uninstall + reinstall. Not surfaced in the UI.
- Admin login gate (server/admin-auth.js + setAdminPassword action). Scrypt
password hash + HMAC-signed session cookie.
- Entitlement scheme rename: pro / max (each paired with subscriptions and
relay_pro / relay_max), replacing the misleading "core" entitlement
that conflicted with the user-facing "Core" tier name.
- Activation screen: dynamic credit count pulled from /api/relay/policy,
"Skip — use free mode" button, accurate paid-feature list.
- Top toolbar: inline credit-balance pill (or "BYO configured" fallback),
Upgrade + "I have a key" buttons.
- Picker UI: per-provider sections with Save/Test/Delete buttons, sections
collapsible by chevron, default-collapsed unless currently selected,
"Use comped credits (reset to relay)" link when the user has strayed,
green hint under inputs whose values are server-configured.
- Activity log: chevron-collapsible groups per video, refresh-survival via
localStorage + a 500-entry server-side buffer, explicit Clear button.
- YouTube captions fast-path with user toggle (skips audio download + AI
transcription when captions are available — uncheck for speaker labels).
- Cancel button: AbortController plumbed through every provider SDK call;
retryAPI short-circuits on AbortError; cancellation events surface in
the activity log instead of silent retries.
- Long-video analysis: auto-coalesce transcript entries before building the
analysis prompt so local-model context windows (32k-ish) don't overflow.
Original entries preserved for transcript display via an index map; the
analyzer sees a coarser view but click-to-seek timestamps stay precise.
- StartOS action grouping (Setup / AI Providers) so the actions list is
navigable.
- Manifest description rewritten to reflect multi-provider support and
free-tier relay credits.
- Smaller fixes: summarize-button enablement no longer requires a Gemini
key when other providers are configured; analysis fallback chain handles
context-length and 503 capacity errors; single-segment expansion for
providers that don't return per-segment timestamps (Parakeet et al.);
many other UX polish items.
74 lines
3.1 KiB
TypeScript
74 lines
3.1 KiB
TypeScript
import { VersionGraph } from '@start9labs/start-sdk'
|
|
import { v_0_1_0 } from './v0.1.0'
|
|
import { v_0_1_1 } from './v0.1.1'
|
|
import { v_0_1_2 } from './v0.1.2'
|
|
import { v_0_1_3 } from './v0.1.3'
|
|
import { v_0_1_4 } from './v0.1.4'
|
|
import { v_0_1_5 } from './v0.1.5'
|
|
import { v_0_1_6 } from './v0.1.6'
|
|
import { v_0_1_7 } from './v0.1.7'
|
|
import { v_0_1_8 } from './v0.1.8'
|
|
import { v_0_1_9 } from './v0.1.9'
|
|
import { v_0_1_10 } from './v0.1.10'
|
|
import { v_0_1_11 } from './v0.1.11'
|
|
import { v_0_1_12 } from './v0.1.12'
|
|
import { v_0_1_13 } from './v0.1.13'
|
|
import { v_0_1_14 } from './v0.1.14'
|
|
import { v_0_1_15 } from './v0.1.15'
|
|
import { v_0_1_16 } from './v0.1.16'
|
|
import { v_0_1_17 } from './v0.1.17'
|
|
import { v_0_1_18 } from './v0.1.18'
|
|
import { v_0_2_0 } from './v0.2.0'
|
|
import { v_0_2_1 } from './v0.2.1'
|
|
import { v_0_2_2 } from './v0.2.2'
|
|
import { v_0_2_3 } from './v0.2.3'
|
|
import { v_0_2_4 } from './v0.2.4'
|
|
import { v_0_2_5 } from './v0.2.5'
|
|
import { v_0_2_6 } from './v0.2.6'
|
|
import { v_0_2_7 } from './v0.2.7'
|
|
import { v_0_2_8 } from './v0.2.8'
|
|
import { v_0_2_9 } from './v0.2.9'
|
|
import { v_0_2_10 } from './v0.2.10'
|
|
import { v_0_2_11 } from './v0.2.11'
|
|
import { v_0_2_12 } from './v0.2.12'
|
|
import { v_0_2_13 } from './v0.2.13'
|
|
import { v_0_2_14 } from './v0.2.14'
|
|
import { v_0_2_15 } from './v0.2.15'
|
|
import { v_0_2_16 } from './v0.2.16'
|
|
import { v_0_2_17 } from './v0.2.17'
|
|
import { v_0_2_18 } from './v0.2.18'
|
|
import { v_0_2_19 } from './v0.2.19'
|
|
import { v_0_2_20 } from './v0.2.20'
|
|
import { v_0_2_21 } from './v0.2.21'
|
|
import { v_0_2_22 } from './v0.2.22'
|
|
import { v_0_2_23 } from './v0.2.23'
|
|
import { v_0_2_24 } from './v0.2.24'
|
|
import { v_0_2_25 } from './v0.2.25'
|
|
import { v_0_2_26 } from './v0.2.26'
|
|
import { v_0_2_27 } from './v0.2.27'
|
|
import { v_0_2_28 } from './v0.2.28'
|
|
import { v_0_2_29 } from './v0.2.29'
|
|
import { v_0_2_30 } from './v0.2.30'
|
|
import { v_0_2_31 } from './v0.2.31'
|
|
import { v_0_2_32 } from './v0.2.32'
|
|
import { v_0_2_33 } from './v0.2.33'
|
|
import { v_0_2_34 } from './v0.2.34'
|
|
import { v_0_2_35 } from './v0.2.35'
|
|
import { v_0_2_36 } from './v0.2.36'
|
|
import { v_0_2_37 } from './v0.2.37'
|
|
import { v_0_2_38 } from './v0.2.38'
|
|
import { v_0_2_39 } from './v0.2.39'
|
|
import { v_0_2_40 } from './v0.2.40'
|
|
import { v_0_2_41 } from './v0.2.41'
|
|
import { v_0_2_42 } from './v0.2.42'
|
|
import { v_0_2_43 } from './v0.2.43'
|
|
import { v_0_2_44 } from './v0.2.44'
|
|
import { v_0_2_45 } from './v0.2.45'
|
|
import { v_0_2_46 } from './v0.2.46'
|
|
import { v_0_2_47 } from './v0.2.47'
|
|
|
|
export const versionGraph = VersionGraph.of({
|
|
current: v_0_2_47,
|
|
other: [v_0_2_46, v_0_2_45, v_0_2_44, v_0_2_43, v_0_2_42, v_0_2_41, v_0_2_40, v_0_2_39, v_0_2_38, v_0_2_37, v_0_2_36, v_0_2_35, v_0_2_34, v_0_2_33, v_0_2_32, v_0_2_31, v_0_2_30, v_0_2_29, v_0_2_28, v_0_2_27, v_0_2_26, v_0_2_25, v_0_2_24, v_0_2_23, v_0_2_22, v_0_2_21, v_0_2_20, v_0_2_19, v_0_2_18, v_0_2_17, v_0_2_16, v_0_2_15, v_0_2_14, v_0_2_13, v_0_2_12, v_0_2_11, v_0_2_10, v_0_2_9, v_0_2_8, v_0_2_7, v_0_2_6, v_0_2_5, v_0_2_4, v_0_2_3, v_0_2_2, v_0_2_1, v_0_2_0, v_0_1_18, v_0_1_17, v_0_1_16, v_0_1_15, v_0_1_14, v_0_1_13, v_0_1_12, v_0_1_11, v_0_1_10, v_0_1_9, v_0_1_8, v_0_1_7, v_0_1_6, v_0_1_5, v_0_1_4, v_0_1_3, v_0_1_2, v_0_1_1, v_0_1_0],
|
|
})
|