@sallmarta/eye-hate-agent 1.0.6 → 1.0.7

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/README.md CHANGED
@@ -35,6 +35,7 @@ Once initialized, EHA projects a series of interactive workflows directly into y
35
35
  | **`/eha-refresh`** | The main workhorse for repos with **any existing documentation**. Updates active SDD docs, migrates legacy docs, converts non-SDD docs, and creates missing SDD files — all by cross-referencing the actual codebase alongside existing material. Auto-detects the appropriate Taxonomy Tier for migration scenarios. Prompts the user to resolve any drift between codebase and docs. |
36
36
  | **`/sdd-discuss`** | Collaborative brainstorming. Interviews you about edge cases, API shapes, data models, and constraints, then drafts spec snippets ready for injection into project docs. No code output. |
37
37
  | **`/sdd-execute`** | Spec-Driven code generation via strict TDD. Reads specs → generates tests → generates code → validates against architecture. Refuses to code features not in the spec. |
38
+ | **`/eha-help`** | **EHA Help & Tutorial.** Interactive guide providing descriptions of EHA's 4-layer taxonomy, active workflows, and specialist skills. |
38
39
 
39
40
  > **Looking for parity audits?** Use the `parity-audit` skill directly:
40
41
  > `@agent use parity-audit on this repository`
package/bin/eha.js CHANGED
@@ -25,33 +25,34 @@ async function promptAgentChoice(currentAgent) {
25
25
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
26
26
  try {
27
27
  const runtimes = listSupportedRuntimes();
28
- const defaultIndex = currentAgent
29
- ? runtimes.findIndex(r => r.id === currentAgent) + 1
30
- : 1;
28
+ const defaultIndex = 1;
31
29
 
32
30
  console.log('');
33
31
  console.log('Which agent?');
34
32
  for (let i = 0; i < runtimes.length; i++) {
35
33
  console.log(` ${i + 1}. ${runtimes[i].name}`);
36
34
  }
35
+ console.log(` ${runtimes.length + 1}. All Agents`);
37
36
 
37
+ const maxChoice = runtimes.length + 1;
38
38
  const answer = await rl.question(
39
- `Choose [1-${runtimes.length}] (default: ${defaultIndex}): `,
39
+ `Choose [1-${maxChoice}] (default: ${defaultIndex}): `,
40
40
  );
41
41
  const trimmed = answer.trim();
42
42
 
43
- // Accept number or name
44
43
  if (!trimmed) return runtimes[defaultIndex - 1].id;
45
44
 
46
45
  const num = parseInt(trimmed, 10);
47
46
  if (num >= 1 && num <= runtimes.length) return runtimes[num - 1].id;
47
+ if (num === maxChoice) return 'all';
48
48
 
49
- // Fallback: try to match by name (backward compat)
50
49
  const normalized = trimmed.toLowerCase();
50
+ if (normalized === 'all') return 'all';
51
+
51
52
  const match = runtimes.find(r => r.id === normalized);
52
53
  if (match) return match.id;
53
54
 
54
- return trimmed.toLowerCase(); // Let it fall through
55
+ return trimmed.toLowerCase();
55
56
  } finally {
56
57
  rl.close();
57
58
  }
@@ -76,11 +77,11 @@ function resolveRootDir() {
76
77
  } catch {
77
78
  console.error(
78
79
  chalk.red('No project root found.') +
79
- ' Run ' +
80
- chalk.cyan('npm init -y') +
81
- ' or ' +
82
- chalk.cyan('git init') +
83
- ' first.',
80
+ ' Run ' +
81
+ chalk.cyan('npm init -y') +
82
+ ' or ' +
83
+ chalk.cyan('git init') +
84
+ ' first.',
84
85
  );
85
86
  process.exit(1);
86
87
  }
@@ -96,15 +97,13 @@ function printInitSummary(result) {
96
97
  }
97
98
  console.log('');
98
99
 
99
- if (result.agentId === 'claude') {
100
- console.log('Open Claude in this project and run ' + chalk.cyan('/eha-bootstrap') + ' to get started.');
101
- } else if (result.agentId === 'copilot') {
102
- console.log(
103
- 'Open GitHub Copilot agent mode and attach ' +
104
- chalk.cyan('#eha-bootstrap.prompt.md') +
105
- ' to get started.',
106
- );
107
- }
100
+ const agentNames = {
101
+ claude: 'Claude',
102
+ copilot: 'GitHub Copilot',
103
+ antigravity: 'Antigravity',
104
+ };
105
+ const name = agentNames[result.agentId] || result.agentId;
106
+ console.log(`Open ${name} in this project and run ${chalk.cyan('/eha-help')} to get started!`);
108
107
  console.log('');
109
108
  }
110
109
 
@@ -158,12 +157,44 @@ async function runInitWizard(agentIdArg) {
158
157
  }
159
158
 
160
159
  const normalized = String(agentId).trim().toLowerCase();
160
+
161
+ if (normalized === 'all') {
162
+ const installedAgents = config.agents || (config.agent ? [config.agent] : []);
163
+ if (isInteractive && installedAgents.length > 0) {
164
+ const listStr = installedAgents.map(a => chalk.cyan(a)).join(', ');
165
+ const confirm = await promptConfirm(
166
+ `EHA is set up for: ${listStr}. Overwrite / setup all agents?`,
167
+ true,
168
+ );
169
+ if (!confirm) {
170
+ console.log('Skipped.');
171
+ return;
172
+ }
173
+ }
174
+
175
+ console.log(chalk.blue('\nInitializing EHA for all agents...'));
176
+ let fileCount = 0;
177
+ for (const id of SUPPORTED_AGENT_IDS) {
178
+ const result = initProject({ rootDir, agentId: id });
179
+ fileCount += result.fileCount;
180
+ }
181
+
182
+ console.log('');
183
+ console.log(chalk.green('✓ EHA is ready for all agents.'));
184
+ console.log(` Agents : ${SUPPORTED_AGENT_IDS.map(a => chalk.cyan(a)).join(', ')}`);
185
+ console.log(` Files : ${fileCount} file(s) generated`);
186
+ console.log('');
187
+ console.log('Open Agents in this project and run ' + chalk.cyan('/eha-help') + ' to get started or run ' + chalk.cyan('eha doctor') + ' to see all files.');
188
+ console.log('');
189
+ return;
190
+ }
191
+
161
192
  if (!SUPPORTED_AGENT_IDS.includes(normalized)) {
162
193
  const runtimes = listSupportedRuntimes();
163
194
  const list = runtimes.map((r, i) => `${i + 1}. ${r.name}`).join(', ');
164
195
  console.error(
165
196
  chalk.red(`Unsupported agent: ${agentIdArg || agentId}.`) +
166
- ` Choose one of: ${list}.`,
197
+ ` Choose one of: ${list}, or ${runtimes.length + 1}. All Agents.`,
167
198
  );
168
199
  process.exit(1);
169
200
  }
@@ -0,0 +1,56 @@
1
+ ---
2
+ description: "EHA workflow - help"
3
+ ---
4
+
5
+ # EHA Help & Tutorial
6
+
7
+ This is your interactive guide to using Eye Hate Agent (EHA).
8
+
9
+ ## 1. Overview
10
+ Eye Hate Agent (EHA) standardizes human-agent collaboration through a unified Spec-Driven Development (SDD) contract, structured workflows, and specialist skills.
11
+
12
+ ## 2. The 4-Layer Taxonomy
13
+ All project documentation is structured under a predictable 4-layer taxonomy:
14
+ - `docs/project-docs/foundation/` — PRD, Phases, Status, Changelog
15
+ - `docs/project-docs/operations/` — CI/CD, Deployment, Runbooks
16
+ - `docs/project-docs/development/` — Testing, Database, Architecture, API-Contract, UI-UX
17
+ - `docs/project-docs/technical-guidelines/` — Stable project/language/linting guidelines
18
+
19
+ ## 3. Interactive Workflow Commands
20
+ Trigger these commands inside your chat window to coordinate development:
21
+
22
+ | Trigger Command | Purpose | When to Use |
23
+ | :--- | :--- | :--- |
24
+ | `/eha-bootstrap` | Initializes a brand-new documentation set | Run only in **empty repositories** with zero docs. |
25
+ | `/eha-refresh` | Synchronizes and migrates project documentation | Run in **active projects** to sync code with docs. |
26
+ | `/sdd-discuss` | Brainstorm specifications and API contracts | Run **before coding** to align specs. |
27
+ | `/sdd-execute` | Spec-driven code generation via TDD | Run **during implementation** to write tests/code. |
28
+
29
+ ## 4. Specialist Skills
30
+ Invoke skills directly in your prompts (e.g. `use eha-api-design`):
31
+ - `eha-system-analysis` — Inspect architecture and codebase logic
32
+ - `eha-api-design` — Plan or refactor REST/GraphQL/gRPC APIs
33
+ - `eha-db-schema-design` — Design schemas and migrations
34
+ - `eha-ui-ux-design` / `eha-wireframing` — UI/UX wireframes and styling systems
35
+ - `eha-code-audit` — Multi-layered verification and codebase scanning
36
+ - `eha-parity-audit` — Automated drift analysis
37
+ - `eha-security-audit` — Dependency scanning and threat modeling
38
+ - `eha-system-tester` — Rigorous testing plans and case design
39
+ - `eha-devops-ci-cd` — Build pipeline configurations
40
+ - `eha-observability` — Logs, metrics, trace instrumentation, and error handling
41
+ - `eha-refactor` — Technical debt cleanup and optimization
42
+
43
+ ## 5. Quick Start Instructions
44
+ If starting a new feature:
45
+ 1. Run `/sdd-discuss` to brainstorm specs.
46
+ 2. Update project docs to reflect the spec.
47
+ 3. Run `/sdd-execute` to execute code via TDD.
48
+ 4. Maintain `changelog.md` and `status.md`.
49
+
50
+ ---
51
+
52
+ ## 6. Strict Output Contract (Token Economy)
53
+ When the user triggers this command, you **MUST** adhere to the following rules to conserve maximum tokens:
54
+ 1. **Ultra-Concision:** Respond immediately with extremely short, direct answers. Do not write introductory filler (no "Sure, let's look at...", "Here is...", or greetings).
55
+ 2. **Minimal Text:** Keep all explanations under 5 words per item. Rely strictly on the tables and bullet lists above.
56
+ 3. **Redirection:** Conclude the output in exactly one short question: "Which workflow would you like to run next?"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sallmarta/eye-hate-agent",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Template-and-engine toolkit for AI-agent-assisted project workflows.",
5
5
  "directories": {
6
6
  "doc": "docs"
@@ -1,6 +1,12 @@
1
1
  const path = require('node:path');
2
2
 
3
3
  const WORKFLOW_DEFINITIONS = {
4
+ help: {
5
+ id: 'help',
6
+ commandName: 'help',
7
+ description: 'Get help and tutorial on EHA workflows and philosophy',
8
+ repoRelativePath: path.join('docs', 'templates', 'reusable-prompts', '00-eha-help.md'),
9
+ },
4
10
  bootstrap: {
5
11
  id: 'bootstrap',
6
12
  commandName: 'bootstrap',