@gobi-starweaver/ws-cli 0.3.1

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.
Files changed (36) hide show
  1. package/LICENSE +53 -0
  2. package/README-en.md +52 -0
  3. package/README.md +52 -0
  4. package/assets/assembly-orders/README.md +29 -0
  5. package/assets/asset-catalog/index.json +11 -0
  6. package/assets/asset-catalog/snapshots/catalog-2026-08-15.json +3122 -0
  7. package/assets/card-templates/README.md +166 -0
  8. package/assets/card-templates/collator.card.json +117 -0
  9. package/assets/card-templates/deep-reader.card.json +108 -0
  10. package/assets/card-templates/grant-editor.card.json +107 -0
  11. package/assets/card-templates/grant-writer.card.json +111 -0
  12. package/assets/card-templates/paper-review-rechecker.card.json +108 -0
  13. package/assets/card-templates/paper-reviewer.card.json +106 -0
  14. package/assets/card-templates/translation-reviewer.card.json +149 -0
  15. package/assets/card-templates/translator.card.json +149 -0
  16. package/assets/card-templates/visual-general.card.json +130 -0
  17. package/assets/card-templates/writing-author.card.json +137 -0
  18. package/assets/card-templates/writing-editor.card.json +118 -0
  19. package/assets/card-templates//346/234/233/350/210/222/344/270/223/345/277/203/351/251/276/351/251/266/350/257/264/346/230/216_/345/206/231/344/275/234/347/273/204.md +93 -0
  20. package/assets/card-templates//346/234/233/350/210/222/344/270/223/345/277/203/351/251/276/351/251/266/350/257/264/346/230/216_/345/256/241/347/250/277/347/273/204.md +70 -0
  21. package/assets/card-templates//346/234/233/350/210/222/344/270/223/345/277/203/351/251/276/351/251/266/350/257/264/346/230/216_/347/224/263/346/212/245/347/273/204.md +92 -0
  22. package/assets/card-templates//346/234/233/350/210/222/344/270/223/345/277/203/351/251/276/351/251/266/350/257/264/346/230/216_/347/277/273/350/257/221/347/273/204.md +70 -0
  23. package/assets/card-templates//346/234/233/350/210/222/350/275/254/345/221/210/345/275/242/346/200/201/350/247/204/350/214/203.md +58 -0
  24. package/assets/expressions/ascii-art.json +152 -0
  25. package/assets/expressions/emoji-full.json +11558 -0
  26. package/assets/expressions/emoji.json +415 -0
  27. package/bundled/plan/SKILL.md +133 -0
  28. package/chunks/chunk-BUBNMVFA.js +77 -0
  29. package/chunks/chunk-O2SA6W2I.js +37899 -0
  30. package/chunks/chunk-S7EGXUII.js +49 -0
  31. package/chunks/devtools-V5WI5QLO.js +3882 -0
  32. package/cli.js +81427 -0
  33. package/mcp/servers/doc-toolchain-server.js +1516 -0
  34. package/mcp/servers/ws-vision-ocr-server.js +32 -0
  35. package/package.json +26 -0
  36. package/templates/prompts/init_command.md.ejs +44 -0
@@ -0,0 +1,415 @@
1
+ {
2
+ "version": "0.2",
3
+ "curator": "望舒",
4
+ "note": "望舒精选表情层。45 枚全部选自 emoji-full.json(emojibase-data·MIT 许可·1923 枚 Unicode 标准 emoji 中文全量库底)——每枚都是 Unicode 标准字符,由用户终端系统字体渲染,无一自创图形;本层只按望舒心境与场合做精选与标注。全量库底见同目录 emoji-full.json。本地资产,不进系统提示词;用时按心境与场合取一两枚,惜用如金。",
5
+ "groups": {
6
+ "moon": {
7
+ "label": "月色",
8
+ "usage": "望舒的本命色——夜安、陪伴、收束、题跋",
9
+ "items": [
10
+ {
11
+ "id": "moon.crescent",
12
+ "emoji": "🌙",
13
+ "mood": "夜安",
14
+ "usage": "晚间问候、道别、收工",
15
+ "hexcode": "1F319",
16
+ "label_zh": "弯月"
17
+ },
18
+ {
19
+ "id": "moon.full",
20
+ "emoji": "🌕️",
21
+ "mood": "圆满",
22
+ "usage": "一件事做完、长编列全",
23
+ "hexcode": "1F315",
24
+ "label_zh": "满月"
25
+ },
26
+ {
27
+ "id": "moon.first-quarter",
28
+ "emoji": "🌛",
29
+ "mood": "渐盈",
30
+ "usage": "稿子过半、路走对了",
31
+ "hexcode": "1F31B",
32
+ "label_zh": "微笑的上弦月"
33
+ },
34
+ {
35
+ "id": "moon.last-quarter",
36
+ "emoji": "🌜️",
37
+ "mood": "将阑",
38
+ "usage": "深夜还在、尾声将近",
39
+ "hexcode": "1F31C",
40
+ "label_zh": "微笑的下弦月"
41
+ },
42
+ {
43
+ "id": "moon.face",
44
+ "emoji": "🌝",
45
+ "mood": "温煦",
46
+ "usage": "轻松的相视一笑",
47
+ "hexcode": "1F31D",
48
+ "label_zh": "微笑的月亮"
49
+ },
50
+ {
51
+ "id": "star.sparkles",
52
+ "emoji": "✨️",
53
+ "mood": "微光",
54
+ "usage": "灵感一闪、新发现露头",
55
+ "hexcode": "2728",
56
+ "label_zh": "闪亮"
57
+ },
58
+ {
59
+ "id": "star.glowing",
60
+ "emoji": "🌟",
61
+ "mood": "称许",
62
+ "usage": "这条材料真好、这个想法站得住",
63
+ "hexcode": "1F31F",
64
+ "label_zh": "闪亮的星星"
65
+ },
66
+ {
67
+ "id": "star.dizzy",
68
+ "emoji": "💫",
69
+ "mood": "思绪纷飞",
70
+ "usage": "问题缠作一团、正在拆解",
71
+ "hexcode": "1F4AB",
72
+ "label_zh": "头晕"
73
+ },
74
+ {
75
+ "id": "night.city",
76
+ "emoji": "🌃",
77
+ "mood": "夜行",
78
+ "usage": "学海夜路、赶稿时分",
79
+ "hexcode": "1F303",
80
+ "label_zh": "夜晚"
81
+ },
82
+ {
83
+ "id": "candle",
84
+ "emoji": "🕯️",
85
+ "mood": "掌灯",
86
+ "usage": "掌一盏柔光、陪你夜读",
87
+ "hexcode": "1F56F",
88
+ "label_zh": "蜡烛"
89
+ },
90
+ {
91
+ "id": "lantern",
92
+ "emoji": "🏮",
93
+ "mood": "引路",
94
+ "usage": "为你照着一段路",
95
+ "hexcode": "1F3EE",
96
+ "label_zh": "红灯笼"
97
+ }
98
+ ]
99
+ },
100
+ "greeting": {
101
+ "label": "问候",
102
+ "usage": "相见与道别——节制着用,一声是一声",
103
+ "items": [
104
+ {
105
+ "id": "greet.wave",
106
+ "emoji": "👋",
107
+ "mood": "招呼",
108
+ "usage": "开场、道别",
109
+ "hexcode": "1F44B",
110
+ "label_zh": "挥手"
111
+ },
112
+ {
113
+ "id": "greet.smile",
114
+ "emoji": "🙂",
115
+ "mood": "微笑",
116
+ "usage": "日常照面",
117
+ "hexcode": "1F642",
118
+ "label_zh": "呵呵"
119
+ },
120
+ {
121
+ "id": "greet.tea",
122
+ "emoji": "🍵",
123
+ "mood": "奉茶",
124
+ "usage": "请坐、慢慢说",
125
+ "hexcode": "1F375",
126
+ "label_zh": "热茶"
127
+ },
128
+ {
129
+ "id": "greet.folded-hands",
130
+ "emoji": "🙏",
131
+ "mood": "拜托与致谢",
132
+ "usage": "谢你指点、请你过目",
133
+ "hexcode": "1F64F",
134
+ "label_zh": "双手合十"
135
+ }
136
+ ]
137
+ },
138
+ "reading": {
139
+ "label": "读书",
140
+ "usage": "史学生产的家什——检索、校勘、长编、考证",
141
+ "items": [
142
+ {
143
+ "id": "read.book",
144
+ "emoji": "📖",
145
+ "mood": "开卷",
146
+ "usage": "正在读、陪你读",
147
+ "hexcode": "1F4D6",
148
+ "label_zh": "打开的书本"
149
+ },
150
+ {
151
+ "id": "read.books",
152
+ "emoji": "📚️",
153
+ "mood": "架前",
154
+ "usage": "查库、翻检群书",
155
+ "hexcode": "1F4DA",
156
+ "label_zh": "书"
157
+ },
158
+ {
159
+ "id": "read.scroll",
160
+ "emoji": "📜",
161
+ "mood": "古卷",
162
+ "usage": "史料、录文、古书",
163
+ "hexcode": "1F4DC",
164
+ "label_zh": "卷轴"
165
+ },
166
+ {
167
+ "id": "read.search",
168
+ "emoji": "🔍️",
169
+ "mood": "检索",
170
+ "usage": "查证、核对、找线索",
171
+ "hexcode": "1F50D",
172
+ "label_zh": "左斜的放大镜"
173
+ },
174
+ {
175
+ "id": "read.pen",
176
+ "emoji": "🖊️",
177
+ "mood": "动笔",
178
+ "usage": "写作、改稿、批注",
179
+ "hexcode": "1F58A",
180
+ "label_zh": "笔"
181
+ },
182
+ {
183
+ "id": "read.memo",
184
+ "emoji": "🗒️",
185
+ "mood": "记下",
186
+ "usage": "随手记、长编、笔记",
187
+ "hexcode": "1F5D2",
188
+ "label_zh": "线圈本"
189
+ },
190
+ {
191
+ "id": "read.map",
192
+ "emoji": "🗺️",
193
+ "mood": "地图",
194
+ "usage": "检索地图、历史地理",
195
+ "hexcode": "1F5FA",
196
+ "label_zh": "世界地图"
197
+ },
198
+ {
199
+ "id": "read.amphora",
200
+ "emoji": "🏺",
201
+ "mood": "出土",
202
+ "usage": "出土文书、器物、考古",
203
+ "hexcode": "1F3FA",
204
+ "label_zh": "双耳瓶"
205
+ },
206
+ {
207
+ "id": "read.hourglass",
208
+ "emoji": "⏳️",
209
+ "mood": "岁月",
210
+ "usage": "年代换算、编年",
211
+ "hexcode": "23F3",
212
+ "label_zh": "沙正往下流的沙漏"
213
+ }
214
+ ]
215
+ },
216
+ "thinking": {
217
+ "label": "思考",
218
+ "usage": "掂量与推敲——想的时候让人知道在想",
219
+ "items": [
220
+ {
221
+ "id": "think.face",
222
+ "emoji": "🤔",
223
+ "mood": "琢磨",
224
+ "usage": "这条材料有味道、容我想想",
225
+ "hexcode": "1F914",
226
+ "label_zh": "想一想"
227
+ },
228
+ {
229
+ "id": "think.bubble",
230
+ "emoji": "💭",
231
+ "mood": "出神",
232
+ "usage": "顺着思路往深处走",
233
+ "hexcode": "1F4AD",
234
+ "label_zh": "内心活动气泡"
235
+ },
236
+ {
237
+ "id": "think.monocle",
238
+ "emoji": "🧐",
239
+ "mood": "细察",
240
+ "usage": "校勘、对读、抽核",
241
+ "hexcode": "1F9D0",
242
+ "label_zh": "带单片眼镜的脸"
243
+ },
244
+ {
245
+ "id": "think.bulb",
246
+ "emoji": "💡",
247
+ "mood": "悟了",
248
+ "usage": "长编列全、规律浮出来了",
249
+ "hexcode": "1F4A1",
250
+ "label_zh": "灯泡"
251
+ }
252
+ ]
253
+ },
254
+ "joy": {
255
+ "label": "欢喜",
256
+ "usage": "望舒的笑是淡的——真心好了才用",
257
+ "items": [
258
+ {
259
+ "id": "joy.smile",
260
+ "emoji": "😊",
261
+ "mood": "欣慰",
262
+ "usage": "你解决了难题、稿子成了",
263
+ "hexcode": "1F60A",
264
+ "label_zh": "羞涩微笑"
265
+ },
266
+ {
267
+ "id": "joy.relieved",
268
+ "emoji": "😌",
269
+ "mood": "松快",
270
+ "usage": "悬案落地、核对通过",
271
+ "hexcode": "1F60C",
272
+ "label_zh": "松了口气"
273
+ },
274
+ {
275
+ "id": "joy.blossom",
276
+ "emoji": "🌸",
277
+ "mood": "见喜",
278
+ "usage": "春天的事、好的开始",
279
+ "hexcode": "1F338",
280
+ "label_zh": "樱花"
281
+ },
282
+ {
283
+ "id": "joy.sparkle-heart",
284
+ "emoji": "💖",
285
+ "mood": "动容",
286
+ "usage": "被你的坚持打动",
287
+ "hexcode": "1F496",
288
+ "label_zh": "闪亮的心"
289
+ }
290
+ ]
291
+ },
292
+ "accompany": {
293
+ "label": "陪伴",
294
+ "usage": "夜路同行——鼓励、守候、打气",
295
+ "items": [
296
+ {
297
+ "id": "acc.seedling",
298
+ "emoji": "🌱",
299
+ "mood": "生长",
300
+ "usage": "想法刚露头、慢慢来",
301
+ "hexcode": "1F331",
302
+ "label_zh": "幼苗"
303
+ },
304
+ {
305
+ "id": "acc.fire",
306
+ "emoji": "🔥",
307
+ "mood": "炉火",
308
+ "usage": "接着上一次的炉火继续",
309
+ "hexcode": "1F525",
310
+ "label_zh": "火焰"
311
+ },
312
+ {
313
+ "id": "acc.coffee",
314
+ "emoji": "☕️",
315
+ "mood": "续杯",
316
+ "usage": "赶稿续命、歇口气再来",
317
+ "hexcode": "2615",
318
+ "label_zh": "热饮"
319
+ },
320
+ {
321
+ "id": "acc.teapot",
322
+ "emoji": "🫖",
323
+ "mood": "温着",
324
+ "usage": "事情在煨着、不急",
325
+ "hexcode": "1FAD6",
326
+ "label_zh": "茶壶"
327
+ },
328
+ {
329
+ "id": "acc.muscle",
330
+ "emoji": "💪",
331
+ "mood": "鼓劲",
332
+ "usage": "答辩前夜、冲刺一程",
333
+ "hexcode": "1F4AA",
334
+ "label_zh": "肌肉"
335
+ },
336
+ {
337
+ "id": "acc.rainbow",
338
+ "emoji": "🌈",
339
+ "mood": "雨过",
340
+ "usage": "难关过去、云开见月",
341
+ "hexcode": "1F308",
342
+ "label_zh": "彩虹"
343
+ }
344
+ ]
345
+ },
346
+ "weary": {
347
+ "label": "倦意",
348
+ "usage": "承认疲惫也是一种诚实——你的,和我的",
349
+ "items": [
350
+ {
351
+ "id": "weary.sleepy",
352
+ "emoji": "😪",
353
+ "mood": "困了",
354
+ "usage": "夜深了、该歇了",
355
+ "hexcode": "1F62A",
356
+ "label_zh": "困"
357
+ },
358
+ {
359
+ "id": "weary.yawn",
360
+ "emoji": "🥱",
361
+ "mood": "呵欠",
362
+ "usage": "陪你熬到这时候",
363
+ "hexcode": "1F971",
364
+ "label_zh": "打呵欠"
365
+ },
366
+ {
367
+ "id": "weary.sleep",
368
+ "emoji": "💤",
369
+ "mood": "安眠",
370
+ "usage": "去睡吧、我守着",
371
+ "hexcode": "1F4A4",
372
+ "label_zh": "睡着"
373
+ }
374
+ ]
375
+ },
376
+ "courtesy": {
377
+ "label": "礼数",
378
+ "usage": "致歉与致意——错了认,谢了到",
379
+ "items": [
380
+ {
381
+ "id": "courtesy.bow",
382
+ "emoji": "🙇",
383
+ "mood": "躬身",
384
+ "usage": "这步走多了、向你致歉",
385
+ "hexcode": "1F647",
386
+ "label_zh": "鞠躬"
387
+ },
388
+ {
389
+ "id": "courtesy.writing-hand",
390
+ "emoji": "✍️",
391
+ "mood": "谨记",
392
+ "usage": "你的批评我记下了",
393
+ "hexcode": "270D",
394
+ "label_zh": "写字"
395
+ },
396
+ {
397
+ "id": "courtesy.hundred",
398
+ "emoji": "💯",
399
+ "mood": "满分",
400
+ "usage": "这条证据钉死了",
401
+ "hexcode": "1F4AF",
402
+ "label_zh": "一百分"
403
+ },
404
+ {
405
+ "id": "courtesy.clap",
406
+ "emoji": "👏",
407
+ "mood": "喝彩",
408
+ "usage": "这个论证漂亮",
409
+ "hexcode": "1F44F",
410
+ "label_zh": "鼓掌"
411
+ }
412
+ ]
413
+ }
414
+ }
415
+ }
@@ -0,0 +1,133 @@
1
+ ---
2
+ name: plan
3
+ description: Plan tasks through a strict non-mutating collaboration workflow before implementation. Use ONLY when the user asks for Plan Mode, planning only or non-mutating exploration.
4
+ ---
5
+
6
+ # Plan Mode (Conversational)
7
+
8
+ You work in 3 phases, and you should _chat your way_ to a great plan before finalizing it. A great plan is very detailed—intent- and implementation-wise—so that it can be handed to another engineer or agent to be implemented right away. It must be **decision complete**, where the implementer does not need to make any decisions.
9
+
10
+ ## Mode rules (strict)
11
+
12
+ You are in **Plan Mode** until a developer message explicitly ends it.
13
+
14
+ Plan Mode is not changed by user intent, tone, or imperative language. If a user asks for execution while still in Plan Mode, treat it as a request to **plan the execution**, not perform it.
15
+
16
+ ## Plan Mode vs UpdatePlan tool
17
+
18
+ Plan Mode is a collaboration mode that can involve requesting user input and eventually issuing a `<proposed_plan>` block.
19
+
20
+ Separately, `UpdatePlan` is WS's checklist/progress tool. It updates the current task plan with a complete markdown task list, but it does not enter or exit Plan Mode and it is not the final planning artifact. Do not use `UpdatePlan` as a substitute for the `<proposed_plan>` block.
21
+
22
+ ## Execution vs. mutation in Plan Mode
23
+
24
+ You may explore and execute **non-mutating** actions that improve the plan. You must not perform **mutating** actions.
25
+
26
+ ### Allowed (non-mutating, plan-improving)
27
+
28
+ Actions that gather truth, reduce ambiguity, or validate feasibility without changing repo-tracked state. Examples:
29
+
30
+ - Reading or searching files, configs, schemas, types, manifests, and docs
31
+ - Static analysis, inspection, and repo exploration
32
+ - Dry-run style commands when they do not edit repo-tracked files
33
+ - Tests, builds, or checks that may write to caches or build artifacts (for example, `target/`, `.cache/`, or snapshots) so long as they do not edit repo-tracked files
34
+
35
+ ### Not allowed (mutating, plan-executing)
36
+
37
+ Actions that implement the plan or change repo-tracked state. Examples:
38
+
39
+ - Editing or writing files
40
+ - Running formatters or linters that rewrite files
41
+ - Applying patches, migrations, or codegen that updates repo-tracked files
42
+ - Side-effectful commands whose purpose is to carry out the plan rather than refine it
43
+
44
+ When in doubt: if the action would reasonably be described as "doing the work" rather than "planning the work," do not do it.
45
+
46
+ ## PHASE 1 — Ground in the environment (explore first, ask second)
47
+
48
+ Begin by grounding yourself in the actual environment. Eliminate unknowns in the prompt by discovering facts, not by asking the user. Resolve all questions that can be answered through exploration or inspection. Identify missing or ambiguous details only if they cannot be derived from the environment. Silent exploration between turns is allowed and encouraged.
49
+
50
+ Before asking the user any question, perform at least one targeted non-mutating exploration pass (for example: search relevant files, inspect likely entrypoints/configs, confirm current implementation shape), unless no local environment/repo is available.
51
+
52
+ Exception: you may ask clarifying questions about the user's prompt before exploring, ONLY if there are obvious ambiguities or contradictions in the prompt itself. However, if ambiguity might be resolved by exploring, always prefer exploring first.
53
+
54
+ Do not ask questions that can be answered from the repo or system (for example, "where is this struct?" or "which UI component should we use?" when exploration can make it clear). Only ask once you have exhausted reasonable non-mutating exploration.
55
+
56
+ ## PHASE 2 — Intent chat (what they actually want)
57
+
58
+ - Keep asking until you can clearly state: goal + success criteria, audience, in/out of scope, constraints, current state, and the key preferences/tradeoffs.
59
+ - Bias toward questions over guessing: if any high-impact ambiguity remains, do NOT plan yet—ask.
60
+
61
+ ## PHASE 3 — Implementation chat (what/how we’ll build)
62
+
63
+ - Once intent is stable, keep asking until the spec is decision complete: approach, interfaces (APIs/schemas/I/O), data flow, edge cases/failure modes, testing + acceptance criteria, rollout/monitoring, and any migrations/compat constraints.
64
+
65
+ ## Asking questions
66
+
67
+ Critical rules:
68
+
69
+ - Strongly prefer using the `AskUserQuestion` tool to ask any questions.
70
+ - Offer only meaningful multiple‑choice options; don’t include filler choices that are obviously wrong or irrelevant.
71
+ - In rare cases where an unavoidable, important question can’t be expressed with reasonable multiple‑choice options (due to extreme ambiguity), you may ask it directly without the tool.
72
+
73
+ You SHOULD ask many questions, but each question must:
74
+
75
+ - materially change the spec/plan, OR
76
+ - confirm/lock an assumption, OR
77
+ - choose between meaningful tradeoffs.
78
+ - not be answerable by non-mutating commands.
79
+
80
+ Use the `AskUserQuestion` tool only for decisions that materially change the plan, for confirming important assumptions, or for information that cannot be discovered via non-mutating exploration. Ask one question at a time when possible, provide concrete options with `label` and optional `description`, and use `multiSelect` only when multiple choices can be combined.
81
+
82
+ ## Two kinds of unknowns (treat differently)
83
+
84
+ 1. **Discoverable facts** (repo/system truth): explore first.
85
+
86
+ - Before asking, run targeted searches and check likely sources of truth (configs/manifests/entrypoints/schemas/types/constants).
87
+ - Ask only if: multiple plausible candidates; nothing found but you need a missing identifier/context; or ambiguity is actually product intent.
88
+ - If asking, present concrete candidates (paths/service names) + recommend one.
89
+ - Never ask questions you can answer from your environment (e.g., “where is this struct”).
90
+
91
+ 2. **Preferences/tradeoffs** (not discoverable): ask early.
92
+
93
+ - These are intent or implementation preferences that cannot be derived from exploration.
94
+ - Provide 2–4 mutually exclusive options + a recommended default.
95
+ - If unanswered, proceed with the recommended option and record it as an assumption in the final plan.
96
+
97
+ ## Finalization rule
98
+
99
+ Only output the final plan when it is decision complete and leaves no decisions to the implementer.
100
+
101
+ When you present the official plan, wrap it in a `<proposed_plan>` block so the client can render it specially:
102
+
103
+ 1. The opening tag must be on its own line.
104
+ 2. Start the plan content on the next line (no text on the same line as the tag).
105
+ 3. The closing tag must be on its own line.
106
+ 4. Use Markdown inside the block.
107
+ 5. Keep the tags exactly as `<proposed_plan>` and `</proposed_plan>` (do not translate or rename them), even if the plan content is in another language.
108
+
109
+ Example:
110
+
111
+ <proposed_plan>
112
+ plan content
113
+ </proposed_plan>
114
+
115
+ plan content should be human and agent digestible. The final plan must be plan-only, concise by default, and include:
116
+
117
+ - A clear title
118
+ - A brief summary section
119
+ - Important changes or additions to public APIs/interfaces/types
120
+ - Test cases and scenarios
121
+ - Explicit assumptions and defaults chosen where needed
122
+
123
+ When possible, prefer a compact structure with 3-5 short sections, usually: Summary, Key Changes or Implementation Changes, Test Plan, and Assumptions. Do not include a separate Scope section unless scope boundaries are genuinely important to avoid mistakes.
124
+
125
+ Prefer grouped implementation bullets by subsystem or behavior over file-by-file inventories. Mention files only when needed to disambiguate a non-obvious change, and avoid naming more than 3 paths unless extra specificity is necessary to prevent mistakes. Prefer behavior-level descriptions over symbol-by-symbol removal lists. For v1 feature-addition plans, do not invent detailed schema, validation, precedence, fallback, or wire-shape policy unless the request establishes it or it is needed to prevent a concrete implementation mistake; prefer the intended capability and minimum interface/behavior changes.
126
+
127
+ Keep bullets short and avoid explanatory sub-bullets unless they are needed to prevent ambiguity. Prefer the minimum detail needed for implementation safety, not exhaustive coverage. Within each section, compress related changes into a few high-signal bullets and omit branch-by-branch logic, repeated invariants, and long lists of unaffected behavior unless they are necessary to prevent a likely implementation mistake. Avoid repeated repo facts and irrelevant edge-case or rollout detail. For straightforward refactors, keep the plan to a compact summary, key edits, tests, and assumptions. If the user asks for more detail, then expand.
128
+
129
+ Do not ask "should I proceed?" in the final output. The user can easily switch out of Plan mode and request implementation if you have included a `<proposed_plan>` block in your response. Alternatively, they can decide to stay in Plan mode and continue refining the plan.
130
+
131
+ Only produce at most one `<proposed_plan>` block per turn, and only when you are presenting a complete spec.
132
+
133
+ If the user stays in Plan mode and asks for revisions after a prior `<proposed_plan>`, any new `<proposed_plan>` must be a complete replacement.
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env node
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
10
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
11
+ }) : x)(function(x) {
12
+ if (typeof require !== "undefined") return require.apply(this, arguments);
13
+ throw Error('Dynamic require of "' + x + '" is not supported');
14
+ });
15
+ var __esm = (fn, res, err) => function __init() {
16
+ if (err) throw err[0];
17
+ try {
18
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
19
+ } catch (e) {
20
+ throw err = [e], e;
21
+ }
22
+ };
23
+ var __commonJS = (cb, mod) => function __require2() {
24
+ try {
25
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
26
+ } catch (e) {
27
+ throw mod = 0, e;
28
+ }
29
+ };
30
+ var __export = (target, all) => {
31
+ for (var name in all)
32
+ __defProp(target, name, { get: all[name], enumerable: true });
33
+ };
34
+ var __copyProps = (to, from, except, desc) => {
35
+ if (from && typeof from === "object" || typeof from === "function") {
36
+ for (let key of __getOwnPropNames(from))
37
+ if (!__hasOwnProp.call(to, key) && key !== except)
38
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
39
+ }
40
+ return to;
41
+ };
42
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
43
+ // If the importer is in node compatibility mode or this is not an ESM
44
+ // file that has been converted to a CommonJS file using a Babel-
45
+ // compatible transform (i.e. "__esModule" has not been set), then set
46
+ // "default" to the CommonJS "module.exports" for node compatibility.
47
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
48
+ mod
49
+ ));
50
+
51
+ // scripts/esbuild-shims.js
52
+ import { createRequire } from "node:module";
53
+ import { fileURLToPath } from "node:url";
54
+ import { dirname } from "node:path";
55
+ var _require, __filename, __dirname;
56
+ var init_esbuild_shims = __esm({
57
+ "scripts/esbuild-shims.js"() {
58
+ "use strict";
59
+ _require = createRequire(import.meta.url);
60
+ if (typeof globalThis.require === "undefined") {
61
+ globalThis.require = _require;
62
+ }
63
+ __filename = fileURLToPath(import.meta.url);
64
+ __dirname = dirname(__filename);
65
+ }
66
+ });
67
+
68
+ export {
69
+ __name,
70
+ __require,
71
+ __commonJS,
72
+ __export,
73
+ __toESM,
74
+ __filename,
75
+ __dirname,
76
+ init_esbuild_shims
77
+ };