@zenuml/core 3.47.9 → 3.48.0
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/cloud-icons-eHuugVSv.js.map +1 -0
- package/dist/zenuml.esm.mjs +2153 -2156
- package/dist/zenuml.esm.mjs.map +1 -0
- package/dist/zenuml.js +82 -82
- package/dist/zenuml.js.map +1 -0
- package/package.json +11 -1
- package/src/cli/zenuml.ts +1164 -0
- package/.agents/skills/babysit-pr/SKILL.md +0 -223
- package/.agents/skills/babysit-pr/agents/openai.yaml +0 -7
- package/.agents/skills/dia-scoring/SKILL.md +0 -139
- package/.agents/skills/dia-scoring/agents/openai.yaml +0 -7
- package/.agents/skills/dia-scoring/references/selectors-and-keys.md +0 -253
- package/.agents/skills/land-pr/SKILL.md +0 -120
- package/.agents/skills/propagate-core-release/SKILL.md +0 -205
- package/.agents/skills/propagate-core-release/agents/openai.yaml +0 -7
- package/.agents/skills/propagate-core-release/references/downstreams.md +0 -42
- package/.agents/skills/ship-branch/SKILL.md +0 -105
- package/.agents/skills/submit-branch/SKILL.md +0 -76
- package/.agents/skills/validate-branch/SKILL.md +0 -72
- package/.claude/commands/README.md +0 -162
- package/.claude/commands/analyze.md +0 -101
- package/.claude/commands/clarify.md +0 -158
- package/.claude/commands/code-review.md +0 -322
- package/.claude/commands/constitution.md +0 -73
- package/.claude/commands/create-docs.md +0 -309
- package/.claude/commands/full-context.md +0 -121
- package/.claude/commands/gemini-consult.md +0 -164
- package/.claude/commands/handoff.md +0 -146
- package/.claude/commands/implement.md +0 -56
- package/.claude/commands/plan.md +0 -43
- package/.claude/commands/refactor.md +0 -188
- package/.claude/commands/specify.md +0 -21
- package/.claude/commands/tasks.md +0 -62
- package/.claude/commands/update-docs.md +0 -314
- package/.claude/hooks/README.md +0 -270
- package/.claude/hooks/config/sensitive-patterns.json +0 -86
- package/.claude/hooks/gemini-context-injector.sh +0 -129
- package/.claude/hooks/mcp-security-scan.sh +0 -147
- package/.claude/hooks/notify.sh +0 -103
- package/.claude/hooks/setup/hook-setup.md +0 -96
- package/.claude/hooks/setup/settings.json.template +0 -63
- package/.claude/hooks/sounds/complete.wav +0 -0
- package/.claude/hooks/sounds/input-needed.wav +0 -0
- package/.claude/hooks/subagent-context-injector.sh +0 -65
- package/.claude/skills/babysit-pr/SKILL.md +0 -223
- package/.claude/skills/babysit-pr/agents/openai.yaml +0 -7
- package/.claude/skills/dia-scoring/SKILL.md +0 -139
- package/.claude/skills/dia-scoring/agents/openai.yaml +0 -7
- package/.claude/skills/dia-scoring/references/selectors-and-keys.md +0 -253
- package/.claude/skills/emoji-eval/SKILL.md +0 -187
- package/.claude/skills/land-pr/SKILL.md +0 -120
- package/.claude/skills/propagate-core-release/SKILL.md +0 -205
- package/.claude/skills/propagate-core-release/agents/openai.yaml +0 -7
- package/.claude/skills/propagate-core-release/references/downstreams.md +0 -42
- package/.claude/skills/ship-branch/SKILL.md +0 -105
- package/.claude/skills/submit-branch/SKILL.md +0 -76
- package/.claude/skills/validate-branch/SKILL.md +0 -72
- package/.claude/skills/zenuml-ux-research/SKILL.md +0 -183
- package/.claude/skills/zenuml-ux-research/references/assertion-catalog.md +0 -261
- package/.claude/skills/zenuml-ux-research/references/best-practices-overview.md +0 -56
- package/.claude/skills/zenuml-ux-research/references/report-template.md +0 -89
- package/.claude/skills/zenuml-ux-research/references/scenarios/edit-message-label.md +0 -37
- package/.claude/skills/zenuml-ux-research/references/scenarios/insert-message.md +0 -36
- package/.claude/skills/zenuml-ux-research/references/scenarios/insert-participant.md +0 -31
- package/.claude/skills/zenuml-ux-research/references/scenarios/rename-participant.md +0 -33
- package/.claude/skills/zenuml-ux-research/references/scenarios/undo-insert.md +0 -35
- package/.devcontainer/devcontainer.json +0 -21
- package/.dockerignore +0 -19
- package/.eslintrc.js +0 -39
- package/.git-blame-ignore-revs +0 -6
- package/.kiro/hooks/README.md +0 -38
- package/.kiro/hooks/session-sound-notification.js +0 -44
- package/.kiro/hooks/session-sound-notification.json +0 -23
- package/.mcp.json.example +0 -17
- package/.nvmrc +0 -1
- package/.prettierignore +0 -4
- package/.prettierrc +0 -1
- package/.specify/memory/constitution.md +0 -33
- package/.specify/scripts/bash/check-prerequisites.sh +0 -166
- package/.specify/scripts/bash/common.sh +0 -113
- package/.specify/scripts/bash/create-new-feature.sh +0 -97
- package/.specify/scripts/bash/setup-plan.sh +0 -60
- package/.specify/scripts/bash/update-agent-context.sh +0 -728
- package/.specify/templates/agent-file-template.md +0 -23
- package/.specify/templates/plan-template.md +0 -219
- package/.specify/templates/spec-template.md +0 -116
- package/.specify/templates/tasks-template.md +0 -127
- package/.storybook/main.ts +0 -25
- package/.storybook/preview.ts +0 -29
- package/.watchmanconfig +0 -3
- package/AGENTS.md +0 -26
- package/CLAUDE.md +0 -124
- package/DEPLOYMENT.md +0 -62
- package/Dockerfile +0 -36
- package/IMPLEMENTATION_PLAN.md +0 -163
- package/Integration/vanilla-js/index.html +0 -42
- package/MCP-ASSISTANT-RULES.md +0 -85
- package/README_CN.md +0 -15
- package/TUTORIAL.md +0 -116
- package/antlr/antlr-4.11.1-complete.jar +0 -0
- package/bun.lock +0 -1544
- package/bunfig.toml +0 -52
- package/docs/UNICODE_SUPPORT.md +0 -179
- package/docs/ai-context/deployment-infrastructure.md +0 -21
- package/docs/ai-context/docs-overview.md +0 -89
- package/docs/ai-context/handoff.md +0 -174
- package/docs/ai-context/project-structure.md +0 -160
- package/docs/ai-context/system-integration.md +0 -21
- package/docs/asciidoc/contributor.adoc +0 -54
- package/docs/asciidoc/create-my-own-theme.adoc +0 -149
- package/docs/asciidoc/images/creation-component.png +0 -0
- package/docs/asciidoc/images/creation-rtl.png +0 -0
- package/docs/asciidoc/images/message-arrow-rtl.png +0 -0
- package/docs/asciidoc/images/occurrence.png +0 -0
- package/docs/asciidoc/images/return-message-conflict.png +0 -0
- package/docs/asciidoc/images/shift-up-half-the-height.png +0 -0
- package/docs/asciidoc/images/three-layer-info-arch.png +0 -0
- package/docs/asciidoc/images/vertical-alignment.svg +0 -1
- package/docs/asciidoc/images/vertically-aligning.png +0 -0
- package/docs/asciidoc/index.adoc +0 -277
- package/docs/asciidoc/theme-debug-web-app.png +0 -0
- package/docs/asciidoc/tutorial.adoc +0 -22
- package/docs/asciidoc/user-css.png +0 -0
- package/docs/async-vs-sync-parser-rules.md +0 -81
- package/docs/divider-parser-allow-spaces.md +0 -38
- package/docs/highlighting-messages.md +0 -52
- package/docs/images/editor-sample.png +0 -0
- package/docs/inherited-vs-provided-from.md +0 -64
- package/docs/parser/Assignment.md +0 -8
- package/docs/parser/PARSER_IMPROVEMENTS_CC.md +0 -425
- package/docs/parser/grammar_review_gemini.md +0 -116
- package/docs/participants-function.md +0 -25
- package/docs/responsive-participant-margin.md +0 -52
- package/docs/starter.md +0 -9
- package/docs/superpowers/plans/2026-03-27-e2e-test-reorg.md +0 -698
- package/docs/superpowers/plans/2026-03-30-emoji-support.md +0 -1220
- package/docs/superpowers/plans/2026-03-30-self-correcting-scoring.md +0 -206
- package/docs/superpowers/plans/2026-04-15-keyboard-editing-on-diagram.md +0 -1992
- package/docs/superpowers/plans/2026-04-15-zenuml-ux-research-skill.md +0 -1452
- package/docs/ux-research/.gitkeep +0 -0
- package/docs/ux-research/2026-04-15-rename-participant.md +0 -156
- package/docs/ux-research/2026-04-18-insert-participant.md +0 -151
- package/docs/width-translate-and-offsets.md +0 -62
- package/docs/xss.md +0 -59
- package/e2e/data/compare-cases.js +0 -1090
- package/e2e/data/diff-algorithm.js +0 -199
- package/e2e/fixtures/create-message.html +0 -26
- package/e2e/fixtures/editable-label.html +0 -35
- package/e2e/fixtures/editable-span.html +0 -122
- package/e2e/fixtures/empty-diagram.html +0 -23
- package/e2e/fixtures/fixture.html +0 -31
- package/e2e/fixtures/insert-participant.html +0 -23
- package/e2e/fixtures/reorder-cross-fragment.html +0 -31
- package/e2e/fixtures/reorder-fragment.html +0 -29
- package/e2e/fixtures/reorder-message.html +0 -27
- package/e2e/fixtures/svg-test.html +0 -21
- package/e2e/fixtures/type-switch.html +0 -29
- package/e2e/tools/canonical-history.html +0 -908
- package/e2e/tools/compare-case.html +0 -371
- package/e2e/tools/compare.html +0 -35
- package/e2e/tools/native-diff-ext/background.js +0 -60
- package/e2e/tools/native-diff-ext/bridge.js +0 -26
- package/e2e/tools/native-diff-ext/content.js +0 -194
- package/e2e/tools/svg-preview.html +0 -56
- package/embed.html +0 -193
- package/eslint.config.mjs +0 -35
- package/firebase-debug.log +0 -108
- package/iframe-container-demo/diagram.html +0 -124
- package/iframe-container-demo/host.html +0 -817
- package/index.html +0 -771
- package/mermaid-zenuml-async-spa-auth.png +0 -0
- package/mermaid-zenuml-async-spa-auth.snapshot.md +0 -96
- package/newsletter/unicode-support-announcement.md +0 -134
- package/playground/creation.html +0 -53
- package/playground/message.html +0 -63
- package/playwright.config.ts +0 -40
- package/renderer.html +0 -366
- package/scripts/analyze-compare-case/collect-data.mjs +0 -1134
- package/scripts/analyze-compare-case/config.mjs +0 -102
- package/scripts/analyze-compare-case/geometry.mjs +0 -101
- package/scripts/analyze-compare-case/native-diff.mjs +0 -224
- package/scripts/analyze-compare-case/output.mjs +0 -74
- package/scripts/analyze-compare-case/panel-diff.mjs +0 -114
- package/scripts/analyze-compare-case/report.mjs +0 -162
- package/scripts/analyze-compare-case/residual-scopes.mjs +0 -347
- package/scripts/analyze-compare-case/scoring.mjs +0 -829
- package/scripts/analyze-compare-case.mjs +0 -149
- package/scripts/bump-version.js +0 -117
- package/scripts/snapshot-dual.js +0 -173
- package/scripts/update-snapshots.js +0 -70
- package/skills/dia-scoring/SKILL.md +0 -129
- package/skills/dia-scoring/agents/openai.yaml +0 -7
- package/skills/dia-scoring/references/selectors-and-keys.md +0 -253
- package/tailwind.config.js +0 -126
- package/test-compression.html +0 -274
- package/test-mermaid-zenuml.html +0 -57
- package/test-setup.ts +0 -124
- package/test-url-params.html +0 -192
- package/tsconfig.app.json +0 -31
- package/tsconfig.node.json +0 -24
- package/tsconfig.test.json +0 -9
- package/vite.config.lib.ts +0 -93
- package/vite.config.ts +0 -84
- package/wrangler.toml +0 -18
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
scenario_id: {{scenario_id}}
|
|
3
|
-
scenario_title: {{scenario_title}}
|
|
4
|
-
run_date: {{run_date}}
|
|
5
|
-
zenuml_core_sha: {{zenuml_core_sha}}
|
|
6
|
-
audited_url: {{audited_url}}
|
|
7
|
-
skill_version: 0.1.0
|
|
8
|
-
gap_count: { high: {{gap_count_high}}, med: {{gap_count_med}}, low: {{gap_count_low}} }
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# UX Research — {{scenario_title}}
|
|
12
|
-
|
|
13
|
-
## Executive summary
|
|
14
|
-
|
|
15
|
-
{{executive_summary}}
|
|
16
|
-
|
|
17
|
-
## Scenario recap
|
|
18
|
-
|
|
19
|
-
**User intent:** {{user_intent}}
|
|
20
|
-
|
|
21
|
-
**Starting DSL:**
|
|
22
|
-
```
|
|
23
|
-
{{starting_dsl}}
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
**Target DSL:**
|
|
27
|
-
```
|
|
28
|
-
{{target_dsl}}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Observed walkthrough
|
|
32
|
-
|
|
33
|
-
{{walkthrough_numbered_steps}}
|
|
34
|
-
|
|
35
|
-
## Gaps
|
|
36
|
-
|
|
37
|
-
{{gap_blocks}}
|
|
38
|
-
|
|
39
|
-
> Each gap block uses this structure:
|
|
40
|
-
>
|
|
41
|
-
> ```
|
|
42
|
-
> ### Gap N — <short headline>
|
|
43
|
-
> **Severity:** <low|med|high>
|
|
44
|
-
> **Catalog ID:** <id or "novel — candidate for new rule">
|
|
45
|
-
> **Observed:** <verbatim>
|
|
46
|
-
> **Expected:** <from hypothesis>
|
|
47
|
-
> **Exemplars:** <tools where expected behavior is seen>
|
|
48
|
-
> **Rationale:** <why this matters>
|
|
49
|
-
> **Suggested fix:** <grep result: file:line; or "no code path found">
|
|
50
|
-
> ```
|
|
51
|
-
>
|
|
52
|
-
> (Blockquote is for documentation inside the template — the rendered report omits it.)
|
|
53
|
-
|
|
54
|
-
## Coverage
|
|
55
|
-
|
|
56
|
-
Tested hypotheses (no gap found):
|
|
57
|
-
{{coverage_tested}}
|
|
58
|
-
|
|
59
|
-
Not tested (out of scope for this scenario):
|
|
60
|
-
{{coverage_out_of_scope}}
|
|
61
|
-
|
|
62
|
-
Skipped (couldn't form a testable hypothesis):
|
|
63
|
-
{{coverage_skipped}}
|
|
64
|
-
|
|
65
|
-
## Best-practice sources
|
|
66
|
-
|
|
67
|
-
**Bundled catalog IDs referenced:**
|
|
68
|
-
{{bundled_sources}}
|
|
69
|
-
|
|
70
|
-
**Web sources fetched during this run:**
|
|
71
|
-
{{web_sources}}
|
|
72
|
-
|
|
73
|
-
## Playwright regression snippet
|
|
74
|
-
|
|
75
|
-
Paste into `zenuml-core/tests/ux/{{scenario_id}}.spec.ts` once the gap is fixed. The skill emits this snippet; it does not run it.
|
|
76
|
-
|
|
77
|
-
```typescript
|
|
78
|
-
{{playwright_snippet}}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## Zero-gap rendering
|
|
84
|
-
|
|
85
|
-
If the scenario produced zero gaps, render the report omitting the **Gaps** and **Playwright regression snippet** sections. The **Observed walkthrough** section becomes a single line:
|
|
86
|
-
|
|
87
|
-
> No gaps observed on zenuml-core @ {{zenuml_core_sha}}.
|
|
88
|
-
|
|
89
|
-
All other sections (metadata, executive summary, scenario recap, coverage, best-practice sources) still render.
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: edit-message-label
|
|
3
|
-
title: Edit an existing message label
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## User intent
|
|
7
|
-
The user has a message `A->B: hello` on the canvas and wants to change the label to `hi`.
|
|
8
|
-
|
|
9
|
-
## Starting DSL
|
|
10
|
-
```
|
|
11
|
-
A
|
|
12
|
-
B
|
|
13
|
-
A->B: hello
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Target DSL
|
|
17
|
-
```
|
|
18
|
-
A
|
|
19
|
-
B
|
|
20
|
-
A->B: hi
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Relevant assertion categories
|
|
24
|
-
EDT, KBD, SEL, FOC, UND
|
|
25
|
-
|
|
26
|
-
## Walkthrough hints (not prescriptive)
|
|
27
|
-
- This scenario exercises the inline-edit contract on an existing piece of DSL, not a new one.
|
|
28
|
-
- Candidate paths to try in order:
|
|
29
|
-
1. Click the message label `hello` once to select, press Enter, retype.
|
|
30
|
-
2. Double-click the message label.
|
|
31
|
-
3. Keyboard: navigate to the message via arrows, press Enter.
|
|
32
|
-
4. Fall back to editing the DSL editor directly.
|
|
33
|
-
- Watch specifically for: undo granularity when the user types `hi` then changes their mind (one undo should revert the whole label, not one character at a time).
|
|
34
|
-
|
|
35
|
-
## Known issues to watch for (optional)
|
|
36
|
-
- If undo is character-level during a label edit, that is a UND-02 violation.
|
|
37
|
-
- If clicking the message selects the wrong thing (e.g., the arrow instead of the label), that is a SEL-01 violation.
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: insert-message
|
|
3
|
-
title: Insert a synchronous message between two participants
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## User intent
|
|
7
|
-
The user has two participants `A` and `B` on the canvas and wants to add a synchronous message from `A` to `B` with the label `hello`.
|
|
8
|
-
|
|
9
|
-
## Starting DSL
|
|
10
|
-
```
|
|
11
|
-
A
|
|
12
|
-
B
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Target DSL
|
|
16
|
-
```
|
|
17
|
-
A
|
|
18
|
-
B
|
|
19
|
-
A->B: hello
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Relevant assertion categories
|
|
23
|
-
INS, KBD, EDT, FOC, FBK
|
|
24
|
-
|
|
25
|
-
## Walkthrough hints (not prescriptive)
|
|
26
|
-
- This is the most common creation action in any sequence diagramming tool; it is the load-bearing scenario for canvas-first editing of ZenUML.
|
|
27
|
-
- Candidate paths to try in order:
|
|
28
|
-
1. Click `A`, look for a "send message" affordance or toolbar button, draw/click toward `B`.
|
|
29
|
-
2. Hover between `A` and `B` in the lifeline area for an inline "+" affordance.
|
|
30
|
-
3. Keyboard: Tab into widget, select `A`, press a hotkey for "new message".
|
|
31
|
-
4. Fall back to typing `A->B: hello` into the DSL editor.
|
|
32
|
-
- Watch specifically for: whether a canvas-first path exists at all, whether message creation automatically enters label edit mode on the new message, whether Escape during message creation cancels cleanly.
|
|
33
|
-
|
|
34
|
-
## Known issues to watch for (optional)
|
|
35
|
-
- If the canvas has no message-creation affordance at all, that is an INS-01 violation at high severity.
|
|
36
|
-
- If the new message is not in edit mode immediately on creation, that is an EDT-03 / FOC-01 violation.
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: insert-participant
|
|
3
|
-
title: Insert a participant on a blank diagram
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## User intent
|
|
7
|
-
The user opens ZenUML to a blank diagram and wants to add one participant named `Alice` so they can start modelling.
|
|
8
|
-
|
|
9
|
-
## Starting DSL
|
|
10
|
-
```
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Target DSL
|
|
14
|
-
```
|
|
15
|
-
Alice
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Relevant assertion categories
|
|
19
|
-
INS, FOC, EDT, KBD
|
|
20
|
-
|
|
21
|
-
## Walkthrough hints (not prescriptive)
|
|
22
|
-
- Blank canvas is the highest-stakes discoverability test — the skill should record how long it takes to find the insertion affordance.
|
|
23
|
-
- Candidate insertion paths to try in order:
|
|
24
|
-
1. Click on the canvas background.
|
|
25
|
-
2. Look for a visible "+" or "Add participant" affordance.
|
|
26
|
-
3. Keyboard: try pressing Enter or `p` on an empty canvas.
|
|
27
|
-
4. Fall back to typing directly into the DSL editor pane.
|
|
28
|
-
- The moment the user successfully names the new participant `Alice` is the scenario's end state.
|
|
29
|
-
|
|
30
|
-
## Known issues to watch for (optional)
|
|
31
|
-
- If the only path is direct DSL editing, that itself is a finding (violates INS-01).
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: rename-participant
|
|
3
|
-
title: Rename a participant via keyboard
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## User intent
|
|
7
|
-
The user has a participant `A` on the canvas and wants to rename it to `Alice` without leaving the keyboard.
|
|
8
|
-
|
|
9
|
-
## Starting DSL
|
|
10
|
-
```
|
|
11
|
-
A
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
## Target DSL
|
|
15
|
-
```
|
|
16
|
-
Alice
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Relevant assertion categories
|
|
20
|
-
KBD, EDT, SEL, FOC
|
|
21
|
-
|
|
22
|
-
## Walkthrough hints (not prescriptive)
|
|
23
|
-
- This scenario is the canonical test of KBD-03 (Enter enters edit mode) and EDT-02 (caret at end of text).
|
|
24
|
-
- Candidate paths to try in order:
|
|
25
|
-
1. Tab into the diagram widget, arrow-key to select `A`, press Enter, type `lice`, press Enter.
|
|
26
|
-
2. Click `A` to select, press Enter, retype.
|
|
27
|
-
3. Double-click `A` to enter edit mode.
|
|
28
|
-
4. Fall back to editing the DSL editor directly.
|
|
29
|
-
- Watch specifically for: whether Enter does anything on the selected participant; whether the caret is placed at the end or the whole label is pre-selected; whether Escape cancels cleanly.
|
|
30
|
-
|
|
31
|
-
## Known issues to watch for (optional)
|
|
32
|
-
- If Enter does nothing on a selected participant, that is a KBD-03 violation at high severity.
|
|
33
|
-
- If only mouse double-click works, that is a KBD-only violation (no mouse-free path).
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: undo-insert
|
|
3
|
-
title: Undo a just-inserted message
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## User intent
|
|
7
|
-
The user has two participants `A` and `B`, inserts a message `A->B: hello`, then immediately presses Ctrl/Cmd+Z to undo. The expected result is that the message is removed and the state is back to just the two participants.
|
|
8
|
-
|
|
9
|
-
## Starting DSL
|
|
10
|
-
```
|
|
11
|
-
A
|
|
12
|
-
B
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Target DSL
|
|
16
|
-
```
|
|
17
|
-
A
|
|
18
|
-
B
|
|
19
|
-
```
|
|
20
|
-
(after: insert `A->B: hello`, then undo)
|
|
21
|
-
|
|
22
|
-
## Relevant assertion categories
|
|
23
|
-
UND, FOC, SEL, KBD
|
|
24
|
-
|
|
25
|
-
## Walkthrough hints (not prescriptive)
|
|
26
|
-
- This scenario exercises the full insertion-then-undo round trip.
|
|
27
|
-
- Steps:
|
|
28
|
-
1. Follow the `insert-message` scenario's walkthrough to get to the post-insert state.
|
|
29
|
-
2. Press Ctrl+Z (or Cmd+Z on macOS).
|
|
30
|
-
3. Observe: is the message removed? Is the DSL editor reverted? Is selection/focus restored to whatever it was before the insert?
|
|
31
|
-
- Watch specifically for: undo granularity (one Ctrl+Z should undo the whole insert, not the individual keystrokes of the label edit) and focus restoration (FOC-03).
|
|
32
|
-
|
|
33
|
-
## Known issues to watch for (optional)
|
|
34
|
-
- If the undo leaves the label partially typed, UND-02 is violated.
|
|
35
|
-
- If focus ends up on the document body after undo, FOC-03 is violated.
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Node.js & Browser Tools",
|
|
3
|
-
"image": "mcr.microsoft.com/devcontainers/typescript-node:20",
|
|
4
|
-
"features": {
|
|
5
|
-
"ghcr.io/devcontainers/features/node:2": {
|
|
6
|
-
"version": "none"
|
|
7
|
-
}
|
|
8
|
-
},
|
|
9
|
-
"forwardPorts": [9323],
|
|
10
|
-
"customizations": {
|
|
11
|
-
"vscode": {
|
|
12
|
-
"extensions": [
|
|
13
|
-
"dbaeumer.vscode-eslint",
|
|
14
|
-
"esbenp.prettier-vscode"
|
|
15
|
-
]
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
// Add your source code to the container
|
|
19
|
-
"postCreateCommand": "pnpm install",
|
|
20
|
-
"remoteUser": "node"
|
|
21
|
-
}
|
package/.dockerignore
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
node_modules
|
|
2
|
-
.git
|
|
3
|
-
.gitignore
|
|
4
|
-
.github
|
|
5
|
-
*.md
|
|
6
|
-
dist
|
|
7
|
-
.watchmanconfig
|
|
8
|
-
.prettierrc
|
|
9
|
-
.prettierignore
|
|
10
|
-
.editorconfig
|
|
11
|
-
.eslintignore
|
|
12
|
-
.eslintrc.js
|
|
13
|
-
.git-blame-ignore-revs
|
|
14
|
-
.vscode
|
|
15
|
-
cypress
|
|
16
|
-
cypress.config.ts
|
|
17
|
-
docs
|
|
18
|
-
test
|
|
19
|
-
vite.config.lib.js
|
package/.eslintrc.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
env: {
|
|
3
|
-
browser: true,
|
|
4
|
-
es2021: true,
|
|
5
|
-
node: true,
|
|
6
|
-
jest: true,
|
|
7
|
-
},
|
|
8
|
-
extends: [
|
|
9
|
-
"eslint:recommended",
|
|
10
|
-
"plugin:@typescript-eslint/recommended",
|
|
11
|
-
"plugin:prettier/recommended",
|
|
12
|
-
],
|
|
13
|
-
globals: {
|
|
14
|
-
CodeMirror: "readonly",
|
|
15
|
-
},
|
|
16
|
-
overrides: [
|
|
17
|
-
{
|
|
18
|
-
env: {
|
|
19
|
-
node: true,
|
|
20
|
-
},
|
|
21
|
-
files: [".eslintrc.{js,cjs}"],
|
|
22
|
-
parserOptions: {
|
|
23
|
-
sourceType: "script",
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
],
|
|
27
|
-
parserOptions: {
|
|
28
|
-
ecmaVersion: "latest",
|
|
29
|
-
parser: "@typescript-eslint/parser",
|
|
30
|
-
sourceType: "module",
|
|
31
|
-
},
|
|
32
|
-
plugins: ["@typescript-eslint", "html"],
|
|
33
|
-
rules: {
|
|
34
|
-
"@typescript-eslint/ban-ts-comment": "off",
|
|
35
|
-
"@typescript-eslint/no-var-requires": "off",
|
|
36
|
-
"@typescript-eslint/no-explicit-any": "off",
|
|
37
|
-
"@typescript-eslint/no-this-alias": "off",
|
|
38
|
-
},
|
|
39
|
-
};
|
package/.git-blame-ignore-revs
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
# This file is used to configure to ignore the given commit sha in git blame
|
|
2
|
-
# To apply this file, run the following command:
|
|
3
|
-
# git config blame.ignorerevsfile .git-blame-ignore-revs
|
|
4
|
-
|
|
5
|
-
# This commit formatted the entire codebase
|
|
6
|
-
80987154e7740ddae2c7c0a04607bc25da51586e
|
package/.kiro/hooks/README.md
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# Kiro Agent Hooks
|
|
2
|
-
|
|
3
|
-
This directory contains custom hooks that automatically execute when specific events occur in Kiro.
|
|
4
|
-
|
|
5
|
-
## Session Sound Notification Hook
|
|
6
|
-
|
|
7
|
-
**File:** `session-sound-notification.json` and `session-sound-notification.js`
|
|
8
|
-
|
|
9
|
-
**Purpose:** Plays system sounds to notify you when:
|
|
10
|
-
|
|
11
|
-
- An AI session completes
|
|
12
|
-
- User input is required to continue
|
|
13
|
-
- An error occurs
|
|
14
|
-
|
|
15
|
-
**Sounds Used (macOS):**
|
|
16
|
-
|
|
17
|
-
- **Session Complete:** Glass.aiff - A pleasant chime when tasks finish
|
|
18
|
-
- **Input Required:** Sosumi.aiff - An attention-getting sound when you need to respond
|
|
19
|
-
- **Error:** Basso.aiff - A distinctive sound for errors
|
|
20
|
-
- **Default:** Ping.aiff - Fallback sound
|
|
21
|
-
|
|
22
|
-
**Configuration:**
|
|
23
|
-
The hook is enabled by default and will auto-execute. You can disable it by setting `"enabled": false` in the JSON configuration file.
|
|
24
|
-
|
|
25
|
-
**Platform Notes:**
|
|
26
|
-
|
|
27
|
-
- Currently optimized for macOS using the `afplay` command
|
|
28
|
-
- Uses built-in system sounds located in `/System/Library/Sounds/`
|
|
29
|
-
- For other platforms, the sound files and playback command would need to be adjusted
|
|
30
|
-
|
|
31
|
-
## Managing Hooks
|
|
32
|
-
|
|
33
|
-
You can:
|
|
34
|
-
|
|
35
|
-
1. View current hooks in the Kiro Explorer under "Agent Hooks"
|
|
36
|
-
2. Use Command Palette → "Open Kiro Hook UI" to create new hooks
|
|
37
|
-
3. Edit hook files directly in this directory
|
|
38
|
-
4. Enable/disable hooks by modifying the `enabled` property
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session Sound Notification Hook
|
|
3
|
-
* Plays a sound when sessions end or user input is required
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const playSound = (soundType = 'default') => {
|
|
7
|
-
// For macOS, we can use the 'afplay' command to play system sounds
|
|
8
|
-
const sounds = {
|
|
9
|
-
default: '/System/Library/Sounds/Ping.aiff',
|
|
10
|
-
complete: '/System/Library/Sounds/Glass.aiff',
|
|
11
|
-
attention: '/System/Library/Sounds/Sosumi.aiff',
|
|
12
|
-
error: '/System/Library/Sounds/Basso.aiff'
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const soundFile = sounds[soundType] || sounds.default;
|
|
16
|
-
|
|
17
|
-
try {
|
|
18
|
-
// Use afplay to play the sound on macOS
|
|
19
|
-
require('child_process').exec(`afplay "${soundFile}"`, (error) => {
|
|
20
|
-
if (error) {
|
|
21
|
-
console.log('Could not play sound:', error.message);
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
} catch (err) {
|
|
25
|
-
console.log('Sound playback failed:', err.message);
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
module.exports = {
|
|
30
|
-
onSessionEnd: () => {
|
|
31
|
-
console.log('🔊 Session completed - playing completion sound');
|
|
32
|
-
playSound('complete');
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
onUserInputRequired: () => {
|
|
36
|
-
console.log('🔊 User input needed - playing attention sound');
|
|
37
|
-
playSound('attention');
|
|
38
|
-
},
|
|
39
|
-
|
|
40
|
-
onError: () => {
|
|
41
|
-
console.log('🔊 Error occurred - playing error sound');
|
|
42
|
-
playSound('error');
|
|
43
|
-
}
|
|
44
|
-
};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Session Sound Notification",
|
|
3
|
-
"description": "Plays a sound when a session ends or user input is needed",
|
|
4
|
-
"triggers": [
|
|
5
|
-
{
|
|
6
|
-
"event": "session.end",
|
|
7
|
-
"description": "Triggered when an AI session completes"
|
|
8
|
-
},
|
|
9
|
-
{
|
|
10
|
-
"event": "user.input.required",
|
|
11
|
-
"description": "Triggered when the AI needs user input to continue"
|
|
12
|
-
}
|
|
13
|
-
],
|
|
14
|
-
"actions": [
|
|
15
|
-
{
|
|
16
|
-
"type": "system.sound",
|
|
17
|
-
"sound": "notification",
|
|
18
|
-
"description": "Play system notification sound"
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
"enabled": true,
|
|
22
|
-
"autoExecute": true
|
|
23
|
-
}
|
package/.mcp.json.example
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"mcpServers": {
|
|
3
|
-
"playwright": {
|
|
4
|
-
"command": "npx",
|
|
5
|
-
"args": ["@playwright/mcp@latest", "--extension"],
|
|
6
|
-
"env": {
|
|
7
|
-
"PLAYWRIGHT_MCP_EXTENSION_TOKEN": "<your-token-here>"
|
|
8
|
-
}
|
|
9
|
-
},
|
|
10
|
-
"chrome-devtools": {
|
|
11
|
-
"type": "stdio",
|
|
12
|
-
"command": "npx",
|
|
13
|
-
"args": ["-y", "chrome-devtools-mcp"],
|
|
14
|
-
"env": {}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
package/.nvmrc
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
20
|
package/.prettierignore
DELETED
package/.prettierrc
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
<!-- Sync Impact Report
|
|
2
|
-
Version change: 1.0.0 → 1.1.0 (New principle added)
|
|
3
|
-
Modified principles: None
|
|
4
|
-
Added sections: II. Task Focus principle
|
|
5
|
-
Removed sections: None
|
|
6
|
-
Templates requiring updates: ✅ plan-template.md
|
|
7
|
-
Follow-up TODOs: RATIFICATION_DATE needs confirmation
|
|
8
|
-
-->
|
|
9
|
-
|
|
10
|
-
# ZenUML Core Constitution
|
|
11
|
-
|
|
12
|
-
## Core Principles
|
|
13
|
-
|
|
14
|
-
### I. Parser Simplicity
|
|
15
|
-
|
|
16
|
-
The ANTLR lexer and parser MUST remain simple and maintainable. Edge cases and
|
|
17
|
-
complex scenarios SHALL be handled in utility methods or the renderer, not in the
|
|
18
|
-
grammar. Reasonable fallbacks are preferred over grammar complexity. This ensures
|
|
19
|
-
the parser remains understandable, testable, and maintainable while avoiding
|
|
20
|
-
fragility from over-engineering.
|
|
21
|
-
|
|
22
|
-
### II. Task Focus
|
|
23
|
-
|
|
24
|
-
When working on one task, focus on that task. Do not try to fix unrelated issues
|
|
25
|
-
(code smell, inconsistency, or even defects). You SHALL mention unrelated issues
|
|
26
|
-
but MUST NOT fix them. This ensures changes remain scoped, reviewable, and
|
|
27
|
-
traceable to specific requirements.
|
|
28
|
-
|
|
29
|
-
## Governance
|
|
30
|
-
|
|
31
|
-
The Constitution supersedes all other development practices. Amendments require documentation and versioning.
|
|
32
|
-
|
|
33
|
-
**Version**: 1.1.0 | **Ratified**: TODO(RATIFICATION_DATE): Needs confirmation | **Last Amended**: 2025-10-06
|