You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .github/copilot-instructions.md
+33-10Lines changed: 33 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,22 +2,45 @@
2
2
3
3
## Project Rules
4
4
5
-
Read and follow all guidelines in [`.roo/rules/rules.md`](./.roo/rules/rules.md).
5
+
- See the overview of the project in `.kilocode/rules/overview.md`
6
+
- Read and follow all guidelines in `.kilocode/rules/rules.md`
6
7
7
8
---
8
9
9
10
## Skill Guides
10
11
11
12
This project uses a set of "skill" guides — focused how-to documents for common implementation tasks. When your task matches one of the descriptions below, **read the linked SKILL.md file before proceeding** and follow its instructions precisely.
12
13
13
-
| Skill | Description |
14
-
|-------|-------------|
15
-
|[add-config](./.kilocode/skills/add-config/SKILL.md)| Guide for adding new configuration settings to Wave Terminal. Use when adding a new setting to the configuration system, implementing a new config key, or adding user-customizable settings. |
16
-
|[add-rpc](./.kilocode/skills/add-rpc/SKILL.md)| Guide for adding new RPC calls to Wave Terminal. Use when implementing new RPC commands, adding server-client communication methods, or extending the RPC interface with new functionality. |
17
-
|[add-wshcmd](./.kilocode/skills/add-wshcmd/SKILL.md)| Guide for adding new wsh commands to Wave Terminal. Use when implementing new CLI commands, adding command-line functionality, or extending the wsh command interface. |
18
-
|[context-menu](./.kilocode/skills/context-menu/SKILL.md)| Guide for creating and displaying context menus in Wave Terminal. Use when implementing right-click menus, adding context menu items, creating submenus, or handling menu interactions with checkboxes and separators. |
19
-
|[create-view](./.kilocode/skills/create-view/SKILL.md)| Guide for implementing a new view type in Wave Terminal. Use when creating a new view component, implementing the ViewModel interface, registering a new view type in BlockRegistry, or adding a new content type to display within blocks. |
20
-
|[electron-api](./.kilocode/skills/electron-api/SKILL.md)| Guide for adding new Electron APIs to Wave Terminal. Use when implementing new frontend-to-electron communications via preload/IPC. |
21
-
|[wps-events](./.kilocode/skills/wps-events/SKILL.md)| Guide for working with Wave Terminal's WPS (Wave PubSub) event system. Use when implementing new event types, publishing events, subscribing to events, or adding asynchronous communication between components. |
| add-config |`.kilocode/skills/add-config/SKILL.md`| Guide for adding new configuration settings to Wave Terminal. Use when adding a new setting to the configuration system, implementing a new config key, or adding user-customizable settings. |
17
+
| add-rpc |`.kilocode/skills/add-rpc/SKILL.md`| Guide for adding new RPC calls to Wave Terminal. Use when implementing new RPC commands, adding server-client communication methods, or extending the RPC interface with new functionality. |
18
+
| add-wshcmd |`.kilocode/skills/add-wshcmd/SKILL.md`| Guide for adding new wsh commands to Wave Terminal. Use when implementing new CLI commands, adding command-line functionality, or extending the wsh command interface. |
19
+
| context-menu |`.kilocode/skills/context-menu/SKILL.md`| Guide for creating and displaying context menus in Wave Terminal. Use when implementing right-click menus, adding context menu items, creating submenus, or handling menu interactions with checkboxes and separators. |
20
+
| create-view |`.kilocode/skills/create-view/SKILL.md`| Guide for implementing a new view type in Wave Terminal. Use when creating a new view component, implementing the ViewModel interface, registering a new view type in BlockRegistry, or adding a new content type to display within blocks. |
21
+
| electron-api |`.kilocode/skills/electron-api/SKILL.md`| Guide for adding new Electron APIs to Wave Terminal. Use when implementing new frontend-to-electron communications via preload/IPC. |
22
+
| waveenv |`.kilocode/skills/waveenv/SKILL.md`| Guide for creating WaveEnv narrowings in Wave Terminal. Use when writing a named subset type of WaveEnv for a component tree, documenting environmental dependencies, or enabling mock environments for preview/test server usage. |
23
+
| wps-events |`.kilocode/skills/wps-events/SKILL.md`| Guide for working with Wave Terminal's WPS (Wave PubSub) event system. Use when implementing new event types, publishing events, subscribing to events, or adding asynchronous communication between components. |
22
24
23
25
> **How skills work:** Each skill is a self-contained guide covering the exact files to edit, patterns to follow, and steps to take for a specific type of task in this codebase. If your task matches a skill's description, open that SKILL.md and treat it as your primary reference for the implementation.
26
+
27
+
---
28
+
29
+
## Preview Server
30
+
31
+
To run the standalone component preview (no Electron, no backend required):
32
+
33
+
```
34
+
task preview
35
+
```
36
+
37
+
This runs `cd frontend/preview && npx vite` and serves at **http://localhost:7007** (port configured in `frontend/preview/vite.config.ts`).
38
+
39
+
To build a static preview: `task build:preview`
40
+
41
+
**Do NOT use any of the following to start the preview — they all launch the full Electron app or serve the wrong content:**
42
+
43
+
-`npm run dev` — runs `electron-vite dev`, launches Electron
44
+
-`npm run start` — also launches Electron
45
+
-`npx vite` from the repo root — uses the Electron-Vite config, not the preview app
46
+
- Serving the `dist/` directory — the preview app is never built there; it has its own build output
description: Guide for creating WaveEnv narrowings in Wave Terminal. Use when writing a named subset type of WaveEnv for a component tree, documenting environmental dependencies, or enabling mock environments for preview/test server usage.
4
+
---
5
+
6
+
# WaveEnv Narrowing Skill
7
+
8
+
## Purpose
9
+
10
+
A WaveEnv narrowing creates a _named subset type_ of `WaveEnv` that:
11
+
12
+
1. Documents exactly which parts of the environment a component tree actually uses.
13
+
2. Forms a type contract so callers and tests know what to provide.
14
+
3. Enables mocking in the preview/test server — you only need to implement what's listed.
15
+
16
+
## When To Create One
17
+
18
+
Create a narrowing whenever you are writing a component (or group of components) that you want to test in the preview server, or when you want to make the environmental dependencies of a component tree explicit.
19
+
20
+
## Core Principle: Only Include What You Use
21
+
22
+
**Only list the fields, methods, atoms, and keys that the component tree actually accesses.** If you don't call `wos`, don't include `wos`. If you only call one RPC command, only list that one command. The narrowing is a precise dependency declaration — not a copy of `WaveEnv`.
23
+
24
+
## File Location
25
+
26
+
-**Separate file** (preferred for shared/complex envs): name it `<feature>env.ts` next to the component, e.g. `frontend/app/block/blockenv.ts`.
27
+
-**Inline** (acceptable for small, single-file components): export the type directly from the component file, e.g. `WidgetsEnv` in `frontend/app/workspace/widgets.tsx`.
28
+
29
+
## Imports Required
30
+
31
+
```ts
32
+
import {
33
+
BlockMetaKeyAtomFnType, // only if you use getBlockMetaKeyAtom
34
+
ConnConfigKeyAtomFnType, // only if you use getConnConfigKeyAtom
35
+
SettingsKeyAtomFnType, // only if you use getSettingsKeyAtom
36
+
WaveEnv,
37
+
WaveEnvSubset,
38
+
} from"@/app/waveenv/waveenv";
39
+
```
40
+
41
+
## The Shape
42
+
43
+
```ts
44
+
exporttypeMyEnv=WaveEnvSubset<{
45
+
// --- Simple WaveEnv properties ---
46
+
// Copy the type verbatim from WaveEnv with WaveEnv["key"] syntax.
47
+
isDev:WaveEnv["isDev"];
48
+
createBlock:WaveEnv["createBlock"];
49
+
showContextMenu:WaveEnv["showContextMenu"];
50
+
platform:WaveEnv["platform"];
51
+
52
+
// --- electron: list only the methods you call ---
// TypeScript now enforces you only access what's in MyEnv.
120
+
const val =useAtomValue(env.getSettingsKeyAtom("app:focusfollowscursor"));
121
+
...
122
+
});
123
+
```
124
+
125
+
The generic parameter on `useWaveEnv<MyEnv>()` casts the context to your narrowed type. The real production `WaveEnv` satisfies every narrowing; mock envs only need to implement the listed subset.
126
+
127
+
## Real Examples
128
+
129
+
-`BlockEnv` in `frontend/app/block/blockenv.ts` — complex narrowing with all section types, in a separate file.
130
+
-`WidgetsEnv` in `frontend/app/workspace/widgets.tsx` — smaller narrowing defined inline in the component file.
Copy file name to clipboardExpand all lines: .roo/rules/rules.md
+1-2Lines changed: 1 addition & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -84,8 +84,7 @@ The full API is defined in custom.d.ts as type ElectronApi.
84
84
85
85
-**CRITICAL: Completion format MUST be: "Done: [one-line description]"**
86
86
-**Keep your Task Completed summaries VERY short**
87
-
-**No lengthy pre-completion summaries** - Do not provide detailed explanations of implementation before using attempt_completion
88
-
-**No recaps of changes** - Skip explaining what was done before completion
87
+
-**No double-summarization** - Put your summary ONLY inside attempt_completion. Do not write a summary in the message body AND then repeat it in attempt_completion. One summary, one place.
89
88
-**Go directly to completion** - After making changes, proceed directly to attempt_completion without summarizing
90
89
- The project is currently an un-released POC / MVP. Do not worry about backward compatibility when making changes
91
90
- With React hooks, always complete all hook calls at the top level before any conditional returns (including jotai hook calls useAtom and useAtomValue); when a user explicitly tells you a function handles null inputs, trust them and stop trying to "protect" it with unnecessary checks or workarounds.
0 commit comments