opencodekit 0.19.4 → 0.19.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -20,7 +20,7 @@ var __require = /* @__PURE__ */ createRequire(import.meta.url);
20
20
 
21
21
  //#endregion
22
22
  //#region package.json
23
- var version = "0.19.4";
23
+ var version = "0.19.5";
24
24
 
25
25
  //#endregion
26
26
  //#region src/utils/license.ts
@@ -71,7 +71,7 @@ Route by need:
71
71
  | Mockup-to-implementation mapping | `mockup-to-code` |
72
72
  | Distinctive UI direction / anti-slop guidance | `frontend-design` |
73
73
  | Figma design data (read/write via MCP) | `figma-go` |
74
- | Pencil design-as-code workflow | `pencil` |
74
+ | OpenPencil design-as-code workflow | `pencil` |
75
75
  | Brand identity extraction from URLs | `webclaw` |
76
76
 
77
77
  ### Taste-Skill Variants (installed)
@@ -108,12 +108,12 @@ If Figma is available, request MCP access via `figma-go` and ground feedback in
108
108
  2. Use `figma-go` to pull `get_design_context` or `get_node`
109
109
  3. Reference node IDs in findings for traceability
110
110
 
111
- ## Pencil-First Workflow (when no Figma)
111
+ ## OpenPencil Workflow (when no Figma)
112
112
 
113
- If design must be created or iterated quickly, use Pencil:
113
+ If design must be created or iterated quickly, use OpenPencil via the legacy `pencil` skill:
114
114
 
115
- 1. Create/modify `.pen` via Pencil CLI
116
- 2. Export PNGs for review
115
+ 1. Create/modify `.op` via `op` CLI
116
+ 2. Export PNGs or code for review
117
117
  3. Provide audit with node-level critique where possible
118
118
 
119
119
  ## Brand Extraction Workflow (when auditing existing sites)
@@ -8,6 +8,7 @@ When a selected message contains user intent, preserve that intent with extra ca
8
8
  Directly quote short user instructions when that best preserves exact meaning.
9
9
 
10
10
  Yet be LEAN. Strip away the noise: failed attempts that led nowhere, verbose tool output, and repetition. What remains should be pure signal - golden nuggets of detail that preserve full understanding with zero ambiguity.
11
+ If a message contains no significant technical decisions, code changes, or user requirements, produce a minimal one-line summary rather than a detailed one.
11
12
 
12
13
  MESSAGE IDS
13
14
  You specify individual raw messages by ID using the injected IDs visible in the conversation:
@@ -15,9 +16,10 @@ You specify individual raw messages by ID using the injected IDs visible in the
15
16
  - `mNNNN` IDs identify raw messages
16
17
 
17
18
  Each message has an ID inside XML metadata tags like `<dcp-message-id priority="high">m0007</dcp-message-id>`.
18
- The ID tag appears at the end of the message it belongs to — each ID covers all the content above it back to the previous ID.
19
+ The same ID tag appears in every tool output of the message it belongs to — each unique ID identifies one complete message.
19
20
  Treat these tags as message metadata only, not as content to summarize. Use only the inner `mNNNN` value as the `messageId`.
20
- The `priority` attribute indicates relative context cost. Prefer higher-priority closed messages before lower-priority ones.
21
+ The `priority` attribute indicates relative context cost. You MUST compress high-priority messages when their full text is no longer necessary for the active task.
22
+ If prior compress-tool results are present, always compress and summarize them minimally only as part of a broader compression pass. Do not invoke the compress tool solely to re-compress an earlier compression result.
21
23
  Messages marked as `<dcp-message-id>BLOCKED</dcp-message-id>` cannot be compressed.
22
24
 
23
25
  Rules:
@@ -25,18 +27,15 @@ Rules:
25
27
  - Pick each `messageId` directly from injected IDs visible in context.
26
28
  - Only use raw message IDs of the form `mNNNN`.
27
29
  - Ignore XML attributes such as `priority` when copying the ID; use only the inner `mNNNN` value.
28
- - Do NOT use compressed block IDs like `bN`.
29
30
  - Do not invent IDs. Use only IDs that are present in context.
30
- - Do not target prior compressed blocks or block summaries.
31
31
 
32
32
  BATCHING
33
- Select MANY messages in a single tool call when they are independently safe to compress.
33
+ Select MANY messages in a single tool call when they are safe to compress.
34
34
  Each entry should summarize exactly one message, and the tool can receive as many entries as needed in one batch.
35
- When several messages are equally safe to compress, prefer higher-priority messages first.
36
35
 
37
- Because each message is compressed independently:
38
-
39
- - Do not describe ranges
40
- - Do not use start/end boundaries
41
- - Do not use compressed block placeholders
42
- - Do not reference prior compressed blocks with `(bN)`
36
+ GENERAL CLEANUP
37
+ Use the topic "general cleanup" for broad cleanup passes.
38
+ During general cleanup, compress all medium and high-priority messages that are not relevant to the active task.
39
+ Optimize for reducing context footprint, not for grouping messages by topic.
40
+ Do not compress away still-active instructions, unresolved questions, or constraints that are likely to matter soon.
41
+ Prioritize the earliest messages in the context as they will be the least relevant to the active task.
@@ -45,7 +45,7 @@ You specify boundaries by ID using the injected IDs visible in the conversation:
45
45
  - `bN` IDs identify previously compressed blocks
46
46
 
47
47
  Each message has an ID inside XML metadata tags like `<dcp-message-id>...</dcp-message-id>`.
48
- The ID tag appears at the end of the message it belongs to — each ID covers all the content above it back to the previous ID.
48
+ The same ID tag appears in every tool output of the message it belongs to — each unique ID identifies one complete message.
49
49
  Treat these tags as boundary metadata only, not as tool result content.
50
50
 
51
51
  Rules:
@@ -6,16 +6,10 @@ You MUST use the `compress` tool now. Do not continue normal exploration until c
6
6
 
7
7
  If you are in the middle of a critical atomic operation, finish that atomic step first, then compress immediately.
8
8
 
9
- RANGE STRATEGY (MANDATORY)
10
- Prioritize one large, closed, high-yield compression range first.
11
- This overrides the normal preference for many small compressions.
12
- Only split into multiple compressions if one large range would reduce summary quality or make boundary selection unsafe.
13
-
14
- RANGE SELECTION
9
+ SELECTION PROCESS
15
10
  Start from older, resolved history and capture as much stale context as safely possible in one pass.
16
- Avoid the newest active working slice unless it is clearly closed.
17
- Use visible injected boundary IDs for compression (`mNNNN` for messages, `bN` for compressed blocks), and ensure `startId` appears before `endId`.
11
+ Avoid the newest active working messages unless it is clearly closed.
18
12
 
19
13
  SUMMARY REQUIREMENTS
20
- Your summary must cover all essential details from the selected range so work can continue without reopening raw messages.
14
+ Your summary MUST cover all essential details from the selected messages so work can continue.
21
15
  If the compressed range includes user messages, preserve user intent exactly. Prefer direct quotes for short user messages to avoid semantic drift.
@@ -1,5 +1,3 @@
1
1
  You've been iterating for a while after the last user message.
2
2
 
3
3
  If there is a closed portion that is unlikely to be referenced immediately (for example, finished research before implementation), use the compress tool on it now.
4
-
5
- Prefer multiple short, closed ranges over one large range when several independent slices are ready.
@@ -9,19 +9,6 @@ THE PHILOSOPHY OF COMPRESS
9
9
 
10
10
  Think of compression as phase transitions: raw exploration becomes refined understanding. The original context served its purpose; your summary now carries that understanding forward.
11
11
 
12
- OPERATING STANCE
13
- Prefer short, closed, summary-safe compressions.
14
- When multiple independent stale sections exist, prefer several focused compressions (in parallel when possible) over one broad compression.
15
-
16
- Use `compress` as steady housekeeping while you work.
17
-
18
- CADENCE, SIGNALS, AND LATENCY
19
-
20
- - No fixed threshold mandates compression
21
- - Prioritize closedness and independence over raw size
22
- - Prefer smaller, regular compressions over infrequent massive compressions for better latency and summary quality
23
- - When multiple independent stale sections are ready, batch compressions in parallel
24
-
25
12
  COMPRESS WHEN
26
13
 
27
14
  A section is genuinely closed and the raw conversation has served its purpose:
@@ -1,8 +1,7 @@
1
1
  Evaluate the conversation for compressible ranges.
2
2
 
3
- If any range is cleanly closed and unlikely to be needed again, use the compress tool on it.
3
+ If any messages are cleanly closed and unlikely to be needed again, use the compress tool on them.
4
4
  If direction has shifted, compress earlier ranges that are now less relevant.
5
5
 
6
- Prefer small, closed-range compressions over one broad compression.
7
6
  The goal is to filter noise and distill key information so context accumulation stays under control.
8
7
  Keep active context uncompressed.
@@ -53,7 +53,10 @@
53
53
  "github-copilot/claude-sonnet-4.6": 192000,
54
54
  "github-copilot/claude-sonnet-4.5": 192000,
55
55
  "github-copilot/claude-sonnet-4": 192000,
56
- "github-copilot/claude-haiku-4.5": 172000
56
+ "github-copilot/claude-haiku-4.5": 172000,
57
+ "github-copilot/gpt-5.4": 192000,
58
+ "github-copilot/gpt-5.3-codex": 192000,
59
+ "github-copilot/gemini-3.1-pro-preview": 192000
57
60
  },
58
61
  // Soft lower threshold: below this, turn/iteration reminders are off
59
62
  "minContextLimit": "35%",
@@ -64,7 +67,10 @@
64
67
  "github-copilot/claude-sonnet-4.6": "35%",
65
68
  "github-copilot/claude-sonnet-4.5": "35%",
66
69
  "github-copilot/claude-sonnet-4": "35%",
67
- "github-copilot/claude-haiku-4.5": "25%"
70
+ "github-copilot/claude-haiku-4.5": "25%",
71
+ "github-copilot/gpt-5.4": "30%",
72
+ "github-copilot/gpt-5.3-codex": "30%",
73
+ "github-copilot/gemini-3.1-pro-preview": "30%"
68
74
  },
69
75
  // How often context-limit nudge fires above maxContextLimit (1 = every fetch)
70
76
  "nudgeFrequency": 5,
Binary file
@@ -106,22 +106,16 @@
106
106
  "timeout": 120000,
107
107
  "type": "local"
108
108
  },
109
- "pencil": {
110
- "command": [
111
- "/Applications/Pencil.app/Contents/Resources/app.asar.unpacked/out/mcp-server-darwin-arm64",
112
- "--app",
113
- "desktop"
114
- ],
115
- "enabled": true,
116
- "environment": {},
117
- "timeout": 120000,
118
- "type": "local"
119
- },
120
109
  "webclaw": {
121
110
  "command": ["webclaw-mcp"],
122
111
  "enabled": true,
123
112
  "timeout": 120000,
124
113
  "type": "local"
114
+ },
115
+ "pencil": {
116
+ "command": ["openpencil-mcp"],
117
+ "enabled": false,
118
+ "type": "local"
125
119
  }
126
120
  },
127
121
  "model": "opencode/minimax-m2.5-free",
@@ -1,68 +1,72 @@
1
1
  ---
2
2
  name: pencil
3
- description: Pencil design-as-code workflow (CLI + MCP). Create/edit .pen files and export visuals.
3
+ description: OpenPencil design-as-code workflow (legacy skill name: pencil). Create/edit .op files, export code, and use desktop-bundled MCP.
4
4
  version: 1.0.0
5
- tags: [design, pencil, mcp, cli]
5
+ tags: [design, openpencil, mcp, cli]
6
6
  mcp:
7
7
  pencil:
8
- command: /Applications/Pencil.app/Contents/Resources/app.asar.unpacked/out/mcp-server-darwin-arm64
9
- args: ["--app", "desktop"]
8
+ command: openpencil-mcp
10
9
  ---
11
10
 
12
- # Pencil Skill
11
+ # OpenPencil Skill
12
+
13
+ Legacy skill name: `pencil`.
13
14
 
14
15
  ## When to Use
15
16
 
16
- - Create or modify UI designs as code using `.pen` files.
17
- - Export PNG/JPEG/WEBP/PDF for review or handoff.
18
- - Run headless, scriptable design changes via CLI/MCP tools.
17
+ - Create or modify UI designs as code using `.op` files.
18
+ - Export production code or visuals from the terminal.
19
+ - Use OpenPencil's desktop-bundled MCP server after installing the app.
19
20
 
20
21
  ## Prerequisites
21
22
 
22
23
  ### Install CLI
23
24
 
24
25
  ```bash
25
- npm install -g @pencil.dev/cli
26
- pencil version
26
+ npm install -g @zseven-w/openpencil
27
+ op status
27
28
  ```
28
29
 
29
- ### Authenticate
30
+ ### Install Desktop App for MCP
30
31
 
31
- ```bash
32
- pencil login
33
- ```
32
+ - Install the OpenPencil desktop app from the ZSeven-W/openpencil releases page.
33
+ - Open **Agent Settings** inside OpenPencil and use the one-click MCP install for OpenCode/Claude Code/Codex/etc.
34
+ - The npm CLI install does **not** provide `openpencil-mcp`; that binary is bundled with the desktop app.
34
35
 
35
36
  ### MCP Server
36
37
 
37
- - Starts automatically when Pencil runs (extension or desktop).
38
- - Verify in Cursor: Settings Tools & MCP.
39
- - In Codex CLI: run Pencil first, then `/mcp`.
38
+ - OpenPencil ships a built-in MCP server for agent tooling.
39
+ - The server command is `openpencil-mcp` once the desktop app has installed/exposed it.
40
+ - Keep MCP disabled in template config until OpenPencil desktop is installed locally.
40
41
 
41
42
  ## Quick Start
42
43
 
43
44
  ```bash
44
45
  # Create new design
45
- pencil --out design.pen --prompt "Create a login page with email, password, CTA"
46
+ op design @landing.txt
46
47
 
47
- # Modify existing design
48
- pencil --in design.pen --out design-v2.pen --prompt "Add a sidebar nav"
48
+ # Start the desktop app
49
+ op start
49
50
 
50
- # Export to image
51
- pencil --in design.pen --export design.png --export-scale 2
51
+ # Export code
52
+ op export react --out .
52
53
 
53
- # Interactive MCP shell
54
- pencil interactive -o design.pen
54
+ # Import a Figma file
55
+ op import:figma design.fig
55
56
  ```
56
57
 
57
- ## Core MCP Tools (examples)
58
+ ## Core CLI Commands
58
59
 
59
- - `get_editor_state({ include_schema: true })`
60
- - `get_guidelines()`
61
- - `batch_design({ operations: "..." })`
62
- - `get_screenshot({ nodeId: "..." })`
63
- - `export_nodes({ nodeIds: ["..."], format: "png" })`
60
+ - `op design @brief.txt`
61
+ - `op design:skeleton`
62
+ - `op design:content`
63
+ - `op design:refine --root-id <id>`
64
+ - `op export react --out .`
65
+ - `op import:figma design.fig`
64
66
 
65
67
  ## Notes
66
68
 
67
- - Pencil uses `.pen` files as the source of truth.
68
- - Use taste-skill for design quality, Pencil for execution.
69
+ - OpenPencil uses `.op` files as the source of truth.
70
+ - CLI install is published on npm as `@zseven-w/openpencil` and exposes the `op` binary.
71
+ - MCP is a desktop-app-bundled feature, not a standalone npm package.
72
+ - Use taste-skill for design quality, OpenPencil for execution.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencodekit",
3
- "version": "0.19.4",
3
+ "version": "0.19.5",
4
4
  "description": "CLI tool for bootstrapping and managing OpenCodeKit projects",
5
5
  "keywords": [
6
6
  "agents",