claudeboard 2.16.0 → 3.1.1
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 +89 -93
- package/bin/cli.js +198 -238
- package/bin/init-context.js +22 -0
- package/package.json +25 -43
- package/public/app.js +1411 -0
- package/public/index.html +250 -0
- package/public/style.css +1872 -0
- package/src/context-template.md +20 -0
- package/src/notifier.js +65 -0
- package/src/orchestrator.js +939 -0
- package/src/scanner.js +153 -0
- package/src/server.js +205 -0
- package/src/store.js +182 -0
- package/src/verifier.js +131 -0
- package/agents/architect.js +0 -166
- package/agents/board-client.js +0 -126
- package/agents/claude-api.js +0 -124
- package/agents/claude-resolver.js +0 -167
- package/agents/developer.js +0 -224
- package/agents/expo-health.js +0 -727
- package/agents/orchestrator.js +0 -306
- package/agents/qa.js +0 -336
- package/dashboard/index.html +0 -1980
- package/dashboard/server.js +0 -412
- package/sql/setup.sql +0 -57
- package/tools/filesystem.js +0 -95
- package/tools/screenshot.js +0 -74
- package/tools/supabase-reader.js +0 -74
- package/tools/terminal.js +0 -63
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Project Context & Brand Guidelines
|
|
2
|
+
|
|
3
|
+
## Design Tokens
|
|
4
|
+
- Primary color: #e3c69a
|
|
5
|
+
- Background: #000000 / #1a1a1a
|
|
6
|
+
- Font: Poppins
|
|
7
|
+
- Border radius: 1rem
|
|
8
|
+
|
|
9
|
+
## Visual Reference
|
|
10
|
+
- Reference site: https://example.com
|
|
11
|
+
- Style: dark, premium, minimal
|
|
12
|
+
|
|
13
|
+
## Tech Stack
|
|
14
|
+
- Framework: vanilla HTML/CSS/JS
|
|
15
|
+
- No external dependencies
|
|
16
|
+
|
|
17
|
+
## Important Notes
|
|
18
|
+
- Always maintain existing code style
|
|
19
|
+
- Mobile-first responsive
|
|
20
|
+
- Preserve all existing sections when editing
|
package/src/notifier.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// src/notifier.js
|
|
2
|
+
const https = require('https');
|
|
3
|
+
const { getConfig } = require('./store');
|
|
4
|
+
|
|
5
|
+
const TIMEOUT_MS = 5000;
|
|
6
|
+
|
|
7
|
+
function isValidHttpsUrl(urlStr) {
|
|
8
|
+
try {
|
|
9
|
+
const u = new URL(urlStr);
|
|
10
|
+
return u.protocol === 'https:';
|
|
11
|
+
} catch {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async function notify(event, data = {}) {
|
|
17
|
+
const config = getConfig();
|
|
18
|
+
const webhookUrl = config.webhook;
|
|
19
|
+
if (!webhookUrl) return;
|
|
20
|
+
|
|
21
|
+
if (!isValidHttpsUrl(webhookUrl)) {
|
|
22
|
+
console.warn('[notifier] Webhook URL must be https:// — skipping');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const payload = JSON.stringify({
|
|
27
|
+
event,
|
|
28
|
+
taskTitle: data.taskTitle || null,
|
|
29
|
+
status: data.status || null,
|
|
30
|
+
timestamp: new Date().toISOString(),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
const url = new URL(webhookUrl);
|
|
35
|
+
const options = {
|
|
36
|
+
hostname: url.hostname,
|
|
37
|
+
port: url.port || 443,
|
|
38
|
+
path: url.pathname + url.search,
|
|
39
|
+
method: 'POST',
|
|
40
|
+
headers: {
|
|
41
|
+
'Content-Type': 'application/json',
|
|
42
|
+
'Content-Length': Buffer.byteLength(payload),
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
await new Promise((resolve, reject) => {
|
|
47
|
+
const req = https.request(options, (res) => {
|
|
48
|
+
res.resume();
|
|
49
|
+
res.on('end', resolve);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
req.setTimeout(TIMEOUT_MS, () => {
|
|
53
|
+
req.destroy(new Error('Webhook request timed out'));
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
req.on('error', reject);
|
|
57
|
+
req.write(payload);
|
|
58
|
+
req.end();
|
|
59
|
+
});
|
|
60
|
+
} catch (err) {
|
|
61
|
+
console.warn('[notifier] Webhook error:', err.message);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
module.exports = { notify };
|