clew-code 0.3.1 → 0.3.3
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 +181 -113
- package/dist/generated/version.json +1 -1
- package/dist/main.js +2948 -3258
- package/package.json +1 -1
- package/docs/.nojekyll +0 -0
- package/docs/_config.yml +0 -3
- package/docs/architecture.html +0 -90
- package/docs/assets/clew-agent-loop.png +0 -0
- package/docs/assets/clew-general-architecture.png +0 -0
- package/docs/assets/clew-mcp-architecture.png +0 -0
- package/docs/assets/clew-p2p-swarm.png +0 -0
- package/docs/assets/clew.svg +0 -33
- package/docs/changelog.html +0 -141
- package/docs/cli-reference.html +0 -89
- package/docs/commands.html +0 -161
- package/docs/configuration.html +0 -85
- package/docs/contributing.html +0 -91
- package/docs/css/styles.css +0 -545
- package/docs/daemon.html +0 -62
- package/docs/features/bridge-mode.html +0 -62
- package/docs/features/evals.html +0 -58
- package/docs/features/searxng-search.html +0 -59
- package/docs/features/sentry-setup.html +0 -62
- package/docs/generated/providers.html +0 -625
- package/docs/generated/tools.html +0 -559
- package/docs/index.html +0 -182
- package/docs/installation.html +0 -77
- package/docs/internals/claude-ai-backend-dependencies.md +0 -278
- package/docs/internals/growthbook-ab-testing.html +0 -70
- package/docs/internals/hidden-features.html +0 -82
- package/docs/internals/long-term-memory-design.md +0 -173
- package/docs/js/main.js +0 -438
- package/docs/loop.html +0 -69
- package/docs/mcp.html +0 -99
- package/docs/models.html +0 -81
- package/docs/permission-model.html +0 -86
- package/docs/personal-profile.html +0 -113
- package/docs/plugins.html +0 -84
- package/docs/providers.html +0 -625
- package/docs/quick-start.html +0 -81
- package/docs/research-memory.html +0 -71
- package/docs/security.html +0 -71
- package/docs/skills.html +0 -67
- package/docs/swarm.html +0 -78
- package/docs/tools.html +0 -559
- package/docs/troubleshooting.html +0 -86
- package/docs/voice-mode.html +0 -79
package/docs/contributing.html
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>Contributing — Clew Code</title>
|
|
7
|
-
<meta name="description" content="How to contribute to Clew Code.">
|
|
8
|
-
<link rel="icon" type="image/svg+xml" href="assets/clew.svg">
|
|
9
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
|
-
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
11
|
-
<link rel="stylesheet" href="css/styles.css">
|
|
12
|
-
</head>
|
|
13
|
-
<body>
|
|
14
|
-
<header class="header"></header>
|
|
15
|
-
<div id="sidebarOverlay" class="sidebar-overlay"></div>
|
|
16
|
-
<aside id="sidebar" class="sidebar"></aside>
|
|
17
|
-
|
|
18
|
-
<div class="content-wrap">
|
|
19
|
-
<div class="content">
|
|
20
|
-
|
|
21
|
-
<div class="breadcrumbs"><a href="index.html">Home</a><span class="sep">/</span><span class="current">Contributing</span></div>
|
|
22
|
-
|
|
23
|
-
<h1>Contributing</h1>
|
|
24
|
-
<p class="sub">Thank you for your interest in contributing to Clew Code.</p>
|
|
25
|
-
|
|
26
|
-
<h2 id="scope">Scope of Contributions</h2>
|
|
27
|
-
<p>Contributions should be limited to material you have the right to submit and license.</p>
|
|
28
|
-
<p><strong>Do not contribute:</strong></p>
|
|
29
|
-
<ul>
|
|
30
|
-
<li>Proprietary source code</li>
|
|
31
|
-
<li>Leaked or copied code</li>
|
|
32
|
-
<li>Private documentation</li>
|
|
33
|
-
<li>Credentials, API keys, tokens, or secrets</li>
|
|
34
|
-
<li>Material copied from Anthropic's proprietary products or private services</li>
|
|
35
|
-
<li>Code that violates third-party licenses or terms</li>
|
|
36
|
-
</ul>
|
|
37
|
-
|
|
38
|
-
<h2 id="good-first-issues">Good First Issues</h2>
|
|
39
|
-
<ul>
|
|
40
|
-
<li>Add a new provider adapter in <code>src/services/ai/</code></li>
|
|
41
|
-
<li>Write tests for untested tools</li>
|
|
42
|
-
<li>Fix docs, add examples</li>
|
|
43
|
-
<li>Build a plugin or MCP server</li>
|
|
44
|
-
<li>Improve Windows support</li>
|
|
45
|
-
</ul>
|
|
46
|
-
|
|
47
|
-
<h2 id="development">Development Setup</h2>
|
|
48
|
-
<h3>Prerequisites</h3>
|
|
49
|
-
<ul>
|
|
50
|
-
<li>Node.js >= 18.0.0</li>
|
|
51
|
-
<li>Bun >= 1.0.0</li>
|
|
52
|
-
<li>Git</li>
|
|
53
|
-
</ul>
|
|
54
|
-
|
|
55
|
-
<h3>Getting Started</h3>
|
|
56
|
-
<pre><code class="language-bash">git clone https://github.com/ClewCode/ClewCode.git
|
|
57
|
-
cd ClewCode
|
|
58
|
-
bun install
|
|
59
|
-
bun run build
|
|
60
|
-
bun run start
|
|
61
|
-
</code></pre>
|
|
62
|
-
|
|
63
|
-
<h3>Development Commands</h3>
|
|
64
|
-
<pre><code class="language-bash">bun run dev # Live reload with tsx
|
|
65
|
-
bun run build # Build to dist/
|
|
66
|
-
bun test # Run tests (Vitest)
|
|
67
|
-
bun x tsc --noEmit # Type-check
|
|
68
|
-
bun run check:ci # Full CI check (lint + test + typecheck)
|
|
69
|
-
</code></pre>
|
|
70
|
-
|
|
71
|
-
<h3>Code Style</h3>
|
|
72
|
-
<p>This project uses <strong>Biome</strong> for formatting and linting:</p>
|
|
73
|
-
<pre><code class="language-bash">bun run format # Format code
|
|
74
|
-
bun run lint # Lint code
|
|
75
|
-
bun run check # Full check with auto-fix
|
|
76
|
-
</code></pre>
|
|
77
|
-
|
|
78
|
-
<h2 id="ci">CI Pipeline</h2>
|
|
79
|
-
<ul>
|
|
80
|
-
<li>Pushing a <code>v*</code> tag triggers the release workflow</li>
|
|
81
|
-
<li>CI runs: typecheck → build → GitHub Release → npm publish</li>
|
|
82
|
-
</ul>
|
|
83
|
-
|
|
84
|
-
<h2 id="license">License</h2>
|
|
85
|
-
<p>Contributor-authored modifications and original additions may be licensed under the terms described in <code>LICENSE.md</code>. Read <code>LICENSE.md</code> and <code>SECURITY.md</code> before contributing.</p>
|
|
86
|
-
</div>
|
|
87
|
-
</div>
|
|
88
|
-
|
|
89
|
-
<script src="js/main.js"></script>
|
|
90
|
-
</body>
|
|
91
|
-
</html>
|
package/docs/css/styles.css
DELETED
|
@@ -1,545 +0,0 @@
|
|
|
1
|
-
/* ============================================================
|
|
2
|
-
Clew Docs — Modern Purple Theme v2
|
|
3
|
-
============================================================ */
|
|
4
|
-
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
|
|
5
|
-
|
|
6
|
-
:root {
|
|
7
|
-
--bg: #fafbfc;
|
|
8
|
-
--bg-card: #ffffff;
|
|
9
|
-
--bg-code: #f7f6fa;
|
|
10
|
-
--bg-hover: #f0edfa;
|
|
11
|
-
--text: #0f0f1a;
|
|
12
|
-
--text-dim: #5a5678;
|
|
13
|
-
--text-faint:#9b97b3;
|
|
14
|
-
--accent: #7c3aed;
|
|
15
|
-
--accent2: #a78bfa;
|
|
16
|
-
--accent3: #c4b5fd;
|
|
17
|
-
--border: #e8e5f0;
|
|
18
|
-
--border2: #ddd8ec;
|
|
19
|
-
--shadow: rgba(124,58,237,.08);
|
|
20
|
-
--shadow-lg: rgba(124,58,237,.15);
|
|
21
|
-
--success: #10b981;
|
|
22
|
-
--warning: #f59e0b;
|
|
23
|
-
--error: #ef4444;
|
|
24
|
-
|
|
25
|
-
--font: 'DM Sans', system-ui, -apple-system, sans-serif;
|
|
26
|
-
--mono: 'JetBrains Mono', 'SF Mono', monospace;
|
|
27
|
-
|
|
28
|
-
--header-h: 56px;
|
|
29
|
-
--max-w: 900px;
|
|
30
|
-
--sidebar-w: 240px;
|
|
31
|
-
--radius: 10px;
|
|
32
|
-
--radius-sm: 6px;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
@media(prefers-color-scheme:dark){
|
|
36
|
-
:root {
|
|
37
|
-
--bg: #0c0c14;
|
|
38
|
-
--bg-card: #12121e;
|
|
39
|
-
--bg-code: #181828;
|
|
40
|
-
--bg-hover: #222238;
|
|
41
|
-
--text: #e8e6f0;
|
|
42
|
-
--text-dim: #9a96b0;
|
|
43
|
-
--text-faint:#6b6880;
|
|
44
|
-
--accent: #a78bfa;
|
|
45
|
-
--accent2: #7c3aed;
|
|
46
|
-
--accent3: #5b4db0;
|
|
47
|
-
--border: #2a2a3e;
|
|
48
|
-
--border2: #3a3a54;
|
|
49
|
-
--shadow: rgba(0,0,0,.3);
|
|
50
|
-
--shadow-lg: rgba(0,0,0,.5);
|
|
51
|
-
}
|
|
52
|
-
.header{background:rgba(12,12,20,.92)}
|
|
53
|
-
.term{box-shadow:0 12px 40px rgba(0,0,0,.25),0 0 0 1px rgba(124,58,237,.1)}
|
|
54
|
-
img{opacity:.9}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/* ── Scrollbar ── */
|
|
58
|
-
::-webkit-scrollbar{width:8px;height:8px}
|
|
59
|
-
::-webkit-scrollbar-track{background:transparent}
|
|
60
|
-
::-webkit-scrollbar-thumb{background:var(--border2);border-radius:4px}
|
|
61
|
-
::-webkit-scrollbar-thumb:hover{background:var(--accent3)}
|
|
62
|
-
|
|
63
|
-
html{scroll-behavior:smooth}
|
|
64
|
-
body{
|
|
65
|
-
font-family:var(--font);
|
|
66
|
-
font-size:15px;
|
|
67
|
-
line-height:1.7;
|
|
68
|
-
color:var(--text);
|
|
69
|
-
background:var(--bg);
|
|
70
|
-
-webkit-font-smoothing:antialiased;
|
|
71
|
-
-moz-osx-font-smoothing:grayscale;
|
|
72
|
-
}
|
|
73
|
-
::selection{background:var(--accent);color:#fff}
|
|
74
|
-
|
|
75
|
-
a{color:var(--accent);text-decoration:none;transition:all .15s ease}
|
|
76
|
-
a:hover{color:#6d28d9;text-decoration:none}
|
|
77
|
-
@media(prefers-color-scheme:dark){a:hover{color:#c4b5fd}}
|
|
78
|
-
|
|
79
|
-
/* ── code ── */
|
|
80
|
-
code{
|
|
81
|
-
font-family:var(--mono);
|
|
82
|
-
font-size:.85em;
|
|
83
|
-
background:var(--bg-code);
|
|
84
|
-
color:var(--accent);
|
|
85
|
-
padding:.2em .45em;
|
|
86
|
-
border-radius:5px;
|
|
87
|
-
border:1px solid var(--border);
|
|
88
|
-
font-weight:500;
|
|
89
|
-
}
|
|
90
|
-
pre code{background:none;padding:0;color:inherit;border:none;font-weight:400}
|
|
91
|
-
|
|
92
|
-
/* ── header ── */
|
|
93
|
-
.header{
|
|
94
|
-
position:fixed;top:0;left:0;right:0;height:var(--header-h);
|
|
95
|
-
background:rgba(250,251,252,.92);backdrop-filter:blur(20px) saturate(180%);
|
|
96
|
-
-webkit-backdrop-filter:blur(20px) saturate(180%);
|
|
97
|
-
border-bottom:1px solid var(--border);z-index:100;
|
|
98
|
-
box-shadow:0 1px 3px rgba(0,0,0,.03);
|
|
99
|
-
transition:background .2s;
|
|
100
|
-
}
|
|
101
|
-
@media(prefers-color-scheme:dark){
|
|
102
|
-
.header{
|
|
103
|
-
background:rgba(12,12,20,.92);
|
|
104
|
-
box-shadow:0 1px 3px rgba(0,0,0,.2);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
.header-inner{
|
|
108
|
-
max-width:calc(var(--max-w) + var(--sidebar-w));margin:0 auto;padding:0 28px;
|
|
109
|
-
height:100%;display:flex;align-items:center;gap:12px;
|
|
110
|
-
}
|
|
111
|
-
.logo{
|
|
112
|
-
font-family:var(--mono);font-weight:700;font-size:14px;
|
|
113
|
-
color:var(--text);display:flex;align-items:center;gap:8px;
|
|
114
|
-
white-space:nowrap;flex-shrink:0;
|
|
115
|
-
}
|
|
116
|
-
.logo:hover{opacity:.85;text-decoration:none}
|
|
117
|
-
.logo-mark{
|
|
118
|
-
width:28px;height:28px;border-radius:8px;
|
|
119
|
-
background:linear-gradient(135deg,#7c3aed,#a78bfa);
|
|
120
|
-
color:#fff;display:flex;align-items:center;justify-content:center;
|
|
121
|
-
font-size:13px;font-weight:700;box-shadow:0 2px 10px rgba(124,58,237,.3);
|
|
122
|
-
transition:transform .2s,box-shadow .2s;
|
|
123
|
-
}
|
|
124
|
-
.logo:hover .logo-mark{transform:translateY(-2px);box-shadow:0 4px 16px rgba(124,58,237,.4)}
|
|
125
|
-
|
|
126
|
-
/* ── breadcrumbs ── */
|
|
127
|
-
.header-breadcrumbs{
|
|
128
|
-
display:flex;align-items:center;gap:4px;font-size:12px;
|
|
129
|
-
color:var(--text-faint);margin-left:4px;overflow:hidden;
|
|
130
|
-
white-space:nowrap;text-overflow:ellipsis;flex-shrink:1;min-width:0;
|
|
131
|
-
}
|
|
132
|
-
.header-breadcrumbs a{color:var(--text-faint)}
|
|
133
|
-
.header-breadcrumbs a:hover{color:var(--accent);text-decoration:none}
|
|
134
|
-
.header-breadcrumbs .sep{color:var(--border2);margin:0 2px}
|
|
135
|
-
.header-breadcrumbs .current{color:var(--text-dim);font-weight:500}
|
|
136
|
-
|
|
137
|
-
/* ── search ── */
|
|
138
|
-
.header-search{
|
|
139
|
-
position:relative;margin-left:auto;flex-shrink:0;
|
|
140
|
-
}
|
|
141
|
-
.header-search input{
|
|
142
|
-
width:200px;height:32px;padding:0 32px 0 12px;
|
|
143
|
-
border:1px solid var(--border);border-radius:8px;
|
|
144
|
-
background:var(--bg);color:var(--text);
|
|
145
|
-
font-family:var(--font);font-size:13px;
|
|
146
|
-
outline:none;transition:all .2s;
|
|
147
|
-
}
|
|
148
|
-
.header-search input:focus{
|
|
149
|
-
border-color:var(--accent2);box-shadow:0 0 0 3px rgba(124,58,237,.12);
|
|
150
|
-
width:240px;
|
|
151
|
-
}
|
|
152
|
-
.header-search input::placeholder{color:var(--text-faint)}
|
|
153
|
-
.header-search .search-icon{
|
|
154
|
-
position:absolute;right:10px;top:50%;transform:translateY(-50%);
|
|
155
|
-
font-size:12px;color:var(--text-faint);pointer-events:none;
|
|
156
|
-
}
|
|
157
|
-
.header-search .search-results{
|
|
158
|
-
display:none;position:absolute;top:100%;right:0;width:340px;max-height:300px;
|
|
159
|
-
overflow-y:auto;margin-top:8px;background:var(--bg-card);
|
|
160
|
-
border:1px solid var(--border);border-radius:10px;
|
|
161
|
-
box-shadow:0 12px 32px rgba(0,0,0,.1);z-index:300;
|
|
162
|
-
}
|
|
163
|
-
.header-search .search-results.open{display:block}
|
|
164
|
-
.header-search .search-result{
|
|
165
|
-
display:block;padding:10px 14px;font-size:13px;color:var(--text-dim);
|
|
166
|
-
border-bottom:1px solid var(--border);
|
|
167
|
-
transition:.08s;
|
|
168
|
-
}
|
|
169
|
-
.header-search .search-result:last-child{border:none}
|
|
170
|
-
.header-search .search-result:hover{background:var(--bg-hover);color:var(--text);text-decoration:none}
|
|
171
|
-
.header-search .search-result mark{background:rgba(124,58,237,.15);color:var(--accent);border-radius:2px;padding:0 2px}
|
|
172
|
-
.header-search .search-empty{
|
|
173
|
-
padding:14px;font-size:13px;color:var(--text-faint);text-align:center;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/* ── header nav ── */
|
|
177
|
-
.header-nav{display:flex;gap:2px;align-items:center;flex-shrink:0}
|
|
178
|
-
.header-nav a{
|
|
179
|
-
padding:6px 12px;border-radius:6px;font-size:12px;font-weight:500;
|
|
180
|
-
color:var(--text-dim);white-space:nowrap;
|
|
181
|
-
transition:all .15s;
|
|
182
|
-
}
|
|
183
|
-
.header-nav a:hover{background:var(--bg-hover);color:var(--text);text-decoration:none}
|
|
184
|
-
.header-nav a.active{color:var(--accent);background:var(--bg-code);font-weight:600}
|
|
185
|
-
|
|
186
|
-
/* ── language toggle ── */
|
|
187
|
-
.lang-toggle{
|
|
188
|
-
display:flex;align-items:center;padding:4px 10px;border-radius:6px;
|
|
189
|
-
background:none;border:1px solid var(--border);cursor:pointer;
|
|
190
|
-
font-size:12px;color:var(--text-dim);font-family:var(--font);gap:4px;
|
|
191
|
-
transition:all .15s;flex-shrink:0;
|
|
192
|
-
}
|
|
193
|
-
.lang-toggle:hover{background:var(--bg-hover);border-color:var(--border2);color:var(--accent)}
|
|
194
|
-
|
|
195
|
-
.menu-btn{display:none;width:32px;height:32px;border:1px solid var(--border);border-radius:6px;background:none;cursor:pointer;flex-direction:column;justify-content:center;align-items:center;gap:4px;flex-shrink:0;transition:all .15s}
|
|
196
|
-
.menu-btn:hover{background:var(--bg-hover);border-color:var(--border2)}
|
|
197
|
-
.menu-btn span{display:block;width:16px;height:2px;background:var(--text-dim);border-radius:2px;transition:.15s}
|
|
198
|
-
.menu-btn.open span:nth-child(1){transform:rotate(45deg) translate(4px,4px)}
|
|
199
|
-
.menu-btn.open span:nth-child(2){opacity:0}
|
|
200
|
-
.menu-btn.open span:nth-child(3){transform:rotate(-45deg) translate(4px,-4px)}
|
|
201
|
-
.sidebar-overlay{display:none}
|
|
202
|
-
|
|
203
|
-
/* ── page layout (index) ── */
|
|
204
|
-
.page{
|
|
205
|
-
max-width:var(--max-w);margin:calc(var(--header-h) + 40px) auto 60px;
|
|
206
|
-
padding:0 28px;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/* ── doc layout (sub-pages) ── */
|
|
210
|
-
.app{display:flex;max-width:calc(var(--max-w) + var(--sidebar-w));margin:0 auto;padding:0 28px;gap:0}
|
|
211
|
-
.sidebar{
|
|
212
|
-
position:fixed;top:var(--header-h);left:0;bottom:0;
|
|
213
|
-
width:var(--sidebar-w);overflow-y:auto;padding:28px 16px 40px;
|
|
214
|
-
border-right:1px solid var(--border);
|
|
215
|
-
background:var(--bg);
|
|
216
|
-
z-index:50;
|
|
217
|
-
}
|
|
218
|
-
.sidebar-section{margin-bottom:28px}
|
|
219
|
-
.sidebar-label{
|
|
220
|
-
font-family:var(--mono);font-size:11px;font-weight:600;text-transform:uppercase;
|
|
221
|
-
color:var(--text-faint);letter-spacing:.06em;margin-bottom:8px;padding:0 10px;
|
|
222
|
-
}
|
|
223
|
-
.sidebar-link{
|
|
224
|
-
display:block;padding:4px 10px;border-radius:6px;
|
|
225
|
-
font-size:13px;color:var(--text-dim);transition:all .12s;
|
|
226
|
-
margin-bottom:2px;
|
|
227
|
-
}
|
|
228
|
-
.sidebar-link:hover{background:var(--bg-hover);color:var(--text);text-decoration:none;transform:translateX(2px)}
|
|
229
|
-
.sidebar-link.active{color:var(--accent);background:var(--bg-code);font-weight:600}
|
|
230
|
-
.sidebar-link .link-icon{display:inline-block;width:4px;height:4px;border-radius:50%;background:var(--border2);margin-right:6px;vertical-align:middle;transition:.1s}
|
|
231
|
-
.sidebar-link:hover .link-icon{background:var(--accent2)}
|
|
232
|
-
.sidebar-link.active .link-icon{background:var(--accent)}
|
|
233
|
-
|
|
234
|
-
.content-wrap{flex:1;margin-left:var(--sidebar-w);min-width:0}
|
|
235
|
-
.content{
|
|
236
|
-
max-width:var(--max-w);padding:calc(var(--header-h) + 28px) 36px 60px;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/* ── TOC sidebar ── */
|
|
240
|
-
.toc-sidebar{display:none}
|
|
241
|
-
@media(min-width:1200px){
|
|
242
|
-
.toc-sidebar{
|
|
243
|
-
display:block;position:sticky;top:calc(var(--header-h) + 28px);
|
|
244
|
-
width:200px;min-width:200px;max-height:calc(100vh - var(--header-h) - 56px);
|
|
245
|
-
overflow-y:auto;padding:calc(var(--header-h) + 28px) 0 40px 20px;
|
|
246
|
-
margin-left:24px;border-left:1px solid var(--border);
|
|
247
|
-
}
|
|
248
|
-
.content-wrap{display:flex;flex-direction:row}
|
|
249
|
-
.content{flex:1;min-width:0}
|
|
250
|
-
}
|
|
251
|
-
.toc-label{
|
|
252
|
-
font-family:var(--mono);font-size:11px;font-weight:600;text-transform:uppercase;
|
|
253
|
-
color:var(--text-faint);letter-spacing:.06em;margin-bottom:8px;
|
|
254
|
-
}
|
|
255
|
-
.toc-link{
|
|
256
|
-
display:block;padding:3px 0 3px 14px;border-left:2px solid transparent;
|
|
257
|
-
font-size:12px;color:var(--text-faint);line-height:1.6;transition:all .12s;
|
|
258
|
-
}
|
|
259
|
-
.toc-link:hover{color:var(--accent);border-color:var(--accent2);text-decoration:none;transform:translateX(2px)}
|
|
260
|
-
.toc-link.active{color:var(--accent);border-color:var(--accent);font-weight:500}
|
|
261
|
-
.toc-h3{padding-left:24px;font-size:11px}
|
|
262
|
-
|
|
263
|
-
/* ── breadcrumbs ── */
|
|
264
|
-
.breadcrumbs{
|
|
265
|
-
font-size:13px;color:var(--text-faint);margin-bottom:28px;
|
|
266
|
-
padding:8px 0;
|
|
267
|
-
}
|
|
268
|
-
.breadcrumbs a{color:var(--text-faint);transition:all .12s}
|
|
269
|
-
.breadcrumbs a:hover{color:var(--accent)}
|
|
270
|
-
.breadcrumbs .sep{margin:0 6px;opacity:.6}
|
|
271
|
-
|
|
272
|
-
/* ── headings ── */
|
|
273
|
-
h1{
|
|
274
|
-
font-family:var(--mono);font-size:30px;font-weight:700;
|
|
275
|
-
margin-bottom:10px;color:var(--text);
|
|
276
|
-
letter-spacing:-0.02em;
|
|
277
|
-
}
|
|
278
|
-
h2{
|
|
279
|
-
font-family:var(--mono);font-size:20px;font-weight:600;
|
|
280
|
-
margin:48px 0 18px;color:var(--text);
|
|
281
|
-
padding-bottom:8px;border-bottom:1px solid var(--border);
|
|
282
|
-
letter-spacing:-0.01em;
|
|
283
|
-
}
|
|
284
|
-
h3{font-size:16px;font-weight:600;margin:28px 0 10px;color:var(--text)}
|
|
285
|
-
p{color:var(--text-dim);margin-bottom:14px;line-height:1.8}
|
|
286
|
-
.sub{color:var(--text-dim);margin-bottom:28px;font-size:16px}
|
|
287
|
-
|
|
288
|
-
/* ── hero ── */
|
|
289
|
-
.hero{
|
|
290
|
-
padding:56px 0 40px;
|
|
291
|
-
text-align:center;
|
|
292
|
-
position:relative;
|
|
293
|
-
overflow:hidden;
|
|
294
|
-
}
|
|
295
|
-
.hero::before{
|
|
296
|
-
content:'';
|
|
297
|
-
position:absolute;
|
|
298
|
-
top:-50%;left:-50%;right:-50%;bottom:-50%;
|
|
299
|
-
background:radial-gradient(ellipse at 50% 0%,rgba(124,58,237,.08) 0%,transparent 60%),
|
|
300
|
-
radial-gradient(ellipse at 80% 20%,rgba(167,139,250,.06) 0%,transparent 50%);
|
|
301
|
-
pointer-events:none;
|
|
302
|
-
z-index:0;
|
|
303
|
-
}
|
|
304
|
-
.hero > *{position:relative;z-index:1}
|
|
305
|
-
.hero h1{font-size:40px;margin-bottom:14px;letter-spacing:-0.03em}
|
|
306
|
-
.hero .hl{
|
|
307
|
-
background:linear-gradient(135deg,#7c3aed,#a78bfa);
|
|
308
|
-
-webkit-background-clip:text;
|
|
309
|
-
-webkit-text-fill-color:transparent;
|
|
310
|
-
background-clip:text;
|
|
311
|
-
}
|
|
312
|
-
.hero p{max-width:580px;margin:0 auto 24px;font-size:17px;line-height:1.7}
|
|
313
|
-
.hero-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
|
|
314
|
-
|
|
315
|
-
.badge{
|
|
316
|
-
display:inline-flex;align-items:center;gap:6px;
|
|
317
|
-
padding:4px 14px;border-radius:100px;
|
|
318
|
-
font-family:var(--mono);font-size:12px;font-weight:500;
|
|
319
|
-
color:var(--accent);background:var(--bg-code);
|
|
320
|
-
border:1px solid var(--border2);margin-bottom:24px;
|
|
321
|
-
box-shadow:0 2px 8px rgba(124,58,237,.06);
|
|
322
|
-
}
|
|
323
|
-
.badge .dot{width:6px;height:6px;border-radius:50%;background:var(--accent);animation:pulse 2s infinite}
|
|
324
|
-
|
|
325
|
-
@keyframes pulse{
|
|
326
|
-
0%,100%{opacity:1}
|
|
327
|
-
50%{opacity:.5}
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
.btn{
|
|
331
|
-
display:inline-flex;align-items:center;gap:6px;
|
|
332
|
-
padding:10px 20px;border-radius:var(--radius-sm);
|
|
333
|
-
font-family:var(--mono);font-size:13px;font-weight:600;
|
|
334
|
-
border:1px solid var(--border);
|
|
335
|
-
background:var(--bg-card);color:var(--text);
|
|
336
|
-
cursor:pointer;transition:all .2s;
|
|
337
|
-
position:relative;
|
|
338
|
-
overflow:hidden;
|
|
339
|
-
}
|
|
340
|
-
.btn:hover{text-decoration:none;transform:translateY(-2px);box-shadow:0 4px 12px var(--shadow)}
|
|
341
|
-
.btn-p{
|
|
342
|
-
background:var(--accent);color:#fff;border-color:var(--accent);
|
|
343
|
-
box-shadow:0 3px 14px rgba(124,58,237,.25);
|
|
344
|
-
}
|
|
345
|
-
.btn-p:hover{background:#6d28d9;color:#fff;border-color:#6d28d9;box-shadow:0 6px 20px rgba(124,58,237,.35);transform:translateY(-2px)}
|
|
346
|
-
.btn-ghost{color:var(--text-dim);border-color:var(--border)}
|
|
347
|
-
.btn-ghost:hover{color:var(--accent);border-color:var(--border2);background:var(--bg-hover);transform:translateY(-2px)}
|
|
348
|
-
|
|
349
|
-
/* ── stat cards ── */
|
|
350
|
-
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:36px 0}
|
|
351
|
-
.stat{
|
|
352
|
-
text-align:center;padding:20px 10px;border-radius:var(--radius);
|
|
353
|
-
background:var(--bg-card);border:1px solid var(--border);
|
|
354
|
-
transition:all .2s;
|
|
355
|
-
position:relative;
|
|
356
|
-
overflow:hidden;
|
|
357
|
-
}
|
|
358
|
-
.stat::before{
|
|
359
|
-
content:'';
|
|
360
|
-
position:absolute;top:0;left:0;right:0;height:2px;
|
|
361
|
-
background:linear-gradient(90deg,var(--accent),var(--accent2));
|
|
362
|
-
opacity:0;transition:opacity .2s;
|
|
363
|
-
}
|
|
364
|
-
.stat:hover{border-color:var(--border2);box-shadow:0 6px 20px var(--shadow);transform:translateY(-3px)}
|
|
365
|
-
.stat:hover::before{opacity:1}
|
|
366
|
-
.stat-num{
|
|
367
|
-
font-family:var(--mono);font-size:28px;font-weight:700;
|
|
368
|
-
background:linear-gradient(135deg,#7c3aed,#a78bfa);
|
|
369
|
-
-webkit-background-clip:text;
|
|
370
|
-
-webkit-text-fill-color:transparent;
|
|
371
|
-
background-clip:text;
|
|
372
|
-
line-height:1.2;
|
|
373
|
-
}
|
|
374
|
-
.stat-lbl{font-size:13px;color:var(--text-faint);font-weight:500;margin-top:4px}
|
|
375
|
-
|
|
376
|
-
/* ── grid cards ── */
|
|
377
|
-
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;margin:28px 0}
|
|
378
|
-
.card{
|
|
379
|
-
padding:24px;border-radius:var(--radius);
|
|
380
|
-
background:var(--bg-card);border:1px solid var(--border);
|
|
381
|
-
transition:all .2s;
|
|
382
|
-
position:relative;
|
|
383
|
-
overflow:hidden;
|
|
384
|
-
}
|
|
385
|
-
.card::before{
|
|
386
|
-
content:'';
|
|
387
|
-
position:absolute;top:0;left:0;right:0;height:2px;
|
|
388
|
-
background:linear-gradient(90deg,var(--accent),var(--accent2));
|
|
389
|
-
opacity:0;transition:opacity .2s;
|
|
390
|
-
}
|
|
391
|
-
.card:hover{border-color:var(--border2);box-shadow:0 6px 24px var(--shadow);transform:translateY(-3px)}
|
|
392
|
-
.card:hover::before{opacity:1}
|
|
393
|
-
.card h3{font-family:var(--mono);font-size:14px;margin-bottom:8px;color:var(--accent);display:flex;align-items:center;gap:8px}
|
|
394
|
-
.card p{font-size:13px;line-height:1.6}
|
|
395
|
-
.card .tag{
|
|
396
|
-
display:inline-block;font-family:var(--mono);font-size:11px;
|
|
397
|
-
padding:2px 8px;border-radius:4px;
|
|
398
|
-
background:var(--bg-code);color:var(--accent);
|
|
399
|
-
border:1px solid var(--border2);margin:8px 4px 0 0;
|
|
400
|
-
font-weight:500;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
/* ── card icons ── */
|
|
404
|
-
.card-icon{
|
|
405
|
-
width:32px;height:32px;border-radius:8px;
|
|
406
|
-
background:linear-gradient(135deg,rgba(124,58,237,.1),rgba(167,139,250,.1));
|
|
407
|
-
display:flex;align-items:center;justify-content:center;
|
|
408
|
-
font-size:16px;flex-shrink:0;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
/* ── terminal mock ── */
|
|
412
|
-
.term{
|
|
413
|
-
background:var(--bg-code);border:1px solid var(--border2);
|
|
414
|
-
border-radius:var(--radius);overflow:hidden;margin:36px auto;
|
|
415
|
-
max-width:680px;box-shadow:0 12px 40px var(--shadow),0 0 0 1px rgba(124,58,237,.05);
|
|
416
|
-
position:relative;
|
|
417
|
-
}
|
|
418
|
-
.term::after{
|
|
419
|
-
content:'';
|
|
420
|
-
position:absolute;bottom:0;left:0;right:0;height:40px;
|
|
421
|
-
background:linear-gradient(to bottom,transparent,var(--bg-code));
|
|
422
|
-
pointer-events:none;
|
|
423
|
-
}
|
|
424
|
-
.term-bar{
|
|
425
|
-
display:flex;align-items:center;gap:8px;
|
|
426
|
-
padding:12px 16px;background:rgba(124,58,237,.04);
|
|
427
|
-
border-bottom:1px solid var(--border2);
|
|
428
|
-
}
|
|
429
|
-
.term-dot{width:10px;height:10px;border-radius:50%;box-shadow:0 0 6px rgba(0,0,0,.1)}
|
|
430
|
-
.term-dot:nth-child(1){background:#ff5f56}
|
|
431
|
-
.term-dot:nth-child(2){background:#ffbd2e}
|
|
432
|
-
.term-dot:nth-child(3){background:#27c93f}
|
|
433
|
-
.term-title{font-family:var(--mono);font-size:12px;color:var(--text-faint);margin-left:6px;font-weight:500}
|
|
434
|
-
.term-body{
|
|
435
|
-
padding:16px;font-family:var(--mono);font-size:13px;line-height:1.8;
|
|
436
|
-
color:var(--text);overflow-x:auto;white-space:pre;
|
|
437
|
-
min-height:200px;
|
|
438
|
-
}
|
|
439
|
-
.term-body .p{color:var(--accent);font-weight:600}
|
|
440
|
-
.term-body .d{color:var(--text-faint)}
|
|
441
|
-
.term-body .h{color:var(--accent)}
|
|
442
|
-
.term-cursor{display:inline-block;width:8px;height:16px;background:var(--accent);animation:cursor-blink 1s infinite;vertical-align:middle;margin-left:2px}
|
|
443
|
-
@keyframes cursor-blink{
|
|
444
|
-
0%,100%{opacity:1}
|
|
445
|
-
50%{opacity:0}
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
/* ── table ── */
|
|
449
|
-
.table-wrap{overflow-x:auto;margin:20px 0;border-radius:var(--radius-sm);border:1px solid var(--border);box-shadow:0 2px 8px rgba(0,0,0,.03)}
|
|
450
|
-
table{width:100%;border-collapse:collapse;font-size:13px}
|
|
451
|
-
th{
|
|
452
|
-
font-family:var(--mono);font-size:11px;font-weight:600;text-transform:uppercase;
|
|
453
|
-
text-align:left;padding:10px 14px;letter-spacing:.06em;
|
|
454
|
-
color:var(--accent);background:var(--bg-code);
|
|
455
|
-
border-bottom:1px solid var(--border);
|
|
456
|
-
white-space:nowrap;
|
|
457
|
-
}
|
|
458
|
-
td{padding:10px 14px;border-bottom:1px solid var(--border);color:var(--text-dim);vertical-align:top;line-height:1.6}
|
|
459
|
-
tr:last-child td{border:none}
|
|
460
|
-
tr:hover td{background:rgba(124,58,237,.03)}
|
|
461
|
-
|
|
462
|
-
/* ── code blocks ── */
|
|
463
|
-
.code-block-wrap{margin:20px 0;border-radius:var(--radius-sm);border:1px solid var(--border);overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.03)}
|
|
464
|
-
.code-block-header{
|
|
465
|
-
display:flex;justify-content:space-between;align-items:center;
|
|
466
|
-
padding:8px 12px;background:var(--bg-card);
|
|
467
|
-
border-bottom:1px solid var(--border);font-size:12px;color:var(--text-faint);
|
|
468
|
-
font-family:var(--mono);font-weight:500;
|
|
469
|
-
}
|
|
470
|
-
.code-block-wrap pre{margin:0;border:none;border-radius:0;padding:14px 16px;font-size:13px;line-height:1.7}
|
|
471
|
-
.copy-btn{
|
|
472
|
-
background:none;border:1px solid var(--border);border-radius:4px;
|
|
473
|
-
color:var(--text-faint);font-size:11px;padding:3px 10px;cursor:pointer;font-family:var(--mono);transition:all .15s;
|
|
474
|
-
}
|
|
475
|
-
.copy-btn:hover{background:var(--bg-hover);color:var(--accent);border-color:var(--accent2)}
|
|
476
|
-
.copy-btn.copied{background:var(--bg-code);color:var(--accent);border-color:var(--accent)}
|
|
477
|
-
|
|
478
|
-
/* ── back to top ── */
|
|
479
|
-
.back-to-top{
|
|
480
|
-
position:fixed;bottom:24px;right:24px;
|
|
481
|
-
width:40px;height:40px;border-radius:50%;
|
|
482
|
-
background:var(--accent);color:#fff;border:none;
|
|
483
|
-
cursor:pointer;opacity:0;visibility:hidden;
|
|
484
|
-
transition:all .3s;z-index:80;
|
|
485
|
-
display:flex;align-items:center;justify-content:center;
|
|
486
|
-
font-size:18px;box-shadow:0 4px 12px rgba(124,58,237,.3);
|
|
487
|
-
}
|
|
488
|
-
.back-to-top.visible{opacity:1;visibility:visible}
|
|
489
|
-
.back-to-top:hover{background:#6d28d9;transform:translateY(-2px);box-shadow:0 6px 16px rgba(124,58,237,.4)}
|
|
490
|
-
|
|
491
|
-
/* ── language toggle (kept for backward compat) ── */
|
|
492
|
-
.lang-select{display:none}
|
|
493
|
-
|
|
494
|
-
/* ── misc ── */
|
|
495
|
-
hr{border:none;border-top:1px solid var(--border);margin:48px 0}
|
|
496
|
-
.footer{
|
|
497
|
-
margin-top:60px;padding-top:24px;border-top:1px solid var(--border);
|
|
498
|
-
display:flex;justify-content:space-between;align-items:center;gap:16px;
|
|
499
|
-
font-size:13px;color:var(--text-faint);flex-wrap:wrap;
|
|
500
|
-
}
|
|
501
|
-
.footer-links{display:flex;gap:16px}
|
|
502
|
-
.footer-links a{color:var(--text-faint);transition:all .12s}
|
|
503
|
-
.footer-links a:hover{color:var(--accent)}
|
|
504
|
-
|
|
505
|
-
/* ── responsive ── */
|
|
506
|
-
@media(max-width:900px){
|
|
507
|
-
.sidebar{display:none}
|
|
508
|
-
.content-wrap{margin-left:0}
|
|
509
|
-
.content{padding:calc(var(--header-h) + 16px) 20px 40px}
|
|
510
|
-
.header-nav,.header-search,.header-breadcrumbs,.lang-toggle{display:none}
|
|
511
|
-
.menu-btn{display:flex}
|
|
512
|
-
.stats{grid-template-columns:repeat(2,1fr)}
|
|
513
|
-
.grid{grid-template-columns:1fr}
|
|
514
|
-
.hero h1{font-size:28px}
|
|
515
|
-
.hero{padding:36px 0 28px}
|
|
516
|
-
.hero p{font-size:15px}
|
|
517
|
-
|
|
518
|
-
.sidebar.open{
|
|
519
|
-
display:block;position:fixed;top:var(--header-h);left:0;right:0;bottom:0;
|
|
520
|
-
width:auto;z-index:200;background:var(--bg);padding:24px;
|
|
521
|
-
border-right:none;animation:slideIn .2s ease-out;
|
|
522
|
-
}
|
|
523
|
-
.sidebar.open .header-search{
|
|
524
|
-
display:block;margin:0 0 16px;position:static;
|
|
525
|
-
}
|
|
526
|
-
.sidebar.open .header-search input{width:100%}
|
|
527
|
-
.sidebar.open .header-nav{display:flex;flex-direction:column;gap:2px}
|
|
528
|
-
.sidebar-overlay.open{display:block;position:fixed;inset:0;background:rgba(0,0,0,.3);z-index:199}
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
@media(max-width:1200px){
|
|
532
|
-
.toc-sidebar{display:none !important}
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
@keyframes slideIn{
|
|
536
|
-
from{transform:translateX(-100%);opacity:0}
|
|
537
|
-
to{transform:translateX(0);opacity:1}
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
/* ── print ── */
|
|
541
|
-
@media print{
|
|
542
|
-
.header,.sidebar,.toc-sidebar,.back-to-top{display:none}
|
|
543
|
-
.content-wrap{margin-left:0}
|
|
544
|
-
.content{padding:0}
|
|
545
|
-
}
|
package/docs/daemon.html
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>Daemon Mode — Clew Code</title>
|
|
7
|
-
<meta name="description" content="Run Clew Code as a background daemon for autonomous operations.">
|
|
8
|
-
<link rel="icon" type="image/svg+xml" href="assets/clew.svg">
|
|
9
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
|
-
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
11
|
-
<link rel="stylesheet" href="css/styles.css">
|
|
12
|
-
</head>
|
|
13
|
-
<body>
|
|
14
|
-
<header class="header"></header>
|
|
15
|
-
<div id="sidebarOverlay" class="sidebar-overlay"></div>
|
|
16
|
-
<aside id="sidebar" class="sidebar"></aside>
|
|
17
|
-
|
|
18
|
-
<div class="content-wrap">
|
|
19
|
-
<div class="content">
|
|
20
|
-
|
|
21
|
-
<div class="breadcrumbs"><a href="index.html">Home</a><span class="sep">/</span><span class="current">Daemon Mode</span></div>
|
|
22
|
-
|
|
23
|
-
<h1>Daemon Mode</h1>
|
|
24
|
-
<p class="sub">Run Clew Code as a persistent background process for autonomous task execution, scheduled jobs, and continuous monitoring.</p>
|
|
25
|
-
|
|
26
|
-
<h2 id="overview">Overview</h2>
|
|
27
|
-
<p>Daemon mode keeps Clew Code running in the background, processing tasks from a persistent queue, executing scheduled jobs via cron, and coordinating with other peers — all without an active terminal session.</p>
|
|
28
|
-
|
|
29
|
-
<h2 id="daemon-commands">Daemon Commands</h2>
|
|
30
|
-
<pre><code class="language-bash">❯ /daemon # Open daemon dashboard
|
|
31
|
-
❯ /daemon status # Check daemon status
|
|
32
|
-
</code></pre>
|
|
33
|
-
|
|
34
|
-
<h2 id="task-queue">Task Queue</h2>
|
|
35
|
-
<p>The daemon uses a file-backed persistent task queue with:</p>
|
|
36
|
-
<ul>
|
|
37
|
-
<li><strong>Lease-based concurrency</strong> — max 3 concurrent workers</li>
|
|
38
|
-
<li><strong>Exponential backoff retry</strong> — failed tasks are retried with increasing delays</li>
|
|
39
|
-
<li><strong>Dead-letter management</strong> — tasks that exceed retry limits are moved to dead-letter storage</li>
|
|
40
|
-
</ul>
|
|
41
|
-
|
|
42
|
-
<h2 id="scheduling">Scheduling</h2>
|
|
43
|
-
<p>Use cron syntax to schedule recurring tasks:</p>
|
|
44
|
-
<pre><code class="language-bash">❯ /task add "0 9 * * *" "daily standup summary"
|
|
45
|
-
❯ /task list # list scheduled tasks
|
|
46
|
-
❯ /task remove <id> # remove a task
|
|
47
|
-
</code></pre>
|
|
48
|
-
|
|
49
|
-
<h2 id="loop">Agent Loop</h2>
|
|
50
|
-
<p>The daemon integrates with the autonomous agent loop for 24/7 operation:</p>
|
|
51
|
-
<pre><code class="language-bash">❯ /loop start # start the autonomous loop
|
|
52
|
-
❯ /loop stop # stop the loop
|
|
53
|
-
❯ /loop status # check loop status
|
|
54
|
-
</code></pre>
|
|
55
|
-
|
|
56
|
-
<p>See <a href="loop.html">Agent Loop</a> for details.</p>
|
|
57
|
-
</div>
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
<script src="js/main.js"></script>
|
|
61
|
-
</body>
|
|
62
|
-
</html>
|