@telepat/snoopy 0.1.4 → 0.1.7

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 (60) hide show
  1. package/README.md +35 -23
  2. package/dist/src/cli/commands/doctor.js +5 -1
  3. package/dist/src/cli/commands/doctor.js.map +1 -1
  4. package/dist/src/cli/commands/export.d.ts +8 -1
  5. package/dist/src/cli/commands/export.js +33 -7
  6. package/dist/src/cli/commands/export.js.map +1 -1
  7. package/dist/src/cli/commands/job.d.ts +2 -2
  8. package/dist/src/cli/commands/job.js +89 -28
  9. package/dist/src/cli/commands/job.js.map +1 -1
  10. package/dist/src/cli/commands/results.d.ts +1 -0
  11. package/dist/src/cli/commands/results.js +118 -0
  12. package/dist/src/cli/commands/results.js.map +1 -0
  13. package/dist/src/cli/index.js +17 -6
  14. package/dist/src/cli/index.js.map +1 -1
  15. package/dist/src/cli/ui/consoleUi.js +0 -3
  16. package/dist/src/cli/ui/consoleUi.js.map +1 -1
  17. package/dist/src/services/db/repositories/jobsRepo.d.ts +15 -0
  18. package/dist/src/services/db/repositories/jobsRepo.js +21 -14
  19. package/dist/src/services/db/repositories/jobsRepo.js.map +1 -1
  20. package/dist/src/services/db/repositories/runsRepo.d.ts +8 -0
  21. package/dist/src/services/db/repositories/runsRepo.js +64 -54
  22. package/dist/src/services/db/repositories/runsRepo.js.map +1 -1
  23. package/dist/src/services/db/repositories/scanItemsRepo.d.ts +45 -1
  24. package/dist/src/services/db/repositories/scanItemsRepo.js +184 -28
  25. package/dist/src/services/db/repositories/scanItemsRepo.js.map +1 -1
  26. package/dist/src/services/db/sqlite.js +18 -0
  27. package/dist/src/services/db/sqlite.js.map +1 -1
  28. package/dist/src/services/export/csvResults.d.ts +1 -1
  29. package/dist/src/services/export/csvResults.js +3 -2
  30. package/dist/src/services/export/csvResults.js.map +1 -1
  31. package/dist/src/services/export/fileNaming.d.ts +2 -0
  32. package/dist/src/services/export/fileNaming.js +10 -0
  33. package/dist/src/services/export/fileNaming.js.map +1 -0
  34. package/dist/src/services/export/jsonResults.d.ts +10 -0
  35. package/dist/src/services/export/jsonResults.js +16 -0
  36. package/dist/src/services/export/jsonResults.js.map +1 -0
  37. package/dist/src/services/openrouter/client.d.ts +1 -0
  38. package/dist/src/services/openrouter/client.js +36 -5
  39. package/dist/src/services/openrouter/client.js.map +1 -1
  40. package/dist/src/services/scheduler/jobRunner.js +10 -1
  41. package/dist/src/services/scheduler/jobRunner.js.map +1 -1
  42. package/dist/src/ui/components/JobsTable.d.ts +8 -0
  43. package/dist/src/ui/components/JobsTable.js +78 -0
  44. package/dist/src/ui/components/JobsTable.js.map +1 -0
  45. package/dist/src/ui/components/ResultsViewer.d.ts +11 -0
  46. package/dist/src/ui/components/ResultsViewer.js +81 -0
  47. package/dist/src/ui/components/ResultsViewer.js.map +1 -0
  48. package/dist/src/ui/components/RunsTable.d.ts +9 -0
  49. package/dist/src/ui/components/RunsTable.js +99 -0
  50. package/dist/src/ui/components/RunsTable.js.map +1 -0
  51. package/dist/src/ui/components/jobsTableModel.d.ts +15 -0
  52. package/dist/src/ui/components/jobsTableModel.js +79 -0
  53. package/dist/src/ui/components/jobsTableModel.js.map +1 -0
  54. package/dist/src/ui/components/resultsViewerModel.d.ts +14 -0
  55. package/dist/src/ui/components/resultsViewerModel.js +122 -0
  56. package/dist/src/ui/components/resultsViewerModel.js.map +1 -0
  57. package/dist/src/ui/components/runsTableModel.d.ts +28 -0
  58. package/dist/src/ui/components/runsTableModel.js +109 -0
  59. package/dist/src/ui/components/runsTableModel.js.map +1 -0
  60. package/package.json +3 -2
@@ -2,6 +2,15 @@ import crypto from 'node:crypto';
2
2
  import { getDb } from '../sqlite.js';
3
3
  export class ScanItemsRepository {
4
4
  db = getDb();
5
+ mapScanItemRows(rows) {
6
+ return rows.map((row) => ({
7
+ ...row,
8
+ qualified: row.qualified === 1,
9
+ viewed: row.viewed === 1,
10
+ validated: row.validated === 1,
11
+ processed: row.processed === 1
12
+ }));
13
+ }
5
14
  buildFilterClause(alias, filter) {
6
15
  const params = [`-${filter.days} days`];
7
16
  const conditions = [`datetime(${alias}.created_at) >= datetime('now', ?)`];
@@ -23,7 +32,8 @@ export class ScanItemsRepository {
23
32
  estimatedCostUsd: Number(row.estimatedCostUsd ?? 0)
24
33
  };
25
34
  }
26
- listQualifiedByJob(jobId) {
35
+ listQualifiedByJob(jobId, limit = 100) {
36
+ const boundedLimit = Math.max(1, Math.floor(limit));
27
37
  const rows = this.db
28
38
  .prepare(`SELECT
29
39
  id,
@@ -42,8 +52,9 @@ export class ScanItemsRepository {
42
52
  FROM scan_items
43
53
  WHERE job_id = ?
44
54
  AND qualified = 1
45
- ORDER BY datetime(reddit_posted_at) DESC, datetime(created_at) DESC, id DESC`)
46
- .all(jobId);
55
+ ORDER BY datetime(reddit_posted_at) DESC, datetime(created_at) DESC, id DESC
56
+ LIMIT ?`)
57
+ .all(jobId, boundedLimit);
47
58
  return rows.map((row) => ({
48
59
  ...row,
49
60
  viewed: row.viewed === 1,
@@ -51,6 +62,112 @@ export class ScanItemsRepository {
51
62
  processed: row.processed === 1
52
63
  }));
53
64
  }
65
+ listQualifiedByJobRun(jobId, runId, limit = 100) {
66
+ const boundedLimit = Math.max(1, Math.floor(limit));
67
+ const rows = this.db
68
+ .prepare(`SELECT
69
+ id,
70
+ job_id as jobId,
71
+ run_id as runId,
72
+ author,
73
+ title,
74
+ body,
75
+ url,
76
+ reddit_posted_at as redditPostedAt,
77
+ viewed,
78
+ validated,
79
+ processed,
80
+ qualification_reason as qualificationReason,
81
+ created_at as createdAt
82
+ FROM scan_items
83
+ WHERE job_id = ?
84
+ AND run_id = ?
85
+ AND qualified = 1
86
+ ORDER BY datetime(reddit_posted_at) DESC, datetime(created_at) DESC, id DESC
87
+ LIMIT ?`)
88
+ .all(jobId, runId, boundedLimit);
89
+ return rows.map((row) => ({
90
+ ...row,
91
+ viewed: row.viewed === 1,
92
+ validated: row.validated === 1,
93
+ processed: row.processed === 1
94
+ }));
95
+ }
96
+ listByJob(jobId) {
97
+ const rows = this.db
98
+ .prepare(`SELECT
99
+ id,
100
+ job_id as jobId,
101
+ run_id as runId,
102
+ type,
103
+ reddit_post_id as redditPostId,
104
+ reddit_comment_id as redditCommentId,
105
+ subreddit,
106
+ author,
107
+ title,
108
+ body,
109
+ url,
110
+ reddit_posted_at as redditPostedAt,
111
+ qualified,
112
+ viewed,
113
+ validated,
114
+ processed,
115
+ qualification_reason as qualificationReason,
116
+ prompt_tokens as promptTokens,
117
+ completion_tokens as completionTokens,
118
+ estimated_cost_usd as estimatedCostUsd,
119
+ created_at as createdAt
120
+ FROM scan_items
121
+ WHERE job_id = ?
122
+ ORDER BY datetime(reddit_posted_at) DESC, datetime(created_at) DESC, id DESC`)
123
+ .all(jobId);
124
+ return this.mapScanItemRows(rows);
125
+ }
126
+ countByJob(jobId) {
127
+ const row = this.db
128
+ .prepare(`SELECT COUNT(*) as count
129
+ FROM scan_items
130
+ WHERE job_id = ?`)
131
+ .get(jobId);
132
+ return Number(row?.count ?? 0);
133
+ }
134
+ listByJobPage(jobId, limit, offset) {
135
+ const boundedLimit = Math.max(1, Math.floor(limit));
136
+ const boundedOffset = Math.max(0, Math.floor(offset));
137
+ const rows = this.db
138
+ .prepare(`SELECT
139
+ id,
140
+ job_id as jobId,
141
+ run_id as runId,
142
+ type,
143
+ reddit_post_id as redditPostId,
144
+ reddit_comment_id as redditCommentId,
145
+ subreddit,
146
+ author,
147
+ title,
148
+ body,
149
+ url,
150
+ reddit_posted_at as redditPostedAt,
151
+ qualified,
152
+ viewed,
153
+ validated,
154
+ processed,
155
+ qualification_reason as qualificationReason,
156
+ prompt_tokens as promptTokens,
157
+ completion_tokens as completionTokens,
158
+ estimated_cost_usd as estimatedCostUsd,
159
+ created_at as createdAt
160
+ FROM scan_items
161
+ WHERE job_id = ?
162
+ ORDER BY datetime(reddit_posted_at) DESC, datetime(created_at) DESC, id DESC
163
+ LIMIT ? OFFSET ?`)
164
+ .all(jobId, boundedLimit, boundedOffset);
165
+ return this.mapScanItemRows(rows);
166
+ }
167
+ getByJobIndex(jobId, index) {
168
+ const rows = this.listByJobPage(jobId, 1, index);
169
+ return rows[0] ?? null;
170
+ }
54
171
  existsPost(jobId, postId) {
55
172
  const row = this.db
56
173
  .prepare(`SELECT 1
@@ -145,32 +262,71 @@ export class ScanItemsRepository {
145
262
  }
146
263
  create(item) {
147
264
  const id = crypto.randomUUID();
148
- this.db
149
- .prepare(`INSERT INTO scan_items (
150
- id,
151
- job_id,
152
- run_id,
153
- type,
154
- reddit_post_id,
155
- reddit_comment_id,
156
- subreddit,
157
- author,
158
- title,
159
- body,
160
- url,
161
- reddit_posted_at,
162
- qualified,
163
- viewed,
164
- validated,
165
- processed,
166
- prompt_tokens,
167
- completion_tokens,
168
- estimated_cost_usd,
169
- qualification_reason,
170
- created_at
171
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'))`)
172
- .run(id, item.jobId, item.runId, item.type, item.redditPostId, item.redditCommentId, item.subreddit, item.author, item.title, item.body, item.url, item.redditPostedAt, item.qualified ? 1 : 0, item.viewed ? 1 : 0, item.validated ? 1 : 0, item.processed ? 1 : 0, item.promptTokens ?? 0, item.completionTokens ?? 0, item.estimatedCostUsd ?? null, item.qualificationReason);
265
+ const createInTransaction = this.db.transaction((newId, newItem) => {
266
+ this.db
267
+ .prepare(`INSERT INTO scan_items (
268
+ id,
269
+ job_id,
270
+ run_id,
271
+ type,
272
+ reddit_post_id,
273
+ reddit_comment_id,
274
+ subreddit,
275
+ author,
276
+ title,
277
+ body,
278
+ url,
279
+ reddit_posted_at,
280
+ qualified,
281
+ viewed,
282
+ validated,
283
+ processed,
284
+ prompt_tokens,
285
+ completion_tokens,
286
+ estimated_cost_usd,
287
+ qualification_reason,
288
+ created_at
289
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'))`)
290
+ .run(newId, newItem.jobId, newItem.runId, newItem.type, newItem.redditPostId, newItem.redditCommentId, newItem.subreddit, newItem.author, newItem.title, newItem.body, newItem.url, newItem.redditPostedAt, newItem.qualified ? 1 : 0, newItem.viewed ? 1 : 0, newItem.validated ? 1 : 0, newItem.processed ? 1 : 0, newItem.promptTokens ?? 0, newItem.completionTokens ?? 0, newItem.estimatedCostUsd ?? null, newItem.qualificationReason);
291
+ for (const node of newItem.commentThreadNodes ?? []) {
292
+ this.db
293
+ .prepare(`INSERT INTO comment_thread_nodes (
294
+ id,
295
+ scan_item_id,
296
+ reddit_comment_id,
297
+ parent_reddit_comment_id,
298
+ author,
299
+ body,
300
+ depth,
301
+ is_target,
302
+ created_at
303
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, datetime('now'))`)
304
+ .run(crypto.randomUUID(), newId, node.redditCommentId, node.parentRedditCommentId, node.author, node.body, node.depth, node.isTarget ? 1 : 0);
305
+ }
306
+ });
307
+ createInTransaction(id, item);
173
308
  return id;
174
309
  }
310
+ listCommentThreadNodes(scanItemId) {
311
+ const rows = this.db
312
+ .prepare(`SELECT
313
+ id,
314
+ scan_item_id as scanItemId,
315
+ reddit_comment_id as redditCommentId,
316
+ parent_reddit_comment_id as parentRedditCommentId,
317
+ author,
318
+ body,
319
+ depth,
320
+ is_target as isTarget,
321
+ created_at as createdAt
322
+ FROM comment_thread_nodes
323
+ WHERE scan_item_id = ?
324
+ ORDER BY depth ASC, created_at ASC, id ASC`)
325
+ .all(scanItemId);
326
+ return rows.map((row) => ({
327
+ ...row,
328
+ isTarget: row.isTarget === 1
329
+ }));
330
+ }
175
331
  }
176
332
  //# sourceMappingURL=scanItemsRepo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanItemsRepo.js","sourceRoot":"","sources":["../../../../../src/services/db/repositories/scanItemsRepo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanItemsRepo.js","sourceRoot":"","sources":["../../../../../src/services/db/repositories/scanItemsRepo.ts"],"names":[],"mappings":"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"}
@@ -77,6 +77,19 @@ export function getDb() {
77
77
  FOREIGN KEY (run_id) REFERENCES job_runs(id)
78
78
  );
79
79
 
80
+ CREATE TABLE IF NOT EXISTS comment_thread_nodes (
81
+ id TEXT PRIMARY KEY,
82
+ scan_item_id TEXT NOT NULL,
83
+ reddit_comment_id TEXT NOT NULL,
84
+ parent_reddit_comment_id TEXT,
85
+ author TEXT NOT NULL,
86
+ body TEXT NOT NULL,
87
+ depth INTEGER NOT NULL,
88
+ is_target INTEGER NOT NULL DEFAULT 0,
89
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
90
+ FOREIGN KEY (scan_item_id) REFERENCES scan_items(id)
91
+ );
92
+
80
93
  CREATE TABLE IF NOT EXISTS daemon_state (
81
94
  id INTEGER PRIMARY KEY CHECK (id = 1),
82
95
  is_running INTEGER NOT NULL,
@@ -97,6 +110,11 @@ export function getDb() {
97
110
  }
98
111
  db.exec('CREATE UNIQUE INDEX IF NOT EXISTS idx_jobs_slug ON jobs(slug)');
99
112
  db.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_scan_items_dedup ON scan_items(job_id, reddit_post_id, COALESCE(reddit_comment_id, ''))");
113
+ db.exec('CREATE INDEX IF NOT EXISTS idx_scan_items_job_qualified_posted ON scan_items(job_id, qualified, reddit_posted_at DESC, created_at DESC)');
114
+ db.exec('CREATE INDEX IF NOT EXISTS idx_scan_items_job_created ON scan_items(job_id, created_at DESC)');
115
+ db.exec('CREATE INDEX IF NOT EXISTS idx_scan_items_created ON scan_items(created_at DESC)');
116
+ db.exec('CREATE INDEX IF NOT EXISTS idx_comment_thread_nodes_scan_item_depth ON comment_thread_nodes(scan_item_id, depth ASC)');
117
+ db.exec('CREATE INDEX IF NOT EXISTS idx_comment_thread_nodes_parent ON comment_thread_nodes(parent_reddit_comment_id)');
100
118
  try {
101
119
  db.exec('ALTER TABLE job_runs ADD COLUMN started_at TEXT');
102
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../../src/services/db/sqlite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../../src/services/db/sqlite.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,5 @@ export interface CsvExportSummary {
6
6
  }
7
7
  export declare class CsvResultsExporter {
8
8
  private readonly resultsDir;
9
- exportJobResults(job: Job, qualifiedRows: QualifiedScanItemRow[]): CsvExportSummary;
9
+ exportJobResults(job: Job, qualifiedRows: QualifiedScanItemRow[], exportedAt?: Date): CsvExportSummary;
10
10
  }
@@ -1,6 +1,7 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { getAppPaths } from '../../utils/paths.js';
4
+ import { createExportFileName } from './fileNaming.js';
4
5
  const CSV_HEADERS = ['URL', 'Title', 'Truncated Content', 'Author', 'Justification', 'Date'];
5
6
  function truncateContent(value, maxLength) {
6
7
  if (value.length <= maxLength) {
@@ -19,8 +20,8 @@ function toCsvLine(values) {
19
20
  }
20
21
  export class CsvResultsExporter {
21
22
  resultsDir = getAppPaths().resultsDir;
22
- exportJobResults(job, qualifiedRows) {
23
- const outputPath = path.join(this.resultsDir, `${job.slug}.csv`);
23
+ exportJobResults(job, qualifiedRows, exportedAt = new Date()) {
24
+ const outputPath = path.join(this.resultsDir, createExportFileName(job.slug, 'csv', exportedAt));
24
25
  const lines = [toCsvLine([...CSV_HEADERS])];
25
26
  for (const row of qualifiedRows) {
26
27
  lines.push(toCsvLine([
@@ -1 +1 @@
1
- {"version":3,"file":"csvResults.js","sourceRoot":"","sources":["../../../../src/services/export/csvResults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAU,CAAC;AAEtG,SAAS,eAAe,CAAC,KAAa,EAAE,SAAiB;IACvD,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;AAC3C,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/F,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IAC1C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,MAAgB;IACjC,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAOD,MAAM,OAAO,kBAAkB;IACZ,UAAU,GAAG,WAAW,EAAE,CAAC,UAAU,CAAC;IAEvD,gBAAgB,CAAC,GAAQ,EAAE,aAAqC;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAE5C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CACR,SAAS,CAAC;gBACR,GAAG,CAAC,GAAG;gBACP,GAAG,CAAC,KAAK,IAAI,EAAE;gBACf,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;gBAC9B,GAAG,CAAC,MAAM;gBACV,GAAG,CAAC,mBAAmB,IAAI,EAAE;gBAC7B,GAAG,CAAC,cAAc;aACnB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE9D,OAAO;YACL,UAAU;YACV,QAAQ,EAAE,aAAa,CAAC,MAAM;SAC/B,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"csvResults.js","sourceRoot":"","sources":["../../../../src/services/export/csvResults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAU,CAAC;AAEtG,SAAS,eAAe,CAAC,KAAa,EAAE,SAAiB;IACvD,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;AAC3C,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/F,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IAC1C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,MAAgB;IACjC,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAOD,MAAM,OAAO,kBAAkB;IACZ,UAAU,GAAG,WAAW,EAAE,CAAC,UAAU,CAAC;IAEvD,gBAAgB,CAAC,GAAQ,EAAE,aAAqC,EAAE,UAAU,GAAG,IAAI,IAAI,EAAE;QACvF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;QACjG,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAE5C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CACR,SAAS,CAAC;gBACR,GAAG,CAAC,GAAG;gBACP,GAAG,CAAC,KAAK,IAAI,EAAE;gBACf,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;gBAC9B,GAAG,CAAC,MAAM;gBACV,GAAG,CAAC,mBAAmB,IAAI,EAAE;gBAC7B,GAAG,CAAC,cAAc;aACnB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE9D,OAAO;YACL,UAAU;YACV,QAAQ,EAAE,aAAa,CAAC,MAAM;SAC/B,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export declare function formatUtcTimestampCompact(date: Date): string;
2
+ export declare function createExportFileName(jobSlug: string, extension: 'csv' | 'json', exportedAt?: Date): string;
@@ -0,0 +1,10 @@
1
+ function formatDatePart(value) {
2
+ return String(value).padStart(2, '0');
3
+ }
4
+ export function formatUtcTimestampCompact(date) {
5
+ return `${date.getUTCFullYear()}${formatDatePart(date.getUTCMonth() + 1)}${formatDatePart(date.getUTCDate())}-${formatDatePart(date.getUTCHours())}${formatDatePart(date.getUTCMinutes())}${formatDatePart(date.getUTCSeconds())}`;
6
+ }
7
+ export function createExportFileName(jobSlug, extension, exportedAt = new Date()) {
8
+ return `${formatUtcTimestampCompact(exportedAt)}_${jobSlug}.${extension}`;
9
+ }
10
+ //# sourceMappingURL=fileNaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileNaming.js","sourceRoot":"","sources":["../../../../src/services/export/fileNaming.ts"],"names":[],"mappings":"AAAA,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAU;IAClD,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC;AACrO,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,SAAyB,EAAE,UAAU,GAAG,IAAI,IAAI,EAAE;IACtG,OAAO,GAAG,yBAAyB,CAAC,UAAU,CAAC,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Job } from '../../types/job.js';
2
+ import type { QualifiedScanItemRow } from '../db/repositories/scanItemsRepo.js';
3
+ export interface JsonExportSummary {
4
+ outputPath: string;
5
+ rowCount: number;
6
+ }
7
+ export declare class JsonResultsExporter {
8
+ private readonly resultsDir;
9
+ exportJobResults(job: Job, qualifiedRows: QualifiedScanItemRow[], exportedAt?: Date): JsonExportSummary;
10
+ }
@@ -0,0 +1,16 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { getAppPaths } from '../../utils/paths.js';
4
+ import { createExportFileName } from './fileNaming.js';
5
+ export class JsonResultsExporter {
6
+ resultsDir = getAppPaths().resultsDir;
7
+ exportJobResults(job, qualifiedRows, exportedAt = new Date()) {
8
+ const outputPath = path.join(this.resultsDir, createExportFileName(job.slug, 'json', exportedAt));
9
+ fs.writeFileSync(outputPath, `${JSON.stringify(qualifiedRows, null, 2)}\n`, 'utf8');
10
+ return {
11
+ outputPath,
12
+ rowCount: qualifiedRows.length
13
+ };
14
+ }
15
+ }
16
+ //# sourceMappingURL=jsonResults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonResults.js","sourceRoot":"","sources":["../../../../src/services/export/jsonResults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAOvD,MAAM,OAAO,mBAAmB;IACb,UAAU,GAAG,WAAW,EAAE,CAAC,UAAU,CAAC;IAEvD,gBAAgB,CAAC,GAAQ,EAAE,aAAqC,EAAE,UAAU,GAAG,IAAI,IAAI,EAAE;QACvF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;QAClG,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEpF,OAAO;YACL,UAAU;YACV,QAAQ,EAAE,aAAa,CAAC,MAAM;SAC/B,CAAC;IACJ,CAAC;CACF"}
@@ -23,6 +23,7 @@ interface QualifyPostRequest extends QualificationRequestBase {
23
23
  }
24
24
  interface QualifyCommentThreadRequest extends QualificationRequestBase {
25
25
  postTitle: string;
26
+ postBody: string;
26
27
  targetAuthor: string;
27
28
  thread: RedditComment[];
28
29
  }
@@ -16,6 +16,37 @@ const qualifySchema = z.object({
16
16
  qualified: z.boolean(),
17
17
  reason: z.string().min(1).max(80)
18
18
  });
19
+ function toAlphaLabel(index) {
20
+ const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
21
+ let value = index;
22
+ let label = '';
23
+ do {
24
+ label = `${alphabet[value % 26]}${label}`;
25
+ value = Math.floor(value / 26) - 1;
26
+ } while (value >= 0);
27
+ return label;
28
+ }
29
+ function buildAnonymizedThreadLines(thread, targetAuthor) {
30
+ const authorLabels = new Map();
31
+ let nextLabelIndex = 0;
32
+ return thread.map((comment) => {
33
+ const author = comment.author || '[deleted]';
34
+ let displayAuthor = author;
35
+ if (author !== targetAuthor) {
36
+ const existingLabel = authorLabels.get(author);
37
+ if (existingLabel) {
38
+ displayAuthor = existingLabel;
39
+ }
40
+ else {
41
+ const generatedLabel = `User ${toAlphaLabel(nextLabelIndex)}`;
42
+ nextLabelIndex += 1;
43
+ authorLabels.set(author, generatedLabel);
44
+ displayAuthor = generatedLabel;
45
+ }
46
+ }
47
+ return `- (${displayAuthor}) ${comment.body}`;
48
+ });
49
+ }
19
50
  const QUALIFICATION_TOOL_NAME = 'submit_qualification';
20
51
  const QUALIFICATION_TOOL = {
21
52
  type: 'function',
@@ -215,17 +246,17 @@ export class OpenRouterClient {
215
246
  return this.runQualification(input, userMessage);
216
247
  }
217
248
  async qualifyCommentThread(input) {
218
- const threadText = input.thread
219
- .map((comment) => `${comment.author}: ${comment.body}`)
220
- .join('\n');
249
+ const threadText = buildAnonymizedThreadLines(input.thread, input.targetAuthor).join('\n');
221
250
  const userMessage = [
222
251
  `Post title: ${input.postTitle}`,
223
252
  '',
253
+ `Post body: ${input.postBody}`,
254
+ '',
224
255
  'Comment thread (chronological):',
225
256
  threadText,
226
257
  '',
227
- `Important: decide qualification based on the most recent comment by ${input.targetAuthor}.`,
228
- 'Use other thread context only for interpretation.'
258
+ `Important: QUALIFY ONLY the final comment line authored by ${input.targetAuthor}.`,
259
+ 'Treat all earlier lines as context only and do not qualify them.'
229
260
  ].join('\n');
230
261
  return this.runQualification(input, userMessage);
231
262
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/services/openrouter/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/services/openrouter/client.ts"],"names":[],"mappings":"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"}
@@ -308,6 +308,7 @@ export class JobRunner {
308
308
  modelSettings,
309
309
  qualificationPrompt: job.qualificationPrompt,
310
310
  postTitle: post.title,
311
+ postBody: post.body,
311
312
  targetAuthor: author,
312
313
  thread
313
314
  });
@@ -334,7 +335,15 @@ export class JobRunner {
334
335
  promptTokens: result.promptTokens,
335
336
  completionTokens: result.completionTokens,
336
337
  estimatedCostUsd: this.estimateCost(result.promptTokens, result.completionTokens),
337
- qualificationReason: result.reason
338
+ qualificationReason: result.reason,
339
+ commentThreadNodes: thread.map((threadComment, index) => ({
340
+ redditCommentId: threadComment.id,
341
+ parentRedditCommentId: index === 0 ? null : thread[index - 1]?.id ?? null,
342
+ author: threadComment.author,
343
+ body: threadComment.body,
344
+ depth: index,
345
+ isTarget: index === thread.length - 1
346
+ }))
338
347
  });
339
348
  runStats.itemsNew += 1;
340
349
  if (result.qualified) {