whale-igniter 1.3.6 → 1.4.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/CHANGELOG.md +25 -0
- package/README.md +122 -79
- package/dist/selene/cache.js +11 -0
- package/dist/ui/splash.js +1 -1
- package/dist/version.js +1 -1
- package/docs/ROADMAP.md +2 -2
- package/package.json +2 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Whale Igniter are documented here.
|
|
4
|
+
|
|
5
|
+
## 1.4.0 - 2026-06-03
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Local UI theme engine for generated landing pages, with Atlas, Harbor, and Aurora themes.
|
|
10
|
+
- `whale themes list` for browsing shipped themes.
|
|
11
|
+
- Capability-gated `whale ignite` splash with color, Unicode, and plain fallbacks.
|
|
12
|
+
- README Data & privacy section, generated-output ownership note, and font attribution.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Generated landing CSS now emits theme-driven custom properties for color, typography, structure, interaction, and motion.
|
|
17
|
+
- Selene response cache writes now ensure `.whale/` is ignored in the target project's `.gitignore`.
|
|
18
|
+
- Reworded older brand-planning docs to avoid vague status language.
|
|
19
|
+
|
|
20
|
+
### Verified
|
|
21
|
+
|
|
22
|
+
- Selene API keys are read from environment variables and used only in provider request headers.
|
|
23
|
+
- Selene cache stores response text under `.whale/selene/cache`; it does not store API keys.
|
|
24
|
+
- No font binaries are shipped.
|
|
25
|
+
- No telemetry or analytics code is present.
|
package/README.md
CHANGED
|
@@ -9,132 +9,173 @@
|
|
|
9
9
|
<img alt="local first" src="https://img.shields.io/badge/local--first-agent%20memory-%230034D3?labelColor=%23F2ECE1&style=flat-square">
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
---
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
components, decisions, refinements and generated agent context. It is
|
|
16
|
-
CLI-first, deterministic by default, and works with Codex, Claude Code,
|
|
17
|
-
Cursor, Copilot and any MCP client.
|
|
14
|
+
**Your agent is only as smart as the context you give it. Whale makes that context automatic.**
|
|
18
15
|
|
|
19
|
-
|
|
16
|
+
AI agents — Claude Code, Codex, Cursor, Copilot — are powerful but amnesiac by design. Every conversation starts from zero. They don't know what you decided, why you decided it, or which exceptions are intentional. Without structure, they guess.
|
|
20
17
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
npx whale-igniter remember
|
|
25
|
-
npx whale-igniter check
|
|
26
|
-
```
|
|
18
|
+
Whale Igniter gives your repo a **living memory**: design foundations, components, decisions, and approved exceptions — kept in sync by the CLI, readable by any agent, and never dependent on a chat history that will disappear.
|
|
19
|
+
|
|
20
|
+
---
|
|
27
21
|
|
|
28
|
-
|
|
22
|
+
## How it works
|
|
29
23
|
|
|
30
24
|
```bash
|
|
31
25
|
npm install -g whale-igniter
|
|
32
26
|
whale ignite my-app
|
|
33
27
|
```
|
|
34
28
|
|
|
35
|
-
|
|
29
|
+
That single command creates a structured intelligence layer inside your project:
|
|
36
30
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
```text
|
|
31
|
+
```
|
|
40
32
|
my-app/
|
|
41
|
-
├── whale.config.json
|
|
42
|
-
├── CLAUDE.md
|
|
33
|
+
├── whale.config.json # foundations, stack, theme, AI targets
|
|
34
|
+
├── CLAUDE.md # agent-readable project brief, auto-synced
|
|
43
35
|
├── intelligence/
|
|
44
|
-
│ ├── components.json
|
|
45
|
-
│ ├── decisions.json
|
|
46
|
-
│ └── refinements.json
|
|
47
|
-
└── llm-wiki/
|
|
36
|
+
│ ├── components.json # component catalog with variants and states
|
|
37
|
+
│ ├── decisions.json # architectural decisions and their rationale
|
|
38
|
+
│ └── refinements.json # approved exceptions — "this is intentional"
|
|
39
|
+
└── llm-wiki/ # generated markdown, one file per concern
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`intelligence/*.json` is the source of truth. Markdown is generated from it. When you run `whale sync`, everything regenerates — CLAUDE.md, the wiki, the context your agent reads on the next conversation.
|
|
43
|
+
|
|
44
|
+
The agent doesn't guess anymore. It reads.
|
|
45
|
+
|
|
46
|
+
Generated output belongs to you. Files created by Whale Igniter, including generated HTML, CSS, CLAUDE.md, AGENTS.md, wiki pages, and copied theme files, are yours to use and modify; they are not restricted by this project's MIT license.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## What agents can read — and write
|
|
51
|
+
|
|
52
|
+
Whale ships an **MCP server** that exposes your project intelligence as structured tools any compatible client can call:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
whale mcp config --client claude-code
|
|
56
|
+
whale mcp config --client cursor
|
|
57
|
+
whale mcp config --client zed
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
| Tool | What it does |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `whale_project_overview` | Full project brief: stack, foundations, packs, context |
|
|
63
|
+
| `whale_list_components` | Component catalog with files, variants, states, tokens |
|
|
64
|
+
| `whale_list_decisions` | Architectural decisions with rationale and status |
|
|
65
|
+
| `whale_list_refinements` | Approved exceptions — context for drift that's intentional |
|
|
66
|
+
| `whale_insights` | Live analysis: orphans, coverage gaps, tensions, drift |
|
|
67
|
+
| `whale_register_component` | Add a component to the catalog |
|
|
68
|
+
| `whale_record_decision` | Log an architectural decision |
|
|
69
|
+
| `whale_record_refinement` | Mark a drift exception as approved |
|
|
70
|
+
|
|
71
|
+
Agents don't just read context — they can write back to it.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Design intelligence
|
|
76
|
+
|
|
77
|
+
Whale tracks your design system and detects when reality drifts from it.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
whale insights drift spacing # find off-grid spacing in CSS, JSX, Vue, Svelte
|
|
81
|
+
whale insights drift color # find raw hex values outside your token set
|
|
82
|
+
whale insights drift radii # find radius values not in your foundations
|
|
83
|
+
whale insights drift spacing --review # interactively accept or queue each issue
|
|
48
84
|
```
|
|
49
85
|
|
|
50
|
-
|
|
51
|
-
from it so agents always read current project state.
|
|
86
|
+
When something drifts intentionally — a one-off exception, a product decision — you record it as a refinement. Whale stops flagging it. The agent knows it's approved.
|
|
52
87
|
|
|
53
|
-
|
|
88
|
+
---
|
|
54
89
|
|
|
55
|
-
|
|
90
|
+
## Theme engine
|
|
56
91
|
|
|
57
|
-
|
|
92
|
+
Landing pages and generated UI are fully theme-driven. No hardcoded tokens.
|
|
58
93
|
|
|
59
|
-
|
|
94
|
+
```bash
|
|
95
|
+
whale themes list
|
|
96
|
+
whale create landing --theme harbor # royal blue on paper — the Whale brand
|
|
97
|
+
whale create landing --theme aurora # modern SaaS, indigo, generous whitespace
|
|
98
|
+
whale create landing --theme atlas # enterprise minimal, dense, neutral (default)
|
|
99
|
+
```
|
|
60
100
|
|
|
61
|
-
|
|
101
|
+
Each theme defines four tiers — Identity, Typography, Structural, Interaction — and emits a complete CSS custom property block. Swap themes; everything updates.
|
|
62
102
|
|
|
63
|
-
|
|
103
|
+
---
|
|
64
104
|
|
|
65
|
-
## Core
|
|
105
|
+
## Core commands
|
|
66
106
|
|
|
67
|
-
| Command |
|
|
68
|
-
|
|
69
|
-
| `whale ignite my-app` |
|
|
107
|
+
| Command | What it does |
|
|
108
|
+
|---|---|
|
|
109
|
+
| `whale ignite my-app` | Bootstrap a new Whale workspace |
|
|
70
110
|
| `whale ignite my-app --interactive` | Wizard: project type, stack, team size, packs |
|
|
71
|
-
| `whale adopt` | Scan an existing
|
|
72
|
-
| `whale
|
|
73
|
-
| `whale check` |
|
|
74
|
-
| `whale
|
|
75
|
-
| `whale
|
|
76
|
-
| `whale
|
|
77
|
-
| `whale
|
|
78
|
-
| `whale
|
|
79
|
-
| `whale
|
|
80
|
-
| `whale team` | See active operating roles/packs |
|
|
81
|
-
| `whale create component Hero` | Generate a typed React component |
|
|
111
|
+
| `whale adopt` | Scan an existing project and propose components and foundations |
|
|
112
|
+
| `whale sync` | Regenerate CLAUDE.md, wiki, and agent context |
|
|
113
|
+
| `whale check` | Validation + project insights |
|
|
114
|
+
| `whale changes --since HEAD~5` | What changed in intelligence stores since a git ref |
|
|
115
|
+
| `whale themes list` | Browse available UI themes |
|
|
116
|
+
| `whale create landing --theme <name>` | Generate a themed HTML/CSS landing page |
|
|
117
|
+
| `whale create component Hero` | Generate a typed component with intelligence registration |
|
|
118
|
+
| `whale references add --all` | Install the UI component reference library |
|
|
119
|
+
| `whale selene suggest` | AI-powered improvement suggestions (API key optional) |
|
|
82
120
|
| `whale mcp config --client cursor` | Configure an MCP client |
|
|
83
121
|
|
|
84
|
-
|
|
122
|
+
---
|
|
85
123
|
|
|
86
|
-
|
|
124
|
+
## Operating packs
|
|
125
|
+
|
|
126
|
+
Packs are structured roles — not autonomous agents, but instructions and context that help the agent you already use work with better information.
|
|
87
127
|
|
|
88
128
|
```bash
|
|
89
|
-
whale team add
|
|
90
|
-
whale team add
|
|
91
|
-
whale team add
|
|
92
|
-
whale team add
|
|
93
|
-
whale team add selene
|
|
129
|
+
whale team add lighthouse # quality and validation checks
|
|
130
|
+
whale team add scribe # documentation and wiki generation
|
|
131
|
+
whale team add forge # implementation architecture
|
|
132
|
+
whale team add atlas # product strategy
|
|
133
|
+
whale team add selene # AI suggestions and audits
|
|
94
134
|
```
|
|
95
135
|
|
|
96
|
-
|
|
97
|
-
roles and instructions that help the agent you already use work with
|
|
98
|
-
better context.
|
|
136
|
+
---
|
|
99
137
|
|
|
100
|
-
## AI
|
|
138
|
+
## AI bridge (Selene)
|
|
101
139
|
|
|
102
|
-
Selene packages your project context into structured prompts
|
|
103
|
-
API when `ANTHROPIC_API_KEY` or `OPENAI_API_KEY` is configured.
|
|
140
|
+
Selene packages your project context into structured prompts. With an API key it calls the model directly; without one it prints a prompt you can paste anywhere.
|
|
104
141
|
|
|
105
142
|
```bash
|
|
143
|
+
export ANTHROPIC_API_KEY=... # or OPENAI_API_KEY
|
|
144
|
+
|
|
106
145
|
whale selene status
|
|
107
146
|
whale selene suggest --focus all
|
|
108
147
|
whale selene audit src/components/Hero.tsx
|
|
148
|
+
whale selene describe src/components/Button.tsx
|
|
109
149
|
```
|
|
110
150
|
|
|
111
|
-
|
|
112
|
-
you can paste into Claude, ChatGPT, Cursor or Codex.
|
|
151
|
+
---
|
|
113
152
|
|
|
114
|
-
##
|
|
153
|
+
## Data & privacy
|
|
115
154
|
|
|
116
|
-
|
|
117
|
-
whale mcp config --client claude-code
|
|
118
|
-
whale mcp config --client cursor
|
|
119
|
-
whale mcp config --client zed
|
|
120
|
-
```
|
|
155
|
+
Whale Igniter runs offline by default. Core flows such as themes, drift detection, wiki generation, MCP, and local project analysis do not require an API key and do not send project data over the network.
|
|
121
156
|
|
|
122
|
-
|
|
123
|
-
validation, insights and write tools to compatible AI clients.
|
|
157
|
+
AI features are opt-in. When you enable Selene API mode, Whale sends the prompt and project context to the selected provider, Anthropic or OpenAI, under that provider's terms. You are responsible for reviewing context before sending it and for keeping secrets or sensitive data out of prompts.
|
|
124
158
|
|
|
125
|
-
|
|
159
|
+
API keys are read from environment variables only: `ANTHROPIC_API_KEY` or `OPENAI_API_KEY`. The key is used only in request headers, and Whale does not log it, write it to config, or persist it on disk.
|
|
126
160
|
|
|
127
|
-
|
|
128
|
-
--wi-royal: #0034D3;
|
|
129
|
-
--wi-paper: #F2ECE1;
|
|
130
|
-
--wi-sky: #99CCFF;
|
|
131
|
-
--wi-deep: #003087;
|
|
161
|
+
Selene's local cache stores response text under `.whale/selene/cache` in the target project. It does not store API keys. Whale also ensures `.whale/` is ignored by the target project's `.gitignore` when writing Selene cache entries.
|
|
132
162
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
163
|
+
Whale Igniter has no telemetry or analytics.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Requirements
|
|
136
168
|
|
|
137
|
-
|
|
169
|
+
- Node ≥ 20
|
|
170
|
+
- No API key required for any core flow — themes, drift detection, wiki generation, and MCP are fully local and deterministic
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Credits
|
|
175
|
+
|
|
176
|
+
Brand assets reference JetBrains Mono (SIL Open Font License 1.1) and Special Elite (Apache License 2.0). No font binaries are shipped.
|
|
177
|
+
|
|
178
|
+
---
|
|
138
179
|
|
|
139
180
|
## Links
|
|
140
181
|
|
|
@@ -142,6 +183,8 @@ Brand assets ship in `brand/` and are included in the npm package.
|
|
|
142
183
|
- Package: [npmjs.com/package/whale-igniter](https://www.npmjs.com/package/whale-igniter)
|
|
143
184
|
- License: MIT
|
|
144
185
|
|
|
186
|
+
---
|
|
187
|
+
|
|
145
188
|
<p align="center">
|
|
146
189
|
<img src="https://cdn.jsdelivr.net/npm/whale-igniter@1.3.0/brand/logo.svg" alt="" width="44"><br>
|
|
147
190
|
<sub><b>Whale Igniter</b> · map the project before the agent moves</sub>
|
package/dist/selene/cache.js
CHANGED
|
@@ -44,6 +44,7 @@ export async function writeCache(target, model, prompt, text) {
|
|
|
44
44
|
const key = cacheKey(model, prompt);
|
|
45
45
|
const dir = path.join(target, CACHE_DIR_REL);
|
|
46
46
|
await fs.ensureDir(dir);
|
|
47
|
+
await ensureWhaleGitignore(target);
|
|
47
48
|
const entry = {
|
|
48
49
|
key,
|
|
49
50
|
model,
|
|
@@ -66,3 +67,13 @@ export async function clearCache(target) {
|
|
|
66
67
|
}
|
|
67
68
|
return removed;
|
|
68
69
|
}
|
|
70
|
+
async function ensureWhaleGitignore(target) {
|
|
71
|
+
const gitignore = path.join(target, ".gitignore");
|
|
72
|
+
const entry = ".whale/";
|
|
73
|
+
const existing = (await fs.pathExists(gitignore)) ? await fs.readFile(gitignore, "utf8") : "";
|
|
74
|
+
const lines = existing.split(/\r?\n/).map((line) => line.trim());
|
|
75
|
+
if (lines.includes(entry))
|
|
76
|
+
return;
|
|
77
|
+
const prefix = existing.length > 0 && !existing.endsWith("\n") ? "\n" : "";
|
|
78
|
+
await fs.appendFile(gitignore, `${prefix}${entry}\n`, "utf8");
|
|
79
|
+
}
|
package/dist/ui/splash.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 2. Unicode, no color — same layout, no color
|
|
7
7
|
* 3. Plain — single ASCII line, no glyphs
|
|
8
8
|
*
|
|
9
|
-
* Rules: no chalk imports, no direct env var reads, no
|
|
9
|
+
* Rules: no chalk imports, no direct env var reads, no vague status copy.
|
|
10
10
|
* Uses `capabilities()` from capabilities.js and `ui` atoms.
|
|
11
11
|
*/
|
|
12
12
|
import { capabilities } from "./capabilities.js";
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PACKAGE_VERSION = "1.
|
|
1
|
+
export const PACKAGE_VERSION = "1.4.0";
|
package/docs/ROADMAP.md
CHANGED
|
@@ -85,7 +85,7 @@ reveals that the next plan needs revising, we revise it before shipping.
|
|
|
85
85
|
- **Test coverage.** 44 unit tests + MCP smoke test that spawns the
|
|
86
86
|
server and exercises real protocol calls end-to-end.
|
|
87
87
|
|
|
88
|
-
### v1.1 —
|
|
88
|
+
### v1.1 — Polished runtime UI
|
|
89
89
|
|
|
90
90
|
The terminal output became the product surface. Commands stopped reaching
|
|
91
91
|
for chalk directly; every command now consumes a semantic UI layer where
|
|
@@ -96,7 +96,7 @@ pair) and the active theme decides what each intent looks like.
|
|
|
96
96
|
with ASCII fallbacks), blocks (header, section, kv, panel, summary,
|
|
97
97
|
next, ok/fail/warn/note), theme dispatcher. Commands import from `ui/`
|
|
98
98
|
rather than chalk; chalk is now confined to the theme module.
|
|
99
|
-
- **Single
|
|
99
|
+
- **Single polished theme — graphite.** Cyan accent, charcoal grays, three
|
|
100
100
|
text-hierarchy levels. Structure ready for v1.2's multi-theme without
|
|
101
101
|
touching any command.
|
|
102
102
|
- **Capability detection.** Auto-detects color and Unicode support; falls
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "whale-igniter",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "CLI-first operational intelligence. Bootstraps and adopts AI-readable project context so agents like Claude Code, Codex and Cursor understand your design system from the first commit. Includes an MCP server, a file watcher, deterministic insights, and an opt-in AI bridge (Selene).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"themes",
|
|
15
15
|
"ui-references",
|
|
16
16
|
"README.md",
|
|
17
|
+
"CHANGELOG.md",
|
|
17
18
|
"LICENSE",
|
|
18
19
|
"docs/ROADMAP.md"
|
|
19
20
|
],
|