Files
damn-my-slow-skt/AGENTS.md
T
Tom You 083505c952
Auto Bump and Publish / bump-and-publish (push) Failing after 8m24s
CI / lint-and-test (20) (push) Successful in 1m1s
CI / lint-and-test (22) (push) Successful in 1m3s
init
2026-06-11 15:16:51 +09:00

93 lines
3.6 KiB
Markdown

# AGENTS.md — damn-my-slow-skt
> AI Agent rules and codebase documentation. Update this file when completing tasks.
## Project Overview
- **Name**: damn-my-slow-skt v0.5.x
- **Purpose**: SKT/SK Broadband internet SLA speed measurement automation + fee reduction CLI tool
- **What it does**: Automates the flow of entering SK Broadband Myspeed, running SLA speed tests, storing results, and preparing fee-reduction handling when speed is below the SLA threshold.
- **Stack**: TypeScript (ES2020, CommonJS), Node.js 20+, Playwright, SQLite (node:sqlite), Commander CLI
- **Package manager**: npm (use `npm install`, never yarn/pnpm)
- **License**: MIT
- **npm package**: `damn-my-slow-skt`
- **Language of product**: Korean (UI strings, README, commit messages)
- **Language of code**: English (variable names, comments explain why)
## Development Setup
```bash
npm install
npx playwright install chromium
npm run build
npm run typecheck
npm run lint
npm test
```
- No external DB, Redis, or Docker required
- Config file: `~/.damn-my-slow-isp/config-skt.yaml` (YAML, not .env)
- Config requires explicit SKT/SK Broadband official terms acceptance under `terms`
- `run` command requires real SKT/B world credentials or SK Broadband authentication; all other dev tasks work without credentials
## Codebase Structure
```
src/
├── index.ts
├── cli.ts
├── config.ts
├── db.ts
├── skt.ts # SKT/SK Broadband Myspeed Playwright automation
├── migration.ts
├── notify.ts
├── report.ts
├── scheduler.ts
└── updater.ts
tests/
├── config.test.ts
├── db.test.ts
```
### Key Files Explained
- **skt.ts**: Core browser automation. Drives SK Broadband Myspeed SLA flow. Do not change live-site selectors without browser verification against myspeed.skbroadband.com.
- **cli.ts**: Commander commands. `run` validates required config fields before execution.
- **config.ts**: YAML config load/save, interfaces, defaults, required field validation.
- **scheduler.ts**: Generates launchd/systemd/cron triggers from `max_attempts` and `retry_interval_minutes`.
- **db.ts**: Dual storage backend: `node:sqlite` first, JSON fallback on Node 20.
## Coding Conventions
### TypeScript
- **Module**: CommonJS compatible dependencies
- **Target**: ES2020, `strict: true`
- **Error handling**: Always `catch (e: unknown)`, then narrow to `Error`
- **No new `any`**: Use `unknown` and type guards
- **String formatting**: Template literals
- **Async**: async/await
### Console Output
- Use `chalk` for colors
- Use emoji as status indicators (✅ ❌ 📊 ⏱ 📡 🐌)
- Check `process.stdout.isTTY` for interactive vs cron mode
### Config System
- YAML-based, not .env
- Deep-merged with defaults on load
- Config version tracked in `_config_version` (current: 4)
- `terms` stores current SKT/SK Broadband terms acceptance metadata and is required for `run`
- Migrations are interactive
## Restrictions
- **Never commit credentials** — local config files are gitignored
- **Never break CJS compatibility**
- **Never modify SK Broadband automation selectors** without testing against the live site
- **Never use `process.exit()` in library code** — only CLI entry points
- **Node 20 minimum** — do not use Node 22+ APIs without fallback
## Mandatory Practices
- Update AGENTS.md when completing tasks that change structure, conventions, or dependencies
- Run: `npm run typecheck && npm run lint && npm run build && npm test`
- Use Korean conventional commits
- Keep screenshot-on-error pattern in `skt.ts`
- Test with `--dry-run` when possible to avoid filing real complaints