lune

created pr with 126.1 on 2026-04-26T20:09:34Z · by 613b58b7
cmds
checkout latest patchset:
ssh pr.pico.sh print 126 | git am -3
checkout any patchset in a patch request:
ssh pr.pico.sh print 126.[rev] | git am -3
add changes to patch request:
git format-patch main --stdout | ssh pr.pico.sh pr add 126

Patchset 126.1 on 2026-04-26T20:09:33Z · commit 549e134

listing real name of tasks
juan 2026-04-21T03:21:16Z
construction of db for management of decrypted names of tasks
juan 2026-04-21T05:43:09Z
fix UTF8 chracteres
juan 2026-04-21T21:13:24Z
filter by status and coloring types of status
juan 2026-04-21T21:18:53Z
update help
juan 2026-04-21T21:21:36Z
list areas names
juan 2026-04-21T21:44:53Z
adjust table tasks to truncate name and list area
juan 2026-04-21T21:56:40Z
partial implementation of listing tasks by areas
juan 2026-04-21T22:05:20Z
final implementation of listing tasks by areas with UTF-8 chracteres
juan 2026-04-21T22:10:20Z
sort on task list to show first do now
juan 2026-04-21T22:33:29Z
update with 8 char of id and db.go
juan 2026-04-21T23:27:54Z
partial implementation of TUI menu on task update
juan 2026-04-21T23:35:35Z
task name correcion on TUI menu of Update task
juan 2026-04-21T23:38:19Z
TUI menu for update task with others flags
juan 2026-04-21T23:43:02Z
helper for TUI update task
juan 2026-04-21T23:49:56Z
search by first 8 char of note id for editing it
juan 2026-04-22T00:00:17Z
partial implementation on note TUI menu for update
juan 2026-04-22T00:05:46Z
TUI menu notebook just with tags
juan 2026-04-22T00:20:55Z
Note update now let you insert only the first 8 char of notebook id in update
juan 2026-04-22T00:25:53Z
implementation of (lune note notebook-list) for listing all notebooks and its ID
juan 2026-04-22T01:10:51Z
partial implementation of lune note show-content ID
juan 2026-04-22T02:01:11Z
convert \n in new line and \ in space for lune note show-content ID
juan 2026-04-22T02:18:42Z
corretion utf8 and utf16 on lune note show-content and note list
juan 2026-04-26T20:08:35Z
+109 -0 cmd/sync.go #
......@@ -0,0 +1,109 @@
1+// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
2+//
3+// SPDX-License-Identifier: AGPL-3.0-or-later
4+
5+package cmd
6+
7+import (
8+ "bufio"
9+ "fmt"
10+ "os"
11+ "os/exec"
12+ "time"
13+
14+ "git.secluded.site/lune/internal/config"
15+ "git.secluded.site/lune/internal/ui"
16+ "github.com/spf13/cobra"
17+)
18+
19+var syncCmd = &cobra.Command{
20+ Use: "sync",
21+ Short: "Sync Lunatask data",
22+ Long: `Sync Lunatask data by running the AppImage in the background using Xvfb.`,
23+ RunE: runSync,
24+}
25+
26+func init() {
27+ rootCmd.AddCommand(syncCmd)
28+}
29+
30+func runSync(cmd *cobra.Command, _ []string) error {
31+ // 1. Check if xvfb-run is installed
32+ if _, err := exec.LookPath("xvfb-run"); err != nil {
33+ return fmt.Errorf("xvfb-run not found. Please install xvfb (e.g., sudo apt install xvfb or sudo pacman -S xorg-server-xvfb)")
34+ }
35+
36+ cfg, err := config.Load()
37+ if err != nil && err != config.ErrNotFound {
38+ return err
39+ }
40+
41+ if cfg == nil {
42+ cfg = &config.Config{}
43+ }
44+
45+ // 2. Check for AppImage path
46+ if cfg.Sync.AppImagePath == "" {
47+ path, err := ui.Input("Lunatask AppImage path", "/path/to/Lunatask.AppImage")
48+ if err != nil {
49+ return err
50+ }
51+ if _, err := os.Stat(path); err != nil {
52+ return fmt.Errorf("invalid path: %w", err)
53+ }
54+ cfg.Sync.AppImagePath = path
55+ if err := cfg.Save(); err != nil {
56+ return fmt.Errorf("saving config: %w", err)
57+ }
58+ }
59+
60+ // 3. Run Lunatask with xvfb-run
61+ fmt.Printf("Starting Lunatask sync via Xvfb (timeout: %ds)...\n", cfg.Sync.Timeout)
62+
63+ c := exec.Command("xvfb-run", "-a", cfg.Sync.AppImagePath)
64+
65+ // Create pipes for stdout and stderr to capture the output
66+ stdout, _ := c.StdoutPipe()
67+ stderr, _ := c.StderrPipe()
68+
69+ if err := c.Start(); err != nil {
70+ return fmt.Errorf("starting Lunatask: %w", err)
71+ }
72+
73+ // Scanner to read output in real-time
74+ go func() {
75+ scanner := bufio.NewScanner(stdout)
76+ for scanner.Scan() {
77+ fmt.Printf("[Lunatask] %s\n", scanner.Text())
78+ }
79+ }()
80+ go func() {
81+ scanner := bufio.NewScanner(stderr)
82+ for scanner.Scan() {
83+ fmt.Printf("[Lunatask-Err] %s\n", scanner.Text())
84+ }
85+ }()
86+
87+ // Wait for the timeout
88+ done := make(chan error, 1)
89+ go func() {
90+ done <- c.Wait()
91+ }()
92+
93+ select {
94+ case <-time.After(time.Duration(cfg.Sync.Timeout) * time.Second):
95+ if err := c.Process.Kill(); err != nil {
96+ fmt.Printf("Warning: failed to kill Lunatask process: %v\n", err)
97+ }
98+ fmt.Println("Sync completed (timeout reached).")
99+ case err := <-done:
100+ if err != nil {
101+ // Some apps exit with status 137 when killed, which is normal for this case
102+ fmt.Printf("Sync finished (process exited: %v)\n", err)
103+ } else {
104+ fmt.Println("Sync completed (process exited).")
105+ }
106+ }
107+
108+ return nil
109+}
+12 -1 internal/config/config.go #
......@@ -27,6 +27,13 @@ type Config struct {
2727 Areas []Area `toml:"areas"`
2828 Notebooks []Notebook `toml:"notebooks"`
2929 Habits []Habit `toml:"habits"`
30+ Sync SyncConfig `toml:"sync"`
31+}
32+
33+// SyncConfig holds settings for the sync command.
34+type SyncConfig struct {
35+ AppImagePath string `toml:"appimage_path"`
36+ Timeout int `toml:"timeout"` // seconds to wait for sync
3037 }
3138
3239 // ExperimentalConfig holds experimental features.
......@@ -37,7 +44,9 @@ type ExperimentalConfig struct {
3744 // ApplyDefaults enables all tools if none are explicitly configured.
3845 func (c *Config) ApplyDefaults() {
3946 c.MCP.MCPDefaults()
40- // Other defaults can go here
47+ if c.Sync.Timeout == 0 {
48+ c.Sync.Timeout = 15 // Default 15 seconds
49+ }
4150 }
4251
4352 // MCPConfig holds MCP server settings.
......@@ -201,6 +210,8 @@ func Load() (*Config, error) {
201210 return nil, fmt.Errorf("decoding config: %w", err)
202211 }
203212
213+ cfg.ApplyDefaults()
214+
204215 return &cfg, nil
205216 }
206217
+104 -45 internal/db/reader.go #
......@@ -22,9 +22,9 @@ import (
2222
2323 type idbComparer struct{}
2424
25-func (idbComparer) Compare(a, b []byte) int { return bytes.Compare(a, b) }
26-func (idbComparer) Name() string { return "idb_cmp1" }
27-func (idbComparer) Successor(dst, a []byte) []byte { return nil }
25+func (idbComparer) Compare(a, b []byte) int { return bytes.Compare(a, b) }
26+func (idbComparer) Name() string { return "idb_cmp1" }
27+func (idbComparer) Successor(dst, a []byte) []byte { return nil }
2828 func (idbComparer) Separator(dst, a, b []byte) []byte { return nil }
2929
3030 func GetDefaultPath() string {
......@@ -58,7 +58,7 @@ func SetMasterPassword(password string) error {
5858 }
5959
6060 var (
61- nameCache = make(map[string]string)
61+ nameCache = make(map[string]string)
6262 cacheWarmed = false
6363 )
6464
......@@ -87,31 +87,29 @@ func WarmCache() error {
8787 iter := db.NewIterator(nil, nil)
8888 defer iter.Release()
8989
90+ idUtf8 := []byte("\"id\"")
91+ nameUtf8 := []byte("\"name\"")
92+ titleUtf8 := []byte("\"title\"")
93+
94+ idUtf16 := toUtf16("\"id\"")
95+ nameUtf16 := toUtf16("\"name\"")
96+ titleUtf16 := toUtf16("\"title\"")
97+
9098 for iter.Next() {
9199 val := iter.Value()
92- // Try to find JSON-like blobs
93- if bytes.Contains(val, []byte("\"id\"")) && bytes.Contains(val, []byte("\"name\"")) {
94- start := bytes.IndexByte(val, '{')
95- end := bytes.LastIndexByte(val, '}')
96- if start != -1 && end != -1 && end > start {
97- jsonBytes := val[start : end+1]
98- id := extractField(jsonBytes, "id")
99- name := extractField(jsonBytes, "name")
100- if id != "" && name != "" {
101- nameCache[id] = cleanName(name)
102- }
100+
101+ hasId := bytes.Contains(val, idUtf8) || bytes.Contains(val, idUtf16)
102+ hasName := bytes.Contains(val, nameUtf8) || bytes.Contains(val, nameUtf16)
103+ hasTitle := bytes.Contains(val, titleUtf8) || bytes.Contains(val, titleUtf16)
104+
105+ if hasId && (hasName || hasTitle) {
106+ id := extractField(val, "id")
107+ name := extractField(val, "name")
108+ if name == "" {
109+ name = extractField(val, "title")
103110 }
104- } else if bytes.Contains(val, []byte("\"id\"")) && bytes.Contains(val, []byte("\"title\"")) {
105- // Notes use "title"
106- start := bytes.IndexByte(val, '{')
107- end := bytes.LastIndexByte(val, '}')
108- if start != -1 && end != -1 && end > start {
109- jsonBytes := val[start : end+1]
110- id := extractField(jsonBytes, "id")
111- title := extractField(jsonBytes, "title")
112- if id != "" && title != "" {
113- nameCache[id] = cleanName(title)
114- }
111+ if id != "" && name != "" {
112+ nameCache[id] = cleanName(name)
115113 }
116114 }
117115 }
......@@ -124,7 +122,7 @@ func FindAreaIDByName(name string) string {
124122 if !cacheWarmed {
125123 _ = WarmCache()
126124 }
127-
125+
128126 nameLower := strings.ToLower(name)
129127 for id, n := range nameCache {
130128 if strings.ToLower(n) == nameLower {
......@@ -155,10 +153,7 @@ func GetNoteContent(noteID string) (string, error) {
155153 return "", fmt.Errorf("local database not found")
156154 }
157155
158- o := &opt.Options{
159- Comparer: idbComparer{},
160- ReadOnly: true,
161- }
156+ o := &opt.Options{Comparer: idbComparer{}, ReadOnly: true}
162157
163158 db, err := leveldb.OpenFile(dbPath, o)
164159 if err != nil {
......@@ -169,18 +164,18 @@ func GetNoteContent(noteID string) (string, error) {
169164 iter := db.NewIterator(nil, nil)
170165 defer iter.Release()
171166
167+ noteID16 := toUtf16(noteID)
168+
172169 for iter.Next() {
173170 val := iter.Value()
174- if bytes.Contains(val, []byte(noteID)) {
175- // Extract content using regex
176- re := regexp.MustCompile(`"content"\s*:\s*"([^"]+)"`)
177- matches := re.FindSubmatch(val)
178- if len(matches) > 1 {
179- return cleanName(string(matches[1])), nil
171+ if bytes.Contains(val, []byte(noteID)) || bytes.Contains(val, noteID16) {
172+ content := extractField(val, "content")
173+ if content != "" {
174+ return content, nil
180175 }
181176 }
182177 }
183- return "", fmt.Errorf("content not found for note ID: %s", noteID)
178+ return "", fmt.Errorf("nota não encontrada")
184179 }
185180
186181 // CompleteID searches for the full UUID by an 8-character prefix.
......@@ -231,7 +226,7 @@ func ListLocalAreas() ([]Area, error) {
231226 areas := make([]Area, 0)
232227 for iter.Next() {
233228 val := iter.Value()
234-
229+
235230 // In V8 serialization, "modelType" is 22 09 6d 6f 64 65 6c 54 79 70 65
236231 // and "area" is 22 04 61 72 65 61
237232 if bytes.Contains(val, []byte("\x22\x09modelType")) && bytes.Contains(val, []byte("\x22\x04area")) {
......@@ -285,13 +280,77 @@ func toUtf16(s string) []byte {
285280 }
286281
287282 func extractField(data []byte, field string) string {
288- // Extract field using regex for better reliability in serialized JSON
289- re := regexp.MustCompile(`"` + field + `"\s*:\s*"([^"]+)"`)
290- matches := re.FindSubmatch(data)
291- if len(matches) > 1 {
292- return string(matches[1])
283+ fieldUtf8 := []byte("\"" + field + "\"")
284+ fieldUtf16 := toUtf16("\"" + field + "\"")
285+
286+ var startIdx int
287+ var isUtf16 bool
288+
289+ if idx := bytes.Index(data, fieldUtf8); idx != -1 {
290+ startIdx = idx + len(fieldUtf8)
291+ isUtf16 = false
292+ } else if idx := bytes.Index(data, fieldUtf16); idx != -1 {
293+ startIdx = idx + len(fieldUtf16)
294+ isUtf16 = true
295+ } else {
296+ return ""
297+ }
298+
299+ // Skip colon and spaces
300+ if isUtf16 {
301+ colon16 := toUtf16(":")
302+ if idx := bytes.Index(data[startIdx:], colon16); idx != -1 {
303+ startIdx += idx + len(colon16)
304+ }
305+ quote16 := toUtf16("\"")
306+ idx := bytes.Index(data[startIdx:], quote16)
307+ if idx == -1 {
308+ return ""
309+ }
310+ startIdx += idx + len(quote16)
311+
312+ // Find closing quote (interleaved with nulls)
313+ endIdx := -1
314+ for i := startIdx; i < len(data)-1; i += 2 {
315+ if data[i] == '"' && data[i+1] == 0 {
316+ // Check if escaped
317+ if i >= 2 && data[i-2] == '\\' && data[i-1] == 0 {
318+ continue
319+ }
320+ endIdx = i
321+ break
322+ }
323+ }
324+ if endIdx == -1 {
325+ return ""
326+ }
327+ return cleanName(string(data[startIdx:endIdx]))
328+ } else {
329+ if idx := bytes.IndexByte(data[startIdx:], ':'); idx != -1 {
330+ startIdx += idx + 1
331+ }
332+ idx := bytes.IndexByte(data[startIdx:], '"')
333+ if idx == -1 {
334+ return ""
335+ }
336+ startIdx += idx + 1
337+
338+ endIdx := -1
339+ for i := startIdx; i < len(data); i++ {
340+ if data[i] == '"' {
341+ // Check if escaped
342+ if i > 0 && data[i-1] == '\\' {
343+ continue
344+ }
345+ endIdx = i
346+ break
347+ }
348+ }
349+ if endIdx == -1 {
350+ return ""
351+ }
352+ return cleanName(string(data[startIdx:endIdx]))
293353 }
294- return ""
295354 }
296355
297356 func cleanName(s string) string {
+16 -0 internal/ui/confirm.go #
......@@ -24,3 +24,19 @@ func Confirm(title string) bool {
2424
2525 return confirmed
2626 }
27+
28+// Input asks the user for a string input using an interactive prompt.
29+func Input(title, placeholder string) (string, error) {
30+ var val string
31+
32+ err := huh.NewInput().
33+ Title(title).
34+ Placeholder(placeholder).
35+ Value(&val).
36+ Run()
37+ if err != nil {
38+ return "", err
39+ }
40+
41+ return val, nil
42+}
+0 -0 lune-new #
Binaries are not rendered as diffs.
+0 -270 output.txt #
......@@ -1,270 +0,0 @@
1-[?25l[?2004h ⣽ Fetching tasks… ⣻ Fetching tasks… ⢿ Fetching tasks… ⡿ Fetching tasks… ⣟ Fetching tasks… ⣯ Fetching tasks… ⣷ Fetching tasks… ⣾ Fetching tasks…  [?2004l[?25h[?1002l[?1003l[?1006l┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─────────┬─────────┐
2-│NAME │STATUS │SCHEDULED│
3-├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────┼─────────┤
4-│Now │completed│- │
5-│Later │completed│- │
6-│Started │completed│- │
7-│Waiting │completed│- │
8-│潄敮 │completed│- │
9-│Did │completed│- │
10-│潃潬慣⁲潮挠污湥楲浵洠湥⁵敤搠瑡獡搠⁥敤灳獥獡爠捥牯敲瑮獥 │completed│- │
11-│獥楴異慬⁲慤慴⁳慰慲映穡牥愠⁳愲瀠珳 │completed│- │
12-│Comprar capinah galaxy note 8 │completed│- │
13-│敖楲楦慣⁲濣爠捥獩狳慩丠楥慶 │completed│- │
14-│Fazer contabilidade │completed│- │
15-│Enviar email para assembleia de presta��o de contas │completed│- │
16-│Fazer reclama��o constitucional sobre provas de vaquejada no RS │later │- │
17-│湵晩捩牡挠瑡来牯獡攠畤慣灡⁰潭敮⁹ │completed│- │
18-│敶楲楦慣⁲慤慴攠洠楥獯瀠牡⁡慰慧⁲漲瀠珳攠挠汯捯牡渠慣敬摮狡潩‮潃潬慣⁲扴慤慴瘠湥⁣慣瑲潡椠瑮牥攠挠湡楴桮⹯ │completed│- │
19-│Colocar hor�rio futebol semanal no calend�rio │completed│- │
20-│濣挠湯牴⁡慣懧樠癡污⁩潣慢敳渠㔱戠搠⁡慣瑲⁡慤琠牥慲 │later │- │
21-│牴穡牥琠歯湥䘠⁖牰慣瑮湩潨 │completed│- │
22-│Propor traduzir app Lunatask │completed│- │
23-│敖楲楦慣䍁⁐橴灳 │completed│- │
24-│慍捲牡搠⁥捡浯慰桮牡漠†楔潒慬攠浵瀠摥污 │later │- │
25-│verificar programa ppgd atitus e prazo qualifica��o │completed│- │
26-│comprar em ferragem fita de compress�o t�rmica para colocar em volta do ferrinho da al�a das x�caras de alumina │completed│- │
27-│捡潡瘠癥⁥摡獥牴摡牯 │completed│- │
28-│敳畧潲䴠牡慩慮䠠泩潩 │completed│- │
29-│数獮濣洠牯整䴠牡慩慮䠠汥潩 │completed│- │
30-│montar um plano para remunerar melhor o psico eduardo. separando x por m�s, nem que s� consiga paga 100 reais pra ele por m�s. 200 reais � o ideal, pq ele ja recebe 30 da unimed. Pagando mais 50 por sessao ta razo�vel. │completed│- │
31-│潃灭慲⁲慳潢敮整朠慲慮潤 │completed│- │
32-│濣删来湩⁡敤唠畳慣楰濣 │completed│- │
33-│pesquisar como arrumar garrafa que perdeu v�cuo │completed│- │
34-│敭桬牯牡爠瑯湩⁡慭楴慮ⱬ瀠慡琠⁵慮敬慶瑮牡攠映捩牡搠楥慴潤渠潳愠漠樠慥捡牯慤⁲獲 │completed│- │
35-│ Falar com Ana Quintela para fazer est�gio/horas de media��o. │later │- │
36-│R�plica Mercado Livre │completed│- │
37-│慍捲牡洠擩捩⁥慦敺⁲硥浡獥搠⁥潲楴慮攠搠瑳 │completed│- │
38-│fazer distribui��o TJBA │completed│- │
39-│recurso apela��o Regina │completed│- │
40-│獕捵灡敲楧慮 │completed│- │
41-│整慭瀠潲敪潴攠瀠潲汢浥⁡畑污晩捩濣 │completed│- │
42-│慆敺⁲灡汥濣匠湡楴慮 │completed│- │
43-│Pensar em dia/hor�rio para acessar eprocs e colocar datas na agenda e no lunatask │completed│- │
44-│Corrigir artigo para TCC Famart │completed│- │
45-│colocar as tarefas de calend�rio tamb�m nas tarefas desse app │completed│- │
46-│敖楲楦慣⁲敳挠湯楦畧慲楧⵴牣灹⁴慴挠牥慴‮畂捳牡洠湡慵獩搠⁥潴潤⁳獯瀠捡瑯獥瀠牡⁡慮牰捥獩牡搠⁥湩整湲瑥 │completed│- │
47-│潣瑮慲牲穡敯⁳⁥灡汥濣愠敤楳慶丠汩慺 │completed│- │
48-│潃灭慲挠汯瑥癩⁡慭整楲楡⁳敤栠杩敩敮 │later │- │
49-│慦敺⁲慣業敳慴⁳潦⁡敶慧慮 │completed│- │
50-│Curso de treinamento de ativistas da For�a Vegana │later │- │
51-│濣瀠牡⁡杩慵慬⁲湡浩楡⁳扡湡潤慮潤⁳慮⁳畲獡愠愠楮慭獩猠汩敶瑳敲⁳⁥潣牢牡搠扩浡⁡畣摩摡敤敬⁳浥挠獡敤愠牴灯汥浡湥潴漠⁵敮散獳摩摡獥攠灳捥慩獩‮ │later │- │
52-│牐穡慦慴灡汥濣䨠慓瑮⁡慃慳 │completed│- │
53-│慦敺⁲潣瑮慲潴搠⁥潨潮楲獯搠⁡敒楧慮 │completed│- │
54-│Montar cronograma de 2023 da FV │completed│- │
55-│潍瑮牡攠瑳摵慰慲漠吠䕒‮栲琠摯獯漠⁳楤獡‬敳硥散Ⅿ │completed│- │
56-│浵⁡慴敲慦搠⁥〳業潰⁲楤⁡敤挠摡⁡牡慥搠⁡楶慤 │completed│- │
57-│pedir o contato da Luana para o Diego │completed│- │
58-│olhar proc execucao juliano │completed│- │
59-│慦敺⁲慭楮敦瑳濣瀠潲散獳潪樠汵慩潮攠灭敲慳 │completed│- │
60-│slicitar habilita��o trabalhista 0021698-93.2019.5.04.0411 │completed│- │
61-│扁楲⁲潳楣摥摡⁥湩楤楶畤污 │completed│- │
62-│Contrarraz�es de recurso adesivo Regina uni�o est�vel │completed│- │
63-│摡⁤潨慲楲慦敺⁲潰⁳牧摡慵潣獥 │completed│- │
64-│fazer contabilidade que falta │completed│- │
65-│整浲湩牡搠⁥湥楶牡搠捯浵湥潴⁳潳楣摥敤椠摮癩摩慵敤愠癤捯捡慩 │completed│- │
66-│晏捩慩⁲慰慲愠瀠敲敦瑩牵⁡慰慲洠湡整⁲⁡牯慬映捥慨慤搠⁥慳⁢慰慲搠浯湩潧 │later │- │
67-│Iniciar grupo de corrida com a Tanira │later │- │
68-│慆敺⁲濣䨠慥䩔佔 │completed│- │
69-│contrasrrazoes regina uniao estavel │completed│- │
70-│planejar e reservar hospedagens viagem US │completed│- │
71-│peti��o Luciane evitar tornozeleira │completed│- │
72-│Fazer Ementa do grupo de politicas p�blicas │completed│- │
73-│汏慨⁲牰捯獥潳焠敵猠略朠汩敢瑲敭攠癮潩⁵潮稠灡 │completed│- │
74-│慆敺⁲条慲潶樠慥䩔佔 │completed│- │
75-│数楴慣橡獵整栠湯牯牡潩爠癰渠楥慶 │completed│- │
76-│潣灭牡瀠獡慴搠⁥浡湥潤浩 │completed│- │
77-│Fazer estatuto APED │completed│- │
78-│a��o Hero seguros (viagem cruzeiro pai) │completed│- │
79-│湅楶牡瀠潲畣慲潊 │completed│- │
80-│peticionar jos� │completed│- │
81-│慦敺⁲硥浡獥 │completed│- │
82-│comprar 3 pneus de bike │completed│- │
83-│marcar dentista │completed│- │
84-│楄敺⁲慮慰慲琠摵瑡⃩楦慮楬慺⁲牡楴潧愠慭瑲慹 │completed│- │
85-│潃污獩濣搠⁥浥牰獥獡搠⁥慣慣慲瑳敲摡慰慲映穡牥朠慲摮⁥慣灭湡慨瀠扵楬楣楲⁡潳牢⁥獵敤攠畱湩獯渠獡映穡湥慤⁳敤挠捡畡 │later │- │
86-│trocar tela galaxy note │completed│- │
87-│汰捩⁡慣楲捯⁡慣摡獯 │completed│- │
88-│R�plica BMG │completed│- │
89-│潃灭牡楴桬牡戠捡畫獰攠瑮敲挠湯慴瘠汥慨攠渠癯⁡湯摥楲敶 │completed│- │
90-│pasta de amendoim para o cantinho │completed│- │
91-│数楴楣湯牡愠敤瑳慲敭瑮楣慴慣景捩慩敤樠獵楴懧 │completed│- │
92-│Fazer backup do computador e do celular no proton. sent de 100 em 100gb │completed│- │
93-│‵牰獡ㄠ样搠⁥浵⁡畱湩慴渠⁡慰慲慤搠畯牴慬潤搠⁡畲⁡潤挠湡楴桮‭敭楮慮戠湯瑩湩慨 │completed│- │
94-│汰捩⁡慣楲捯⁡慣摡獯 │completed│- │
95-│灡汥濣愠潪愠慮氠極慺 │completed│- │
96-│contrarraz�es agravo regina 2o grau │completed│- │
97-│ligar tribunal tjrj proc milena │completed│- │
98-│Cartorio APED │completed│- │
99-│慦敺⁲敤汣牡旵⁳楦捳楡⁳慤猠捯敩慤敤甠楮数獳慯敤愠癤捯捡慩 │completed│- │
100-│Tarefas para fazer s� quando n�o tiver nenhuma aberta em nenhum outro projeto │later │- │
101-│汁整慲⁲浥楡湣橰ⴠ愠敮慸搠敢 │completed│- │
102-│䅓⁃瑡瑩獵攠戠杭 │completed│- │
103-│楢潴搠⁥敬⁲潮楴楣獡攠爠摥獥猠捯慩獩‮敶杧祬ㄠ⁸潰⁲敳慭慮 │completed│- │
104-│敌⁲楬牶獯愠湩⁳敤漠桬牡渠瑯揭慩⁳⁥楶敤獯渠潹瑵扵⹥䰠楥⁡敢慭獩氠癩潲ⱳ瀠摯浥猠牥搠⁥慬敺⹲䘠煯敵攠扡潳癲牥挠湯敨楣敭瑮獯洠楡⁳敤獮獯 │completed│- │
105-│Achar propaganda de ado��o que o cachorro morre e o mlk vai de novo adotar outro cachorro │later │- │
106-│㔲業㩮琠硥潴戠敲敶映污湡潤猠扯敲漠焠敵猠濣攠瀠慲焠敵猠牥敶獯搠物楥潴⁳湡浩楡⁳ │next │- │
107-│慐楴慮⁳潮⁳楦摮獥 │later │- │
108-│R�plica e provas TJTO │completed│- │
109-│Mandar mensagem pra L�cia, do c�o da guarda │later │- │
110-│牃慩⁲湣橰⁳慰慲挠浯慰瑲浩湥慴楲慺⁲畴⁡楶慤攠瀠牡牡搠⁥獵牡挠晰 │later │- │
111-│Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │
112-│Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │
113-│Compra de B12 │completed│- │
114-│Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │
115-│桃浡牡䴠牡慩慮倠污摵慰慲甠潲 │completed│- │
116-│Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │
117-│Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │
118-│濣䰠捵慩敮挠浯漠搠敩潧 │completed│- │
119-│Gerar boleto Zeni │completed│- │
120-│Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │
121-│cnseg Mariana gmail │completed│- │
122-│estudar massagem t�ntrica │later │- │
123-│Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │
124-│Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │
125-│Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │
126-│楢潴搠⁥敬⁲潮楴楣獡攠爠摥獥猠捯慩獩‮敶杧祬ㄠ⁸潰⁲敳慭慮 │completed│- │
127-│敌⁲楬牶獯愠湩⁳敤漠桬牡渠瑯揭慩⁳⁥楶敤獯渠潹瑵扵⹥䰠楥⁡敢慭獩氠癩潲ⱳ瀠摯浥猠牥搠⁥慬敺⹲䘠煯敵攠扡潳癲牥挠湯敨楣敭瑮獯洠楡⁳敤獮獯 │completed│- │
128-│楢潴搠⁥敬⁲潮楴楣獡攠爠摥獥猠捯慩獩‮敶杧祬ㄠ⁸潰⁲敳慭慮 │completed│- │
129-│marcar otorrino │completed│- │
130-│Melhorar setup de bloqueios e cessar todas comunicacoes nao produtivas at� fevereiro. │completed│- │
131-│楔慲⁲摨挠浯眠湩潤獷搠捰搠灥楯⁳敤猠湩牣湯穩牡瀠潲潴⁥汢煯敵牡琠摵慰慲琠湥慴⁲獵牡攠敬瀠牡⁡牰摯瑵癩摩摡⁥‮潂慴⁲敳桮⁡慮戠潩⁳⁥獵牡猠湥慨愠浤湩渠湧浯⁥慰慲渠潡猠牥瀠獯敶慢硩牡瀠捡瑯獥攠愠牢物朠潮敭 │completed│- │
132-│慆敺⁲浥楡敶敶攠灭敲慳戠獵 │completed│- │
133-│慆敺⁲污整慲慣慥慴畴潴愠数⁤⁥敧慲⁲潢敬潴 │later │- │
134-│慦敺⁲浥慢杲獯搠⁥敤汣牡濣瀠潲散獳㈠⁧橴獲 │completed│- │
135-│Fazer or�amento para ir de uber at� a parada e da parada at� o cantinho. │completed│- │
136-│Montar plano de conting�ncia para dias adversos │next │- │
137-│潨慲楲敳慭慮敤爠癥獩潡攠漠杲湡穩捱潡搠獡琠牡晥獡瀠牡⁡⁡敳慭慮‮潣潬慣⁲潮挠污湥慤楲獡琠牡晥獡搠⁡敳慭慮 │next │- │
138-│falar juiz a��o pais seguro │completed│- │
139-│慦慬⁲敤敳扭牡慧潤⁲湡敧潬瘠⃳慭楲慳 │completed│- │
140-│R�plica Microsoft 2 │completed│- │
141-│汣湯牡栠⁤牡档渠捰洠敡渠獳⁤畱⁥敪湡挠浯牰畯‬獡楳敤硩牡漠猠摳眠湩潤獷搠⁥慬潤攠琠牥漠瀠⁣浥挠獡⁡慰慲猠牥瀠潲畤楴潶氠⃡慴扭淩‮敬慶⁲牰瑯瑥牯愠牵捩汵牡猠浥牰⁥牰⁡慣慳 │completed│- │
142-│湥楶牡搠捯浵湥潴⁳⁥獥楴異慬⁲牰穡慰慲甠畳慣楰濣搠⁡敒楧慮 │completed│- │
143-│敌慶⁲档捯汯瑡⁥敶 │completed│- │
144-│marcar psiquiatra diagn�stico autismo │completed│- │
145-│獅畴慤⁲慬摵畡楴浳敖 │completed│- │
146-│Nota fiscal ga�cha For�a Vegana - renda para APED │later │- │
147-│H�bitos que devem ser retomados e colocados para track no p�s disserta��o │later │- │
148-│佃卉十倠剁⁁䅆䕚⁒低䌠䱅䱕剁䐠卅䱂兏䕕䑁⁏䄨兒䥕䅖佄⥓ │later │- │
149-│牰橯瑥敤氠獩慴⁲潴潤⁳整獵愠業潧⁳⁥敶⁲潴潤⁳汥獥愠敭潮⁳砱愠湡⹯甠楴楬慺⁲敧敲据慩潤⁲敤爠汥捡潩慮敭瑮獯搠畬慮慴歳瀠牡⁡档捥牡椠獳⹯ │waiting │- │
150-│Verificar se a cobran�a MP*MOREIRATUR do dia 12/10/2023 vai ser reembolsada da fatura da XP │completed│- │
151-│Quebra do conforto por identificadores de indiferen�a │completed│- │
152-│潆湲捥牥攠灸牥据慩⁳楤敶瑲摩獡攠搠浥湯瑳慲獥搠⁥慶潬⁲畳数楲牯 │completed│- │
153-│adicionar hor�rio para tarefas dom�sticas e para exerc�cios f�sicos │completed│- │
154-│捡獥慳⁲橰⁥牴㑴 │completed│- │
155-│Marcar de visitar a Aline prima │completed│- │
156-│牐灥牡牡挠楯慳⁳畡楤湥楣⁡摡獥牴摡牯 │completed│- │
157-│ACP contra n�o reciclagem de produtos │later │- │
158-│慔牲慦⁳潤瑳捩獡 │completed│- │
159-│敌⁲牰橯瑥数煳極慳䴠牡慩慮䌠敲捳湥整 │completed│- │
160-│楌楣慴偁䑅 │completed│- │
161-│Cumprimento de senten�a FAB�OLA │completed│- │
162-│Come�ar a ter um cronograma r�gido quanto ao teu dia. │completed│- │
163-│潃癮牥慳⁲敗⁳潣据牵潳䄠ⵌ卒 │completed│- │
164-│Dissolu��o uni�o est�vel Sara │completed│- │
165-│Organizar acampamento │completed│- │
166-│物渠⁡偁䕁 │completed│- │
167-│Testamento e blindagem patrimonial Vev� │later │- │
168-│捁浡慰敭瑮档癵獩畱楥潲 │completed│- │
169-│Recurso prev. MEIRE │completed│- │
170-│䍅⁆潆⁡敖慧慮攠䄠噄 │later │- │
171-│gratuidade santina fabiola execu��o │completed│- │
172-│敃瑲晩捩摡协偉瀠牡⁡䙎慇揺慨 │later │- │
173-│数楴楣湯牡攠數畣牢湵潧敭⁳剔㑔 │completed│- │
174-│湥牴癥獩慴挠牥楴楦慣潤䘠⁖ㅁ │completed│- │
175-│Colocar hor�rio molhar planta (250ml) e de limpar banheiro e quarto no c�ssio │completed│- │
176-│楬慧⁲慰慲愠煲極潶朠牥污瀠潲散獳敒楧慮 │completed│- │
177-│dividas │completed│- │
178-│数楴楣湯牡攠潮敭搠⁡慎 │completed│- │
179-│摁捩潩慮⁲潨楲敤爠癥獩濣渠獯洠汯敤⁳潤䜠䑔 │later │- │
180-│Criar h�bitos de fazer um pouco, mesmo que quase nada, todos os dias de tudo aquilo que tu quer para o futuro │later │- │
181-│ligar para o ARQUIVO JUDICIAL 51 33425697 / 33426622 / 32593588 proc regina │completed│- │
182-│Peticionar 5 processos Nan� │completed│- │
183-│Finan�as de abril │completed│- │
184-│separar verbas para gastos futuros certos │later │- │
185-│慆敺⁲汰湡橥浡湥潴漠浡湥楲潣全汢捩獡 │later │- │
186-│Processo Vera Moter │completed│- │
187-│楄捲潩䌠牡汯瀠楲慭 │completed│- │
188-│灁汥濣䈠湥潴 │completed│- │
189-│dar commit sebhas keepass adicionadas no oc │completed│- │
190-│潣癮捯牡琠獥整畭桮獡瀠潲散獳慒扵牥 │completed│- │
191-│湥牴牡攠潣瑮瑡楣⁡牫灹楴楮整 │completed│- │
192-│慆敺⁲䍁⁐汥潤慲潤挠捡潨牲獯 │completed│- │
193-│慦敺⁲䍅⁆噆 │later │- │
194-│敲潳癬牥搠獮瘠来湡㈱ │completed│- │
195-│濣挠湯瑳瑩捵潩慮敤瘠瑯灡牡慴潤 │later │- │
196-│条汵慨⁳敤挠獯畴慲 │later │- │
197-│敒敭摮楢敫 │later │- │
198-│ter uma.rotina para checar backup │later │- │
199-│楶楳慴⁲慣慶潬⁳⁥潤獧瀠敲敦瑩牵⁡汥潤慲潤 │later │- │
200-│peticionar processo Milena TJRJ │completed│- │
201-│敶⁲橴牰愠慣慭牤湩慨 │completed│- │
202-│獥慰畧瑥⁥整浲敲牴瑡汩 │later │- │
203-│embargos declara��o Nilza │completed│- │
204-│embargos.terceiro Juliano │completed│- │
205-│a��o Ver�nica │completed│- │
206-│Adicionar esportes na rotina semanal e nivelar alimenta��o kcal │later │- │
207-│partilha tia rejane │completed│- │
208-│investigar cumprimento de senten�a serasa │later │- │
209-│Fazer escalada com a Raquel │completed│- │
210-│pingpong com a Raquel │completed│- │
211-│浩汰湡慴⁲慭獩㈠爠晥楥獥瀠牯搠慩 │later │- │
212-│汢煯敵牡瀠Ᵽ猠湥慨瘠慩愠灰焠敵猠⃳潣獮杩捡獥慳⁲敤琠牡敤‮慭桮⃣⃩獥畴潤 │later │- │
213-│慦敺⁲潣獩獡焠敵洠⁥敤浥瀠慲敺⁲慰慲椠⁲畡敭瑮湡潤洠湩慨攠敮杲慩 │later │- │
214-│敲潳癬牥琠牯敮物⁡潣楺桮⁡楰杮湡潤 │completed│- │
215-│灁汥濣丠汩慺 │completed│- │
216-│獅畴慤⁲牏ⵧ潭敤攠琠牥甠獥畱浥⁡潮琠祴 │later │- │
217-│inscri��o tjpe e tjpb │completed│- │
218-│contratar secretariado remoto │completed│- │
219-│慆慬⁲潣潊猠扯敲搠瑡⁡畡楤湥楣⁡⁥潤⁣敤挠湯牰癯湡整 │completed│- │
220-│buscar dinheiro segundo turno │completed│- │
221-│enviar laudo para a Consuplan at� 6/nov │completed│- │
222-│敐楴楣湯牡瀠潲散獳潊杲⁥慰慲戠潬畱慥⁲楤桮楥潲 │completed│- │
223-│潢敬潴挠楲瑳慩潮 │completed│- │
224-│牴扡污慨⁲⹡敮牵灯慬瑳捩摩摡獥瀠牡⁡楶敶⁲慭獯愠瘠摩⁡⁥敳瑮 │later │- │
225-│mandar proposta de trabalho para escrit�rios de BSB │completed│- │
226-│Pedir meta fornecer foto perfil j� no caso latrocinio │completed│- │
227-│certificado ipeatra │later │- │
228-│transferir instrucoes programas arch para crypt git │completed│- │
229-│ideia empreender: chatbot que altera mensagem para parecer comunicacao nao violenta │later │- │
230-│浥牰敥摮摥牯獩潭›慢桮楥潲 │later │- │
231-│Fazer backup 321 com parte arquivada e parte a disposicao │later │- │
232-│浥牰敥摮牥愠灰爠汥捡潩慮敭瑮獯 │later │- │
233-│䕍䅔⁓剐⁁〲㔲 │later │- │
234-│mudar ativismo para modo 100% pragm�tico e silencioso │later │- │
235-│慦敺⁲硥牥楣牰灯獯潴瀠汥摥慵摲慰慲攠⁵⁥⁡慲畱汥 │later │- │
236-│潣据汩慩⁲獥畴潤⁳久䍁‬䩔䝍‬剐䙏卅体⁒䙉卒䔠吠䱁䕖⁚䑁⁖䱃义䍉十 │completed│- │
237-│Coisas para fazer DOMINGO │later │- │
238-│9e6b98f7... │later │- │
239-│change tower concursos nao rastreados TJMG*, TJMT*, TJMS*, TJRN*, TJRS*, TJPB, TJES*, TJPE*, TJBA* - confirmar passagens e docs │completed│- │
240-│desbloquear tablet para audi�ncia de escolha tjpe E colocar serventias para criar na minha lista tjpe │completed│- │
241-│pedir pro GEMINI PRO montar um TODO com cada ponto do edital do TJRS com data prevista para fazer e tempo previsto de estudo para cada ponto, de forma a completar o conte�do do edital at� 28/06/26 estudando 4h por dia │completed│- │
242-│procurar adv rec�m formado para assumir processos microsoft │completed│- │
243-│procurar psic�logo para laudo autismo (e estudar o da vev�) │later │- │
244-│procurar psiquiatra conv�nio com RQE para laudo autismo NO TELEVITA CASSI │later │- │
245-│潣灭慲⁲敬楧汳濣琠扪⁡敳渠潡搠牥瀠牡⁡浩牰浩物 │later │- │
246-│Marcar Otorrino │completed│- │
247-│farmaciao: tiras nasais, shampoo caspa e icaden │completed│- │
248-│Cadastrar INFO Push STF e STF │completed│- │
249-│慍捲牡搠湥楴瑳⁡慰慲椠慤愠瀠慯 │completed│- │
250-│Procurar p�s ead monografia │later │- │
251-│Comprar lentes �culos no aliexpress │later │- │
252-│pegar quest�es do gemini e colocar nas questoes de prova oral │completed│- │
253-│verificar uso ssd │completed│- │
254-│Compras EUA │later │- │
255-│敐楴楣湯牡愠䙉卒 │completed│- │
256-│Corrigir glibc do arch hdd5tb │completed│- │
257-│Cancelar passagens TJMT │completed│- │
258-│Falar com vereador Guaiba │later │- │
259-│declara��es fiscais APED FV │later │- │
260-│敖⁲獩湥橴瑭 │completed│- │
261-│慐慧⁲䩔䅂 │completed│- │
262-│敺慲⁲浥楡獬 │later │- │
263-│慍捲牡攠慸敭漠潴牲湩潳潮 │completed│- │
264-│fazer backup termux e reinstalar o termux │completed│- │
265-│ver quest�o dinheiro indizacao em dolar │later │- │
266-│dar sudo permitindo libvirtd domingo pra blocked e fim da manh� desfazendo sudo. Fazer isso para outras coisas que tu possa querer. │completed│- │
267-│remover liberacao browser celular │later │- │
268-│b515e25f... │later │- │
269-│2873d267... │later │- │
270-└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────┴─────────┘
Back to top