Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
9bb3cac
feat: add proposal
alexey1312 Feb 3, 2026
af73c44
feat: add proposal V2
alexey1312 Feb 3, 2026
30982a1
feat(pkl): add PKL configuration schemas (Phase 1)
alexey1312 Feb 3, 2026
9f3725c
feat(pkl): add PKL infrastructure with TDD (Phase 2)
alexey1312 Feb 3, 2026
9f0922f
feat(config): complete Phase 4 - integrate PKL into ExFig
alexey1312 Feb 3, 2026
ea0eda9
chore: complete Phase 6 - remove Yams dependency
alexey1312 Feb 3, 2026
8f132f6
docs: update CLAUDE.md for PKL configuration format
alexey1312 Feb 3, 2026
b91ab07
feat(core): add plugin architecture protocols (Phase 3)
alexey1312 Feb 3, 2026
73f20d4
docs: mark Phase 3 as complete in tasks.md
alexey1312 Feb 3, 2026
e19091b
feat(config): add ExFigConfig module (Phase 5)
alexey1312 Feb 3, 2026
0f55db5
docs: mark Phase 5 as complete in tasks.md
alexey1312 Feb 3, 2026
7e90b5e
docs: mark Phase 8 as complete in tasks.md
alexey1312 Feb 3, 2026
c998222
docs: mark Phase 8 as complete in tasks.md
alexey1312 Feb 3, 2026
b4bb2a7
feat(plugins): add ExFig-iOS plugin module skeleton (Phase 7.1)
alexey1312 Feb 3, 2026
87e7432
feat(plugins): add Android, Flutter, and Web plugin modules (Phase 7.…
alexey1312 Feb 3, 2026
0940074
docs: update tasks.md with Phase 7 plugin skeleton progress
alexey1312 Feb 3, 2026
0d82835
feat(plugins): add PluginRegistry for platform plugin coordination (P…
alexey1312 Feb 3, 2026
4f721ac
feat(plugins): add ColorsEntry config types for all platforms (Phase …
alexey1312 Feb 3, 2026
0477b26
feat(ios): implement full iOSColorsExporter with plugin architecture …
alexey1312 Feb 3, 2026
ec052fa
feat(plugins): implement full ColorsExporter for Android, Flutter, We…
alexey1312 Feb 3, 2026
5270c43
feat(core): add PluginRegistry for platform plugin coordination (Phas…
alexey1312 Feb 3, 2026
0ac723a
docs(openspec): add Icons & Images exporter protocols to migration plan
alexey1312 Feb 3, 2026
482415c
docs(openspec): add batch/pipelined download support to Icons/Images …
alexey1312 Feb 3, 2026
601dbcc
docs(openspec): document batch processing integration with plugins
alexey1312 Feb 3, 2026
4c4670b
feat(core): add Icons & Images exporter protocols (Phase 7b.1)
alexey1312 Feb 3, 2026
aae2fc1
feat(ios): implement Icons & Images exporters (Phase 7b.2)
alexey1312 Feb 3, 2026
387dc80
feat(android): implement Icons & Images exporters (Phase 7b.3)
alexey1312 Feb 3, 2026
b177c3a
feat(flutter): implement Icons & Images exporters (Phase 7b.4)
alexey1312 Feb 3, 2026
17792e4
feat(web): implement Icons & Images exporters (Phase 7b.5)
alexey1312 Feb 3, 2026
e623504
feat(web): implement Icons & Images exporters (Phase 7b)
alexey1312 Feb 3, 2026
b461e03
refactor(cli): migrate ExportColors to plugin architecture (Phase 9.2.4)
alexey1312 Feb 3, 2026
2a68f26
docs(openspec): update Phase 9 status — defer Icons/Images migration
alexey1312 Feb 3, 2026
39ccc49
refactor(cli): remove obsolete *ColorsMultiple methods (Phase 9.3.3)
alexey1312 Feb 3, 2026
6e9d40d
docs: update CLAUDE.md and README.md for PKL config (Phase 10.1)
alexey1312 Feb 3, 2026
3079b13
docs(openspec): update project.md for PKL and plugin architecture (Ph…
alexey1312 Feb 3, 2026
7cfb68f
docs(openspec): update Phase 10-11 task status
alexey1312 Feb 3, 2026
2fdcdea
docs(openspec): update Phase 9-13 task status
alexey1312 Feb 3, 2026
bbef56f
ci: add pkl installation for PKL config tests
alexey1312 Feb 3, 2026
396b657
docs(openspec): update Phase 11.1 with CI pkl installation details
alexey1312 Feb 3, 2026
34f6c9b
docs(openspec): update task status with detailed progress notes
alexey1312 Feb 3, 2026
c53356c
docs(openspec): add summary section to tasks.md with final status
alexey1312 Feb 3, 2026
989389e
docs(openspec): add phases 14-18 for complete plugin migration
alexey1312 Feb 3, 2026
fa32967
feat(icons): add plugin-based icons export infrastructure
alexey1312 Feb 4, 2026
0fe4aac
feat(images): add plugin-based images export infrastructure
alexey1312 Feb 4, 2026
b1006ed
feat(typography): add plugin-based typography export infrastructure
alexey1312 Feb 4, 2026
488aa12
feat(icons): add IconsExportResult and granular cache support to expo…
alexey1312 Feb 4, 2026
f480b36
docs(openspec): update Phase 14 with IconsExportResult and granular c…
alexey1312 Feb 4, 2026
869e92a
feat(icons): migrate ExportIcons CLI to plugin architecture
alexey1312 Feb 5, 2026
092aecb
feat(cli): migrate Images and Typography CLI to plugin architecture
alexey1312 Feb 5, 2026
de09267
feat(config): add PKLConfig skeleton for future Params migration
alexey1312 Feb 6, 2026
60d3ab2
chore: update openspec
alexey1312 Feb 6, 2026
a105cff
fix(config): align PKLConfig types with Params for identical JSON dec…
alexey1312 Feb 6, 2026
c65c096
feat(config): add entries and toPluginEntries methods to PKLConfig
alexey1312 Feb 6, 2026
2a6ba92
feat(config): add platformConfig() and FileIdProvider to PKLConfig
alexey1312 Feb 6, 2026
5e33eb9
refactor(config): replace Params with PKLConfig across all source files
alexey1312 Feb 6, 2026
599fe06
refactor(config): update tests and delete Params files
alexey1312 Feb 6, 2026
c3f3ef7
refactor: rename ExFig target to ExFigCLI
alexey1312 Feb 6, 2026
cc827b5
docs(openspec): update Phase 18 status to complete
alexey1312 Feb 6, 2026
011dc60
fix: address PR review findings across config migration
alexey1312 Feb 6, 2026
9589808
fix: resolve Linux build errors and warnings
alexey1312 Feb 6, 2026
5111456
docs: remove outdated ParamsToPluginAdapter reference from CLAUDE.md
alexey1312 Feb 6, 2026
eb34af6
fix: address 11 PR review issues for PKL config migration
alexey1312 Feb 6, 2026
77ac174
chore: update claude md
alexey1312 Feb 6, 2026
a27dde4
feat: update config format to PKL and refactor schemas
alexey1312 Feb 6, 2026
6214d1c
feat: update config format to PKL and refactor schemas
alexey1312 Feb 6, 2026
a57ef14
chore(pkg): add schema versioning and iOS xcassetsPath handling
alexey1312 Feb 6, 2026
823550f
refactor: improve entries handling and fix SVG format handling
alexey1312 Feb 6, 2026
4d18b4c
fix: replace PKL config system with new dynamic configuration
alexey1312 Feb 7, 2026
ac9d80c
chore: introduce PKL-Native Config v2 with breaking changes
alexey1312 Feb 7, 2026
db4cf6f
fix: improve image format handling and cleanup
alexey1312 Feb 7, 2026
37af86b
refactor: simplify name style conversion and improve error handling
alexey1312 Feb 7, 2026
497ee1c
chore: archive migrate-pkl-config and create pkl-schema-v2 change
alexey1312 Feb 7, 2026
a32bf00
feat: add WebP and scale handling improvements
alexey1312 Feb 7, 2026
3f5dd66
feat: pkl schema v2 (#49)
alexey1312 Feb 7, 2026
9878b62
feat: add localized error support to PKLEvaluator
alexey1312 Feb 7, 2026
9bb6e69
refactor: remove resolvedFigmaFileId methods, propagate directly
alexey1312 Feb 7, 2026
6285574
refactor: improve file management and platform handling
alexey1312 Feb 7, 2026
c61be3f
fix: improve config parsing and format conversion
alexey1312 Feb 7, 2026
1b16ee3
chore: update doc
alexey1312 Feb 7, 2026
1fa768b
fix: streamline async file ID extraction and warn on conversion failures
alexey1312 Feb 8, 2026
0be5a6d
refactor: improve error handling and logging output
alexey1312 Feb 8, 2026
00c6ba0
chore: update CI
alexey1312 Feb 8, 2026
796b7d4
feat(batch): integrate Noora UI & enhance terminal output
alexey1312 Feb 8, 2026
d77fc4e
fix: add isEmpty to PreFetchedFileVersions for SwiftLint compatibility
alexey1312 Feb 8, 2026
8f90ca7
chore: update README.md
alexey1312 Feb 8, 2026
6a9c1b4
refactor: simplify progress view layout
alexey1312 Feb 8, 2026
cb1acea
feat: enhance CI workflows and script with parallel testing
alexey1312 Feb 8, 2026
f28c0e0
chore: improve batch UI output and config listing
alexey1312 Feb 8, 2026
cec36a3
refactor: detect and display output path conflicts
alexey1312 Feb 8, 2026
5fc2219
fix: prevent race conditions in TerminalUI logging
alexey1312 Feb 9, 2026
ecd26a7
feat: expand `getFileIds` to include icons, images, and typography
alexey1312 Feb 9, 2026
3362e18
feat: add download progress reporting to BatchProgressView
alexey1312 Feb 9, 2026
bde7df1
chore: doc update
alexey1312 Feb 9, 2026
0f1f479
feat: introduce concurrent export for improved performance
alexey1312 Feb 9, 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
  •  
  •  
  •  
21 changes: 0 additions & 21 deletions .claude/commands/openspec/apply.md

This file was deleted.

25 changes: 0 additions & 25 deletions .claude/commands/openspec/archive.md

This file was deleted.

26 changes: 0 additions & 26 deletions .claude/commands/openspec/proposal.md

This file was deleted.

152 changes: 152 additions & 0 deletions .claude/commands/opsx/apply.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
---
name: "OPSX: Apply"
description: Implement tasks from an OpenSpec change (Experimental)
category: Workflow
tags: [workflow, artifacts, experimental]
---

Implement tasks from an OpenSpec change.

**Input**: Optionally specify a change name (e.g., `/opsx:apply add-auth`). 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)
- 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 `/opsx:continue`
- 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! You can archive this change with `/opsx:archive`.
```

**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
157 changes: 157 additions & 0 deletions .claude/commands/opsx/archive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
---
name: "OPSX: Archive"
description: Archive a completed change in the experimental workflow
category: Workflow
tags: [workflow, archive, experimental]
---

Archive a completed change in the experimental workflow.

**Input**: Optionally specify a change name after `/opsx:archive` (e.g., `/opsx:archive add-auth`). 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
- Prompt user for confirmation to continue
- 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
- Prompt user for confirmation to continue
- 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. 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
- Spec sync status (synced / sync skipped / no delta specs)
- 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

All artifacts complete. All tasks complete.
```

**Output On Success (No Delta Specs)**

```
## Archive Complete

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** No delta specs

All artifacts complete. All tasks complete.
```

**Output On Success With Warnings**

```
## Archive Complete (with warnings)

**Change:** <change-name>
**Schema:** <schema-name>
**Archived to:** openspec/changes/archive/YYYY-MM-DD-<name>/
**Specs:** Sync skipped (user chose to skip)

**Warnings:**
- Archived with 2 incomplete artifacts
- Archived with 3 incomplete tasks
- Delta spec sync was skipped (user chose to skip)

Review the archive if this was not intentional.
```

**Output On Error (Archive Exists)**

```
## Archive Failed

**Change:** <change-name>
**Target:** openspec/changes/archive/YYYY-MM-DD-<name>/

Target archive directory already exists.

**Options:**
1. Rename the existing archive
2. Delete the existing archive if it's a duplicate
3. Wait until a different date to archive
```

**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 /opsx:sync approach (agent-driven)
- If delta specs exist, always run the sync assessment and show the combined summary before prompting
Loading
Loading