sqlew 3.2.4 → 3.5.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/CHANGELOG.md +843 -0
- package/README.md +53 -2
- package/assets/schema.sql +6 -1
- package/dist/config/loader.d.ts +46 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +151 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +77 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +28 -0
- package/dist/config/types.js.map +1 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -1
- package/dist/database.d.ts +1 -1
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +84 -15
- package/dist/database.js.map +1 -1
- package/dist/index.js +21 -3
- package/dist/index.js.map +1 -1
- package/dist/migrations/add-v3.5.0-pruned-files.d.ts +26 -0
- package/dist/migrations/add-v3.5.0-pruned-files.d.ts.map +1 -0
- package/dist/migrations/add-v3.5.0-pruned-files.js +107 -0
- package/dist/migrations/add-v3.5.0-pruned-files.js.map +1 -0
- package/dist/migrations/index.d.ts +2 -1
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +16 -1
- package/dist/migrations/index.js.map +1 -1
- package/dist/tests/git-aware-completion.test.d.ts +6 -0
- package/dist/tests/git-aware-completion.test.d.ts.map +1 -0
- package/dist/tests/git-aware-completion.test.js +141 -0
- package/dist/tests/git-aware-completion.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.d.ts +6 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.d.ts.map +1 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.js +250 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-partial.test.d.ts +6 -0
- package/dist/tests/tasks.auto-pruning-partial.test.d.ts.map +1 -0
- package/dist/tests/tasks.auto-pruning-partial.test.js +274 -0
- package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-persistence.test.d.ts +6 -0
- package/dist/tests/tasks.auto-pruning-persistence.test.d.ts.map +1 -0
- package/dist/tests/tasks.auto-pruning-persistence.test.js +232 -0
- package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-safety.test.d.ts +12 -0
- package/dist/tests/tasks.auto-pruning-safety.test.d.ts.map +1 -0
- package/dist/tests/tasks.auto-pruning-safety.test.js +196 -0
- package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -0
- package/dist/tests/tasks.link-file-backward-compat.test.d.ts +6 -0
- package/dist/tests/tasks.link-file-backward-compat.test.d.ts.map +1 -0
- package/dist/tests/tasks.link-file-backward-compat.test.js +235 -0
- package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -0
- package/dist/tests/tasks.watch-files-action.test.d.ts +6 -0
- package/dist/tests/tasks.watch-files-action.test.d.ts.map +1 -0
- package/dist/tests/tasks.watch-files-action.test.js +351 -0
- package/dist/tests/tasks.watch-files-action.test.js.map +1 -0
- package/dist/tests/tasks.watch-files-parameter.test.d.ts +6 -0
- package/dist/tests/tasks.watch-files-parameter.test.d.ts.map +1 -0
- package/dist/tests/tasks.watch-files-parameter.test.js +249 -0
- package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -0
- package/dist/tests/two-step-git-completion.test.d.ts +6 -0
- package/dist/tests/two-step-git-completion.test.d.ts.map +1 -0
- package/dist/tests/two-step-git-completion.test.js +283 -0
- package/dist/tests/two-step-git-completion.test.js.map +1 -0
- package/dist/tests/vcs-staging.test.d.ts +6 -0
- package/dist/tests/vcs-staging.test.d.ts.map +1 -0
- package/dist/tests/vcs-staging.test.js +137 -0
- package/dist/tests/vcs-staging.test.js.map +1 -0
- package/dist/tools/config.d.ts +4 -2
- package/dist/tools/config.d.ts.map +1 -1
- package/dist/tools/config.js +13 -11
- package/dist/tools/config.js.map +1 -1
- package/dist/tools/constraints.d.ts +7 -4
- package/dist/tools/constraints.d.ts.map +1 -1
- package/dist/tools/constraints.js +19 -16
- package/dist/tools/constraints.js.map +1 -1
- package/dist/tools/context.d.ts +33 -17
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +84 -68
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/files.d.ts +9 -5
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/files.js +19 -15
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/messaging.d.ts +9 -5
- package/dist/tools/messaging.d.ts.map +1 -1
- package/dist/tools/messaging.js +20 -16
- package/dist/tools/messaging.js.map +1 -1
- package/dist/tools/tasks.d.ts +40 -12
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +475 -87
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/utils.d.ts +11 -6
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +56 -44
- package/dist/tools/utils.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/file-pruning.d.ts +69 -0
- package/dist/utils/file-pruning.d.ts.map +1 -0
- package/dist/utils/file-pruning.js +185 -0
- package/dist/utils/file-pruning.js.map +1 -0
- package/dist/utils/quality-checks.d.ts +60 -0
- package/dist/utils/quality-checks.d.ts.map +1 -0
- package/dist/utils/quality-checks.js +228 -0
- package/dist/utils/quality-checks.js.map +1 -0
- package/dist/utils/retention.d.ts +8 -0
- package/dist/utils/retention.d.ts.map +1 -1
- package/dist/utils/retention.js +12 -0
- package/dist/utils/retention.js.map +1 -1
- package/dist/utils/task-stale-detection.d.ts +69 -1
- package/dist/utils/task-stale-detection.d.ts.map +1 -1
- package/dist/utils/task-stale-detection.js +494 -17
- package/dist/utils/task-stale-detection.js.map +1 -1
- package/dist/utils/validators.d.ts +2 -2
- package/dist/utils/validators.d.ts.map +1 -1
- package/dist/utils/validators.js +11 -2
- package/dist/utils/validators.js.map +1 -1
- package/dist/utils/vcs-adapter.d.ts +68 -0
- package/dist/utils/vcs-adapter.d.ts.map +1 -0
- package/dist/utils/vcs-adapter.js +187 -0
- package/dist/utils/vcs-adapter.js.map +1 -0
- package/dist/watcher/file-watcher.d.ts +54 -4
- package/dist/watcher/file-watcher.d.ts.map +1 -1
- package/dist/watcher/file-watcher.js +312 -30
- package/dist/watcher/file-watcher.js.map +1 -1
- package/dist/watcher/gitignore-parser.d.ts +70 -0
- package/dist/watcher/gitignore-parser.d.ts.map +1 -0
- package/dist/watcher/gitignore-parser.js +191 -0
- package/dist/watcher/gitignore-parser.js.map +1 -0
- package/dist/watcher/index.d.ts +1 -0
- package/dist/watcher/index.d.ts.map +1 -1
- package/dist/watcher/index.js +1 -0
- package/dist/watcher/index.js.map +1 -1
- package/docs/AI_AGENT_GUIDE.md +1 -1
- package/docs/ARCHITECTURE.md +12 -0
- package/docs/AUTO_FILE_TRACKING.md +486 -82
- package/docs/CONFIGURATION.md +908 -0
- package/docs/GIT_AWARE_AUTO_COMPLETE.md +645 -0
- package/docs/MIGRATION_v3.3.md +602 -0
- package/docs/SHARED_CONCEPTS.md +2 -1
- package/docs/TASK_ACTIONS.md +12 -0
- package/docs/TASK_OVERVIEW.md +124 -23
- package/docs/TASK_PRUNING.md +589 -0
- package/docs/TASK_SYSTEM.md +83 -13
- package/docs/TOOL_REFERENCE.md +94 -6
- package/package.json +8 -6
package/docs/TASK_OVERVIEW.md
CHANGED
|
@@ -91,13 +91,17 @@ Every task has:
|
|
|
91
91
|
**`in_progress`:**
|
|
92
92
|
- Active work happening
|
|
93
93
|
- Should have assignee
|
|
94
|
-
- Auto-transitions to `waiting_review`
|
|
94
|
+
- Auto-transitions to `waiting_review` via:
|
|
95
|
+
- Smart quality gates (v3.4.1): All files modified, tests pass, TypeScript compiles, 3min idle (default)
|
|
96
|
+
- Time-based stale detection: 2 hours idle (fallback)
|
|
95
97
|
|
|
96
98
|
**`waiting_review`:**
|
|
97
|
-
- Awaiting human/AI feedback
|
|
99
|
+
- Awaiting human/AI feedback or git commit
|
|
98
100
|
- Code review needed
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
+
- **Auto-transitions to `done` (v3.4.0 Git-aware):** When ALL watched files are committed to Git
|
|
102
|
+
- Git commits = implicit review approval
|
|
103
|
+
- Real-time: Detects commits via `.git/index` file watcher
|
|
104
|
+
- Periodic: Checks on `task.list()` calls
|
|
101
105
|
|
|
102
106
|
**`blocked`:**
|
|
103
107
|
- Cannot proceed
|
|
@@ -119,9 +123,24 @@ Every task has:
|
|
|
119
123
|
### Visual Diagram
|
|
120
124
|
|
|
121
125
|
```
|
|
126
|
+
v3.4.0 Git-Aware Workflow:
|
|
122
127
|
todo → in_progress → waiting_review → done → archived
|
|
123
|
-
↓ ↓
|
|
124
|
-
|
|
128
|
+
↓ ↓ ↓
|
|
129
|
+
| (Quality gates (Git commits)
|
|
130
|
+
| or 2h idle) ↓
|
|
131
|
+
| ↓ (All watched files
|
|
132
|
+
└──── blocked committed to Git)
|
|
133
|
+
|
|
134
|
+
Real-time: .git/index file watcher detects commits
|
|
135
|
+
Periodic: task.list() checks git log
|
|
136
|
+
|
|
137
|
+
Alternative (with acceptance_criteria):
|
|
138
|
+
todo → in_progress → done → archived
|
|
139
|
+
↓ ↓
|
|
140
|
+
| (Criteria met,
|
|
141
|
+
| skip review)
|
|
142
|
+
| ↓
|
|
143
|
+
└──── blocked
|
|
125
144
|
```
|
|
126
145
|
|
|
127
146
|
### Valid Transitions
|
|
@@ -129,10 +148,10 @@ todo → in_progress → waiting_review → done → archived
|
|
|
129
148
|
| From Status | To Status(es) | Rationale |
|
|
130
149
|
|-------------|--------------|-----------|
|
|
131
150
|
| `todo` | `in_progress`, `blocked` | Start work or discover blocker |
|
|
132
|
-
| `in_progress` | `waiting_review`, `blocked`, `done` |
|
|
151
|
+
| `in_progress` | `waiting_review`, `blocked`, `done` | Quality gates met (v3.4.1), need review, hit blocker, or complete |
|
|
133
152
|
| `waiting_review` | `in_progress`, `todo`, `done` | Resume work, reset to backlog, or approve |
|
|
134
153
|
| `blocked` | `todo`, `in_progress` | Blocker resolved, resume or reset |
|
|
135
|
-
| `done` | `archived` | Archive completed work |
|
|
154
|
+
| `done` | `archived` | Archive completed work (auto after 48h in v3.4.1) |
|
|
136
155
|
| `archived` | *(terminal state)* | No transitions allowed |
|
|
137
156
|
|
|
138
157
|
### Complete Transition Matrix
|
|
@@ -181,29 +200,49 @@ Auto-stale detection automatically transitions idle tasks to prevent them from g
|
|
|
181
200
|
|
|
182
201
|
### Detection Rules
|
|
183
202
|
|
|
184
|
-
1
|
|
203
|
+
**v3.4.1+: Smart Quality-Based Detection (Primary)**
|
|
204
|
+
|
|
205
|
+
1. **`in_progress` → `waiting_review`** (quality gates met)
|
|
206
|
+
- All watched files modified at least once
|
|
207
|
+
- TypeScript compiles without errors (if .ts files)
|
|
208
|
+
- Tests pass (if test files exist)
|
|
209
|
+
- 15 minutes idle (no file modifications)
|
|
210
|
+
- Rationale: Work is complete and ready for review
|
|
211
|
+
- Configuration: See `.sqlew/config.toml` review_* settings
|
|
212
|
+
|
|
213
|
+
**Time-Based Stale Detection (Fallback)**
|
|
214
|
+
|
|
215
|
+
2. **`in_progress` → `waiting_review`** (>2 hours idle)
|
|
185
216
|
- Rationale: Likely waiting for review or hit usage limit
|
|
186
217
|
- Check: `updated_ts` older than 2 hours
|
|
187
218
|
|
|
188
|
-
|
|
219
|
+
3. **`waiting_review` → `todo`** (>24 hours idle)
|
|
189
220
|
- Rationale: Review not happening, reset to backlog
|
|
190
221
|
- Check: `updated_ts` older than 24 hours
|
|
191
222
|
|
|
223
|
+
4. **`done` → `archived`** (>48 hours idle) - **Auto-Archive (v3.4.1)**
|
|
224
|
+
- Rationale: Completed tasks should be archived automatically
|
|
225
|
+
- Check: `updated_ts` older than 48 hours (2 days)
|
|
226
|
+
- Weekend-aware: Task done Friday → archives Tuesday (skips Sat/Sun)
|
|
227
|
+
|
|
192
228
|
### When It Runs
|
|
193
229
|
|
|
194
230
|
Automatically runs before:
|
|
195
231
|
1. **`list` action** - Ensures stale tasks show correct status
|
|
196
232
|
2. **`move` action** - Prevents moving already-stale tasks
|
|
233
|
+
3. **Database startup** - Maintenance on initialization
|
|
197
234
|
|
|
198
235
|
**Response includes:**
|
|
199
236
|
- `stale_tasks_transitioned`: Count of auto-transitioned tasks
|
|
237
|
+
- `archived_tasks`: Count of auto-archived done tasks (in list action)
|
|
200
238
|
|
|
201
239
|
**Example Response:**
|
|
202
240
|
```javascript
|
|
203
241
|
{
|
|
204
242
|
tasks: [...],
|
|
205
243
|
count: 5,
|
|
206
|
-
stale_tasks_transitioned: 2 // 2 tasks auto-transitioned
|
|
244
|
+
stale_tasks_transitioned: 2, // 2 tasks auto-transitioned
|
|
245
|
+
archived_tasks: 1 // 1 done task auto-archived
|
|
207
246
|
}
|
|
208
247
|
```
|
|
209
248
|
|
|
@@ -213,25 +252,51 @@ Automatically runs before:
|
|
|
213
252
|
- `task_auto_stale_enabled`: '1' (enabled)
|
|
214
253
|
- `task_stale_hours_in_progress`: '2' (2 hours)
|
|
215
254
|
- `task_stale_hours_waiting_review`: '24' (24 hours)
|
|
255
|
+
- `auto_archive_done_days`: '2' (2 days / 48 hours)
|
|
256
|
+
- `autodelete_ignore_weekend`: '0' (false) - Shared with messages/files cleanup
|
|
257
|
+
|
|
258
|
+
**Via MCP Tool (config):**
|
|
259
|
+
```javascript
|
|
260
|
+
// Update auto-archive threshold
|
|
261
|
+
{
|
|
262
|
+
action: "update",
|
|
263
|
+
auto_archive_done_days: "3" // Archive after 3 days instead of 2
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// Enable weekend-aware mode (affects auto-archive, messages, files)
|
|
267
|
+
{
|
|
268
|
+
action: "update",
|
|
269
|
+
autodelete_ignore_weekend: "1"
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Via .sqlew/config.toml:**
|
|
274
|
+
```toml
|
|
275
|
+
[tasks]
|
|
276
|
+
auto_archive_done_days = 3 # Archive after 3 days
|
|
277
|
+
stale_hours_in_progress = 4 # in_progress → waiting_review after 4 hours
|
|
278
|
+
stale_hours_waiting_review = 48 # waiting_review → todo after 48 hours
|
|
279
|
+
auto_stale_enabled = true
|
|
280
|
+
|
|
281
|
+
[autodelete]
|
|
282
|
+
ignore_weekend = true # Weekend-aware mode (shared setting)
|
|
283
|
+
```
|
|
216
284
|
|
|
217
|
-
**
|
|
285
|
+
**Via SQL (Advanced):**
|
|
218
286
|
```sql
|
|
287
|
+
-- Enable/Disable auto-stale
|
|
219
288
|
UPDATE m_config SET value = '1' WHERE key = 'task_auto_stale_enabled'; -- Enable
|
|
220
289
|
UPDATE m_config SET value = '0' WHERE key = 'task_auto_stale_enabled'; -- Disable
|
|
221
|
-
```
|
|
222
290
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
-- in_progress → waiting_review after 4 hours
|
|
226
|
-
UPDATE m_config SET value = '4' WHERE key = 'task_stale_hours_in_progress';
|
|
291
|
+
-- Adjust auto-archive threshold
|
|
292
|
+
UPDATE m_config SET value = '3' WHERE key = 'auto_archive_done_days'; -- 3 days
|
|
227
293
|
|
|
228
|
-
--
|
|
294
|
+
-- Adjust stale detection thresholds
|
|
295
|
+
UPDATE m_config SET value = '4' WHERE key = 'task_stale_hours_in_progress';
|
|
229
296
|
UPDATE m_config SET value = '48' WHERE key = 'task_stale_hours_waiting_review';
|
|
230
|
-
```
|
|
231
297
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
SELECT key, value FROM m_config WHERE key LIKE 'task_%';
|
|
298
|
+
-- Check current config
|
|
299
|
+
SELECT key, value FROM m_config WHERE key LIKE 'task_%' OR key LIKE 'auto_%';
|
|
235
300
|
```
|
|
236
301
|
|
|
237
302
|
### Monitoring
|
|
@@ -239,7 +304,7 @@ SELECT key, value FROM m_config WHERE key LIKE 'task_%';
|
|
|
239
304
|
Track transitions via `t_activity_log` table:
|
|
240
305
|
|
|
241
306
|
```sql
|
|
242
|
-
-- Recent auto-transitions
|
|
307
|
+
-- Recent auto-transitions (including auto-archive)
|
|
243
308
|
SELECT * FROM t_activity_log
|
|
244
309
|
WHERE entity_type = 'task' AND action_type = 'status_change'
|
|
245
310
|
ORDER BY ts DESC LIMIT 20;
|
|
@@ -248,8 +313,44 @@ ORDER BY ts DESC LIMIT 20;
|
|
|
248
313
|
SELECT task_id, COUNT(*) as stale_count FROM t_activity_log
|
|
249
314
|
WHERE entity_type = 'task' AND json_extract(details, '$.new_status') = 3
|
|
250
315
|
GROUP BY task_id HAVING stale_count > 2;
|
|
316
|
+
|
|
317
|
+
-- Recently auto-archived tasks
|
|
318
|
+
SELECT * FROM t_activity_log
|
|
319
|
+
WHERE entity_type = 'task'
|
|
320
|
+
AND action_type = 'status_change'
|
|
321
|
+
AND json_extract(details, '$.new_status') = 6 -- ARCHIVED status
|
|
322
|
+
ORDER BY ts DESC LIMIT 20;
|
|
323
|
+
|
|
324
|
+
-- Count of archived tasks per day
|
|
325
|
+
SELECT date(ts, 'unixepoch') as day, COUNT(*) as archived_count
|
|
326
|
+
FROM t_activity_log
|
|
327
|
+
WHERE entity_type = 'task'
|
|
328
|
+
AND action_type = 'status_change'
|
|
329
|
+
AND json_extract(details, '$.new_status') = 6
|
|
330
|
+
GROUP BY day
|
|
331
|
+
ORDER BY day DESC;
|
|
251
332
|
```
|
|
252
333
|
|
|
334
|
+
### Weekend-Aware Behavior
|
|
335
|
+
|
|
336
|
+
When `autodelete_ignore_weekend` is enabled (via config.toml or MCP tool):
|
|
337
|
+
|
|
338
|
+
**Example 1 - Task Completed on Friday:**
|
|
339
|
+
- Task marked `done`: Friday 5:00 PM
|
|
340
|
+
- Default 48 hours: Would archive Sunday 5:00 PM
|
|
341
|
+
- **Weekend-aware**: Archives Tuesday 5:00 PM (skips Sat/Sun)
|
|
342
|
+
|
|
343
|
+
**Example 2 - Task Completed on Wednesday:**
|
|
344
|
+
- Task marked `done`: Wednesday 2:00 PM
|
|
345
|
+
- Default 48 hours: Would archive Friday 2:00 PM
|
|
346
|
+
- **Weekend-aware**: Archives Friday 2:00 PM (no weekend in between)
|
|
347
|
+
|
|
348
|
+
**Why Weekend-Aware Mode?**
|
|
349
|
+
- Teams/AI agents may not work on weekends
|
|
350
|
+
- Prevents premature archiving during weekend breaks
|
|
351
|
+
- Consistent with message/file retention behavior
|
|
352
|
+
- Configurable: Disable if you work 7 days/week
|
|
353
|
+
|
|
253
354
|
## Priority System
|
|
254
355
|
|
|
255
356
|
### Priority Levels
|