Skip to content
This repository was archived by the owner on Apr 22, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
5ea5ac5
chore: initialize pnpm workspace and add base TypeScript configuration
sichengchen Feb 3, 2026
45a1f26
feat: implement database schema and seed data for articles and sources
sichengchen Feb 3, 2026
784e1d3
feat: wire desktop app, server routes, and tests
sichengchen Feb 3, 2026
4aaf0ce
feat: unify shadcn ui and dev storage
sichengchen Feb 4, 2026
8170d76
chore: update deps and tooling
sichengchen Feb 4, 2026
e193b44
feat: add cheerio and playwright scraping with L1/L2/L3 fallback chain
sichengchen Feb 4, 2026
2255aa7
feat: enhance article processing with tags, grade, and key points; up…
sichengchen Feb 4, 2026
fcde48c
feat: add vector search for related articles
sichengchen Feb 4, 2026
902b74a
fix: reuse running server during desktop dev
sichengchen Feb 4, 2026
a2ed65b
fix: stabilize reader pane rendering
sichengchen Feb 4, 2026
75f59e2
feat: add source discovery
sichengchen Feb 4, 2026
d6024a2
feat: expand settings model router
sichengchen Feb 4, 2026
3fd26cc
feat: model catalog and router tabs
sichengchen Feb 4, 2026
10e02c1
feat: add verbose pipeline view
sichengchen Feb 4, 2026
086d46d
feat: rename settings models key
sichengchen Feb 4, 2026
38397a1
feat: drop models providers
sichengchen Feb 4, 2026
45834cf
feat: rename models config type
sichengchen Feb 4, 2026
0cf308d
feat: add Checkbox component and integrate into SettingsDialog
sichengchen Feb 4, 2026
832b566
feat: add configurable grading settings
sichengchen Feb 4, 2026
7987a67
feat: auto-update grades from stored components
sichengchen Feb 4, 2026
afaf587
feat: add grading weight sliders
sichengchen Feb 4, 2026
47e8855
feat: add CI workflow for secrets scanning, build, and testing
sichengchen Feb 4, 2026
66c263d
refactor: consolidate pnpm setup steps in CI workflow
sichengchen Feb 4, 2026
cb092c2
fix: specify exact pnpm version in CI workflow
sichengchen Feb 4, 2026
8674d44
chore: add turbo test scripts
sichengchen Feb 4, 2026
cc3caaf
feat: add digest generation feature with scheduling and health monito…
sichengchen Feb 4, 2026
4767adc
feat: add new components and dialogs for enhanced user experience
sichengchen Feb 4, 2026
7aafe01
feat: add error handling for article loading in ArticleList, HomeArti…
sichengchen Feb 4, 2026
867ff7f
feat: implement ArticleViewer component and update navigation in App
sichengchen Feb 4, 2026
63505c4
feat: replace ReaderPane with PipelinePane and add article reprocessi…
sichengchen Feb 4, 2026
e7dc6cd
feat: enhance digest functionality with structured content parsing an…
sichengchen Feb 4, 2026
12334f4
feat: enhance HomeArticlesList and HomeDigest components with improve…
sichengchen Feb 4, 2026
b5aa244
feat: add SettingsPage component and update App for settings navigation
sichengchen Feb 4, 2026
50c9472
fix: fix button in PipelinePane to use onClick for opening original a…
sichengchen Feb 4, 2026
aee37fd
fix: fix testing error
sichengchen Feb 4, 2026
5d3bfcc
fix: update tsconfig.json to include baseUrl and paths for server ref…
sichengchen Feb 4, 2026
b04ccb2
fix: update migrate script to rebuild better-sqlite3 before migration
sichengchen Feb 4, 2026
3d1c132
fix: update title in index.html to reflect application name
sichengchen Feb 5, 2026
a5aea2a
feat: add summary_long field to articles and update related component…
sichengchen Feb 5, 2026
17ba4ff
feat: implement task management system with dashboard and run tracking
sichengchen Feb 5, 2026
82a7046
feat: Introduce agent-generated skill-based scraping for sources with…
sichengchen Feb 5, 2026
0ba3938
feat: add 'skill' task type and implement extraction agent for articl…
sichengchen Feb 5, 2026
d8a61b3
refactor: optimize pickMostCommonClass function for better readabilit…
sichengchen Feb 5, 2026
7a78202
docs: add README.md with project overview, setup instructions, and co…
sichengchen Feb 5, 2026
211e939
feat: add Discover, General, Models, and Router tabs for configuration
sichengchen Feb 5, 2026
269f4b3
refactor: simplify scraping logic by removing HTML and SPA scraping m…
sichengchen Feb 5, 2026
21aec3e
refactor: optimize dependencies and improve code clarity in PipelineP…
sichengchen Feb 5, 2026
47be276
feat: Add OpenSpec skills for exploring, creating, and verifying changes
sichengchen Feb 5, 2026
74f8d71
feat: add .openspec.yaml for skill generator types configuration
sichengchen Feb 5, 2026
0abdd21
refactor: remove unnecessary type casts in skill-generator.ts for typ…
sichengchen Feb 5, 2026
9b811f3
feat: implement consistent visual feedback for async operations
sichengchen Feb 6, 2026
7d08f4e
feat: add provider and model management with automatic migration
sichengchen Feb 6, 2026
812dea4
test: improve fetch assertion to explicitly check AbortSignal
sichengchen Feb 6, 2026
f85f7aa
docs: mark all testing tasks as complete
sichengchen Feb 6, 2026
5b92a24
docs: Update specs of provider model management and model discovery
sichengchen Feb 6, 2026
ad5e107
chore: enhance type definitions for ModelsTab and ProvidersSection co…
sichengchen Feb 6, 2026
04fbb5f
feat: implement configurable link behaviors for articles and update s…
sichengchen Feb 6, 2026
c779645
refactor: remove verbose mode functionality and related pipeline logging
sichengchen Feb 6, 2026
dd2f438
refactor: refactor SettingsPage to use Tabs component and improve UI …
sichengchen Feb 6, 2026
5532660
refactor: simplify UI elements and improve digest handling across com…
sichengchen Feb 6, 2026
f56d00c
refactor: streamline HomeDigest and HistoryDigestPage components by i…
sichengchen Feb 6, 2026
1ca5613
feat: add data management features to settings, including delete all …
sichengchen Feb 6, 2026
ff6ae1c
feat: implement page and selector tools for HTML extraction
sichengchen Feb 6, 2026
810871e
feat: Enhance skill-generator with robots.txt support and add new age…
sichengchen Feb 6, 2026
1ffff0a
refactor: update background color in settings components for consistency
sichengchen Feb 6, 2026
59862d2
refactor: simplify capabilities selection in ModelsTab and ModelCard …
sichengchen Feb 6, 2026
9cfd542
refactor: adjust layout of provider credentials display in ProviderCa…
sichengchen Feb 6, 2026
471f064
feat: enhance model discovery and selection with ownership informatio…
sichengchen Feb 6, 2026
fe107ef
feat: implement change detection for settings in SettingsPage component
sichengchen Feb 6, 2026
25d696e
feat: add customizable app title in settings and update UI accordingly
sichengchen Feb 6, 2026
3574e02
feat: add sample environment configuration file with API keys and set…
sichengchen Feb 6, 2026
69151cb
feat: enhance SourceList component with improved UI and delete confir…
sichengchen Feb 6, 2026
4e01081
feat: update app title to "The Dispatch" and adjust related settings …
sichengchen Feb 6, 2026
7f0f8d5
refactor: update app title placeholder and enhance interest/source sc…
sichengchen Feb 6, 2026
a082988
feat: add HTML entity decoding utility and integrate it into article …
sichengchen Feb 6, 2026
5a45a66
feat: add bold text option for digest generation and UI settings
sichengchen Feb 6, 2026
d67d404
refactor: replace Checkbox with Switch for improved UI in DashboardPa…
sichengchen Feb 6, 2026
30bef7e
feat: implement external link opening via dispatch API in ArticleView…
sichengchen Feb 6, 2026
320d558
feat: enhance RSS feed evaluation with LLM-based content analysis and…
sichengchen Feb 6, 2026
7a42b31
feat: implement choice prompt tool for interactive user decisions in …
sichengchen Feb 6, 2026
9941cce
docs: add proposal and configuration for new Telegram notification se…
sichengchen Feb 6, 2026
4e627a1
feat: add Telegram notifications support
sichengchen Feb 7, 2026
96ede01
feat: unify scheduled tasks configuration
sichengchen Feb 7, 2026
1bd659e
docs: update README for clarity and structure improvements
sichengchen Feb 7, 2026
6af52e3
docs: add LICENSE file
sichengchen Feb 7, 2026
e11c289
feat: add onboarding wizard for first-time users
sichengchen Feb 7, 2026
266c218
docs: add dist-electron to .gitignore
sichengchen Feb 7, 2026
a8b6414
chore: update ESLint configuration to ignore additional directories
sichengchen Feb 7, 2026
ab54bd3
chore: add electron-updater and lodash packages with updated versions
sichengchen Feb 7, 2026
860d8a8
docs: implement standalone packaging and onboarding flow for first-ti…
sichengchen Feb 7, 2026
de31504
feat: enhance onboarding wizard with additional steps and improved na…
sichengchen Feb 7, 2026
ec96dfc
refactor: set default window size for the application
sichengchen Feb 7, 2026
e071b9c
docs: update README
sichengchen Feb 7, 2026
3f60d8e
feat: enhance CORS handling and URL validation in sources router
sichengchen Feb 7, 2026
df37eb3
feat: add error handling for article processing pipeline
sichengchen Feb 7, 2026
c36dc2f
fix: include onboarding completion status in settings update
sichengchen Feb 7, 2026
47f8040
feat: add dual-pane layout to Sources page with article management
sichengchen Feb 7, 2026
0848a3a
feat: add extraction max articles configuration to settings and relat…
sichengchen Feb 7, 2026
2287da2
fix: improve change detection for routing and initial state in Settin…
sichengchen Feb 7, 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
  •  
  •  
  •  
156 changes: 156 additions & 0 deletions .agent/skills/openspec-apply-change/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
---
name: openspec-apply-change
description: Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.
license: MIT
compatibility: Requires openspec CLI.
metadata:
author: openspec
version: "1.0"
generatedBy: "1.1.1"
---

Implement tasks from an OpenSpec change.

**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **Select the change**

If a name is provided, use it. Otherwise:
- Infer from conversation context if the user mentioned a change
- Auto-select if only one active change exists
- If ambiguous, run `openspec list --json` to get available changes and use the **AskUserQuestion tool** to let the user select

Always announce: "Using change: <name>" and how to override (e.g., `/opsx:apply <other>`).

2. **Check status to understand the schema**
```bash
openspec status --change "<name>" --json
```
Parse the JSON to understand:
- `schemaName`: The workflow being used (e.g., "spec-driven")
- Which artifact contains the tasks (typically "tasks" for spec-driven, check status for others)

3. **Get apply instructions**

```bash
openspec instructions apply --change "<name>" --json
```

This returns:
- Context file paths (varies by schema - could be proposal/specs/design/tasks or spec/tests/implementation/docs)
- Progress (total, complete, remaining)
- Task list with status
- Dynamic instruction based on current state

**Handle states:**
- If `state: "blocked"` (missing artifacts): show message, suggest using openspec-continue-change
- If `state: "all_done"`: congratulate, suggest archive
- Otherwise: proceed to implementation

4. **Read context files**

Read the files listed in `contextFiles` from the apply instructions output.
The files depend on the schema being used:
- **spec-driven**: proposal, specs, design, tasks
- Other schemas: follow the contextFiles from CLI output

5. **Show current progress**

Display:
- Schema being used
- Progress: "N/M tasks complete"
- Remaining tasks overview
- Dynamic instruction from CLI

6. **Implement tasks (loop until done or blocked)**

For each pending task:
- Show which task is being worked on
- Make the code changes required
- Keep changes minimal and focused
- Mark task complete in the tasks file: `- [ ]` → `- [x]`
- Continue to next task

**Pause if:**
- Task is unclear → ask for clarification
- Implementation reveals a design issue → suggest updating artifacts
- Error or blocker encountered → report and wait for guidance
- User interrupts

7. **On completion or pause, show status**

Display:
- Tasks completed this session
- Overall progress: "N/M tasks complete"
- If all done: suggest archive
- If paused: explain why and wait for guidance

**Output During Implementation**

```
## Implementing: <change-name> (schema: <schema-name>)

Working on task 3/7: <task description>
[...implementation happening...]
✓ Task complete

Working on task 4/7: <task description>
[...implementation happening...]
✓ Task complete
```

**Output On Completion**

```
## Implementation Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 7/7 tasks complete ✓

### Completed This Session
- [x] Task 1
- [x] Task 2
...

All tasks complete! Ready to archive this change.
```

**Output On Pause (Issue Encountered)**

```
## Implementation Paused

**Change:** <change-name>
**Schema:** <schema-name>
**Progress:** 4/7 tasks complete

### Issue Encountered
<description of the issue>

**Options:**
1. <option 1>
2. <option 2>
3. Other approach

What would you like to do?
```

**Guardrails**
- Keep going through tasks until done or blocked
- Always read context files before starting (from the apply instructions output)
- If task is ambiguous, pause and ask before implementing
- If implementation reveals issues, pause and suggest artifact updates
- Keep code changes minimal and scoped to each task
- Update task checkbox immediately after completing each task
- Pause on errors, blockers, or unclear requirements - don't guess
- Use contextFiles from CLI output, don't assume specific file names

**Fluid Workflow Integration**

This skill supports the "actions on a change" model:

- **Can be invoked anytime**: Before all artifacts are done (if tasks exist), after partial implementation, interleaved with other actions
- **Allows artifact updates**: If implementation reveals design issues, suggest updating artifacts - not phase-locked, work fluidly
114 changes: 114 additions & 0 deletions .agent/skills/openspec-archive-change/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
---
name: openspec-archive-change
description: Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.
license: MIT
compatibility: Requires openspec CLI.
metadata:
author: openspec
version: "1.0"
generatedBy: "1.1.1"
---

Archive a completed change in the experimental workflow.

**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.

**Steps**

1. **If no change name provided, prompt for selection**

Run `openspec list --json` to get available changes. Use the **AskUserQuestion tool** to let the user select.

Show only active changes (not already archived).
Include the schema used for each change if available.

**IMPORTANT**: Do NOT guess or auto-select a change. Always let the user choose.

2. **Check artifact completion status**

Run `openspec status --change "<name>" --json` to check artifact completion.

Parse the JSON to understand:
- `schemaName`: The workflow being used
- `artifacts`: List of artifacts with their status (`done` or other)

**If any artifacts are not `done`:**
- Display warning listing incomplete artifacts
- Use **AskUserQuestion tool** to confirm user wants to proceed
- Proceed if user confirms

3. **Check task completion status**

Read the tasks file (typically `tasks.md`) to check for incomplete tasks.

Count tasks marked with `- [ ]` (incomplete) vs `- [x]` (complete).

**If incomplete tasks found:**
- Display warning showing count of incomplete tasks
- Use **AskUserQuestion tool** to confirm user wants to proceed
- Proceed if user confirms

**If no tasks file exists:** Proceed without task-related warning.

4. **Assess delta spec sync state**

Check for delta specs at `openspec/changes/<name>/specs/`. If none exist, proceed without sync prompt.

**If delta specs exist:**
- Compare each delta spec with its corresponding main spec at `openspec/specs/<capability>/spec.md`
- Determine what changes would be applied (adds, modifications, removals, renames)
- Show a combined summary before prompting

**Prompt options:**
- If changes needed: "Sync now (recommended)", "Archive without syncing"
- If already synced: "Archive now", "Sync anyway", "Cancel"

If user chooses sync, execute /opsx:sync logic (use the openspec-sync-specs skill). Proceed to archive regardless of choice.

5. **Perform the archive**

Create the archive directory if it doesn't exist:
```bash
mkdir -p openspec/changes/archive
```

Generate target name using current date: `YYYY-MM-DD-<change-name>`

**Check if target already exists:**
- If yes: Fail with error, suggest renaming existing archive or using different date
- If no: Move the change directory to archive

```bash
mv openspec/changes/<name> openspec/changes/archive/YYYY-MM-DD-<name>
```

6. **Display summary**

Show archive completion summary including:
- Change name
- Schema that was used
- Archive location
- Whether specs were synced (if applicable)
- Note about any warnings (incomplete artifacts/tasks)

**Output On Success**

```
## Archive Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** ✓ Synced to main specs (or "No delta specs" or "Sync skipped")

All artifacts complete. All tasks complete.
```

**Guardrails**
- Always prompt for change selection if not provided
- Use artifact graph (openspec status --json) for completion checking
- Don't block archive on warnings - just inform and confirm
- Preserve .openspec.yaml when moving to archive (it moves with the directory)
- Show clear summary of what happened
- If sync is requested, use openspec-sync-specs approach (agent-driven)
- If delta specs exist, always run the sync assessment and show the combined summary before prompting
Loading