trak_flow 0.1.3 → 0.2.0

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/.fasterer.yml +10 -0
  3. data/.loki +33 -0
  4. data/.reek.yml +161 -0
  5. data/.rubocop.yml +187 -0
  6. data/Archspec.rb +45 -0
  7. data/CHANGELOG.md +52 -1
  8. data/Gemfile +12 -0
  9. data/Gemfile.lock +124 -93
  10. data/README.md +15 -2
  11. data/_typos.toml +17 -0
  12. data/docs/api/ruby-library.md +2 -2
  13. data/docs/cli/admin-commands.md +3 -3
  14. data/docs/core-concepts/overview.md +2 -2
  15. data/docs/getting-started/configuration.md +2 -2
  16. data/docs/getting-started/installation.md +22 -5
  17. data/docs/index.md +2 -2
  18. data/docs/mcp/integration.md +11 -8
  19. data/docs/mcp/overview.md +29 -8
  20. data/examples/cli_demo.sh +1 -1
  21. data/examples/mcp/Gemfile.lock +147 -61
  22. data/lib/trak_flow/cli/admin_commands.rb +77 -59
  23. data/lib/trak_flow/cli/config_commands.rb +9 -14
  24. data/lib/trak_flow/cli/dep_commands.rb +3 -3
  25. data/lib/trak_flow/cli/label_commands.rb +3 -3
  26. data/lib/trak_flow/cli/main_commands.rb +127 -94
  27. data/lib/trak_flow/cli/plan_commands.rb +32 -25
  28. data/lib/trak_flow/cli/workflow_commands.rb +5 -4
  29. data/lib/trak_flow/cli.rb +2 -2
  30. data/lib/trak_flow/config/defaults.yml +5 -1
  31. data/lib/trak_flow/config/section.rb +3 -5
  32. data/lib/trak_flow/config.rb +20 -34
  33. data/lib/trak_flow/graph/dependency_graph.rb +72 -69
  34. data/lib/trak_flow/mcp/resources/dependency_graph.rb +13 -9
  35. data/lib/trak_flow/mcp/resources/task_by_id.rb +4 -3
  36. data/lib/trak_flow/mcp/server.rb +77 -76
  37. data/lib/trak_flow/mcp/tools/task_create.rb +17 -17
  38. data/lib/trak_flow/models/task.rb +21 -17
  39. data/lib/trak_flow/storage/database.rb +26 -16
  40. data/lib/trak_flow/storage/jsonl.rb +60 -62
  41. data/lib/trak_flow/version.rb +1 -1
  42. data/lib/trak_flow.rb +0 -1
  43. data/trak_flow.gemspec +57 -0
  44. metadata +11 -31
data/Gemfile.lock CHANGED
@@ -1,14 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- trak_flow (0.1.3)
4
+ trak_flow (0.2.0)
5
5
  anyway_config (~> 2.0)
6
6
  debug_me
7
7
  fast-mcp
8
8
  oj (~> 3.16)
9
9
  pastel (~> 0.8)
10
- puma (~> 6.0)
11
- rackup (~> 2.0)
12
10
  sequel (~> 5.0)
13
11
  sqlite3 (~> 2.0)
14
12
  thor (~> 1.3)
@@ -18,55 +16,55 @@ PATH
18
16
  GEM
19
17
  remote: https://rubygems.org/
20
18
  specs:
21
- addressable (2.8.8)
19
+ addressable (2.9.0)
22
20
  public_suffix (>= 2.0.2, < 8.0)
23
- ansi (1.5.0)
24
- anyway_config (2.7.2)
21
+ ansi (1.6.0)
22
+ anyway_config (2.8.1)
25
23
  ruby-next-core (~> 1.0)
26
24
  ast (2.4.3)
27
25
  base64 (0.3.0)
28
- bigdecimal (3.3.1)
26
+ bigdecimal (4.1.2)
29
27
  builder (3.3.0)
30
- concurrent-ruby (1.3.6)
28
+ concurrent-ruby (1.3.8)
31
29
  debug_me (1.1.3)
32
30
  docile (1.4.1)
33
- dry-configurable (1.3.0)
34
- dry-core (~> 1.1)
31
+ dry-configurable (1.4.0)
32
+ dry-core (~> 1.0)
35
33
  zeitwerk (~> 2.6)
36
34
  dry-core (1.2.0)
37
35
  concurrent-ruby (~> 1.0)
38
36
  logger
39
37
  zeitwerk (~> 2.6)
40
- dry-inflector (1.2.0)
38
+ dry-inflector (1.3.1)
41
39
  dry-initializer (3.2.0)
42
40
  dry-logic (1.6.0)
43
41
  bigdecimal
44
42
  concurrent-ruby (~> 1.0)
45
43
  dry-core (~> 1.1)
46
44
  zeitwerk (~> 2.6)
47
- dry-schema (1.14.1)
45
+ dry-schema (1.16.0)
48
46
  concurrent-ruby (~> 1.0)
49
47
  dry-configurable (~> 1.0, >= 1.0.1)
50
48
  dry-core (~> 1.1)
51
49
  dry-initializer (~> 3.2)
52
- dry-logic (~> 1.5)
53
- dry-types (~> 1.8)
50
+ dry-logic (~> 1.6)
51
+ dry-types (~> 1.9, >= 1.9.1)
54
52
  zeitwerk (~> 2.6)
55
- dry-types (1.8.3)
56
- bigdecimal (~> 3.0)
53
+ dry-types (1.9.1)
54
+ bigdecimal (>= 3.0)
57
55
  concurrent-ruby (~> 1.0)
58
56
  dry-core (~> 1.0)
59
57
  dry-inflector (~> 1.0)
60
58
  dry-logic (~> 1.4)
61
59
  zeitwerk (~> 2.6)
62
60
  event_stream_parser (1.0.0)
63
- faraday (2.14.0)
61
+ faraday (2.14.3)
64
62
  faraday-net_http (>= 2.0, < 3.5)
65
63
  json
66
64
  logger
67
65
  faraday-multipart (1.2.0)
68
66
  multipart-post (~> 2.0)
69
- faraday-net_http (3.4.2)
67
+ faraday-net_http (3.4.4)
70
68
  net-http (~> 0.5)
71
69
  faraday-retry (2.4.0)
72
70
  faraday (~> 2.0)
@@ -77,99 +75,120 @@ GEM
77
75
  json (~> 2.0)
78
76
  mime-types (~> 3.4)
79
77
  rack (>= 2.0, < 4.0)
80
- http-2 (1.1.1)
81
- httpx (1.7.0)
82
- http-2 (>= 1.0.0)
83
- json (2.18.0)
84
- json-schema (5.2.2)
78
+ fasterer (0.11.0)
79
+ ruby_parser (>= 3.19.1)
80
+ hana (1.3.7)
81
+ http-2 (1.2.2)
82
+ httpx (1.8.3)
83
+ http-2 (>= 1.2.0)
84
+ json (2.21.2)
85
+ json-schema (6.2.0)
85
86
  addressable (~> 2.8)
86
- bigdecimal (~> 3.1)
87
- language_server-protocol (3.17.0.5)
87
+ bigdecimal (>= 3.1, < 5)
88
+ json_schemer (2.5.0)
89
+ bigdecimal
90
+ hana (~> 1.3)
91
+ regexp_parser (~> 2.0)
92
+ simpleidn (~> 0.2)
93
+ language_server-protocol (3.17.0.6)
88
94
  lint_roller (1.1.0)
89
95
  logger (1.7.0)
90
- marcel (1.1.0)
96
+ marcel (1.2.1)
91
97
  mime-types (3.7.0)
92
98
  logger
93
99
  mime-types-data (~> 3.2025, >= 3.2025.0507)
94
- mime-types-data (3.2025.0924)
100
+ mime-types-data (3.2026.0701)
95
101
  minitest (5.27.0)
96
- minitest-reporters (1.7.1)
102
+ minitest-reporters (1.8.0)
97
103
  ansi
98
104
  builder
99
- minitest (>= 5.0)
105
+ minitest (>= 5.0, < 7)
100
106
  ruby-progressbar
101
107
  multipart-post (2.4.1)
102
108
  net-http (0.9.1)
103
109
  uri (>= 0.11.1)
104
110
  nio4r (2.7.5)
105
- oj (3.16.13)
111
+ oj (3.17.6)
106
112
  bigdecimal (>= 3.0)
107
113
  ostruct (>= 0.2)
108
114
  ostruct (0.6.3)
109
- parallel (1.27.0)
110
- parser (3.3.10.0)
115
+ parallel (2.2.0)
116
+ parser (3.3.12.0)
111
117
  ast (~> 2.4.1)
112
118
  racc
113
119
  pastel (0.8.0)
114
120
  tty-color (~> 0.5)
115
- prism (1.7.0)
116
- public_suffix (7.0.1)
117
- puma (6.6.1)
121
+ prism (1.9.0)
122
+ public_suffix (7.0.5)
123
+ puma (8.0.2)
118
124
  nio4r (~> 2.0)
119
125
  racc (1.8.1)
120
- rack (3.2.4)
126
+ rack (3.2.7)
121
127
  rackup (2.3.1)
122
128
  rack (>= 3)
123
129
  rainbow (3.1.1)
124
- rake (13.3.1)
125
- regexp_parser (2.11.3)
126
- rubocop (1.82.1)
127
- json (~> 2.3)
130
+ rake (13.4.2)
131
+ reek (6.5.0)
132
+ dry-schema (~> 1.13)
133
+ logger (~> 1.6)
134
+ parser (~> 3.3.0)
135
+ rainbow (>= 2.0, < 4.0)
136
+ rexml (~> 3.1)
137
+ regexp_parser (2.12.0)
138
+ rexml (3.4.4)
139
+ rubocop (1.90.0)
140
+ json (>= 2.3)
128
141
  language_server-protocol (~> 3.17.0.2)
129
142
  lint_roller (~> 1.1.0)
130
- parallel (~> 1.10)
143
+ parallel (>= 1.10)
131
144
  parser (>= 3.3.0.2)
132
145
  rainbow (>= 2.2.2, < 4.0)
133
146
  regexp_parser (>= 2.9.3, < 3.0)
134
- rubocop-ast (>= 1.48.0, < 2.0)
147
+ rubocop-ast (>= 1.49.0, < 2.0)
135
148
  ruby-progressbar (~> 1.7)
136
149
  unicode-display_width (>= 2.4.0, < 4.0)
137
- rubocop-ast (1.49.0)
150
+ rubocop-ast (1.50.0)
138
151
  parser (>= 3.3.7.2)
139
152
  prism (~> 1.7)
140
- ruby-next-core (1.1.2)
153
+ ruby-next-core (1.2.1)
141
154
  ruby-progressbar (1.13.0)
142
- ruby_llm (1.9.1)
155
+ ruby_llm (1.16.0)
143
156
  base64
144
157
  event_stream_parser (~> 1)
145
158
  faraday (>= 1.10.0)
146
159
  faraday-multipart (>= 1)
147
160
  faraday-net_http (>= 1)
148
161
  faraday-retry (>= 1)
149
- marcel (~> 1.0)
150
- ruby_llm-schema (~> 0.2.1)
162
+ marcel (~> 1)
163
+ ruby_llm-schema (~> 0)
151
164
  zeitwerk (~> 2)
152
- ruby_llm-mcp (0.8.0)
165
+ ruby_llm-mcp (1.0.1)
153
166
  httpx (~> 1.4)
154
- json-schema (~> 5.0)
167
+ json-schema (>= 5.0, < 7)
168
+ json_schemer (~> 2.4)
155
169
  ruby_llm (~> 1.9)
156
170
  zeitwerk (~> 2)
157
- ruby_llm-schema (0.2.5)
158
- sequel (5.100.0)
171
+ ruby_llm-schema (0.4.0)
172
+ ruby_parser (3.22.0)
173
+ racc (~> 1.5)
174
+ sexp_processor (~> 4.16)
175
+ sequel (5.108.0)
159
176
  bigdecimal
177
+ sexp_processor (4.17.5)
160
178
  simplecov (0.22.0)
161
179
  docile (~> 1.1)
162
180
  simplecov-html (~> 0.11)
163
181
  simplecov_json_formatter (~> 0.1)
164
182
  simplecov-html (0.13.2)
165
183
  simplecov_json_formatter (0.1.4)
166
- sqlite3 (2.9.0-arm64-darwin)
184
+ simpleidn (0.3.0)
185
+ sqlite3 (2.9.6-arm64-darwin)
167
186
  strings (0.2.1)
168
187
  strings-ansi (~> 0.2)
169
188
  unicode-display_width (>= 1.5, < 3.0)
170
189
  unicode_utils (~> 1.4)
171
190
  strings-ansi (0.2.0)
172
- thor (1.4.0)
191
+ thor (1.5.0)
173
192
  tty-color (0.6.0)
174
193
  tty-cursor (0.7.1)
175
194
  tty-screen (0.8.2)
@@ -182,16 +201,20 @@ GEM
182
201
  unicode-display_width (2.6.0)
183
202
  unicode_utils (1.4.0)
184
203
  uri (1.1.1)
185
- zeitwerk (2.7.4)
204
+ zeitwerk (2.8.3)
186
205
 
187
206
  PLATFORMS
188
207
  arm64-darwin
189
208
 
190
209
  DEPENDENCIES
191
210
  bundler
211
+ fasterer
192
212
  minitest (~> 5.0)
193
213
  minitest-reporters (~> 1.6)
214
+ puma (>= 7.2.1)
215
+ rackup
194
216
  rake (~> 13.0)
217
+ reek
195
218
  rubocop (~> 1.0)
196
219
  ruby_llm
197
220
  ruby_llm-mcp
@@ -199,74 +222,82 @@ DEPENDENCIES
199
222
  trak_flow!
200
223
 
201
224
  CHECKSUMS
202
- addressable (2.8.8) sha256=7c13b8f9536cf6364c03b9d417c19986019e28f7c00ac8132da4eb0fe393b057
203
- ansi (1.5.0) sha256=5408253274e33d9d27d4a98c46d2998266fd51cba58a7eb9d08f50e57ed23592
204
- anyway_config (2.7.2) sha256=30f6b087c0b41afdd43fe46c81d65a16f052a8489dab453abaeb4ea67aa74bad
225
+ addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af
226
+ ansi (1.6.0) sha256=ac9ea0c0ea8d32fb4e271348e609963ac78882f34b73836c2a02b3622e666658
227
+ anyway_config (2.8.1) sha256=541842b25117fac3e277670c32dc09d3b715b20404826a6538ac35527583624f
205
228
  ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
206
229
  base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b
207
- bigdecimal (3.3.1) sha256=eaa01e228be54c4f9f53bf3cc34fe3d5e845c31963e7fcc5bedb05a4e7d52218
230
+ bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd
208
231
  builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f
209
- concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab
232
+ concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1
210
233
  debug_me (1.1.3) sha256=ae8cf61993350d9b3cbe337a7f9a0f595be5b4976c10891a4e1eacc63d09f717
211
234
  docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
212
- dry-configurable (1.3.0) sha256=882d862858567fc1210d2549d4c090f34370fc1bb7c5c1933de3fe792e18afa8
235
+ dry-configurable (1.4.0) sha256=e35d1b5f3c081753ef361f564919db79000f32cfa6f20ee3a3ba5921b41b73ce
213
236
  dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
214
- dry-inflector (1.2.0) sha256=22f5d0b50fd57074ae57e2ca17e3b300e57564c218269dcf82ff3e42d3f38f2e
237
+ dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
215
238
  dry-initializer (3.2.0) sha256=37d59798f912dc0a1efe14a4db4a9306989007b302dcd5f25d0a2a20c166c4e3
216
239
  dry-logic (1.6.0) sha256=da6fedbc0f90fc41f9b0cc7e6f05f5d529d1efaef6c8dcc8e0733f685745cea2
217
- dry-schema (1.14.1) sha256=2fcd7539a7099cacae6a22f6a3a2c1846fe5afeb1c841cde432c89c6cb9b9ff1
218
- dry-types (1.8.3) sha256=b5d97a45e0ed273131c0c3d5bc9f5633c2d1242e092ee47401ce7d5eab65c1bc
240
+ dry-schema (1.16.0) sha256=cd3aaeabc0f1af66ec82a29096d4c4fb92a0a58b9dae29a22b1bbceb78985727
241
+ dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
219
242
  event_stream_parser (1.0.0) sha256=a2683bab70126286f8184dc88f7968ffc4028f813161fb073ec90d171f7de3c8
220
- faraday (2.14.0) sha256=8699cfe5d97e55268f2596f9a9d5a43736808a943714e3d9a53e6110593941cd
243
+ faraday (2.14.3) sha256=1882247e6766615c8220b4392bf1d27f6ebb63d8e28267587cef1fb0bf37f278
221
244
  faraday-multipart (1.2.0) sha256=7d89a949693714176f612323ca13746a2ded204031a6ba528adee788694ef757
222
- faraday-net_http (3.4.2) sha256=f147758260d3526939bf57ecf911682f94926a3666502e24c69992765875906c
245
+ faraday-net_http (3.4.4) sha256=0e78af151747ed1b00f33e25973b4bc220d7f16c00c39676817c8b12331eb588
223
246
  faraday-retry (2.4.0) sha256=7b79c48fb7e56526faf247b12d94a680071ff40c9fda7cf1ec1549439ad11ebe
224
247
  fast-mcp (1.6.0) sha256=d68abb45d2daab9e7ae2934417460e4bf9ac87493c585dc5bb626f1afb7d12c4
225
- http-2 (1.1.1) sha256=1141a5a03c2f4e6b8d2fa62394de581e1ff6387711cd7ed577212e9d95562bba
226
- httpx (1.7.0) sha256=e219689555951f9c13c40862da120cdd2535e1454189bed589f04d7059557154
227
- json (2.18.0) sha256=b10506aee4183f5cf49e0efc48073d7b75843ce3782c68dbeb763351c08fd505
228
- json-schema (5.2.2) sha256=60beae0ed79ca9c552854c9ebfd44f50f77bd0c3144526d46afec384509940d5
229
- language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc
248
+ fasterer (0.11.0) sha256=9c38b77583584f3339a729eb077fd8f2856a317abe747528f6563d7c23e9dda8
249
+ hana (1.3.7) sha256=5425db42d651fea08859811c29d20446f16af196308162894db208cac5ce9b0d
250
+ http-2 (1.2.2) sha256=81b5d45f50fd4cd5f8c5d09651184bec9401e3ef169c3eb3e5b003d5614a92b9
251
+ httpx (1.8.3) sha256=cb88f2285c4ef17164d803a640dc393d28722cba7f282ad0e7f9f926cd02dc47
252
+ json (2.21.2) sha256=1f1d3b7cf2b3ba1a69beca0bb6db13d5438b80bff3cd54cdaaa620b9b07c1c6a
253
+ json-schema (6.2.0) sha256=e8bff46ed845a22c1ab2bd0d7eccf831c01fe23bb3920caa4c74db4306813666
254
+ json_schemer (2.5.0) sha256=2f01fb4cce721a4e08dd068fc2030cffd0702a7f333f1ea2be6e8991f00ae396
255
+ language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
230
256
  lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
231
257
  logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
232
- marcel (1.1.0) sha256=fdcfcfa33cc52e93c4308d40e4090a5d4ea279e160a7f6af988260fa970e0bee
258
+ marcel (1.2.1) sha256=1678e9360e32f9eafa917c80029e2f6d10b2715c66a4b87b6d0da9b9cd1f859f
233
259
  mime-types (3.7.0) sha256=dcebf61c246f08e15a4de34e386ebe8233791e868564a470c3fe77c00eed5e56
234
- mime-types-data (3.2025.0924) sha256=f276bca15e59f35767cbcf2bc10e023e9200b30bd6a572c1daf7f4cc24994728
260
+ mime-types-data (3.2026.0701) sha256=cd8811e1fb89d836499ba0582368a10ee74cef929ba956d1d5ddca045e6a730f
235
261
  minitest (5.27.0) sha256=2d3b17f8a36fe7801c1adcffdbc38233b938eb0b4966e97a6739055a45fa77d5
236
- minitest-reporters (1.7.1) sha256=5060413a0c95b8c32fe73e0606f3631c173a884d7900e50013e15094eb50562c
262
+ minitest-reporters (1.8.0) sha256=8ce5280fb73ad3178ae525454df169b6f28c1b38b1d088ea91815d3a370ba384
237
263
  multipart-post (2.4.1) sha256=9872d03a8e552020ca096adadbf5e3cb1cd1cdd6acd3c161136b8a5737cdb4a8
238
264
  net-http (0.9.1) sha256=25ba0b67c63e89df626ed8fac771d0ad24ad151a858af2cc8e6a716ca4336996
239
265
  nio4r (2.7.5) sha256=6c90168e48fb5f8e768419c93abb94ba2b892a1d0602cb06eef16d8b7df1dca1
240
- oj (3.16.13) sha256=b114bcb83ef884f1736b3112108f77cf9ca90aa8111a775318cc5d7a6a1e0303
266
+ oj (3.17.6) sha256=f511257e01a12030c3ceb8023cd2e96fca924ea9c741f57ea366816f1fd8e68c
241
267
  ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912
242
- parallel (1.27.0) sha256=4ac151e1806b755fb4e2dc2332cbf0e54f2e24ba821ff2d3dcf86bf6dc4ae130
243
- parser (3.3.10.0) sha256=ce3587fa5cc55a88c4ba5b2b37621b3329aadf5728f9eafa36bbd121462aabd6
268
+ parallel (2.2.0) sha256=e1059c5fd7b649558a0aec38a769f06a42942bdb40503d005a59c352fe011cd8
269
+ parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828
244
270
  pastel (0.8.0) sha256=481da9fb7d2f6e6b1a08faf11fa10363172dc40fd47848f096ae21209f805a75
245
- prism (1.7.0) sha256=10062f734bf7985c8424c44fac382ac04a58124ea3d220ec3ba9fe4f2da65103
246
- public_suffix (7.0.1) sha256=92098ea5a6272d30d16cb336b20d82fcf6a8781a57b5afa26d0539190b9764b6
247
- puma (6.6.1) sha256=b9b56e4a4ea75d1bfa6d9e1972ee2c9f43d0883f011826d914e8e37b3694ea1e
271
+ prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
272
+ public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623
273
+ puma (8.0.2) sha256=c8ed871dfbbe66448ea9ffd46692342d9804d4071522b52b5331b7b6e7b686fb
248
274
  racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
249
- rack (3.2.4) sha256=5d74b6f75082a643f43c1e76b419c40f0e5527fcfee1e669ac1e6b73c0ccb6f6
275
+ rack (3.2.7) sha256=93e13e1c24f93556671d85d2d79fa228c3485815c50d7e2f265b5330c6528fb7
250
276
  rackup (2.3.1) sha256=6c79c26753778e90983761d677a48937ee3192b3ffef6bc963c0950f94688868
251
277
  rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
252
- rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
253
- regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4
254
- rubocop (1.82.1) sha256=09f1a6a654a960eda767aebea33e47603080f8e9c9a3f019bf9b94c9cab5e273
255
- rubocop-ast (1.49.0) sha256=49c3676d3123a0923d333e20c6c2dbaaae2d2287b475273fddee0c61da9f71fd
256
- ruby-next-core (1.1.2) sha256=1b095fe2e45929f2581b3ecdb8d92b601ce4d72c12a466057c10e23b6f0c4512
278
+ rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
279
+ reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1
280
+ regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb
281
+ rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142
282
+ rubocop (1.90.0) sha256=9eb4c065b5c5154e4ef554c547972f3905a9eb6b53e657e580b6796b54bf8242
283
+ rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db
284
+ ruby-next-core (1.2.1) sha256=ddba3e986e127143299a26bde8bdbeedd4bc738a1a765e499f9634f361551f79
257
285
  ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
258
- ruby_llm (1.9.1) sha256=f7d3c72489c70041ee73d7bfe4250a989f801fbba1fad2200904091e433ba511
259
- ruby_llm-mcp (0.8.0) sha256=74350b6c08eeb8bf1c387dc7192bb21bad8415d21277b9a922c182b2e8c29915
260
- ruby_llm-schema (0.2.5) sha256=b08cd42e8de7100325e2e868672a56f1915eb23692bb808f51f214e41392104f
261
- sequel (5.100.0) sha256=cb0329b62287a01db68eead46759c14497a3fae01b174e2c41da108a9e9b4a12
286
+ ruby_llm (1.16.0) sha256=26bd5310cf2ce55f74a60f8aae0b0d0327b586ff4532c84828103c3b2b905a18
287
+ ruby_llm-mcp (1.0.1) sha256=22121bfdea1874935debdd9cee0235d02473885ce8347cf745a323f0707fd248
288
+ ruby_llm-schema (0.4.0) sha256=e930f5a5316f9301bff3fb7fe572e44727d05bb8e50621001bbb49a47d63b8da
289
+ ruby_parser (3.22.0) sha256=1eb4937cd9eb220aa2d194e352a24dba90aef00751e24c8dfffdb14000f15d23
290
+ sequel (5.108.0) sha256=ae5996d1196775427916a2fa36e02f99762ead9affb8ea9b1aec2c0b16bdb3a3
291
+ sexp_processor (4.17.5) sha256=ae2b48ba98353d5d465ce8759836b7a05f2e12c5879fcd14d7815b026de32f0e
262
292
  simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
263
293
  simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
264
294
  simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
265
- sqlite3 (2.9.0-arm64-darwin) sha256=a917bd9b84285766ff3300b7d79cd583f5a067594c8c1263e6441618c04a6ed3
295
+ simpleidn (0.3.0) sha256=12ca730bed2f3db04d11e9bfd1bca3e11fb37f55b21eb2e9793fb5814bf54d03
296
+ sqlite3 (2.9.6-arm64-darwin) sha256=849b5d7f795e60fe25076d62c72dd722beb45b3850b516ad978d60ee848ec15b
266
297
  strings (0.2.1) sha256=933293b3c95cf85b81eb44b3cf673e3087661ba739bbadfeadf442083158d6fb
267
298
  strings-ansi (0.2.0) sha256=90262d760ea4a94cc2ae8d58205277a343409c288cbe7c29416b1826bd511c88
268
- thor (1.4.0) sha256=8763e822ccb0f1d7bee88cde131b19a65606657b847cc7b7b4b82e772bcd8a3d
269
- trak_flow (0.1.3)
299
+ thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73
300
+ trak_flow (0.2.0)
270
301
  tty-color (0.6.0) sha256=6f9c37ca3a4e2367fb2e6d09722762647d6f455c111f05b59f35730eeb24332a
271
302
  tty-cursor (0.7.1) sha256=79534185e6a777888d88628b14b6a1fdf5154a603f285f80b1753e1908e0bf48
272
303
  tty-screen (0.8.2) sha256=c090652115beae764336c28802d633f204fb84da93c6a968aa5d8e319e819b50
@@ -275,7 +306,7 @@ CHECKSUMS
275
306
  unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a
276
307
  unicode_utils (1.4.0) sha256=b922d0cf2313b6b7136ada6645ce7154ffc86418ca07d53b058efe9eb72f2a40
277
308
  uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6
278
- zeitwerk (2.7.4) sha256=2bef90f356bdafe9a6c2bd32bcd804f83a4f9b8bc27f3600fff051eb3edcec8b
309
+ zeitwerk (2.8.3) sha256=2c85125a8467ce069e20123d1e709a08955c9d29c118c25b46b7b7fafdbb92e5
279
310
 
280
311
  BUNDLED WITH
281
312
  4.0.3
data/README.md CHANGED
@@ -357,8 +357,21 @@ TrakFlow includes a Model Context Protocol (MCP) server that exposes task manage
357
357
  # STDIO transport (for local development and IDE integrations)
358
358
  tf_mcp
359
359
 
360
- # HTTP/SSE transport (for remote access and web applications)
361
- tf_mcp --http --port 3333
360
+ # HTTP/SSE transport (for remote access and web applications).
361
+ # Needs the optional rackup gem plus a Rack server (puma, falcon, ...)
362
+ # in the bundle — TrakFlow uses whichever one it finds, or the one named
363
+ # in config (mcp.handler / TF_MCP__HANDLER).
364
+ tf_mcp --http 3333
365
+ ```
366
+
367
+ Embedding in an app that already runs a Rack server? Skip `tf_mcp --http`
368
+ and mount the transport into the server you have:
369
+
370
+ ```ruby
371
+ # config.ru
372
+ map "/mcp" do
373
+ run TrakFlow::Mcp::Server.new.rack_app
374
+ end
362
375
  ```
363
376
 
364
377
  ### Available Tools
data/_typos.toml ADDED
@@ -0,0 +1,17 @@
1
+ # typos-cli configuration — https://github.com/crate-ci/typos
2
+
3
+ [default.extend-words]
4
+ # The gem's name is "trak_flow" — "trak" is intentional, not a typo.
5
+ trak = "trak"
6
+
7
+ [files]
8
+ # Generated artifacts are not spell-checked: mkdocs output, SimpleCov
9
+ # reports, built .gem packages, and the asgard quality gates' own
10
+ # *_output.txt report files.
11
+ extend-exclude = [
12
+ "site/",
13
+ "coverage/",
14
+ "pkg/",
15
+ "Gemfile.lock",
16
+ "*_output.txt",
17
+ ]
@@ -58,7 +58,7 @@ trak = TrakFlow.new(
58
58
  ### Configuration from File
59
59
 
60
60
  ```ruby
61
- trak = TrakFlow.from_config("/path/to/config.json")
61
+ trak = TrakFlow.from_config("/path/to/config.yml")
62
62
  ```
63
63
 
64
64
  ## Core Classes
@@ -183,7 +183,7 @@ db.dependencies_for(task_id)
183
183
  JSONL file storage.
184
184
 
185
185
  ```ruby
186
- jsonl = TrakFlow::Storage::Jsonl.new("/path/to/issues.jsonl")
186
+ jsonl = TrakFlow::Storage::Jsonl.new("/path/to/tasks.jsonl")
187
187
 
188
188
  # Load all tasks
189
189
  tasks = jsonl.load_all
@@ -34,9 +34,9 @@ tf admin init --force
34
34
 
35
35
  ```
36
36
  .trak_flow/
37
- ├── issues.jsonl # Task data
37
+ ├── tasks.jsonl # Task data
38
38
  ├── trak_flow.db # SQLite cache
39
- └── config.json # Configuration
39
+ └── config.yml # Configuration
40
40
  ```
41
41
 
42
42
  ## Export Data
@@ -365,5 +365,5 @@ Add to your git workflow:
365
365
  ```bash
366
366
  # .git/hooks/pre-commit
367
367
  #!/bin/bash
368
- cp .trak_flow/issues.jsonl .trak_flow/issues.jsonl.bak
368
+ cp .trak_flow/tasks.jsonl .trak_flow/tasks.jsonl.bak
369
369
  ```
@@ -135,9 +135,9 @@ TrakFlow uses a dual-storage approach:
135
135
 
136
136
  ```
137
137
  .trak_flow/
138
- ├── issues.jsonl # Source of truth (git-tracked)
138
+ ├── tasks.jsonl # Source of truth (git-tracked)
139
139
  ├── trak_flow.db # Fast cache (gitignored)
140
- └── config.json # Settings (git-tracked)
140
+ └── config.yml # Settings (git-tracked)
141
141
  ```
142
142
 
143
143
  ### JSONL Format
@@ -1,6 +1,6 @@
1
1
  # Configuration
2
2
 
3
- TrakFlow stores configuration in `.trak_flow/config.json`.
3
+ TrakFlow stores configuration in `.trak_flow/config.yml`.
4
4
 
5
5
  ## View Current Configuration
6
6
 
@@ -102,7 +102,7 @@ Some settings can be overridden via environment variables:
102
102
  Delete the config file to reset:
103
103
 
104
104
  ```bash
105
- rm .trak_flow/config.json
105
+ rm .trak_flow/config.yml
106
106
  tf init # Recreates with defaults
107
107
  ```
108
108
 
@@ -54,9 +54,9 @@ tf init
54
54
 
55
55
  This creates a `.trak_flow/` directory with:
56
56
 
57
- - `issues.jsonl` - Git-tracked task storage
57
+ - `tasks.jsonl` - Git-tracked task storage
58
58
  - `trak_flow.db` - SQLite cache (gitignored)
59
- - `config.json` - Project configuration
59
+ - `config.yml` - Project configuration
60
60
  - `.gitignore` - Ignores the database file
61
61
 
62
62
  ## Dependencies
@@ -66,12 +66,29 @@ TrakFlow depends on these gems (installed automatically):
66
66
  | Gem | Purpose |
67
67
  |-----|---------|
68
68
  | `thor` | CLI framework |
69
+ | `sequel` | Database toolkit |
69
70
  | `sqlite3` | Local database |
70
71
  | `oj` | Fast JSON parsing |
72
+ | `anyway_config` | Configuration management |
71
73
  | `pastel` | Terminal colors |
72
- | `tty-table` | Table formatting |
73
- | `fast_mcp` | MCP server support |
74
- | `puma` | HTTP server for MCP |
74
+ | `tty-table` / `tty-spinner` | Terminal formatting |
75
+ | `fast-mcp` | MCP server support |
76
+ | `debug_me` | Debug output |
77
+
78
+ ### Optional: MCP HTTP transport
79
+
80
+ The MCP server's HTTP/SSE transport is opt-in — TrakFlow does not bundle a
81
+ web server. Add the `rackup` gem plus any Rack server that supports
82
+ `rack.hijack` (Puma, Falcon, WEBrick, ...) to your Gemfile:
83
+
84
+ ```ruby
85
+ gem "rackup"
86
+ gem "puma" # or falcon, webrick, ... — skip if your app already has one
87
+ ```
88
+
89
+ If your application already runs its own Rack server, you don't need any of
90
+ this: mount `TrakFlow::Mcp::Server.new.rack_app` into it instead. The STDIO
91
+ transport (the default) needs nothing extra.
75
92
 
76
93
  ## Next Steps
77
94
 
data/docs/index.md CHANGED
@@ -129,8 +129,8 @@ tf_mcp --http --port 3333
129
129
  ```
130
130
  .trak_flow/
131
131
  ├── trak_flow.db # SQLite database (gitignored)
132
- ├── issues.jsonl # Git-tracked source of truth
133
- ├── config.json # Project configuration
132
+ ├── tasks.jsonl # Git-tracked source of truth
133
+ ├── config.yml # Project configuration
134
134
  └── .gitignore
135
135
  ```
136
136
 
@@ -110,7 +110,7 @@ require 'ruby_llm/mcp'
110
110
  # Connect via HTTP/SSE
111
111
  client = RubyLLM::MCP::Client.new(
112
112
  transport_type: :sse,
113
- url: "http://localhost:9292/sse"
113
+ url: "http://localhost:3333/mcp/sse"
114
114
  )
115
115
 
116
116
  # Same API as STDIO
@@ -191,27 +191,30 @@ console.log('Created:', result);
191
191
 
192
192
  ## HTTP API (Direct)
193
193
 
194
- For applications that can't use MCP directly, start the HTTP server:
194
+ For applications that can't use MCP directly, start the HTTP server
195
+ (requires the optional `rackup` gem plus a Rack server such as Puma in
196
+ the bundle — or mount `TrakFlow::Mcp::Server.new.rack_app` into your
197
+ app's existing Rack server):
195
198
 
196
199
  ```bash
197
- tf mcp start --http --port 9292
200
+ tf_mcp --http 3333
198
201
  ```
199
202
 
200
203
  ### Endpoints
201
204
 
202
205
  | Endpoint | Method | Description |
203
206
  |----------|--------|-------------|
204
- | `/sse` | GET | SSE connection for MCP messages |
205
- | `/messages` | POST | Send MCP request |
207
+ | `/mcp/sse` | GET | SSE connection for MCP messages |
208
+ | `/mcp/messages` | POST | Send MCP request |
206
209
 
207
210
  ### Example with curl
208
211
 
209
212
  ```bash
210
213
  # Initialize session (returns session ID in SSE stream)
211
- curl -N http://localhost:9292/sse &
214
+ curl -N http://localhost:3333/mcp/sse &
212
215
 
213
216
  # Send a tool call
214
- curl -X POST http://localhost:9292/messages \
217
+ curl -X POST http://localhost:3333/mcp/messages \
215
218
  -H "Content-Type: application/json" \
216
219
  -d '{
217
220
  "method": "tools/call",
@@ -232,7 +235,7 @@ require 'trak_flow/mcp'
232
235
  # Create server with custom configuration
233
236
  server = TrakFlow::Mcp::Server.new(
234
237
  db_path: "/custom/path/trak_flow.db",
235
- jsonl_path: "/custom/path/issues.jsonl"
238
+ jsonl_path: "/custom/path/tasks.jsonl"
236
239
  )
237
240
 
238
241
  # STDIO mode