@drunkcoding/agents-and-skills 0.0.18 → 0.0.19

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 (52) hide show
  1. package/.claude-plugin/marketplace.json +5 -5
  2. package/README.md +23 -0
  3. package/package.json +1 -1
  4. package/plugins/auto-power/.claude-plugin/plugin.json +1 -1
  5. package/plugins/html-effectiveness/.claude-plugin/plugin.json +1 -1
  6. package/plugins/plugin-validator/.claude-plugin/plugin.json +1 -1
  7. package/plugins/team-superpower/.claude-plugin/plugin.json +1 -1
  8. package/plugins/team-superpower/agents/backend-developer.md +93 -3
  9. package/plugins/team-superpower/agents/designer.md +17 -2
  10. package/plugins/team-superpower/agents/frontend-developer.md +94 -3
  11. package/plugins/team-superpower/agents/planner.md +62 -6
  12. package/plugins/team-superpower/agents/qa-engineer.md +73 -17
  13. package/plugins/team-superpower/agents/reviewer.md +71 -6
  14. package/plugins/team-superpower/agents/security-engineer.md +16 -1
  15. package/plugins/team-superpower/agents/software-architect.md +16 -1
  16. package/plugins/team-superpower/assets/AGENTS.md.template +23 -0
  17. package/plugins/team-superpower/assets/CLAUDE.md.template +17 -0
  18. package/plugins/team-superpower/assets/SESSION_README.md +47 -0
  19. package/plugins/team-superpower/commands/team-feature.md +217 -11
  20. package/plugins/team-superpower/hooks/task-completed.sh +203 -0
  21. package/plugins/team-superpower/hooks/task-created.sh +42 -1
  22. package/plugins/team-superpower/scripts/assess-complexity.sh +194 -0
  23. package/plugins/team-superpower/scripts/detect-stack.sh +39 -0
  24. package/plugins/team-superpower/scripts/wave-collision-check.sh +60 -0
  25. package/plugins/tech-graph/.claude-plugin/plugin.json +1 -1
  26. package/plugins/html-effectiveness/tests/_tmp.test.js +0 -58
  27. package/plugins/html-effectiveness/tests/fixtures/01-exploration-code-approaches.data.json +0 -3
  28. package/plugins/html-effectiveness/tests/fixtures/02-exploration-visual-designs.data.json +0 -3
  29. package/plugins/html-effectiveness/tests/fixtures/03-code-review-pr.data.json +0 -3
  30. package/plugins/html-effectiveness/tests/fixtures/04-code-understanding.data.json +0 -3
  31. package/plugins/html-effectiveness/tests/fixtures/05-design-system.data.json +0 -3
  32. package/plugins/html-effectiveness/tests/fixtures/06-component-variants.data.json +0 -3
  33. package/plugins/html-effectiveness/tests/fixtures/07-prototype-animation.data.json +0 -3
  34. package/plugins/html-effectiveness/tests/fixtures/08-prototype-interaction.data.json +0 -3
  35. package/plugins/html-effectiveness/tests/fixtures/09-slide-deck.data.json +0 -3
  36. package/plugins/html-effectiveness/tests/fixtures/10-svg-illustrations.data.json +0 -3
  37. package/plugins/html-effectiveness/tests/fixtures/11-status-report.data.json +0 -37
  38. package/plugins/html-effectiveness/tests/fixtures/12-incident-report.data.json +0 -3
  39. package/plugins/html-effectiveness/tests/fixtures/13-flowchart-diagram.data.json +0 -3
  40. package/plugins/html-effectiveness/tests/fixtures/14-research-feature-explainer.data.json +0 -3
  41. package/plugins/html-effectiveness/tests/fixtures/15-research-concept-explainer.data.json +0 -3
  42. package/plugins/html-effectiveness/tests/fixtures/16-implementation-plan.data.json +0 -3
  43. package/plugins/html-effectiveness/tests/fixtures/17-pr-writeup.data.json +0 -3
  44. package/plugins/html-effectiveness/tests/fixtures/18-editor-triage-board.data.json +0 -3
  45. package/plugins/html-effectiveness/tests/fixtures/19-editor-feature-flags.data.json +0 -3
  46. package/plugins/html-effectiveness/tests/fixtures/20-editor-prompt-tuner.data.json +0 -3
  47. package/plugins/html-effectiveness/tests/fixtures/_canned.data.json +0 -7
  48. package/plugins/html-effectiveness/tests/fixtures/_canned.html.tmpl +0 -7
  49. package/plugins/html-effectiveness/tests/fixtures/_canned.manifest.json +0 -18
  50. package/plugins/html-effectiveness/tests/manifest.test.js +0 -61
  51. package/plugins/html-effectiveness/tests/mustache.test.js +0 -47
  52. package/plugins/html-effectiveness/tests/render.test.js +0 -118
@@ -1,118 +0,0 @@
1
- import { test } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { mkdtempSync, readFileSync, rmSync } from 'node:fs';
4
- import { tmpdir } from 'node:os';
5
- import { join, dirname } from 'node:path';
6
- import { fileURLToPath } from 'node:url';
7
- import { renderReport } from '../scripts/render.js';
8
-
9
- const here = dirname(fileURLToPath(import.meta.url));
10
- const fixtures = join(here, 'fixtures');
11
-
12
- function setup() {
13
- const out = mkdtempSync(join(tmpdir(), 'htmleff-'));
14
- return {
15
- out,
16
- cleanup: () => rmSync(out, { recursive: true, force: true }),
17
- };
18
- }
19
-
20
- test('renders canned template into self-contained HTML', () => {
21
- const { out, cleanup } = setup();
22
- try {
23
- const outPath = join(out, 'demo.html');
24
- renderReport({
25
- templateId: '_canned',
26
- data: JSON.parse(readFileSync(join(fixtures, '_canned.data.json'), 'utf8')),
27
- outPath,
28
- manifestPath: join(fixtures, '_canned.manifest.json'),
29
- pluginRoot: dirname(fixtures),
30
- });
31
- const html = readFileSync(outPath, 'utf8');
32
- assert.ok(html.startsWith('<!doctype html>'), 'starts with doctype');
33
- assert.ok(html.includes('<title>Demo &lt;Report&gt;</title>'), 'title escaped in head');
34
- assert.ok(html.includes('Demo &lt;Report&gt;</h1>'), 'title escaped in body');
35
- assert.ok(html.includes('<b>bold</b>'), 'html slot rendered raw');
36
- assert.ok(!html.match(/\{\{[^}]+\}\}/), 'no leftover mustache markers');
37
- assert.ok(!html.includes('<link'), 'no external link');
38
- assert.ok(!html.match(/<script\s+src=/i), 'no external script src');
39
- } finally {
40
- cleanup();
41
- }
42
- });
43
-
44
- test('writes sidecar .data.json next to output', () => {
45
- const { out, cleanup } = setup();
46
- try {
47
- const outPath = join(out, 'demo.html');
48
- const data = JSON.parse(readFileSync(join(fixtures, '_canned.data.json'), 'utf8'));
49
- renderReport({
50
- templateId: '_canned',
51
- data,
52
- outPath,
53
- manifestPath: join(fixtures, '_canned.manifest.json'),
54
- pluginRoot: dirname(fixtures),
55
- });
56
- const sidecarPath = outPath + '.data.json';
57
- const sidecar = JSON.parse(readFileSync(sidecarPath, 'utf8'));
58
- assert.equal(sidecar.template, '_canned');
59
- assert.deepEqual(sidecar.data, data);
60
- assert.ok(sidecar.rendered_at);
61
- } finally {
62
- cleanup();
63
- }
64
- });
65
-
66
- test('throws on missing required slot with template:slot context', () => {
67
- const { out, cleanup } = setup();
68
- try {
69
- assert.throws(
70
- () => renderReport({
71
- templateId: '_canned',
72
- data: { items: [] },
73
- outPath: join(out, 'x.html'),
74
- manifestPath: join(fixtures, '_canned.manifest.json'),
75
- pluginRoot: dirname(fixtures),
76
- }),
77
- /_canned:title.*required/,
78
- );
79
- } finally {
80
- cleanup();
81
- }
82
- });
83
-
84
- test('throws on unknown template id with valid-ids list', () => {
85
- const { out, cleanup } = setup();
86
- try {
87
- assert.throws(
88
- () => renderReport({
89
- templateId: 'does-not-exist',
90
- data: {},
91
- outPath: join(out, 'x.html'),
92
- manifestPath: join(fixtures, '_canned.manifest.json'),
93
- pluginRoot: dirname(fixtures),
94
- }),
95
- /template not found.*_canned/i,
96
- );
97
- } finally {
98
- cleanup();
99
- }
100
- });
101
-
102
- test('inverted section renders fallback when array empty', () => {
103
- const { out, cleanup } = setup();
104
- try {
105
- const outPath = join(out, 'empty.html');
106
- renderReport({
107
- templateId: '_canned',
108
- data: { title: 'Empty', items: [] },
109
- outPath,
110
- manifestPath: join(fixtures, '_canned.manifest.json'),
111
- pluginRoot: dirname(fixtures),
112
- });
113
- const html = readFileSync(outPath, 'utf8');
114
- assert.ok(html.includes('No items.'));
115
- } finally {
116
- cleanup();
117
- }
118
- });