Repository navigation
Expand file tree
/
Copy patha.html
More file actions
461 lines (436 loc) · 16.4 KB
/
Copy patha.html
File metadata and controls
461 lines (436 loc) · 16.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>body {
background-color: var(--background);
color: var(--foreground);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
line-height: 1.6;
min-width: 1200px;
padding: 2rem;
}
h1,
h2,
h3,
h4,
h5,
h6 {
color: var(--keyword);
margin-top: 1.5em;
}
h1 {
font-size: 2.2em;
border-bottom: 2px solid var(--border);
padding-bottom: 0.3em;
}
h2 {
font-size: 1.8em;
border-bottom: 1px solid var(--border);
padding-bottom: 0.2em;
}
h3 {
font-size: 1.4em;
}
h4,
h5,
h6 {
color: var(--constant);
}
a {
color: #66aaff;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
code {
background-color: var(--surface);
color: var(--function);
padding: 0.2em 0.4em;
border-radius: 4px;
}
pre {
background-color: var(--surface);
color: var(--foreground);
padding: 1em;
overflow-x: auto;
border: 1px solid var(--border);
border-radius: 6px;
white-space: pre-wrap;
/* Wrap long lines */
word-wrap: break-word;
overflow-y: hidden;
/* Disable vertical scrolling */
}
pre code {
background: none;
padding: 0;
color: inherit;
display: block;
}
pre::-webkit-scrollbar {
display: none;
/* Hide scrollbar */
}
blockquote {
border-left: 4px solid var(--type);
background-color: var(--surface);
padding: 0.8em 1em;
color: var(--comment);
margin: 1em 0;
}
ul,
ol {
padding-left: 2em;
}
li::marker {
color: var(--function);
}
table {
border-collapse: collapse;
width: 100%;
margin: 1em 0;
}
th,
td {
border: 1px solid var(--border);
padding: 0.6em 1em;
}
th {
background-color: var(--surface);
color: var(--function);
}
tr:nth-child(even) {
background-color: var(--surface);
}
hr {
border: none;
border-top: 1px solid var(--border);
margin: 2em 0;
}
:root {
--keyword: #CBA6F7;
--function: #89B4FA;
--type: #89DCEB;
--constant: #F38BA8;
--comment: #7F849C;
--foreground: #CDD6F4;
/* UI Colors */
--background: #1E1E2E;
--surface: #2A2A3A;
--border: #45475A;
}
</style>
</head>
<body>
<div align="center">
<img src="https://placehold.co/900x200/0f0f0f/ffffff?text=tache-cli&font=montserrat" alt="Project Banner" width="100%" />
<br/>
<p><img src="https://img.shields.io/badge/version-1.0.0-blue?style=for-the-badge" alt="Version" />
<img src="https://img.shields.io/badge/coverage-00%25-brightgreen?style=for-the-badge" alt="Coverage" /><br />
<a href="https://github.com/fevunge/task-management-cli/issues"><img src="https://img.shields.io/github/issues/fevunge/task-management-cli" alt="Issues" /></a>
<a href="https://github.com/fevunge/task-management-cli/stargazers"><img src="https://img.shields.io/github/stars/fevunge/task-management-cli" alt="Stars" /></a></p>
<br/>
<img src="./assets/icon/tache.png" width="100px"/>
<h1>tache-cli</h1>
<h3><em>An enterprise-grade command-line task management system—for developers and other CLI’s users.</em></h3>
<p>The system manages tasks with priorities, due dates, tags, and interdependencies, using SQLite persistence via Drizzle ORM<br />
and integrates with Ollama for intelligent prioritization suggestions based on the user’s historical patterns.</p>
<br/>
<p><a href="https://fevunge.github.io/live-demo"><strong>Live Demo</strong></a> ·
<a href="https://fevunge.github.io/repo-name-placeholder/"><strong>Documentation</strong></a> ·
<a href="https://github.com/fevunge/article-placeholder"><strong>Article</strong></a> · </p>
</div>
<hr />
<h2>Table of Contents</h2>
<ul>
<li><a href="#-overview">Overview</a></li>
<li><a href="#-features">Features</a></li>
<li><a href="#-tech-stack">Tech Stack</a></li>
<li><a href="#-getting-started">Getting Started</a>
<ul>
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#installation">Installation</a></li>
<li><a href="#environment">Environment</a></li>
</ul>
</li>
<li><a href="#-usage">Usage</a></li>
<li><a href="#-api-reference">API Reference</a></li>
<li><a href="#-screenshots">Screenshots</a></li>
<li><a href="#-contributing">Contributing</a></li>
<li><a href="#-authors">Authors</a></li>
<li><a href="#-acknowledgements">Acknowledgements</a></li>
<li><a href="#-license">License</a></li>
</ul>
<hr />
<h2>Overview</h2>
<p>Tache CLI is a lightweight task, project, and calendar management system built for real-world use, designed for programmers and IT and technology professionals in general who prefer to work directly from the command line.<br />
It enables fast and organized task and project management through a terminal-centric experience,
with support for priorities, deadlines, reminders, alarms, and smart notifications.</p>
<p>Tache CLI can be integrated with Large Language Models (LLMs), transforming task and project management into an intelligent workflow assistant.</p>
<hr />
<h2>Features</h2>
<ul>
<li>
<p><strong>Task CRUD & Validation</strong><br />
Full create, read, update, and delete operations for tasks, with strict schema validation powered by Zod<br />
— ensuring all inputs are type-safe and well-formed before hitting the database.</p>
</li>
<li>
<p><strong>Project & Subtask Management</strong><br />
Support for hierarchical task structures, allowing users to create projects with nested subtasks,<br />
and manage dependencies between them (e.g., a subtask cannot be marked complete until its parent task is done).</p>
</li>
<li>
<p><strong>Task Scheduling</strong><br />
Tasks can be scheduled for future execution using cron job syntax or the <a href="https://fevunge.github.io/blog/taimplex"><strong><code>taimplex</code></strong></a> syntax,
allowing users to set recurring or one-time deadlines that trigger background jobs automatically.</p>
</li>
<li>
<p><strong>Real-Time Notifications</strong><br />
An event-driven notification system using Node.js <code>EventEmitter</code><br />
that fires alerts when tasks are created, updated, completed, or overdue — without polling.</p>
</li>
<li>
<p><strong>Export / Import</strong><br />
Users can export their full task list (or filtered subsets) to JSON, CSV, or raw SQL,<br />
and re-import from any of those formats — useful for backups, migrations, or data sharing.</p>
</li>
<li>
<p><strong>Fuzzy Search with Levenshtein Distance</strong><br />
A search engine that finds resources even with typos or partial matches,<br />
using the Levenshtein distance algorithm to rank results by similarity.</p>
</li>
<li>
<p><strong>Undo / Redo</strong><br />
A command history stack that lets users undo or redo any destructive action (delete, bulk update, etc.) within the current session.</p>
</li>
<li>
<p><strong>Custom Norminette <a href="https://gitlab.com/tachecli_g/lentte">Lentte</a></strong><br />
A project-specific linting ruleset that enforces text style conventions similar to 42’s norminette
— length limits, naming rules, and forbidden patterns — with clear error messages and auto-fix suggestions.</p>
</li>
<li>
<p><strong>Detailed Logging <a href="https://gitlab.com/tachecli_g/vlogging">Vlogging</a></strong><br />
A structured logging module - <strong><code>vlogging</code></strong> - inspired by 42’s <code>ft_printf</code> project,<br />
with log levels, timestamps, color-coded output, and optional verbose mode for debugging internals.</p>
</li>
<li>
<p><strong>Memory & Resource Tracking</strong><br />
A lightweight tracker that monitors heap usage, open handles,<br />
and DB connection counts throughout the process lifecycle
— surfaced via a <code>--stats</code> CLI flag.</p>
</li>
</ul>
<hr />
<h2>Tech Stack</h2>
<table>
<thead>
<tr>
<th>Layer</th>
<th>Technology</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Core Language</strong></td>
<td>TypeScript</td>
</tr>
<tr>
<td><strong>Frontend</strong></td>
<td>Commander.js, Klaur</td>
</tr>
<tr>
<td><strong>Compiler</strong></td>
<td>Bun</td>
</tr>
<tr>
<td><strong>Database</strong></td>
<td>SQLite, DrizzleORM</td>
</tr>
<tr>
<td><strong>DevOps</strong></td>
<td>Docker, Jenkins</td>
</tr>
<tr>
<td><strong>Testing</strong></td>
<td>Vitest</td>
</tr>
<tr>
<td><strong>Log</strong></td>
<td><a href="https://gitlab.com/tachecli_g/vlogging">Vlogging</a></td>
</tr>
<tr>
<td><strong>Linter</strong></td>
<td><a href="https://gitlab.com/tachecli_g/lentte">Lentte</a></td>
</tr>
</tbody>
</table>
<hr />
<h2>Getting Started</h2>
<h3>Prerequisites</h3>
<p>For local development, test, and contribution purposes, you will need to have the following software installed on your machine.</p>
<pre style="background-color:#2a2a3a;"><code class="language-bash"><span style="color:#89b4fa;">bun</span><span style="color:#cdd6f4;"> = 1.3.14
</span><span style="color:#89b4fa;">pnpm </span><span style="color:#cdd6f4;">>= 10.33.0
</span><span style="color:#89b4fa;">docker </span><span style="color:#cdd6f4;">>= 29.3.0 </span><span style="color:#7f849c;"># optional
</span></code></pre>
<h3>Installation</h3>
<p><strong>1. Clone the repository</strong></p>
<pre style="background-color:#2a2a3a;"><code class="language-bash"><span style="color:#89b4fa;">git</span><span style="color:#cdd6f4;"> clone https://github.com/fevunge/tache-cli.git
</span><span style="color:#89b4fa;">cd</span><span style="color:#cdd6f4;"> tache-cli
</span></code></pre>
<p><strong>2. Install dependencies</strong></p>
<pre style="background-color:#2a2a3a;"><code class="language-bash"><span style="color:#89b4fa;">make</span><span style="color:#cdd6f4;"> setup
</span></code></pre>
<p><strong>2.1. Compile JS code</strong></p>
<pre style="background-color:#2a2a3a;"><code class="language-bash"><span style="color:#89b4fa;">make</span><span style="color:#cdd6f4;"> compile
</span></code></pre>
<p><strong>2.2. Build executable</strong></p>
<pre style="background-color:#2a2a3a;"><code class="language-bash"><span style="color:#89b4fa;">make
</span></code></pre>
<p><strong>3. Set up environment variables</strong></p>
<pre style="background-color:#2a2a3a;"><code class="language-bash"><span style="color:#89b4fa;">make</span><span style="color:#cdd6f4;"> env
</span></code></pre>
<p><strong>5. Run at development env</strong></p>
<pre style="background-color:#2a2a3a;"><code class="language-bash"><span style="color:#89b4fa;">bun</span><span style="color:#cdd6f4;"> dev --help </span><span style="color:#7f849c;"># to run TypeScript code
</span><span style="color:#89b4fa;">bun</span><span style="color:#cdd6f4;"> start --help </span><span style="color:#7f849c;"># to run compiled JavaScript code
</span></code></pre>
<p><strong>6. Run compiled project</strong></p>
<pre style="background-color:#2a2a3a;"><code class="language-bash"><span style="color:#89b4fa;">chmod</span><span style="color:#cdd6f4;"> u+x ./bin/tache
</span><span style="color:#cdd6f4;">
</span><span style="color:#89b4fa;">./bin/tache</span><span style="color:#cdd6f4;"> --help
</span></code></pre>
<p><strong>7. Install at your local machine</strong></p>
<pre style="background-color:#2a2a3a;"><code class="language-bash"><span style="color:#89b4fa;">make</span><span style="color:#cdd6f4;"> install
</span><span style="color:#cdd6f4;">
</span><span style="color:#89b4fa;">tache</span><span style="color:#cdd6f4;"> --help
</span></code></pre>
<hr />
<h3>Environment</h3>
<p>Create a <code>.env</code> file in the root directory. See <code>.env.example</code> for reference.</p>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Description</th>
<th>Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>RESOURCE_PATH</code></td>
<td>Path to resource files</td>
<td>[x]</td>
</tr>
<tr>
<td><code>LLM_API_KEY</code></td>
<td>API key for LLM integration</td>
<td>[x]</td>
</tr>
</tbody>
</table>
<hr />
<h2>Usage</h2>
<h3>Basic Example</h3>
<pre style="background-color:#2a2a3a;"><code class="language-shell"><span style="color:#cdd6f4;"># Create a new task
</span><span style="color:#cdd6f4;">$ tache create "Finish project report" --priority high --due "2024-07-01"
</span></code></pre>
<h3>Advanced Example</h3>
<pre style="background-color:#2a2a3a;"><code class="language-shell"><span style="color:#cdd6f4;"># Create a project with subtasks and dependencies
</span><span style="color:#cdd6f4;">$ tache create "Launch Marketing Campaign" --type project
</span><span style="color:#cdd6f4;">
</span><span style="color:#cdd6f4;">$ tache create "Design Ad Creatives" --parent "Launch Marketing Campaign" --due "2024-06-15"
</span><span style="color:#cdd6f4;">
</span><span style="color:#cdd6f4;">$ tache create "Set Up Email List" --parent "Launch Marketing Campaign" --due "2024-06-20"
</span><span style="color:#cdd6f4;">
</span><span style="color:#cdd6f4;">$ tache create "Schedule Social Media Posts" --parent "Launch Marketing Campaign" --due "2024-06-25"
</span></code></pre>
<blockquote>
<p>💡 <strong>Tip:</strong> Check the <a href="./examples"><code>/examples</code></a> directory for more comprehensive usage patterns.</p>
</blockquote>
<hr />
<h2>API Reference</h2>
<h3>Full API reference available at <a href="./docs/api.md"><code>/docs/api.md</code></a></h3>
<ul>
<li><strong><code>GET /api/v1/resource</code></strong>: Returns a list of resources.</li>
<li><strong><code>POST /api/v1/resource</code></strong>: Creates a new resource.</li>
</ul>
<p>Full API reference available at <a href="./docs/api.md"><code>/docs/api.md</code></a></p>
<hr />
<h2>Screenshots</h2>
<div align="center">
<table>
<thead>
<tr>
<th>Dashboard</th>
<th>Detail View</th>
<th>Mobile</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="https://placehold.co/380x220/1a1a2e/ffffff?text=Dashboard" alt="Dashboard" /></td>
<td><img src="https://placehold.co/380x220/16213e/ffffff?text=Detail+View" alt="Detail" /></td>
<td><img src="https://placehold.co/180x320/0f3460/ffffff?text=Mobile" alt="Mobile" /></td>
</tr>
</tbody>
</table>
</div>
<hr />
<h2>Contributing</h2>
<p>Contributions are what make the open source community incredible.<br />
Any contributions you make are <strong>greatly appreciated</strong>.</p>
<ol>
<li><strong>Fork</strong> the repository</li>
<li>Create your feature branch: <code>git checkout -b feat/feature-or-bugfix</code></li>
<li>Commit your changes: <code>git commit -m 'feat: add some amazing feature or fix a bug'</code></li>
<li>Push to the branch: <code>git push origin feat/feature-or-bugfix</code></li>
<li>Open a <strong>Pull Request</strong></li>
</ol>
<p>Please read <a href="./CONTRIBUTING.md">CONTRIBUTING.md</a> if it exists for more details on our code of conduct, and the process for submitting pull requests.</p>
<p>Please, follow <a href="https://www.conventionalcommits.org/">Conventional Commits</a>:</p>
<pre style="background-color:#2a2a3a;"><code><span style="color:#cdd6f4;">feat(scope): New feature
</span><span style="color:#cdd6f4;">fix(scope): Bug fix
</span><span style="color:#cdd6f4;">docs(scope): Documentation update
</span><span style="color:#cdd6f4;">style(scope): Formatting (no logic change)
</span><span style="color:#cdd6f4;">refactor(scope): Code refactoring
</span><span style="color:#cdd6f4;">test(scope): Adding tests
</span><span style="color:#cdd6f4;">chore(scope): Maintenance tasks
</span></code></pre>
<hr />
<h2>Authors</h2>
<div align="center">
<table>
<thead>
<tr>
<th align="center"><img src="https://github.com/fevunge.png" width="80px" style="border-radius:50%"/></th>
</tr>
</thead>
<tbody>
<tr>
<td align="center"><strong>Fernando Vunge</strong></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/fevunge"><img src="https://img.shields.io/badge/GitHub-100000?style=flat&logo=github" alt="GitHub" /></a> <a href="https://linkedin.com/in/fevunge"><img src="https://img.shields.io/badge/LinkedIn-0077B5?style=flat&logo=linkedin" alt="LinkedIn" /></a> <a href="https://twitter.com/fevunge"><img src="https://img.shields.io/badge/Twitter-1DA1F2?style=flat&logo=twitter" alt="Twitter" /></a></td>
</tr>
</tbody>
</table>
</div>
<hr />
<div align="center">
<p>Made with 🧠 by <a href="https://github.com/fevunge">fevunge</a></p>
<p>⭐ <strong>Star this repo</strong> if you found it useful or interesting!</p>
</div>
<h2>Acknowledgements</h2>
<ul>
<li><a href="https://github.com/">Awesome Library</a> — Used for X feature</li>
<li><a href="https://dribbble.com/">Design Inspiration</a> — UI/UX reference</li>
<li><a href="https://stackoverflow.com/">Community Resource</a> — Problem-solving guidance</li>
<li><a href="https://github.com/">Open Source Project</a> — Architectural patterns</li>
</ul>
<hr />
<h2>License</h2>
<p>Distributed under the <strong>MIT License</strong>.</p>
</body>
</html>