Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
d004816
refactor: clean up Sidebar
lawrenceching Aug 31, 2026
ce3b795
refactor(ui): presentational Sidebar list with UI-owned selection and…
lawrenceching Sep 1, 2026
6ef8abb
refactor: clean up Sidebar
lawrenceching Sep 1, 2026
f9c160e
refactor: clean up Sidebar
lawrenceching Sep 1, 2026
103f612
refactor: clean up codebase
lawrenceching Sep 1, 2026
24fa3f7
refactor: clean up codebase
lawrenceching Sep 1, 2026
175ab30
refactor(media): export shared episode row utilities for layout split
lawrenceching Sep 2, 2026
8228c26
refactor(media): add MediaFileTableEpisodeSimpleRow component
lawrenceching Sep 2, 2026
fc487a4
refactor(media): add MediaFileTableEpisodeDetailRow component
lawrenceching Sep 2, 2026
c69cbfd
refactor(media): add MediaFileTableEpisodePreviewRow component
lawrenceching Sep 2, 2026
fa0fd55
feat: pass metadataFiles to UIMediaFileTable and render MetadataFileT…
lawrenceching Sep 3, 2026
444cde8
feat: support to display metadata files
lawrenceching Sep 3, 2026
6271a1d
feat: display relative path for episode path
lawrenceching Sep 3, 2026
9430eb9
refactor: enhance code to query associated files
lawrenceching Sep 3, 2026
28e6389
docs: add UC3 apply-plan-selected-files design spec
lawrenceching Sep 4, 2026
caa7734
feat(core): apply rename plan with selected files
lawrenceching Sep 4, 2026
3ec9d8e
feat(core): dispatch applyPlan data to selected rename pipeline
lawrenceching Sep 4, 2026
bb8c0d9
feat(cli): support selected files on apply-plan with ProblemDetails e…
lawrenceching Sep 4, 2026
9db702e
refactor(cli): skip error-level log for apply-plan selection errors
lawrenceching Sep 4, 2026
6a093ec
docs: add UC3 apply-plan-selected-files implementation plan
lawrenceching Sep 4, 2026
49fc489
refactor: enhance the useRuleBasedRenameFilesFlow.ts
lawrenceching Sep 4, 2026
96e6467
docs: add rule-based recognize flow refactor design
lawrenceching Sep 4, 2026
6f6baf1
refactor: enhance the useRuleBasedRecognizesFlow.ts
lawrenceching Sep 5, 2026
a669199
test: fixed unit tests error
lawrenceching Sep 5, 2026
ddcdba9
docs: add AI Agent permissions config design
lawrenceching Sep 6, 2026
81748d2
docs: add ai-agent permissions implementation plan
lawrenceching Sep 6, 2026
078954e
feat: add aiAgent permissions config to user config
lawrenceching Sep 6, 2026
5457272
feat(ui): add AiAgentSettings component
lawrenceching Sep 6, 2026
0c432e5
feat(ui): add AI Agent tab and locales
lawrenceching Sep 6, 2026
a52b75b
fix(ui): use zh-TW metadata terminology in ai agent locale
lawrenceching Sep 6, 2026
74fdfbc
fix(ui): remove unused eslint-disable directive in AiAgentSettings
lawrenceching Sep 6, 2026
d2b73d1
docs: mark ai-agent permissions design implemented
lawrenceching Sep 6, 2026
0a85aa6
fix(core): register aiAgent key in user config validation
lawrenceching Sep 6, 2026
8a616f7
test(ui): add aiAgent round-trip coverage
lawrenceching Sep 6, 2026
3c33312
docs: record core aiAgent key registration in design spec
lawrenceching Sep 6, 2026
ed76cc5
docs: add ai rename plan metadata.write enforcement design
lawrenceching Sep 6, 2026
98f526b
docs: add ai rename plan enforcement implementation plan
lawrenceching Sep 6, 2026
0491754
feat(types): add hasAiAgentPermission helper
lawrenceching Sep 6, 2026
0e16c29
feat(core-routes): auto-apply ai rename plans when metadata.write gra…
lawrenceching Sep 6, 2026
5def24d
fix(core-routes): narrow expectPendingPlanId param type for tsc
lawrenceching Sep 6, 2026
898b1df
feat: wire applyRenameEpisodePlan into mcp and chat tools
lawrenceching Sep 6, 2026
5514e55
feat(ui): pull pending plans on sidebar folder select
lawrenceching Sep 6, 2026
077891f
feat(ui): pull pending plans on browser reactivate
lawrenceching Sep 6, 2026
2a3d020
docs: mark ai rename plan enforcement design implemented
lawrenceching Sep 6, 2026
a8c4e68
chore(ui): remove debug console.log in TvShowPanel
lawrenceching Sep 6, 2026
17abcf5
refactor(ui): rename AiBased*Prompt components to *EpisodePrompt
lawrenceching Sep 6, 2026
f00f7e2
refactor(ui): add cohesive useAiBasedRenameEpisodeFlow hook
lawrenceching Sep 6, 2026
99a797f
refactor(ui): add cohesive useAiBasedRecognizeEpisodeFlow hook
lawrenceching Sep 6, 2026
8a389cc
refactor(ui): decouple AI rename/recognize flows from TvShowPanel
lawrenceching Sep 6, 2026
0066c8f
chore(ui): drop unused imports in recognize episode flow test
lawrenceching Sep 6, 2026
a5c2ec3
fix(ui): sync i18next.d.ts with aiAgent settings locale keys
lawrenceching Sep 6, 2026
f2bd4cd
fix(ui): apply AI rename plan on prompt confirm
lawrenceching Sep 6, 2026
de45268
refactor: remove legacy rename begin/add/end dead code
lawrenceching Sep 6, 2026
508ef18
docs: add recognize single-call migration design
lawrenceching Sep 6, 2026
90ebe19
docs: add recognize single-call migration implementation plan
lawrenceching Sep 6, 2026
ec485ee
feat(types): add createRecognizeEpisodePlan schema and auto-applied m…
lawrenceching Sep 6, 2026
019b249
feat(core): add createRecognizeEpisodePlanPipeline and Core method
lawrenceching Sep 6, 2026
bbbd685
feat(core-routes): add createRecognizeEpisodePlan tool builder with m…
lawrenceching Sep 6, 2026
14902b7
refactor(core-routes): replace recognize begin/add/end tools with sin…
lawrenceching Sep 6, 2026
b0a212a
feat(cli): add create-recognize-episode-plan route and metadata.write…
lawrenceching Sep 6, 2026
46d356d
refactor: update recognize prompts to single-call create-recognize-ep…
lawrenceching Sep 6, 2026
9c54b85
refactor(ui): replace recognize 3-step chat tools with single-call cr…
lawrenceching Sep 6, 2026
376a730
refactor(ui): remove promptStatus and preparing UI after single-call …
lawrenceching Sep 6, 2026
386dc6e
chore: cleanup stale promptStatus references after recognize migration
lawrenceching Sep 6, 2026
0352822
fix(core-routes): update recognize how-to text and rebuild dist bundle
lawrenceching Sep 6, 2026
e5c7def
test: cleanup
lawrenceching Sep 7, 2026
c6fa662
test: cleanup
lawrenceching Sep 7, 2026
6bf9991
docs: add unused code detection design spec (tsconfig flags + knip CI)
lawrenceching Sep 7, 2026
0946ca4
refactor: clean up unused methods
lawrenceching Sep 7, 2026
dbe9185
refactor: clean up unused methods
lawrenceching Sep 7, 2026
17db04f
refactor: clean up v3 documents
lawrenceching Sep 8, 2026
53723ac
fix(tvdb): localize episode titles without stalling import
lawrenceching Sep 8, 2026
9bc3e5d
fix(ui): disable rename confirm when plan has nothing to apply
lawrenceching Sep 9, 2026
4c33ffa
fix: fixed e2e test for movie
lawrenceching Sep 9, 2026
eafd38b
refactor(ui): extract shared MediaFileTableToolbar for TV and movie p…
lawrenceching Sep 9, 2026
ef55081
fix(ui): resolve ESLint errors in TvShowPanel and related hooks
lawrenceching Sep 9, 2026
938dd69
fix: clear knip unused export and dependency findings
lawrenceching Sep 9, 2026
61ccfb6
fix: fixed typecheck errors
lawrenceching Sep 9, 2026
664faf0
fix: fixed unit tests failure
lawrenceching Sep 10, 2026
987a497
fix: fixed build failure
lawrenceching Sep 10, 2026
4ad59ff
fix: fixed e2e failure
lawrenceching Sep 10, 2026
0faae9c
fix: fixed e2e failure
lawrenceching Sep 10, 2026
d9e7572
fix: fixed e2e failure
lawrenceching Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
23 changes: 23 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ on:
- 'ci/**'
- 'pnpm-workspace.yaml'
- 'pnpm-lock.yaml'
- 'knip.json'
- '.github/workflows/ci.yml'
- '.github/workflows/_e2e-cli.yml'
- '.github/workflows/e2e-cli.yml'
Expand All @@ -29,6 +30,7 @@ on:
- 'ci/**'
- 'pnpm-workspace.yaml'
- 'pnpm-lock.yaml'
- 'knip.json'
- '.github/workflows/ci.yml'
- '.github/workflows/_e2e-cli.yml'
- '.github/workflows/e2e-cli.yml'
Expand Down Expand Up @@ -102,6 +104,27 @@ jobs:
- name: Typecheck
run: pnpm run typecheck

# Advisory report of unused files/exports/dependencies (knip).
# Not a gate: continue-on-error keeps the workflow green until the
# existing findings are triaged (see docs/superpowers/specs/2026-09-07-unused-code-detection-design.md).
knip:
name: Knip (unused code report)
runs-on: ubuntu-latest
continue-on-error: true

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Install all dependencies
run: pnpm install --frozen-lockfile

- name: Run knip
run: pnpm knip

build-ui:
name: Build UI
needs: [test, lint-ui, typecheck]
Expand Down
25 changes: 0 additions & 25 deletions .superpowers/sdd/task-3-fix-report.md

This file was deleted.

109 changes: 0 additions & 109 deletions .superpowers/sdd/task-3-report.md

This file was deleted.

23 changes: 0 additions & 23 deletions .superpowers/sdd/task-4-fix-report.md

This file was deleted.

22 changes: 0 additions & 22 deletions .superpowers/sdd/task-6-report.md

This file was deleted.

17 changes: 0 additions & 17 deletions .superpowers/sdd/task-final-fix-report.md

This file was deleted.

2 changes: 1 addition & 1 deletion apps/cicd/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@smm/cicd",
"module": "index.ts",
"module": "run.ts",
"type": "module",
"private": true,
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion apps/cicd/src/debug-log.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export type DebugLogEvent = {
export class DebugLog {
private stream: fs.WriteStream | null = null;

constructor(private readonly filePath: string) {
constructor(filePath: string) {
fs.mkdirSync(path.dirname(filePath), { recursive: true });
this.stream = fs.createWriteStream(filePath, { flags: 'a' });
}
Expand Down
2 changes: 1 addition & 1 deletion apps/cicd/test/config.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { describe, test, expect } from 'bun:test';
import { parseConfig, type Config } from '../src/config.ts';
import { parseConfig } from '../src/config.ts';

describe('parseConfig', () => {
test('accepts a minimal valid config', () => {
Expand Down
2 changes: 2 additions & 0 deletions apps/cicd/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
"noFallthroughCasesInSwitch": true,
"noUncheckedIndexedAccess": true,
"noImplicitOverride": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"types": ["bun"]
},
"include": ["src/**/*", "test/**/*", "run.ts"]
Expand Down
8 changes: 0 additions & 8 deletions apps/cli/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import {
applyTmdbTlsDevBypassToProcessIfEnabled,
trustAllTmdbCertEnabled,
} from '@/utils/tmdbTls';
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { Server } from './server';
import { getUserDataDir, getLogDir, getAppDataDir } from '@/utils/config';
import { CommandLogCleaner } from '@/utils/CommandLogCleaner';
Expand Down Expand Up @@ -62,13 +61,6 @@ function parseArgs(): CommandLineArguments {
return result;
}

// Create a custom provider with your baseURL and API key
const customProvider = createOpenAICompatible({
name: 'DeepSeek',
baseURL: 'https://api.deepseek.com/v1', // Your custom base URL
apiKey: '', // Your API key
});

// Parse command line arguments
const args = parseArgs();

Expand Down
21 changes: 0 additions & 21 deletions apps/cli/lib/ai-provider.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,6 @@
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import type { UserConfig } from '@smm/types';

export const DEEPSEEK_MODEL = 'deepseek-v4-flash';

// Get API key from environment
function getApiKey(): string {
return process.env.VITE_DEEPSEEK_API_KEY || process.env.DEEPSEEK_API_KEY || 'sk-ce25f3132fbc4b599f0f26eede96d390';
}

// Create DeepSeek provider configuration (lazy initialization)
let _deepseekProvider: ReturnType<typeof createOpenAICompatible> | null = null;

export function getDeepseekProvider() {
if (!_deepseekProvider) {
_deepseekProvider = createOpenAICompatible({
name: 'DeepSeek',
baseURL: 'https://api.deepseek.com/v1',
apiKey: getApiKey(),
});
}
return _deepseekProvider;
}

/**
* Creates an AI provider based on the user's selected AI configuration.
* Looks up the provider by name in the aiProviders array.
Expand Down
13 changes: 0 additions & 13 deletions apps/cli/lib/log.ts

This file was deleted.

Loading
Loading