@selesai/code 0.13.12 → 0.13.14

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 (203) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/extensions/pi-subagents/CHANGELOG.md +77 -1
  3. package/dist/extensions/pi-subagents/VISION.md +12 -1
  4. package/dist/extensions/pi-subagents/docs/agents.md +13 -6
  5. package/dist/extensions/pi-subagents/docs/configuration.md +35 -9
  6. package/dist/extensions/pi-subagents/docs/extension-api.md +1 -1
  7. package/dist/extensions/pi-subagents/docs/missions.md +1 -1
  8. package/dist/extensions/pi-subagents/docs/models.md +6 -6
  9. package/dist/extensions/pi-subagents/docs/observability.md +6 -3
  10. package/dist/extensions/pi-subagents/docs/tool-reference.md +3 -3
  11. package/dist/extensions/pi-subagents/docs/watchdog.md +92 -114
  12. package/dist/extensions/pi-subagents/docs/workflows.md +1 -1
  13. package/dist/extensions/pi-subagents/install.mjs +1 -2
  14. package/dist/extensions/pi-subagents/package.json +1 -1
  15. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +1 -1
  16. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +6 -6
  17. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +2 -2
  18. package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +1 -1
  19. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +4 -4
  20. package/dist/extensions/pi-subagents/skills/pi-subagents/references/review-and-validation.md +1 -1
  21. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +41 -4
  22. package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +3 -0
  23. package/dist/extensions/pi-subagents/src/agents/agents.ts +120 -124
  24. package/dist/extensions/pi-subagents/src/agents/runtime-agent-registry.ts +5 -1
  25. package/dist/extensions/pi-subagents/src/api/preflight.ts +4 -0
  26. package/dist/extensions/pi-subagents/src/api/shared-types.ts +3 -0
  27. package/dist/extensions/pi-subagents/src/extension/config.ts +20 -0
  28. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +1 -0
  29. package/dist/extensions/pi-subagents/src/extension/schemas.ts +6 -2
  30. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +1 -1
  31. package/dist/extensions/pi-subagents/src/inspectors/herdr/inspector-runner.ts +19 -13
  32. package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +26 -8
  33. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +103 -23
  34. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +6 -2
  35. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +18 -2
  36. package/dist/extensions/pi-subagents/src/runs/background/notify.ts +54 -3
  37. package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +16 -0
  38. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +22 -2
  39. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +63 -6
  40. package/dist/extensions/pi-subagents/src/runs/background/steering.ts +4 -1
  41. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +69 -12
  42. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +13 -0
  43. package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +3 -1
  44. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +21 -8
  45. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +59 -6
  46. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +95 -18
  47. package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +11 -43
  48. package/dist/extensions/pi-subagents/src/runs/shared/capability-ceiling.ts +1 -0
  49. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
  50. package/dist/extensions/pi-subagents/src/runs/shared/lane-metadata.ts +24 -3
  51. package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +4 -0
  52. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +2 -6
  53. package/dist/extensions/pi-subagents/src/runs/shared/permissions.ts +1 -0
  54. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +33 -18
  55. package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +73 -37
  56. package/dist/extensions/pi-subagents/src/runs/shared/structured-output.ts +33 -6
  57. package/dist/extensions/pi-subagents/src/runs/shared/subagent-control.ts +4 -2
  58. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +20 -3
  59. package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +21 -7
  60. package/dist/extensions/pi-subagents/src/runs/shared/tool-timeout.ts +1 -1
  61. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +467 -63
  62. package/dist/extensions/pi-subagents/src/shared/atomic-json.ts +3 -1
  63. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +0 -12
  64. package/dist/extensions/pi-subagents/src/shared/fork-session-cwd.ts +27 -0
  65. package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +3 -0
  66. package/dist/extensions/pi-subagents/src/shared/types.ts +42 -4
  67. package/dist/extensions/pi-subagents/src/shared/utils.ts +18 -7
  68. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +1 -1
  69. package/dist/extensions/pi-subagents/src/slash/subagents-admin.ts +26 -12
  70. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +61 -2
  71. package/dist/extensions/pi-subagents/src/tui/fleet.ts +12 -7
  72. package/dist/extensions/pi-subagents/src/tui/render.ts +227 -14
  73. package/dist/extensions/pi-subagents/src/watchdog/child-status.ts +56 -34
  74. package/dist/extensions/pi-subagents/src/watchdog/diff-tool.ts +77 -0
  75. package/dist/extensions/pi-subagents/src/watchdog/emission-guard.ts +5 -3
  76. package/dist/extensions/pi-subagents/src/watchdog/guidance.ts +20 -0
  77. package/dist/extensions/pi-subagents/src/watchdog/register-child.ts +16 -13
  78. package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +10 -9
  79. package/dist/extensions/pi-subagents/src/watchdog/render.ts +4 -5
  80. package/dist/extensions/pi-subagents/src/watchdog/review.ts +15 -4
  81. package/dist/extensions/pi-subagents/src/watchdog/rules.ts +70 -0
  82. package/dist/extensions/pi-subagents/src/watchdog/runtime.ts +75 -92
  83. package/dist/extensions/pi-subagents/src/watchdog/scope.ts +2 -1
  84. package/dist/extensions/pi-subagents/src/watchdog/settings.ts +48 -104
  85. package/dist/extensions/pi-subagents/src/watchdog/types.ts +18 -32
  86. package/dist/extensions/pi-subagents/src/watchdog/warning-format.ts +0 -1
  87. package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +3 -2
  88. package/dist/extensions/pi-subagents/src/workflows/workflow-checklist.ts +439 -0
  89. package/dist/extensions/pi-subagents/src/workflows/workflow-preflight.ts +28 -1
  90. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +335 -21
  91. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +4 -1
  92. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +1 -1
  93. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +22 -18
  94. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +0 -1
  95. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +21 -18
  96. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +307 -22
  97. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +1 -0
  98. package/dist/extensions/pi-subagents/test/support/helpers.ts +25 -0
  99. package/dist/extensions/pi-subagents/test/support/isolated-temp-root.mjs +15 -4
  100. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +17 -2
  101. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +96 -15
  102. package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +53 -5
  103. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +20 -0
  104. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +221 -8
  105. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +45 -24
  106. package/dist/extensions/pi-subagents/test/unit/agent-scan-dirs.test.ts +133 -0
  107. package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +28 -2
  108. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +1 -1
  109. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +2 -0
  110. package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +4 -1
  111. package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +18 -4
  112. package/dist/extensions/pi-subagents/test/unit/atomic-json.test.ts +16 -0
  113. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +38 -0
  114. package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +2 -2
  115. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +21 -0
  116. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +19 -6
  117. package/dist/extensions/pi-subagents/test/unit/get-final-output.test.ts +26 -0
  118. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +22 -1
  119. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +2 -6
  120. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +66 -1
  121. package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +1 -1
  122. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +116 -10
  123. package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +136 -18
  124. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +20 -0
  125. package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +22 -0
  126. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +1 -0
  127. package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +8 -0
  128. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +127 -48
  129. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +68 -0
  130. package/dist/extensions/pi-subagents/test/unit/runtime-agent-registration.test.ts +17 -0
  131. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +88 -0
  132. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +4 -2
  133. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +9 -9
  134. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +2 -2
  135. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +9 -3
  136. package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +22 -9
  137. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +91 -8
  138. package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +27 -0
  139. package/dist/extensions/pi-subagents/test/unit/temp-paths.test.ts +50 -0
  140. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +0 -1
  141. package/dist/extensions/pi-subagents/test/unit/tool-timeout.test.ts +2 -2
  142. package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +34 -0
  143. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +1 -2
  144. package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +73 -13
  145. package/dist/extensions/pi-subagents/test/unit/watchdog-diff-tool.test.ts +79 -0
  146. package/dist/extensions/pi-subagents/test/unit/watchdog-permission-arbiter.test.ts +2 -4
  147. package/dist/extensions/pi-subagents/test/unit/watchdog-render.test.ts +7 -8
  148. package/dist/extensions/pi-subagents/test/unit/watchdog-review.test.ts +48 -3
  149. package/dist/extensions/pi-subagents/test/unit/watchdog-rules.test.ts +37 -0
  150. package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +36 -118
  151. package/dist/extensions/pi-subagents/test/unit/watchdog-scope.test.ts +1 -1
  152. package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +37 -14
  153. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +45 -26
  154. package/dist/extensions/pi-subagents/test/unit/workflow-checklist.test.ts +223 -0
  155. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +50 -1
  156. package/dist/extensions/pi-subagents/test/unit/workflow-preflight.test.ts +22 -0
  157. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +136 -4
  158. package/dist/extensions/pi-zentui/README.md +19 -5
  159. package/dist/extensions/pi-zentui/docs/configuration.md +37 -9
  160. package/dist/extensions/pi-zentui/extensions/zentui/config.ts +29 -0
  161. package/dist/extensions/pi-zentui/extensions/zentui/index.ts +31 -2
  162. package/dist/extensions/pi-zentui/extensions/zentui/prototype-patch-registry.ts +55 -11
  163. package/dist/extensions/pi-zentui/extensions/zentui/settings-command.ts +115 -3
  164. package/dist/extensions/pi-zentui/extensions/zentui/settings-previews.ts +119 -2
  165. package/dist/extensions/pi-zentui/extensions/zentui/thinking-experimental.ts +1768 -0
  166. package/dist/extensions/pi-zentui/extensions/zentui/thinking-status.ts +69 -0
  167. package/dist/extensions/pi-zentui/extensions/zentui/thinking-steps.ts +155 -0
  168. package/dist/extensions/pi-zentui/extensions/zentui/ui.ts +2 -1
  169. package/dist/extensions/pi-zentui/extensions/zentui/user-message-osc.ts +16 -2
  170. package/dist/extensions/pi-zentui/extensions/zentui/user-message-styles.ts +1 -1
  171. package/dist/extensions/pi-zentui/test/config-load-lifecycle.test.ts +124 -0
  172. package/dist/extensions/pi-zentui/test/config.test.ts +82 -2
  173. package/dist/extensions/pi-zentui/test/editor-viewport-indicators.test.ts +19 -4
  174. package/dist/extensions/pi-zentui/test/extension-compliance.test.ts +58 -9
  175. package/dist/extensions/pi-zentui/test/package-contents.mjs +33 -0
  176. package/dist/extensions/pi-zentui/test/prototype-patch-registry.test.ts +131 -0
  177. package/dist/extensions/pi-zentui/test/responsive-dependencies.test.ts +4 -4
  178. package/dist/extensions/pi-zentui/test/settings-command.test.ts +289 -7
  179. package/dist/extensions/pi-zentui/test/settings-previews.test.ts +106 -0
  180. package/dist/extensions/pi-zentui/test/thinking-experimental-docs.test.ts +51 -0
  181. package/dist/extensions/pi-zentui/test/thinking-experimental-loader-diagnostics.mjs +54 -0
  182. package/dist/extensions/pi-zentui/test/thinking-experimental-missing-export.test.ts +44 -0
  183. package/dist/extensions/pi-zentui/test/thinking-experimental-rows.test.ts +297 -0
  184. package/dist/extensions/pi-zentui/test/thinking-experimental-tui.mjs +2329 -0
  185. package/dist/extensions/pi-zentui/test/thinking-experimental.test.ts +1668 -0
  186. package/dist/extensions/pi-zentui/test/thinking-status.test.ts +85 -0
  187. package/dist/extensions/pi-zentui/test/thinking-steps.test.ts +122 -0
  188. package/dist/extensions/pi-zentui/test/user-message-osc.test.ts +58 -0
  189. package/dist/skills/brandkit/SKILL.md +0 -2
  190. package/dist/skills/{industrial-brutalist-ui → brutalist}/SKILL.md +1 -3
  191. package/dist/skills/gpt-taste/SKILL.md +0 -2
  192. package/dist/skills/image-to-code/SKILL.md +0 -2
  193. package/dist/skills/imagegen-frontend-mobile/SKILL.md +0 -2
  194. package/dist/skills/imagegen-frontend-web/SKILL.md +0 -2
  195. package/dist/skills/{minimalist-ui → minimalist}/SKILL.md +1 -3
  196. package/dist/skills/{full-output-enforcement → output}/SKILL.md +1 -3
  197. package/dist/skills/{redesign-existing-projects → redesign}/SKILL.md +1 -3
  198. package/dist/skills/{high-end-visual-design → soft}/SKILL.md +1 -3
  199. package/dist/skills/stitch/DESIGN.md +121 -0
  200. package/dist/skills/{stitch-design-taste → stitch}/SKILL.md +1 -3
  201. package/dist/skills/{design-taste-frontend → taste}/SKILL.md +1 -3
  202. package/dist/skills/{design-taste-frontend-v1 → taste-v1}/SKILL.md +2 -4
  203. package/package.json +1 -1
@@ -0,0 +1,85 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import type { ThinkingStepsComponentConfig } from "../extensions/zentui/config";
3
+ import {
4
+ formatThinkingStatus,
5
+ type ThinkingStatusState,
6
+ thinkingStatusLabels,
7
+ } from "../extensions/zentui/thinking-status";
8
+
9
+ const config = (mode: ThinkingStepsComponentConfig["mode"]): ThinkingStepsComponentConfig => ({
10
+ enabled: true,
11
+ mode,
12
+ });
13
+
14
+ const status = (mode: ThinkingStepsComponentConfig["mode"], state: ThinkingStatusState) =>
15
+ formatThinkingStatus(thinkingStatusLabels(config(mode), state));
16
+
17
+ describe("Thinking status", () => {
18
+ it("reports displaced whole-renderer availability independently", () => {
19
+ expect(
20
+ status("tree", {
21
+ active: false,
22
+ rendererAvailable: false,
23
+ streamingAvailable: true,
24
+ restartRequired: true,
25
+ reason: "Private renderer patch ownership was displaced",
26
+ }),
27
+ ).toBe(
28
+ "Saved: Tree · Active: Native · Renderer unavailable · restart required · Private renderer patch ownership was displaced",
29
+ );
30
+ });
31
+
32
+ it("reports a matcher runtime failure as Streaming-only unavailability", () => {
33
+ expect(
34
+ status("streaming", {
35
+ active: false,
36
+ rendererAvailable: true,
37
+ streamingAvailable: false,
38
+ restartRequired: true,
39
+ reason: "Pi's thinking-toggle matcher failed at runtime",
40
+ }),
41
+ ).toBe(
42
+ "Saved: Streaming · Active: Native · Streaming unavailable · restart required · Pi's thinking-toggle matcher failed at runtime",
43
+ );
44
+ });
45
+
46
+ it("keeps poisoned Streaming visible while Rail is healthy", () => {
47
+ expect(
48
+ status("rail", {
49
+ active: true,
50
+ activeMode: "rail",
51
+ rendererAvailable: true,
52
+ streamingAvailable: false,
53
+ streamingPoisoned: true,
54
+ restartRequired: false,
55
+ reason: "Pi's thinking timer is unavailable",
56
+ }),
57
+ ).toBe(
58
+ "Saved: Rail · Active: Rail · Streaming unavailable · Pi's thinking timer is unavailable",
59
+ );
60
+ });
61
+
62
+ it("reports an enabled startup fallback as active native", () => {
63
+ expect(
64
+ status("tree", {
65
+ active: false,
66
+ rendererAvailable: true,
67
+ streamingAvailable: true,
68
+ restartRequired: true,
69
+ }),
70
+ ).toBe("Saved: Tree · Active: Native · restart required");
71
+ });
72
+
73
+ it("does not duplicate availability or restart text from a reason", () => {
74
+ expect(
75
+ status("streaming", {
76
+ active: true,
77
+ activeMode: "rail",
78
+ rendererAvailable: true,
79
+ streamingAvailable: false,
80
+ restartRequired: true,
81
+ reason: "Streaming unavailable; restart required",
82
+ }),
83
+ ).toBe("Saved: Streaming · Active: Rail · Streaming unavailable · restart required");
84
+ });
85
+ });
@@ -0,0 +1,122 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import {
3
+ parseThinkingSteps,
4
+ THINKING_STEPS_MAX_INPUT_LENGTH,
5
+ THINKING_STEPS_MAX_LABEL_LENGTH,
6
+ THINKING_STEPS_MAX_STEPS,
7
+ } from "../extensions/zentui/thinking-steps";
8
+
9
+ describe("Thinking-step structural parser", () => {
10
+ it("derives headings, top-level lists, and prose while retaining bodies", () => {
11
+ expect(
12
+ parseThinkingSteps(
13
+ "# Inspect\nbody\n\n- Check API\n - nested body\n\nProse label\nprose body",
14
+ ),
15
+ ).toEqual([
16
+ { number: 1, label: "Inspect", body: "body" },
17
+ { number: 2, label: "Check API", body: " - nested body" },
18
+ { number: 3, label: "Prose label", body: "prose body" },
19
+ ]);
20
+ });
21
+
22
+ it("strips SGR around structural Markdown before parsing", () => {
23
+ const plain = "# Inspect\nbody\n\n- Check API\n nested\n\nProse label\nprose body";
24
+ const sgr = "\x1b[38;2;137;180;250m";
25
+ const muted = "\x1b[38;2;186;194;222m";
26
+ const reset = "\x1b[39m";
27
+ const decorated = `${sgr}#${reset} ${muted}Inspect${reset}\n${sgr}body${reset}\n\n${muted}-${reset} Check API\n ${sgr}nested${reset}\n\n${muted}Prose label${reset}\n${sgr}prose body${reset}`;
28
+ const expected = parseThinkingSteps(plain);
29
+ const actual = parseThinkingSteps(decorated);
30
+ expect(actual).toEqual(expected);
31
+ for (const step of actual ?? []) {
32
+ expect(`${step.label}\n${step.body}`).not.toMatch(/[\x1b\x80-\x9f]/);
33
+ }
34
+ });
35
+
36
+ it("strips complete SGR at every source boundary without changing steps", () => {
37
+ const source = "# One\nbody\n\n- Two\n nested";
38
+ const expected = parseThinkingSteps(source);
39
+ for (let index = 0; index <= source.length; index += 1) {
40
+ const decorated = `${source.slice(0, index)}\x1b[38:5:202m${source.slice(index)}`;
41
+ expect(parseThinkingSteps(decorated), `SGR boundary ${index}`).toEqual(expected);
42
+ }
43
+ });
44
+
45
+ it("rejects a non-SGR control at every source boundary", () => {
46
+ const source = "# One\nbody\n\n# Two";
47
+ for (let index = 0; index <= source.length; index += 1) {
48
+ const unsafe = `${source.slice(0, index)}\x1b[2J${source.slice(index)}`;
49
+ expect(parseThinkingSteps(unsafe), `control boundary ${index}`).toBeUndefined();
50
+ }
51
+ });
52
+
53
+ it.each([
54
+ "\x1b[31m\x1b[0m",
55
+ "# Safe \x1b[31mstyle\x1b[0m\x1b[2J",
56
+ "# Safe \x1b[31mstyle\x1b[0m\x1b]8;;https://example.test\x07link\x1b]8;;\x07",
57
+ ])("fails open for SGR-only or mixed unsafe input", (source) => {
58
+ expect(parseThinkingSteps(source)).toBeUndefined();
59
+ });
60
+
61
+ it("keeps fences, Mermaid, display math, and nested structure opaque", () => {
62
+ const source = [
63
+ "# Analyze",
64
+ "```mermaid",
65
+ "# hidden",
66
+ "```",
67
+ "$$",
68
+ "- hidden",
69
+ "$$",
70
+ " 1. nested",
71
+ "# Done",
72
+ ].join("\n");
73
+ const steps = parseThinkingSteps(source);
74
+ expect(steps?.map((step) => step.label)).toEqual(["Analyze", "Done"]);
75
+ expect(steps?.[0]?.body).toContain("```mermaid\n# hidden\n```");
76
+ expect(steps?.[0]?.body).toContain("$$\n- hidden\n$$");
77
+ });
78
+
79
+ it.each([
80
+ "",
81
+ "\x1b]0;owned\x07",
82
+ "```\n# unterminated",
83
+ "$$\nvalue",
84
+ "> unsupported quote\n# Later",
85
+ " orphan\n# Later",
86
+ "# tab\tlabel",
87
+ ])("fails open for malformed or unsafe input", (source) => {
88
+ expect(parseThinkingSteps(source)).toBeUndefined();
89
+ });
90
+
91
+ it("normalizes CRLF and enforces inclusive parser bounds", () => {
92
+ expect(parseThinkingSteps("# One\r\nbody\r\n# Two")?.map((step) => step.label)).toEqual([
93
+ "One",
94
+ "Two",
95
+ ]);
96
+ const exactInput = `Intro\n${"x".repeat(THINKING_STEPS_MAX_INPUT_LENGTH - 6)}`;
97
+ expect(parseThinkingSteps(exactInput)).toHaveLength(1);
98
+ expect(parseThinkingSteps(`${exactInput}x`)).toBeUndefined();
99
+ const decoratedPrefix = "# A\n\x1b[31m";
100
+ const decoratedSuffix = "\x1b[0m";
101
+ const decoratedExact = `${decoratedPrefix}${"a".repeat(THINKING_STEPS_MAX_INPUT_LENGTH - decoratedPrefix.length - decoratedSuffix.length)}${decoratedSuffix}`;
102
+ expect(decoratedExact).toHaveLength(THINKING_STEPS_MAX_INPUT_LENGTH);
103
+ expect(parseThinkingSteps(decoratedExact)).toHaveLength(1);
104
+ expect(parseThinkingSteps(`${decoratedExact}x`)).toBeUndefined();
105
+ expect(
106
+ parseThinkingSteps(
107
+ `# \x1b[38;2;137;180;250m${"a".repeat(THINKING_STEPS_MAX_LABEL_LENGTH)}\x1b[39m`,
108
+ ),
109
+ ).toHaveLength(1);
110
+ expect(
111
+ parseThinkingSteps(
112
+ `# \x1b[38;2;137;180;250m${"a".repeat(THINKING_STEPS_MAX_LABEL_LENGTH + 1)}\x1b[39m`,
113
+ ),
114
+ ).toBeUndefined();
115
+ const exactSteps = Array.from(
116
+ { length: THINKING_STEPS_MAX_STEPS },
117
+ (_, index) => `# Step ${index}`,
118
+ ).join("\n");
119
+ expect(parseThinkingSteps(exactSteps)).toHaveLength(THINKING_STEPS_MAX_STEPS);
120
+ expect(parseThinkingSteps(`${exactSteps}\n# overflow`)).toBeUndefined();
121
+ });
122
+ });
@@ -3,6 +3,7 @@ import {
3
3
  isValidUserMessageOsc8Payload,
4
4
  sanitizeRenderedUserMessageLines,
5
5
  sanitizeRenderedUserMessageText,
6
+ sanitizeSgrOnlySourceText,
6
7
  sanitizeUserMessageSourceText,
7
8
  } from "../extensions/zentui/user-message-osc";
8
9
 
@@ -114,6 +115,63 @@ describe("sanitizeUserMessageSourceText", () => {
114
115
  });
115
116
  });
116
117
 
118
+ describe("sanitizeSgrOnlySourceText", () => {
119
+ it.each([
120
+ ["empty", "", ""],
121
+ ["standard", "before\x1b[31;1mred\x1b[0m after", "beforered after"],
122
+ ["256 color", "\x1b[38;5;202mvalue\x1b[39m", "value"],
123
+ ["colon parameters", "\x1b[38:2::137:180:250mvalue\x1b[m", "value"],
124
+ [
125
+ "observed truecolor sequences",
126
+ "\x1b[38;2;137;180;250mfirst\x1b[39m \x1b[38;2;186;194;222msecond\x1b[39m",
127
+ "first second",
128
+ ],
129
+ ] as const)("strips strict 7-bit CSI SGR for %s", (_name, source, expected) => {
130
+ expect(sanitizeSgrOnlySourceText(source)).toBe(expected);
131
+ });
132
+
133
+ it("preserves source whitespace exactly", () => {
134
+ expect(sanitizeSgrOnlySourceText("\t\x1b[1m first \nsecond\t\x1b[22m\n")).toBe(
135
+ "\t first \nsecond\t\n",
136
+ );
137
+ });
138
+
139
+ it.each([
140
+ ["cursor", "value\x1b[2A"],
141
+ ["erase", "value\x1b[2J"],
142
+ ["OSC", "\x1b]0;title\x07value"],
143
+ ["OSC 8", "\x1b]8;;https://example.test\x07link\x1b]8;;\x07"],
144
+ ["7-bit DCS", "\x1bPpayload\x1b\\"],
145
+ ["7-bit SOS", "\x1bXpayload\x1b\\"],
146
+ ["7-bit PM", "\x1b^payload\x1b\\"],
147
+ ["7-bit APC", "\x1b_payload\x1b\\"],
148
+ ["generic escape", "\x1b(0value"],
149
+ ["BEL", "a\x07b"],
150
+ ["NUL", "a\x00b"],
151
+ ["form feed", "a\x0cb"],
152
+ ["DEL", "a\x7fb"],
153
+ ["C1", "a\x85b"],
154
+ ["8-bit CSI", "a\x9b31mb"],
155
+ ["8-bit DCS", "a\x90payload\x9cb"],
156
+ ["8-bit SOS", "a\x98payload\x9cb"],
157
+ ["8-bit PM", "a\x9epayload\x9cb"],
158
+ ["8-bit APC", "a\x9fpayload\x9cb"],
159
+ ] as const)("rejects %s controls mixed with safe SGR", (_name, source) => {
160
+ expect(sanitizeSgrOnlySourceText(`\x1b[1m${source}\x1b[0m`)).toBeUndefined();
161
+ });
162
+
163
+ it.each([
164
+ ["incomplete", "\x1b[38;2;137;180;250"],
165
+ ["private", "\x1b[?25m"],
166
+ ["intermediate", "\x1b[1 m"],
167
+ ["invalid parameter", "\x1b[31.1m"],
168
+ ["non-SGR CSI", "\x1b[31H"],
169
+ ["cancelled", "\x1b[31\x18m"],
170
+ ] as const)("rejects %s SGR-like input", (_name, source) => {
171
+ expect(sanitizeSgrOnlySourceText(source)).toBeUndefined();
172
+ });
173
+ });
174
+
117
175
  describe("sanitizeRenderedUserMessageText", () => {
118
176
  it("preserves only SGR and structurally valid 7-bit OSC 8", () => {
119
177
  const sgr = "\x1b[38;5;202mstyled\x1b[0m";
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: brandkit
3
- category: design
4
3
  description: Premium brand-kit image generation skill for creating high-end brand-guidelines boards, logo systems, identity decks, and visual-world presentations. Trained for minimalist, cinematic, editorial, dark-tech, luxury, cultural, security, gaming, developer-tool, and consumer-app brand systems. Optimized for intentional logo concepting, refined composition, sparse typography, strong symbolic meaning, premium mockups, art-directed imagery, and flexible grid layouts.
5
- license: MIT
6
4
  ---
7
5
 
8
6
  # BRANDKIT IMAGE GENERATION SKILL
@@ -1,8 +1,6 @@
1
1
  ---
2
- name: industrial-brutalist-ui
3
- category: design
2
+ name: brutalist
4
3
  description: Raw mechanical interfaces fusing Swiss typographic print with military terminal aesthetics. Rigid grids, extreme type scale contrast, utilitarian color, analog degradation effects. For data-heavy dashboards, portfolios, or editorial sites that need to feel like declassified blueprints.
5
- license: MIT
6
4
  ---
7
5
 
8
6
  # SKILL: Industrial Brutalism & Tactical Telemetry UI
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: gpt-taste
3
- category: design
4
3
  description: Elite UX/UI & Advanced GSAP Motion Engineer. Enforces Python-driven true randomization for layout variance, strict AIDA page structure, wide editorial typography (bans 6-line wraps), gapless bento grids, strict GSAP ScrollTriggers (pinning, stacking, scrubbing), inline micro-images, and massive section spacing.
5
- license: MIT
6
4
  ---
7
5
 
8
6
  # CORE DIRECTIVE: AWWWARDS-LEVEL DESIGN ENGINEERING
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: image-to-code
3
- category: imagegen
4
3
  description: Elite website image-to-code skill for Codex. For visually important web tasks, it must first generate the design image(s) itself, deeply analyze them, then implement the website to match them as closely as possible. In Codex, it must prefer large, readable, section-specific images instead of tiny compressed boards, generate fresh standalone images for sections or detail views instead of cropping old ones, avoid lazy under-generation, avoid cards-inside-cards-inside-cards UI, and keep the hero clean, spacious, readable, and visible on a small laptop.
5
- license: MIT
6
4
  ---
7
5
 
8
6
  # CORE DIRECTIVE: IMAGE-FIRST WEBSITE DESIGN TO CODE
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: imagegen-frontend-mobile
3
- category: imagegen
4
3
  description: Elite mobile app image-generation skill for creating premium, app-native screen concepts and flows. Designed for iOS, Android, and cross-platform mobile products. Prioritizes clean hierarchy, comfortably readable text, strong multi-screen consistency, controlled color palettes, non-generic creative direction, textured surfaces, image-led composition, tasteful custom iconography, and clean phone mockup framing. By default, screens should be shown inside a subtle premium iPhone or similar phone mockup with a visible frame, while the main focus stays on the app content itself. This skill generates images only. It does not write code.
5
- license: MIT
6
4
  ---
7
5
 
8
6
  # CORE DIRECTIVE: PREMIUM MOBILE APP IMAGE DIRECTION
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: imagegen-frontend-web
3
- category: imagegen
4
3
  description: Elite frontend image-direction skill for generating premium, conversion-aware website design references. CRITICAL OUTPUT RULE — generate ONE separate horizontal image FOR EVERY section. A landing page with 8 sections produces 8 images. Never compress multiple sections into one image. Enforces composition variety (not always left-text / right-image), background-image freedom, varied CTAs, varied hero scales (giant / mid / mini minimalist), narrative concept spine, second-read moments, and a single consistent palette across all images. Optimized for landing pages, marketing sites, and product comps that developers or coding models can accurately recreate.
5
- license: MIT
6
4
  ---
7
5
 
8
6
  # HARD OUTPUT RULE — READ FIRST
@@ -1,8 +1,6 @@
1
1
  ---
2
- name: minimalist-ui
3
- category: design
2
+ name: minimalist
4
3
  description: Clean editorial-style interfaces. Warm monochrome palette, typographic contrast, flat bento grids, muted pastels. No gradients, no heavy shadows.
5
- license: MIT
6
4
  ---
7
5
 
8
6
  # Protocol: Premium Utilitarian Minimalism UI Architect
@@ -1,8 +1,6 @@
1
1
  ---
2
- name: full-output-enforcement
3
- category: discipline
2
+ name: output
4
3
  description: Overrides default LLM truncation behavior. Enforces complete code generation, bans placeholder patterns, and handles token-limit splits cleanly. Apply to any task requiring exhaustive, unabridged output.
5
- license: MIT
6
4
  ---
7
5
 
8
6
  # Full-Output Enforcement
@@ -1,8 +1,6 @@
1
1
  ---
2
- name: redesign-existing-projects
3
- category: design
2
+ name: redesign
4
3
  description: Upgrades existing websites and apps to premium quality. Audits current design, identifies generic AI patterns, and applies high-end design standards without breaking functionality. Works with any CSS framework or vanilla CSS.
5
- license: MIT
6
4
  ---
7
5
 
8
6
  # Redesign Skill
@@ -1,8 +1,6 @@
1
1
  ---
2
- name: high-end-visual-design
3
- category: design
2
+ name: soft
4
3
  description: Teaches the AI to design like a high-end agency. Defines the exact fonts, spacing, shadows, card structures, and animations that make a website feel expensive. Blocks all the common defaults that make AI designs look cheap or generic.
5
- license: MIT
6
4
  ---
7
5
 
8
6
  # Agent Skill: Principal UI/UX Architect & Motion Choreographer (Awwwards-Tier)
@@ -0,0 +1,121 @@
1
+ # Design System: Taste Standard
2
+ **Skill:** stitch
3
+
4
+ ---
5
+
6
+ ## Configuration — Set Your Style
7
+ Adjust these dials before using this design system. They control how creative, dense, and animated the output should be. Pick the level that fits your project.
8
+
9
+ | Dial | Level | Description |
10
+ |------|-------|-------------|
11
+ | **Creativity** | `8` | `1` = Ultra-minimal, Swiss, silent, monochrome. `5` = Balanced, clean but with personality. `10` = Expressive, editorial, bold typography experiments, inline images in headlines, strong asymmetry. Default: `8` |
12
+ | **Density** | `4` | `1` = Gallery-airy, massive whitespace. `5` = Balanced sections. `10` = Cockpit-dense, data-heavy. Default: `4` |
13
+ | **Variance** | `8` | `1` = Predictable, symmetric grids. `5` = Subtle offsets. `10` = Artsy chaotic, no two sections alike. Default: `8` |
14
+ | **Motion Intent** | `6` | `1` = Static, no animation noted. `5` = Subtle hover/entrance cues. `10` = Cinematic orchestration noted in every component. Default: `6` |
15
+
16
+ > **How to use:** Change the numbers above to match your project's vibe. At **Creativity 1–3**, the system produces clean, quiet, Notion-like interfaces. At **Creativity 7–10**, expect inline image typography, dramatic scale contrast, and strong editorial layouts. The rest of the rules below adapt to your chosen levels.
17
+
18
+ ---
19
+
20
+ ## 1. Visual Theme & Atmosphere
21
+ A restrained, gallery-airy interface with confident asymmetric layouts and fluid spring-physics motion. The atmosphere is clinical yet warm — like a well-lit architecture studio where every element earns its place through function. Density is balanced (Level 4), variance runs high (Level 8) to prevent symmetrical boredom, and motion is fluid but never theatrical (Level 6). The overall impression: expensive, intentional, alive.
22
+
23
+ ## 2. Color Palette & Roles
24
+ - **Canvas White** (#F9FAFB) — Primary background surface. Warm-neutral, never clinical blue-white
25
+ - **Pure Surface** (#FFFFFF) — Card and container fill. Used with whisper shadow for elevation
26
+ - **Charcoal Ink** (#18181B) — Primary text. Zinc-950 depth — never pure black
27
+ - **Steel Secondary** (#71717A) — Body text, descriptions, metadata. Zinc-500 warmth
28
+ - **Muted Slate** (#94A3B8) — Tertiary text, timestamps, disabled states
29
+ - **Whisper Border** (rgba(226,232,240,0.5)) — Card borders, structural 1px lines. Semi-transparent for depth
30
+ - **Diffused Shadow** (rgba(0,0,0,0.05)) — Card elevation. Wide-spreading, 40px blur, -15px offset. Never harsh
31
+
32
+ ### Accent Selection (Pick ONE per project)
33
+ - **Emerald Signal** (#10B981) — For growth, success, positive data dashboards
34
+ - **Electric Blue** (#3B82F6) — For productivity, SaaS, developer tools
35
+ - **Deep Rose** (#E11D48) — For creative, editorial, fashion-adjacent projects
36
+ - **Amber Warmth** (#F59E0B) — For community, social, warm-toned products
37
+
38
+ ### Banned Colors
39
+ - Purple/Violet neon gradients — the "AI Purple" aesthetic
40
+ - Pure Black (#000000) — always Off-Black or Zinc-950
41
+ - Oversaturated accents above 80% saturation
42
+ - Mixed warm/cool gray systems within one project
43
+
44
+ ## 3. Typography Rules
45
+ - **Display:** `Geist`, `Satoshi`, `Cabinet Grotesk`, or `Outfit` — Track-tight (`-0.025em`), controlled fluid scale, weight-driven hierarchy (700–900). Not screaming. Leading compressed (`1.1`). Alternatives forced — `Inter` is BANNED for premium contexts
46
+ - **Body:** Same family at weight 400 — Relaxed leading (`1.65`), 65ch max-width, Steel Secondary color (#71717A)
47
+ - **Mono:** `Geist Mono` or `JetBrains Mono` — For code blocks, metadata, timestamps. When density exceeds Level 7, all numbers switch to monospace
48
+ - **Scale:** Display at `clamp(2.25rem, 5vw, 3.75rem)`. Body at `1rem/1.125rem`. Mono metadata at `0.8125rem`
49
+
50
+ ### Banned Fonts
51
+ - `Inter` — banned everywhere in premium/creative contexts
52
+ - Generic serif fonts (`Times New Roman`, `Georgia`, `Garamond`, `Palatino`) — BANNED. If serif is needed for editorial/creative, use only distinctive modern serifs like `Fraunces`, `Gambarino`, `Editorial New`, or `Instrument Serif`. Never use default browser serif stacks. Serif is always BANNED in dashboards or software UIs regardless
53
+
54
+ ## 4. Component Stylings
55
+ * **Buttons:** Flat surface, no outer glow. Primary: accent fill with white text. Secondary: ghost/outline. Active state: `-1px translateY` or `scale(0.98)` for tactile push. Hover: subtle background shift, never glow
56
+ * **Cards/Containers:** Generously rounded corners (`2.5rem`). Pure white fill. Whisper border (`1px`, semi-transparent). Diffused shadow (`0 20px 40px -15px rgba(0,0,0,0.05)`). Internal padding `2rem–2.5rem`. Used ONLY when elevation communicates hierarchy — high-density layouts replace cards with `border-top` dividers or negative space
57
+ * **Inputs/Forms:** Label positioned above input. Helper text optional. Error text below in Deep Rose. Focus ring in accent color, `2px` offset. No floating labels. Standard `0.5rem` gap between label-input-error stack
58
+ * **Navigation:** Sleek, sticky. Icons scale on hover (Dock Magnification optional). No hamburger on desktop. Clean horizontal with generous spacing
59
+ * **Loaders:** Skeletal shimmer matching exact layout dimensions and rounded corners. Shifting light reflection across placeholder shapes. Never circular spinners
60
+ * **Empty States:** Composed illustration or icon composition with guidance text. Never just "No data found"
61
+ * **Error States:** Inline, contextual. Red accent underline or border. Clear recovery action
62
+
63
+ ## 5. Hero Section
64
+ The Hero is the first impression — it must be striking, creative, and never generic.
65
+ - **Inline Image Typography:** Embed small, contextual photos or visuals directly between words or letters in the headline. Example: "We build [photo of hands typing] digital [photo of screen] products" — images sit inline at type-height, rounded, acting as visual punctuation between words. This is the signature creative technique
66
+ - **No Overlapping Elements:** Text must never overlap images or other text. Every element has its own clear spatial zone. No z-index stacking of content layers, no absolute-positioned headlines over images. Clean separation always
67
+ - **No Filler Text:** "Scroll to explore", "Swipe down", scroll arrow icons, bouncing chevrons, and any instructional UI chrome are BANNED. The user knows how to scroll. Let the content pull them in naturally
68
+ - **Asymmetric Structure:** Centered Hero layouts are BANNED at this variance level. Use Split Screen (50/50), Left-Aligned text / Right visual, or Asymmetric Whitespace with large empty zones
69
+ - **CTA Restraint:** Maximum one primary CTA button. No secondary "Learn more" links. No redundant micro-copy below the headline
70
+
71
+ ## 6. Layout Principles
72
+ - **Grid-First:** CSS Grid for all structural layouts. Never flexbox percentage math (`calc(33% - 1rem)` is BANNED)
73
+ - **No Overlapping:** Elements must never overlap each other. No absolute-positioned layers stacking content on content. Every element occupies its own grid cell or flow position. Clean, separated spatial zones
74
+ - **Feature Sections:** The "3 equal cards in a row" pattern is BANNED. Use 2-column Zig-Zag, asymmetric Bento grids (2fr 1fr 1fr), or horizontal scroll galleries
75
+ - **Containment:** All content within `max-width: 1400px`, centered. Generous horizontal padding (`1rem` mobile, `2rem` tablet, `4rem` desktop)
76
+ - **Full-Height:** Use `min-height: 100dvh` — never `height: 100vh` (iOS Safari address bar jump)
77
+ - **Bento Architecture:** For feature grids, use Row 1: 3 columns | Row 2: 2 columns (70/30 split). Each tile contains a perpetual micro-animation
78
+
79
+ ## 7. Responsive Rules
80
+ Every screen must work flawlessly across all viewports. **Responsive is not optional — it is a hard requirement. Every single element must be tested at 375px, 768px, and 1440px.**
81
+ - **Mobile-First Collapse (< 768px):** All multi-column layouts collapse to a strict single column. `width: 100%`, `padding: 1rem`, `gap: 1.5rem`. No exceptions
82
+ - **No Horizontal Scroll:** Horizontal overflow on mobile is a critical failure. All elements must fit within viewport width. If any element causes horizontal scroll, the design is broken
83
+ - **Typography Scaling:** Headlines scale down gracefully via `clamp()`. Body text stays `1rem` minimum. Never shrink body below `14px`. Headlines must remain readable on 375px screens
84
+ - **Touch Targets:** All interactive elements minimum `44px` tap target. Generous spacing between clickable items. Buttons must be full-width on mobile
85
+ - **Image Behavior:** Hero and inline images scale proportionally. Inline typography images (photos between words) stack below the headline on mobile instead of inline
86
+ - **Navigation:** Desktop horizontal nav collapses to a clean mobile menu (slide-in or full-screen overlay). No tiny hamburger icons without labels
87
+ - **Cards & Grids:** Bento grids and asymmetric layouts revert to stacked single-column cards with full-width. Maintain internal padding (`1rem`)
88
+ - **Spacing Consistency:** Vertical section gaps reduce proportionally on mobile (`clamp(3rem, 8vw, 6rem)`). Never cramped, never excessively airy
89
+ - **Testing Viewports:** Designs must be verified at: `375px` (iPhone SE), `390px` (iPhone 14), `768px` (iPad), `1024px` (small laptop), `1440px` (desktop)
90
+
91
+ ## 8. Motion & Interaction (Code-Phase Intent)
92
+ > **Note:** Stitch generates static screens — it does not animate. This section documents the **intended motion behavior** so that the coding agent (Antigravity, Cursor, etc.) knows exactly how to implement animations when building the exported design into a live product.
93
+
94
+ - **Physics Engine:** Spring-based exclusively. `stiffness: 100, damping: 20`. No linear easing anywhere. Premium, weighty feel on all interactive elements
95
+ - **Perpetual Micro-Loops:** Every active dashboard component has an infinite-loop state — Pulse on status dots, Typewriter on search bars, Float on feature icons, Shimmer on loading states
96
+ - **Staggered Orchestration:** Lists and grids mount with cascaded delays (`animation-delay: calc(var(--index) * 100ms)`). Waterfall reveals, never instant mount
97
+ - **Layout Transitions:** Smooth re-ordering via shared element IDs. Items swap positions with physics, simulating real-time intelligence
98
+ - **Hardware Rules:** Animate ONLY `transform` and `opacity`. Never `top`, `left`, `width`, `height`. Grain/noise filters on fixed, pointer-events-none pseudo-elements only
99
+ - **Performance:** CPU-heavy perpetual animations isolated in microscopic leaf components. Never trigger parent re-renders. Target 60fps minimum
100
+
101
+ ## 9. Anti-Patterns (Banned)
102
+ - No emojis — anywhere in UI, code, or alt text
103
+ - No `Inter` font — use `Geist`, `Outfit`, `Cabinet Grotesk`, `Satoshi`
104
+ - No generic serif fonts (`Times New Roman`, `Georgia`, `Garamond`) — if serif is needed, use distinctive modern serifs only (`Fraunces`, `Instrument Serif`)
105
+ - No pure black (`#000000`) — Off-Black or Zinc-950 only
106
+ - No neon outer glows or default box-shadow glows
107
+ - No oversaturated accent colors above 80%
108
+ - No excessive gradient text on large headers
109
+ - No custom mouse cursors
110
+ - No overlapping elements — text never overlaps images or other content. Clean spatial separation always
111
+ - No 3-column equal card layouts for features
112
+ - No centered Hero sections (at this variance level)
113
+ - No filler UI text: "Scroll to explore", "Swipe down", "Discover more below", scroll arrows, bouncing chevrons — all BANNED
114
+ - No generic names: "John Doe", "Sarah Chan", "Acme", "Nexus", "SmartFlow"
115
+ - No fake round numbers: `99.99%`, `50%`, `1234567` — use organic data: `47.2%`, `+1 (312) 847-1928`
116
+ - No AI copywriting clichés: "Elevate", "Seamless", "Unleash", "Next-Gen", "Revolutionize"
117
+ - No broken Unsplash links — use `picsum.photos/seed/{id}/800/600` or SVG UI Avatars
118
+ - No generic `shadcn/ui` defaults — customize radii, colors, shadows to match this system
119
+ - No `z-index` spam — use only for Navbar, Modal, Overlay layer contexts
120
+ - No `h-screen` — always `min-h-[100dvh]`
121
+ - No circular loading spinners — skeletal shimmer only
@@ -1,8 +1,6 @@
1
1
  ---
2
- name: stitch-design-taste
3
- category: design
2
+ name: stitch
4
3
  description: Semantic Design System Skill for Google Stitch. Generates agent-friendly DESIGN.md files that enforce premium, anti-generic UI standards — strict typography, calibrated color, asymmetric layouts, perpetual micro-motion, and hardware-accelerated performance.
5
- license: MIT
6
4
  ---
7
5
 
8
6
  # Stitch Design Taste — Semantic Design System Skill
@@ -1,8 +1,6 @@
1
1
  ---
2
- name: design-taste-frontend
3
- category: design
2
+ name: taste
4
3
  description: Anti-slop frontend skill for landing pages, portfolios, and redesigns. The agent reads the brief, infers the right design direction, and ships interfaces that do not look templated. Real design systems when applicable, audit-first on redesigns, strict pre-flight check.
5
- license: MIT
6
4
  ---
7
5
 
8
6
  # tasteskill: Anti-Slop Frontend Skill
@@ -1,8 +1,6 @@
1
1
  ---
2
- name: design-taste-frontend-v1
3
- category: design
4
- description: The original v1 taste-skill, preserved for projects depending on its exact behavior. The current default is `design-taste-frontend` (v2 experimental), which is a substantial rewrite. Use this v1 install name only if you need exact backward compatibility.
5
- license: MIT
2
+ name: taste-v1
3
+ description: The original v1 taste-skill, preserved for projects depending on its exact behavior. The current default is `taste` (v2 experimental), which is a substantial rewrite. Use this v1 install name only if you need exact backward compatibility.
6
4
  ---
7
5
 
8
6
  # High-Agency Frontend Skill
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@selesai/code",
3
- "version": "0.13.12",
3
+ "version": "0.13.14",
4
4
  "description": "Maintained, extension-first Pi coding agent with built-in workflows, subagents, web research, questions, skills, and an enhanced terminal UI.",
5
5
  "type": "module",
6
6
  "repository": {