@vpxa/aikit 0.1.20 → 0.1.22

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 (48) hide show
  1. package/package.json +1 -1
  2. package/packages/cli/dist/commands/init/scaffold.d.ts +3 -3
  3. package/packages/cli/dist/commands/init/scaffold.js +1 -1
  4. package/packages/cli/dist/commands/init/user.js +4 -4
  5. package/packages/core/dist/types.d.ts +2 -0
  6. package/packages/flows/dist/adapters/claude-plugin.js +1 -1
  7. package/packages/flows/dist/adapters/copilot.js +1 -1
  8. package/packages/flows/dist/builtins.js +1 -1
  9. package/packages/flows/dist/loader.js +1 -1
  10. package/packages/flows/dist/types.d.ts +2 -2
  11. package/packages/indexer/dist/smart-index-scheduler.d.ts +4 -1
  12. package/packages/indexer/dist/smart-index-scheduler.js +1 -1
  13. package/packages/server/dist/index.js +1 -1
  14. package/packages/server/dist/tool-metadata.js +1 -1
  15. package/packages/server/dist/tools/flow.tools.js +1 -1
  16. package/packages/store/dist/lance-store.d.ts +2 -0
  17. package/packages/store/dist/lance-store.js +1 -1
  18. package/scaffold/definitions/bodies.mjs +8 -8
  19. package/scaffold/definitions/plugins.mjs +92 -0
  20. package/scaffold/definitions/protocols.mjs +2 -2
  21. package/scaffold/flows/aikit-advanced/README.md +10 -10
  22. package/scaffold/flows/aikit-advanced/flow.json +6 -6
  23. package/scaffold/flows/aikit-advanced/{skills/design/SKILL.md → steps/design/README.md} +30 -0
  24. package/scaffold/flows/aikit-advanced/{skills/execute/SKILL.md → steps/execute/README.md} +19 -0
  25. package/scaffold/flows/aikit-advanced/{skills/plan/SKILL.md → steps/plan/README.md} +20 -0
  26. package/scaffold/flows/aikit-advanced/{skills/spec/SKILL.md → steps/spec/README.md} +19 -0
  27. package/scaffold/flows/aikit-advanced/{skills/task/SKILL.md → steps/task/README.md} +18 -0
  28. package/scaffold/flows/aikit-advanced/{skills/verify/SKILL.md → steps/verify/README.md} +21 -0
  29. package/scaffold/flows/aikit-basic/README.md +8 -8
  30. package/scaffold/flows/aikit-basic/flow.json +4 -4
  31. package/scaffold/flows/aikit-basic/{skills/assess/SKILL.md → steps/assess/README.md} +25 -0
  32. package/scaffold/flows/aikit-basic/{skills/design/SKILL.md → steps/design/README.md} +32 -0
  33. package/scaffold/flows/aikit-basic/{skills/implement/SKILL.md → steps/implement/README.md} +24 -0
  34. package/scaffold/flows/aikit-basic/{skills/verify/SKILL.md → steps/verify/README.md} +25 -0
  35. package/scaffold/general/agents/Orchestrator.agent.md +6 -6
  36. package/scaffold/general/agents/Planner.agent.md +2 -2
  37. package/scaffold/general/agents/_shared/code-agent-base.md +2 -2
  38. package/scaffold/general/skills/adr-skill/SKILL.md +6 -6
  39. package/scaffold/general/skills/aikit/SKILL.md +10 -10
  40. package/scaffold/general/skills/brainstorming/SKILL.md +11 -13
  41. package/scaffold/general/skills/c4-architecture/SKILL.md +1 -0
  42. package/scaffold/general/skills/requirements-clarity/SKILL.md +5 -3
  43. package/scaffold/general/skills/session-handoff/SKILL.md +2 -0
  44. package/scaffold/general/skills/brainstorming/scripts/frame-template.html +0 -365
  45. package/scaffold/general/skills/brainstorming/scripts/helper.js +0 -216
  46. package/scaffold/general/skills/brainstorming/scripts/server.cjs +0 -9
  47. package/scaffold/general/skills/brainstorming/scripts/server.src.cjs +0 -249
  48. package/scaffold/general/skills/brainstorming/visual-companion.md +0 -430
@@ -43,7 +43,7 @@ core → store → embeddings → chunker → indexer → analyzers → tools
43
43
  ### Start (do ALL)
44
44
  ```
45
45
  flow_status({}) # Check/resume active flow FIRST
46
- # If flow active → flow_read_skill({ step }) → follow skill instructions
46
+ # If flow active → flow_read_instruction({ step }) → follow step instructions
47
47
  status({}) # Check AI Kit health + onboard state
48
48
  # If onboard not run → onboard({ path: "." }) # First-time codebase analysis
49
49
  flow_list({}) # See available flows
@@ -189,7 +189,7 @@ Lane actions: `create` (copy files to lane), `list`, `status` (modified/added/de
189
189
  | `flow_start` | `aikit flow start` | Start a named flow |
190
190
  | `flow_step` | `aikit flow step` | Advance, skip, or redo the current step |
191
191
  | `flow_status` | `aikit flow status` | Check if a flow is active and view the current step |
192
- | `flow_read_skill` | `aikit flow read-skill` | Read the current step's skill file content directly |
192
+ | `flow_read_instruction` | `aikit flow read-instruction` | Read the current step's instruction file content directly |
193
193
  | `flow_reset` | `aikit flow reset` | Clear flow state to start over |
194
194
 
195
195
  ### Presentation (1)
@@ -219,8 +219,8 @@ Flows are multi-step guided workflows that structure complex tasks. Each step ha
219
219
  flow_list() # See available flows
220
220
  flow_info({ flow: "aikit:basic" }) # View steps, skills, agents
221
221
  flow_start({ flow: "aikit:basic" }) # Start — sets current step to first
222
- flow_read_skill({ step: "assess" }) # Read current step's skill instructions
223
- # ... do the work described in the skill ...
222
+ flow_read_instruction({ step: "assess" }) # Read current step's instructions
223
+ # ... do the work described in the instruction ...
224
224
  flow_step({ action: "next" }) # Advance to next step
225
225
  flow_step({ action: "skip" }) # Skip current step
226
226
  flow_step({ action: "redo" }) # Redo current step
@@ -241,14 +241,14 @@ artifacts_dir: .spec
241
241
  steps:
242
242
  - id: design
243
243
  name: Design
244
- skill: skills/design/SKILL.md
244
+ instruction: steps/design/README.md
245
245
  description: "Create the design document"
246
246
  produces: [design.md]
247
247
  requires: []
248
248
  agents: [Planner]
249
249
  - id: implement
250
250
  name: Implement
251
- skill: skills/implement/SKILL.md
251
+ instruction: steps/implement/README.md
252
252
  description: "Implement the design"
253
253
  produces: [code]
254
254
  requires: [design]
@@ -271,7 +271,7 @@ install: []
271
271
  ### Agent-Flow Integration
272
272
 
273
273
  - All code agents have a "Flows" section instructing them to check `flow_status()` first
274
- - If a flow is active, the agent follows the current step's skill via `flow_read_skill()`
274
+ - If a flow is active, the agent follows the current step's instruction via `flow_read_instruction()`
275
275
  - After completing a step's work, advance with `flow_step({ action: "next" })`
276
276
  - The **Orchestrator** selects and starts flows; other agents follow them
277
277
  - The **Orchestrator** specifies `aikit` skill loading — all agents should load `aikit` skill to access flow tools
@@ -528,7 +528,7 @@ Flows are structured multi-step workflows that guide agents through complex task
528
528
  | `flow_info` | Get flow details including steps and skill paths |
529
529
  | `flow_start` | Start a named flow |
530
530
  | `flow_step` | Advance: `next`, `skip`, or `redo` current step |
531
- | `flow_read_skill` | Read the current step's skill file content directly |
531
+ | `flow_read_instruction` | Read the current step's instruction file content directly |
532
532
  | `flow_reset` | Clear flow state to start over |
533
533
 
534
534
  ### Flow Selection
@@ -545,7 +545,7 @@ Flows are structured multi-step workflows that guide agents through complex task
545
545
  ### Flow Lifecycle
546
546
 
547
547
  1. **Start**: `flow_list({})` → choose flow → `flow_start({ flow: "<name>" })`
548
- 2. **Each step**: `flow_read_skill({ step: "<name>" })` → follow skill instructions → complete work
548
+ 2. **Each step**: `flow_read_instruction({ step: "<name>" })` → follow step instructions → complete work
549
549
  3. **Advance**: `flow_step({ action: "next" })` → repeat from step 2
550
- 4. **Resume**: `flow_status({})` → if active, `flow_read_skill` for current step → continue
550
+ 4. **Resume**: `flow_status({})` → if active, `flow_read_instruction` for current step → continue
551
551
  5. **Reset**: `flow_reset({})` if you need to start over
@@ -90,7 +90,7 @@ digraph brainstorming_simple {
90
90
 
91
91
  1. **Explore project context** — check files, docs, recent commits
92
92
  2. **Assess scope** — if multiple independent subsystems, decompose before detailing (see below)
93
- 3. **Offer visual companion** (if topic will involve visual questions) — this is its own message, not combined with a clarifying question. See `visual-companion.md`.
93
+ 3. **Offer visual presentation support** (if topic will involve visual questions) — this is its own message, not combined with a clarifying question. Use `present({ format: "html" })` to display brainstorming results as a rich visual dashboard.
94
94
  4. **Ask clarifying questions** — one at a time, understand purpose/constraints/success criteria
95
95
  5. **Propose 2-3 approaches via Decision Protocol** — launch ALL 4 Researcher variants in parallel to independently generate approaches. Synthesize their output into deduplicated options with trade-offs and your recommendation. Present agreements and disagreements to the user. *(See "Decision Protocol Integration" below.)*
96
96
  6. **Present design** — in sections scaled to their complexity, get user approval after each section
@@ -122,7 +122,7 @@ digraph brainstorming_advanced {
122
122
  "Assess scope" [shape=diamond];
123
123
  "Decompose into sub-projects" [shape=box];
124
124
  "Visual questions ahead?" [shape=diamond];
125
- "Offer Visual Companion\n(own message)" [shape=box];
125
+ "Offer Visual Presentation\n(own message)" [shape=box];
126
126
  "Ask clarifying questions" [shape=box];
127
127
  "Decision Protocol:\n4 Researchers in parallel" [shape=box, style=bold];
128
128
  "Synthesize approaches" [shape=box];
@@ -138,9 +138,9 @@ digraph brainstorming_advanced {
138
138
  "Assess scope" -> "Decompose into sub-projects" [label="too large"];
139
139
  "Assess scope" -> "Visual questions ahead?" [label="right-sized"];
140
140
  "Decompose into sub-projects" -> "Visual questions ahead?" [label="first sub-project"];
141
- "Visual questions ahead?" -> "Offer Visual Companion\n(own message)" [label="yes"];
141
+ "Visual questions ahead?" -> "Offer Visual Presentation\n(own message)" [label="yes"];
142
142
  "Visual questions ahead?" -> "Ask clarifying questions" [label="no"];
143
- "Offer Visual Companion\n(own message)" -> "Ask clarifying questions";
143
+ "Offer Visual Presentation\n(own message)" -> "Ask clarifying questions";
144
144
  "Ask clarifying questions" -> "Decision Protocol:\n4 Researchers in parallel";
145
145
  "Decision Protocol:\n4 Researchers in parallel" -> "Synthesize approaches";
146
146
  "Synthesize approaches" -> "Present design sections";
@@ -242,18 +242,16 @@ Wait for the user's response. If they request changes, make them and re-run the
242
242
  - **Incremental validation** — Present design, get approval before moving on
243
243
  - **Be flexible** — Go back and clarify when something doesn't make sense
244
244
 
245
- ## Visual Companion (Advanced Mode Only)
245
+ ## Visual Presentation Support (Advanced Mode Only)
246
246
 
247
- A browser-based companion for showing mockups, diagrams, and visual options during brainstorming. Available as a tool not a mode. Accepting the companion means it's available for questions that benefit from visual treatment; it does NOT mean every question goes through the browser.
247
+ Use the `present` MCP tool for showing mockups, diagrams, and visual options during brainstorming. It is available as a tool, not a separate mode. Choosing this means you can present rich visual output when it helps; it does NOT mean every question should become visual.
248
248
 
249
- **Offering the companion:** When you anticipate that upcoming questions will involve visual content (mockups, layouts, diagrams), offer it once for consent:
250
- > "Some of what we're working on might be easier to explain if I can show it to you in a web browser. I can put together mockups, diagrams, comparisons, and other visuals as we go. The browser opens automatically when I start the visual companion. This feature is still new and can be token-intensive. Want to try it?"
249
+ **Offering visual presentation:** When you anticipate that upcoming questions will involve visual content (mockups, layouts, diagrams), offer it once for consent:
250
+ > "Some of what we're working on might be easier to explain visually. I can use `present({ format: \"html\" })` to show mockups, diagrams, comparisons, and other visuals as we go. Want me to use that when helpful?"
251
251
 
252
252
  **This offer MUST be its own message.** Do not combine it with clarifying questions, context summaries, or any other content. Wait for the user's response before continuing. If they decline, proceed with text-only brainstorming.
253
253
 
254
- **Per-question decision:** Even after the user accepts, decide FOR EACH QUESTION whether to use the browser or the terminal. The test: **would the user understand this better by seeing it than reading it?**
254
+ **Per-question decision:** Even after the user accepts, decide FOR EACH QUESTION whether to use visual output or plain chat. The test: **would the user understand this better by seeing it than reading it?**
255
255
 
256
- - **Use the browser** for visual content — mockups, wireframes, layout comparisons, architecture diagrams, side-by-side visual designs
257
- - **Use the terminal** for text content — requirements questions, conceptual choices, tradeoff lists, A/B/C/D text options, scope decisions
258
-
259
- If they agree to the companion, read `visual-companion.md` for the detailed setup and usage guide.
256
+ - **Use `present({ format: "html" })`** for visual content — mockups, wireframes, layout comparisons, architecture diagrams, side-by-side visual designs
257
+ - **Use regular chat** for text content — requirements questions, conceptual choices, tradeoff lists, A/B/C/D text options, scope decisions
@@ -12,6 +12,7 @@ Generate software architecture documentation using C4 model diagrams in Mermaid
12
12
  1. **Understand scope** - Determine which C4 level(s) are needed based on audience
13
13
  2. **Analyze codebase** - Explore the system to identify components, containers, and relationships
14
14
  3. **Generate diagrams** - Create Mermaid C4 diagrams at appropriate abstraction levels
15
+ > **Tip:** Use `present({ format: "html" })` to render diagrams as interactive visual output, rather than raw Mermaid code blocks. This provides a better viewing experience for stakeholders.
15
16
  4. **Document** - Write diagrams to markdown files with explanatory context
16
17
 
17
18
  ## C4 Diagram Levels
@@ -70,7 +70,7 @@ When invoked, detect vague requirements:
70
70
  1. Parse and understand core requirement
71
71
  2. Generate feature name (kebab-case format)
72
72
  3. Determine document version (default `1.0` unless user specifies otherwise)
73
- 4. Ensure `./docs/prds/` exists for PRD output
73
+ 4. Ensure `.spec/{feature_name}/` exists for PRD output
74
74
  5. Perform initial clarity assessment (0-100)
75
75
 
76
76
  **Assessment Rubric**:
@@ -85,6 +85,8 @@ Technical Specificity: /25 points
85
85
  - Integration points identified: 8 pts
86
86
  - Constraints specified: 9 pts
87
87
 
88
+
89
+ If you present this rubric or a requirements scorecard to the user, use `present({ format: 'html' })` to display a rich dashboard when visual formatting would help.
88
90
  Implementation Completeness: /25 points
89
91
  - Edge cases considered: 8 pts
90
92
  - Error handling mentioned: 9 pts
@@ -191,9 +193,9 @@ Once clarity score ≥ 90, generate comprehensive PRD.
191
193
 
192
194
  **Output File**:
193
195
 
194
- 1. **Final PRD**: `./docs/prds/{feature_name}-v{version}-prd.md`
196
+ 1. **Final PRD**: `.spec/{feature_name}/requirements.md`
195
197
 
196
- Use the `Write` tool to create or update this file. Derive `{version}` from the document version recorded in the PRD (default `1.0`).
198
+ Use `create_file` to save this file. Derive `{version}` from the document version recorded in the PRD (default `1.0`).
197
199
 
198
200
  ## PRD Document Structure
199
201
 
@@ -20,6 +20,8 @@ Determine which mode applies:
20
20
  **Proactive suggestion?** After substantial work (5+ file edits, complex debugging, major decisions), suggest:
21
21
  > "We've made significant progress. Consider creating a handoff document to preserve this context for future sessions. Say 'create handoff' when ready."
22
22
 
23
+ > **aikit Integration:** If the project uses the aikit MCP server, complement file-based handoffs with `remember({ title: "Session checkpoint: ...", content: "...", category: "conventions" })` to persist key decisions in the knowledge base. Use `search({ query: "SESSION CHECKPOINT" })` at session start to retrieve past checkpoints.
24
+
23
25
  ## CREATE Workflow
24
26
 
25
27
  ### Step 1: Generate Scaffold
@@ -1,365 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <title>Brainstorming</title>
7
- <style>
8
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
9
-
10
- :root {
11
- --bg: #0d1117;
12
- --surface: #161b22;
13
- --border: #30363d;
14
- --text: #e6edf3;
15
- --text-muted: #8b949e;
16
- --accent: #58a6ff;
17
- --accent-glow: rgba(88, 166, 255, 0.15);
18
- --success: #3fb950;
19
- --radius: 8px;
20
- }
21
-
22
- body {
23
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
24
- background: var(--bg);
25
- color: var(--text);
26
- line-height: 1.6;
27
- min-height: 100vh;
28
- }
29
-
30
- .frame-header {
31
- padding: 16px 24px;
32
- border-bottom: 1px solid var(--border);
33
- display: flex;
34
- align-items: center;
35
- gap: 12px;
36
- }
37
- .frame-header .logo {
38
- font-size: 14px;
39
- font-weight: 600;
40
- color: var(--text-muted);
41
- letter-spacing: 0.5px;
42
- text-transform: uppercase;
43
- }
44
-
45
- .frame-content {
46
- max-width: 960px;
47
- margin: 0 auto;
48
- padding: 32px 24px;
49
- }
50
-
51
- /* Selection indicator bar */
52
- #selection-indicator {
53
- position: fixed;
54
- bottom: 0;
55
- left: 0;
56
- right: 0;
57
- background: var(--surface);
58
- border-top: 1px solid var(--border);
59
- padding: 12px 24px;
60
- display: none;
61
- align-items: center;
62
- justify-content: center;
63
- gap: 8px;
64
- font-size: 14px;
65
- color: var(--accent);
66
- z-index: 100;
67
- }
68
- #selection-indicator.visible { display: flex; }
69
- #selection-indicator .check { font-size: 18px; }
70
-
71
- /* Typography */
72
- h2 {
73
- font-size: 24px;
74
- font-weight: 600;
75
- margin-bottom: 8px;
76
- color: var(--text);
77
- }
78
- h3 {
79
- font-size: 18px;
80
- font-weight: 600;
81
- margin-bottom: 4px;
82
- color: var(--text);
83
- }
84
- h4 {
85
- font-size: 14px;
86
- font-weight: 600;
87
- margin-bottom: 8px;
88
- color: var(--text);
89
- }
90
- .subtitle {
91
- font-size: 16px;
92
- color: var(--text-muted);
93
- margin-bottom: 24px;
94
- }
95
- .section {
96
- margin-bottom: 32px;
97
- }
98
- .label {
99
- font-size: 11px;
100
- font-weight: 600;
101
- text-transform: uppercase;
102
- letter-spacing: 0.8px;
103
- color: var(--text-muted);
104
- margin-bottom: 8px;
105
- }
106
-
107
- /* Options (A/B/C choices) */
108
- .options {
109
- display: flex;
110
- flex-direction: column;
111
- gap: 12px;
112
- margin: 16px 0;
113
- }
114
- .option {
115
- display: flex;
116
- align-items: flex-start;
117
- gap: 16px;
118
- padding: 16px 20px;
119
- background: var(--surface);
120
- border: 2px solid var(--border);
121
- border-radius: var(--radius);
122
- cursor: pointer;
123
- transition: border-color 0.15s, background 0.15s;
124
- }
125
- .option:hover {
126
- border-color: var(--accent);
127
- background: var(--accent-glow);
128
- }
129
- .option.selected {
130
- border-color: var(--accent);
131
- background: var(--accent-glow);
132
- }
133
- .option .letter {
134
- flex-shrink: 0;
135
- width: 32px;
136
- height: 32px;
137
- display: flex;
138
- align-items: center;
139
- justify-content: center;
140
- border-radius: 50%;
141
- background: var(--border);
142
- font-weight: 700;
143
- font-size: 14px;
144
- color: var(--text-muted);
145
- transition: background 0.15s, color 0.15s;
146
- }
147
- .option.selected .letter {
148
- background: var(--accent);
149
- color: var(--bg);
150
- }
151
- .option .content { flex: 1; }
152
- .option .content p {
153
- color: var(--text-muted);
154
- font-size: 14px;
155
- margin-top: 4px;
156
- }
157
-
158
- /* Cards (visual designs) */
159
- .cards {
160
- display: grid;
161
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
162
- gap: 16px;
163
- margin: 16px 0;
164
- }
165
- .card {
166
- background: var(--surface);
167
- border: 2px solid var(--border);
168
- border-radius: var(--radius);
169
- overflow: hidden;
170
- cursor: pointer;
171
- transition: border-color 0.15s, transform 0.15s;
172
- }
173
- .card:hover {
174
- border-color: var(--accent);
175
- transform: translateY(-2px);
176
- }
177
- .card.selected {
178
- border-color: var(--accent);
179
- }
180
- .card-image {
181
- padding: 20px;
182
- background: rgba(255,255,255,0.02);
183
- min-height: 180px;
184
- display: flex;
185
- align-items: center;
186
- justify-content: center;
187
- }
188
- .card-body {
189
- padding: 16px;
190
- }
191
- .card-body p {
192
- color: var(--text-muted);
193
- font-size: 14px;
194
- margin-top: 4px;
195
- }
196
-
197
- /* Mockup container */
198
- .mockup {
199
- background: var(--surface);
200
- border: 1px solid var(--border);
201
- border-radius: var(--radius);
202
- overflow: hidden;
203
- margin: 16px 0;
204
- }
205
- .mockup-header {
206
- padding: 8px 16px;
207
- font-size: 12px;
208
- font-weight: 600;
209
- color: var(--text-muted);
210
- background: rgba(255,255,255,0.03);
211
- border-bottom: 1px solid var(--border);
212
- }
213
- .mockup-body {
214
- padding: 20px;
215
- }
216
-
217
- /* Split view */
218
- .split {
219
- display: grid;
220
- grid-template-columns: 1fr 1fr;
221
- gap: 16px;
222
- margin: 16px 0;
223
- }
224
- @media (max-width: 700px) {
225
- .split { grid-template-columns: 1fr; }
226
- }
227
-
228
- /* Pros/Cons */
229
- .pros-cons {
230
- display: grid;
231
- grid-template-columns: 1fr 1fr;
232
- gap: 16px;
233
- margin: 16px 0;
234
- }
235
- .pros, .cons {
236
- padding: 16px;
237
- border-radius: var(--radius);
238
- }
239
- .pros {
240
- background: rgba(63, 185, 80, 0.08);
241
- border: 1px solid rgba(63, 185, 80, 0.3);
242
- }
243
- .cons {
244
- background: rgba(248, 81, 73, 0.08);
245
- border: 1px solid rgba(248, 81, 73, 0.3);
246
- }
247
- .pros h4 { color: #3fb950; }
248
- .cons h4 { color: #f85149; }
249
- .pros-cons ul {
250
- list-style: none;
251
- padding: 0;
252
- }
253
- .pros-cons li {
254
- padding: 4px 0;
255
- font-size: 14px;
256
- color: var(--text-muted);
257
- }
258
- .pros-cons li::before {
259
- margin-right: 8px;
260
- font-weight: 600;
261
- }
262
- .pros li::before { content: '+'; color: #3fb950; }
263
- .cons li::before { content: '−'; color: #f85149; }
264
-
265
- /* Mock elements (wireframe building blocks) */
266
- .mock-nav {
267
- background: var(--surface);
268
- border: 1px solid var(--border);
269
- border-radius: var(--radius);
270
- padding: 12px 20px;
271
- font-size: 14px;
272
- color: var(--text-muted);
273
- margin-bottom: 12px;
274
- }
275
- .mock-sidebar {
276
- width: 200px;
277
- flex-shrink: 0;
278
- background: var(--surface);
279
- border: 1px solid var(--border);
280
- border-radius: var(--radius);
281
- padding: 16px;
282
- font-size: 13px;
283
- color: var(--text-muted);
284
- margin-right: 12px;
285
- }
286
- .mock-content {
287
- flex: 1;
288
- background: var(--surface);
289
- border: 1px solid var(--border);
290
- border-radius: var(--radius);
291
- padding: 20px;
292
- font-size: 14px;
293
- color: var(--text-muted);
294
- min-height: 200px;
295
- }
296
- .mock-button {
297
- padding: 8px 20px;
298
- background: var(--accent);
299
- color: var(--bg);
300
- border: none;
301
- border-radius: 6px;
302
- font-size: 14px;
303
- font-weight: 600;
304
- cursor: pointer;
305
- }
306
- .mock-button:hover { opacity: 0.9; }
307
- .mock-input {
308
- padding: 8px 12px;
309
- background: var(--surface);
310
- border: 1px solid var(--border);
311
- border-radius: 6px;
312
- color: var(--text);
313
- font-size: 14px;
314
- width: 100%;
315
- max-width: 300px;
316
- }
317
- .mock-input::placeholder { color: var(--text-muted); }
318
- .placeholder {
319
- background: rgba(255,255,255,0.03);
320
- border: 1px dashed var(--border);
321
- border-radius: var(--radius);
322
- padding: 40px 20px;
323
- text-align: center;
324
- color: var(--text-muted);
325
- font-size: 14px;
326
- }
327
-
328
- /* General list styling inside content */
329
- .frame-content ul, .frame-content ol {
330
- padding-left: 20px;
331
- margin: 8px 0;
332
- }
333
- .frame-content li {
334
- margin: 4px 0;
335
- color: var(--text-muted);
336
- font-size: 14px;
337
- }
338
- .frame-content p {
339
- margin: 8px 0;
340
- }
341
- .frame-content a {
342
- color: var(--accent);
343
- text-decoration: none;
344
- }
345
- .frame-content a:hover { text-decoration: underline; }
346
-
347
- </style>
348
- </head>
349
- <body>
350
- <div class="frame-header">
351
- <span class="logo">Brainstorming</span>
352
- </div>
353
- <div class="frame-content">
354
- <!-- CONTENT -->
355
- </div>
356
- <div id="selection-indicator">
357
- <span class="check">✓</span>
358
- <span id="selection-text">Selected</span>
359
- </div>
360
- <script>
361
- const BRAINSTORM_DIR = __BRAINSTORM_DIR__;
362
- <!-- HELPER_SCRIPT -->
363
- </script>
364
- </body>
365
- </html>