scientify 1.9.0 → 1.10.1

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 (63) hide show
  1. package/README.md +29 -0
  2. package/README.zh.md +29 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +29 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/hooks/research-mode.d.ts.map +1 -1
  7. package/dist/src/hooks/research-mode.js +6 -0
  8. package/dist/src/hooks/research-mode.js.map +1 -1
  9. package/dist/src/hooks/scientify-cron-autofill.d.ts +15 -0
  10. package/dist/src/hooks/scientify-cron-autofill.d.ts.map +1 -0
  11. package/dist/src/hooks/scientify-cron-autofill.js +156 -0
  12. package/dist/src/hooks/scientify-cron-autofill.js.map +1 -0
  13. package/dist/src/hooks/scientify-signature.d.ts.map +1 -1
  14. package/dist/src/hooks/scientify-signature.js +4 -1
  15. package/dist/src/hooks/scientify-signature.js.map +1 -1
  16. package/dist/src/literature/subscription-state.d.ts +90 -0
  17. package/dist/src/literature/subscription-state.d.ts.map +1 -0
  18. package/dist/src/literature/subscription-state.js +521 -0
  19. package/dist/src/literature/subscription-state.js.map +1 -0
  20. package/dist/src/research-subscriptions/constants.d.ts +16 -0
  21. package/dist/src/research-subscriptions/constants.d.ts.map +1 -0
  22. package/dist/src/research-subscriptions/constants.js +59 -0
  23. package/dist/src/research-subscriptions/constants.js.map +1 -0
  24. package/dist/src/research-subscriptions/cron-client.d.ts +8 -0
  25. package/dist/src/research-subscriptions/cron-client.d.ts.map +1 -0
  26. package/dist/src/research-subscriptions/cron-client.js +81 -0
  27. package/dist/src/research-subscriptions/cron-client.js.map +1 -0
  28. package/dist/src/research-subscriptions/delivery.d.ts +10 -0
  29. package/dist/src/research-subscriptions/delivery.d.ts.map +1 -0
  30. package/dist/src/research-subscriptions/delivery.js +82 -0
  31. package/dist/src/research-subscriptions/delivery.js.map +1 -0
  32. package/dist/src/research-subscriptions/handlers.d.ts +6 -0
  33. package/dist/src/research-subscriptions/handlers.d.ts.map +1 -0
  34. package/dist/src/research-subscriptions/handlers.js +200 -0
  35. package/dist/src/research-subscriptions/handlers.js.map +1 -0
  36. package/dist/src/research-subscriptions/parse.d.ts +11 -0
  37. package/dist/src/research-subscriptions/parse.d.ts.map +1 -0
  38. package/dist/src/research-subscriptions/parse.js +478 -0
  39. package/dist/src/research-subscriptions/parse.js.map +1 -0
  40. package/dist/src/research-subscriptions/prompt.d.ts +5 -0
  41. package/dist/src/research-subscriptions/prompt.d.ts.map +1 -0
  42. package/dist/src/research-subscriptions/prompt.js +161 -0
  43. package/dist/src/research-subscriptions/prompt.js.map +1 -0
  44. package/dist/src/research-subscriptions/types.d.ts +65 -0
  45. package/dist/src/research-subscriptions/types.d.ts.map +1 -0
  46. package/dist/src/research-subscriptions/types.js +2 -0
  47. package/dist/src/research-subscriptions/types.js.map +1 -0
  48. package/dist/src/research-subscriptions.d.ts +2 -0
  49. package/dist/src/research-subscriptions.d.ts.map +1 -0
  50. package/dist/src/research-subscriptions.js +2 -0
  51. package/dist/src/research-subscriptions.js.map +1 -0
  52. package/dist/src/tools/scientify-cron.d.ts +62 -0
  53. package/dist/src/tools/scientify-cron.d.ts.map +1 -0
  54. package/dist/src/tools/scientify-cron.js +224 -0
  55. package/dist/src/tools/scientify-cron.js.map +1 -0
  56. package/dist/src/tools/scientify-literature-state.d.ts +70 -0
  57. package/dist/src/tools/scientify-literature-state.d.ts.map +1 -0
  58. package/dist/src/tools/scientify-literature-state.js +312 -0
  59. package/dist/src/tools/scientify-literature-state.js.map +1 -0
  60. package/openclaw.plugin.json +2 -1
  61. package/package.json +1 -1
  62. package/skills/_shared/workspace-spec.md +13 -0
  63. package/skills/research-subscription/SKILL.md +102 -0
package/README.md CHANGED
@@ -323,6 +323,7 @@ You can also check status anytime with:
323
323
  | Skill | Description |
324
324
  |-------|-------------|
325
325
  | **write-review-paper** | Draft a review/survey paper from project research outputs. |
326
+ | **research-subscription** | Create/list/remove scheduled Scientify jobs via `scientify_cron_job` (research digests or plain reminders). |
326
327
 
327
328
  ### Tools (available to LLM)
328
329
 
@@ -334,6 +335,8 @@ You can also check status anytime with:
334
335
  | `unpaywall_download` | Download open access PDFs by DOI via Unpaywall API. Non-OA papers are silently skipped (no failure). |
335
336
  | `github_search` | Search GitHub repositories. Returns repo name, description, stars, URL. Supports language filtering and sorting. |
336
337
  | `paper_browser` | Paginated browsing of large paper files (.tex/.md) to avoid loading thousands of lines into context. Returns specified line range with navigation info. |
338
+ | `scientify_cron_job` | Manage scheduled Scientify jobs from the model (`upsert`/`list`/`remove`). Main fields: `action`, `scope`, `schedule`, `topic`, `message`, `max_papers`, `recency_days`, `candidate_pool`, `score_weights`, `sources`, `channel`, `to`, `no_deliver`, `job_id`. |
339
+ | `scientify_literature_state` | Persistent incremental state for subscriptions: `prepare` dedupe context (+ memory hints), `record` pushed papers, `feedback` lightweight preference memory, and `status` inspection with traceable logs. |
337
340
 
338
341
  ### Commands (direct, no LLM)
339
342
 
@@ -345,6 +348,32 @@ You can also check status anytime with:
345
348
  | `/projects` | List all projects |
346
349
  | `/project-switch <id>` | Switch active project |
347
350
  | `/project-delete <id>` | Delete a project |
351
+ | `/research-subscribe ...` | Create/update scheduled Scientify jobs (supports `daily`, `weekly`, `every`, `at`, `cron`; options: `--channel`, `--to`, `--topic`, `--message`, `--max-papers`, `--recency-days`, `--candidate-pool`, `--score-weights`, `--sources`, `--no-deliver`) |
352
+ | `/research-subscriptions` | Show your scheduled Scientify jobs |
353
+ | `/research-unsubscribe [job-id]` | Remove your scheduled Scientify jobs (or a specific job) |
354
+
355
+ `/research-subscribe` examples:
356
+ - `/research-subscribe daily 09:00 Asia/Shanghai` (auto-deliver to current chat sender/channel when possible)
357
+ - `/research-subscribe every 2h --channel feishu --to ou_xxx`
358
+ - `/research-subscribe at 2m --channel feishu --to ou_xxx`
359
+ - `/research-subscribe weekly mon 09:30 --channel telegram --to 123456789`
360
+ - `/research-subscribe at 2m --channel webui` (`webui`/`tui` are aliases of `last`)
361
+ - `/research-subscribe daily 08:00 --topic "LLM alignment"`
362
+ - `/research-subscribe daily 08:00 --topic "LLM alignment" --max-papers 5 --recency-days 30 --sources arxiv,openalex`
363
+ - `/research-subscribe daily 08:00 --topic "LLM alignment" --candidate-pool 12 --score-weights relevance:45,novelty:20,authority:25,actionability:10`
364
+ - `/research-subscribe at 1m --message "Time to drink coffee."`
365
+ - `/research-subscribe daily 09:00 --no-deliver` (background only, no push)
366
+
367
+ Behavior notes:
368
+ - Scoped upsert: per sender/channel scope, creating a new subscription replaces the previous one in that scope.
369
+ - Delivery aliases: `--channel webui` and `--channel tui` map to `last`; they do not require `--to`.
370
+ - Reminder-safe fallback: if `topic` looks like a plain reminder (for example "remind me to sleep"), Scientify auto-routes it as a reminder message instead of literature pipeline.
371
+ - One-shot topic (`at ... --topic ...`) uses focused retrieval of representative papers; recurring schedules (`daily/weekly/every/cron`) use incremental tracking mode.
372
+ - Recurring incremental mode uses candidate-pool ranking before Top-K selection; if no unseen paper is found, it runs one representative fallback pass before returning empty.
373
+ - Lightweight preference memory is stored backend-only (keyword/source affinities) and used to rerank future pushes quietly.
374
+ - Incremental state is persisted under `~/.openclaw/workspace/scientify/` (`literature-state.json`, `literature-push-log.jsonl`) for dedupe + traceability.
375
+ - Storage: subscription jobs are stored in OpenClaw cron storage, not in project workspace files.
376
+ - Global inspect: `openclaw cron list --all --json`
348
377
 
349
378
  ---
350
379
 
package/README.zh.md CHANGED
@@ -323,6 +323,7 @@ openclaw gateway
323
323
  | Skill | 描述 |
324
324
  |-------|------|
325
325
  | **write-review-paper** | 基于项目研究产出撰写综述论文草稿。 |
326
+ | **research-subscription** | 通过 `scientify_cron_job` 创建/查看/删除定时 Scientify 任务(研究推送或普通提醒)。 |
326
327
 
327
328
  ### Tools(LLM 可调用)
328
329
 
@@ -334,6 +335,8 @@ openclaw gateway
334
335
  | `unpaywall_download` | 通过 Unpaywall API 按 DOI 下载开放获取 PDF。非 OA 论文跳过不报错。 |
335
336
  | `github_search` | 搜索 GitHub 仓库,返回仓库名、描述、star 数、URL。支持语言过滤和排序。 |
336
337
  | `paper_browser` | 分页浏览大型论文文件(.tex/.md),避免一次性加载数千行到上下文。返回指定行范围和导航信息。 |
338
+ | `scientify_cron_job` | 由模型管理 Scientify 定时任务(`upsert`/`list`/`remove`)。主要参数:`action`、`scope`、`schedule`、`topic`、`message`、`max_papers`、`recency_days`、`candidate_pool`、`score_weights`、`sources`、`channel`、`to`、`no_deliver`、`job_id`。 |
339
+ | `scientify_literature_state` | 订阅增量状态工具:`prepare` 获取去重上下文(含记忆提示)、`record` 记录已推送论文、`feedback` 写入轻量偏好记忆、`status` 查看状态与可追溯日志。 |
337
340
 
338
341
  ### Commands(直接执行,不经 LLM)
339
342
 
@@ -345,6 +348,32 @@ openclaw gateway
345
348
  | `/projects` | 列出所有项目 |
346
349
  | `/project-switch <id>` | 切换当前项目 |
347
350
  | `/project-delete <id>` | 删除项目 |
351
+ | `/research-subscribe ...` | 创建/更新定时 Scientify 任务(支持 `daily`、`weekly`、`every`、`at`、`cron`;可选参数:`--channel`、`--to`、`--topic`、`--message`、`--max-papers`、`--recency-days`、`--candidate-pool`、`--score-weights`、`--sources`、`--no-deliver`) |
352
+ | `/research-subscriptions` | 查看你的 Scientify 定时任务 |
353
+ | `/research-unsubscribe [job-id]` | 取消你的 Scientify 定时任务(或删除指定任务) |
354
+
355
+ `/research-subscribe` 示例:
356
+ - `/research-subscribe daily 09:00 Asia/Shanghai`(默认尽量推送到当前消息来源的用户/频道)
357
+ - `/research-subscribe every 2h --channel feishu --to ou_xxx`
358
+ - `/research-subscribe at 2m --channel feishu --to ou_xxx`
359
+ - `/research-subscribe weekly mon 09:30 --channel telegram --to 123456789`
360
+ - `/research-subscribe at 2m --channel webui`(`webui`/`tui` 是 `last` 的别名)
361
+ - `/research-subscribe daily 08:00 --topic "LLM alignment"`
362
+ - `/research-subscribe daily 08:00 --topic "LLM alignment" --max-papers 5 --recency-days 30 --sources arxiv,openalex`
363
+ - `/research-subscribe daily 08:00 --topic "LLM alignment" --candidate-pool 12 --score-weights relevance:45,novelty:20,authority:25,actionability:10`
364
+ - `/research-subscribe at 1m --message "Time to drink coffee."`
365
+ - `/research-subscribe daily 09:00 --no-deliver`(仅后台运行,不主动推送)
366
+
367
+ 行为说明:
368
+ - Scoped upsert:按 sender/channel 作用域覆盖更新,同一作用域新建任务会替换旧任务。
369
+ - Delivery alias:`--channel webui` 和 `--channel tui` 会映射到 `last`,不需要 `--to`。
370
+ - 提醒兜底:如果 `topic` 看起来是普通提醒(例如“提醒我睡觉”),Scientify 会自动按提醒消息处理,不走文献流水线。
371
+ - 一次性研究任务(`at ... --topic ...`)使用“代表论文聚焦检索”;周期任务(`daily/weekly/every/cron`)保持“增量追踪”模式。
372
+ - 周期增量模式会先构建候选池并评分后再选 Top-K;若本轮无“未推送新文献”,会自动再跑一轮代表性回退检索,再决定是否返回空结果。
373
+ - 轻量偏好记忆(关键词/来源亲和)仅后台保存,不默认展示给用户,会静默影响后续排序。
374
+ - 增量状态会持久化到 `~/.openclaw/workspace/scientify/`(`literature-state.json`、`literature-push-log.jsonl`),用于去重与可追溯。
375
+ - 存储位置:订阅任务保存在 OpenClaw cron 存储中,不写入项目 workspace 文件。
376
+ - 全局查看:`openclaw cron list --all --json`
348
377
 
349
378
  ---
350
379
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AA4BlD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,QAmGtD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAoClD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,QAgItD"}
package/dist/index.js CHANGED
@@ -1,14 +1,18 @@
1
1
  import path from "node:path";
2
2
  import { handleResearchStatus, handlePapers, handleIdeas, handleProjects, handleProjectSwitch, handleProjectDelete, } from "./src/commands.js";
3
+ import { createResearchSubscribeHandler, createResearchSubscriptionsHandler, createResearchUnsubscribeHandler, } from "./src/research-subscriptions.js";
3
4
  import { createArxivSearchTool } from "./src/tools/arxiv-search.js";
4
5
  import { createArxivDownloadTool } from "./src/tools/arxiv-download.js";
5
6
  import { createGithubSearchTool } from "./src/tools/github-search-tool.js";
6
7
  import { createPaperBrowserTool } from "./src/tools/paper-browser.js";
7
8
  import { createOpenAlexSearchTool } from "./src/tools/openalex-search.js";
8
9
  import { createUnpaywallDownloadTool } from "./src/tools/unpaywall-download.js";
10
+ import { createScientifyCronTool } from "./src/tools/scientify-cron.js";
11
+ import { createScientifyLiteratureStateTool } from "./src/tools/scientify-literature-state.js";
9
12
  import { createAutoUpdaterService } from "./src/services/auto-updater.js";
10
13
  import { createSkillInjectionHook } from "./src/hooks/inject-skill.js";
11
14
  import { createResearchModeHook } from "./src/hooks/research-mode.js";
15
+ import { createScientifyCronAutofillHook } from "./src/hooks/scientify-cron-autofill.js";
12
16
  import { createScientifyMessageTrackerHook, createScientifySignaturePromptHook, createScientifyUsageCleanupHook, createScientifyUsageTrackerHook, } from "./src/hooks/scientify-signature.js";
13
17
  // Default: check every hour
14
18
  const UPDATE_CHECK_INTERVAL_MS = 60 * 60 * 1000;
@@ -20,6 +24,8 @@ export default function register(api) {
20
24
  api.registerTool(createPaperBrowserTool());
21
25
  api.registerTool(createOpenAlexSearchTool());
22
26
  api.registerTool(createUnpaywallDownloadTool());
27
+ api.registerTool(createScientifyCronTool({ runtime: api.runtime, logger: api.logger }));
28
+ api.registerTool(createScientifyLiteratureStateTool());
23
29
  // Register auto-updater service (silent updates)
24
30
  const pluginConfig = api.pluginConfig;
25
31
  const autoUpdateEnabled = pluginConfig?.autoUpdate !== false; // enabled by default
@@ -77,6 +83,27 @@ export default function register(api) {
77
83
  requireAuth: true, // Require auth for destructive operation
78
84
  handler: handleProjectDelete,
79
85
  });
86
+ api.registerCommand({
87
+ name: "research-subscribe",
88
+ description: "Create/update a scheduled Scientify job (research digest or reminder). Example: /research-subscribe daily 09:00 Asia/Shanghai",
89
+ acceptsArgs: true,
90
+ requireAuth: false,
91
+ handler: createResearchSubscribeHandler({ runtime: api.runtime, logger: api.logger }),
92
+ });
93
+ api.registerCommand({
94
+ name: "research-subscriptions",
95
+ description: "Show your Scientify scheduled jobs",
96
+ acceptsArgs: false,
97
+ requireAuth: false,
98
+ handler: createResearchSubscriptionsHandler({ runtime: api.runtime, logger: api.logger }),
99
+ });
100
+ api.registerCommand({
101
+ name: "research-unsubscribe",
102
+ description: "Remove your Scientify scheduled jobs (or pass a specific job id)",
103
+ acceptsArgs: true,
104
+ requireAuth: false,
105
+ handler: createResearchUnsubscribeHandler({ runtime: api.runtime, logger: api.logger }),
106
+ });
80
107
  // Inject SKILL.md content into sessions_spawn tasks.
81
108
  // Sub-agents run in "minimal" prompt mode and don't see <available_skills>,
82
109
  // so this hook reads the matching SKILL.md and embeds it in the task body.
@@ -86,6 +113,8 @@ export default function register(api) {
86
113
  // Track whether a session actually used Scientify skills/tools.
87
114
  // The signature is prompt-driven (model-generated), not post-processed.
88
115
  api.on("before_tool_call", createScientifyUsageTrackerHook());
116
+ // Auto-fill cron delivery target from current conversation origin when omitted.
117
+ api.on("before_tool_call", createScientifyCronAutofillHook());
89
118
  api.on("message_received", createScientifyMessageTrackerHook());
90
119
  api.on("session_end", createScientifyUsageCleanupHook());
91
120
  // Inject prompts at agent start so they affect the current turn.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EACL,iCAAiC,EACjC,kCAAkC,EAClC,+BAA+B,EAC/B,+BAA+B,GAChC,MAAM,oCAAoC,CAAC;AAE5C,4BAA4B;AAC5B,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAsB;IACrD,iBAAiB;IACjB,GAAG,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC1C,GAAG,CAAC,YAAY,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC5C,GAAG,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,YAAY,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC7C,GAAG,CAAC,YAAY,CAAC,2BAA2B,EAAE,CAAC,CAAC;IAEhD,iDAAiD;IACjD,MAAM,YAAY,GAAG,GAAG,CAAC,YAAoD,CAAC;IAC9E,MAAM,iBAAiB,GAAG,YAAY,EAAE,UAAU,KAAK,KAAK,CAAC,CAAC,qBAAqB;IAEnF,IAAI,iBAAiB,EAAE,CAAC;QACtB,GAAG,CAAC,eAAe,CACjB,wBAAwB,CAAC;YACvB,WAAW,EAAE,WAAW;YACxB,eAAe,EAAE,wBAAwB;YACzC,MAAM,EAAE;gBACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBACnC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBACnC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;aACxC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,gEAAgE;QAC7E,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,oBAAoB;KAC9B,CAAC,CAAC;IAEH,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,0CAA0C;QACvD,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,YAAY;KACtB,CAAC,CAAC;IAEH,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,wCAAwC;QACrD,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,WAAW;KACrB,CAAC,CAAC;IAEH,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,wCAAwC;QACrD,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,mBAAmB;KAC7B,CAAC,CAAC;IAEH,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,oDAAoD;QACjE,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,IAAI,EAAE,yCAAyC;QAC5D,OAAO,EAAE,mBAAmB;KAC7B,CAAC,CAAC;IAEH,qDAAqD;IACrD,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,yEAAyE;IACzE,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAE/E,gEAAgE;IAChE,wEAAwE;IACxE,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAC9D,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,iCAAiC,EAAE,CAAC,CAAC;IAChE,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAEzD,iEAAiE;IACjE,4EAA4E;IAC5E,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,EAAE;QACrD,QAAQ,EAAE,GAAG,EAAE,gCAAgC;KAChD,CAAC,CAAC;IACH,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,kCAAkC,EAAE,EAAE;QACjE,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IAEH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"research-mode.d.ts","sourceRoot":"","sources":["../../../src/hooks/research-mode.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,KAAK,SAAS,GAAG;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAiBF;;GAEG;AACH,wBAAgB,sBAAsB,KAC5B,QAAQ,SAAS,EAAE,UAAU,WAAW,KAAG,UAAU,CAG9D"}
1
+ {"version":3,"file":"research-mode.d.ts","sourceRoot":"","sources":["../../../src/hooks/research-mode.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,KAAK,SAAS,GAAG;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAuBF;;GAEG;AACH,wBAAgB,sBAAsB,KAC5B,QAAQ,SAAS,EAAE,UAAU,WAAW,KAAG,UAAU,CAG9D"}
@@ -10,6 +10,12 @@ Workspace: $W/projects/<topic>/. Check /research-status before writing. Active p
10
10
  ideas/ — gaps.md, idea_1..5.md, selected_idea.md, summary.md (idea-generation)
11
11
  review/ — reading_plan.md, notes/{id}.md, comparison.md, taxonomy.md, draft.md, bibliography.bib (write-review-paper)
12
12
  plan_res.md (research-plan) → project/ + ml_res.md (research-implement) → iterations/judge_v*.md (research-review) → experiment_res.md (research-experiment)
13
+ Scheduling: if user asks for recurring or delayed push delivery (e.g. tomorrow at 08:00, daily digest), use research-subscription skill and call scientify_cron_job to create a real schedule.
14
+ If it is a plain reminder (not research), set scientify_cron_job.message and do not default to the literature pipeline.
15
+ For recurring research pushes, use scientify_literature_state to prepare dedupe context and record pushed paper IDs.
16
+ When user gives preference feedback (e.g. "more like this", "skip this direction", "prefer arxiv"), quietly persist it via scientify_literature_state action=feedback when scope/topic are inferable.
17
+ Preference memory is backend-only: use it to rerank future pushes, do not expose memory internals unless user explicitly asks.
18
+ Do not stop at explanation when user explicitly asks to set a schedule.
13
19
  Rules: file exists = step done (skip). Outputs immutable unless user asks. project/ mutable during review loop.
14
20
  Rigor: read first, think second, answer third. Never fabricate references or results. Every claim needs a source. Say "I don't know" when uncertain. Read actual papers, not just abstracts. Ground ideas in real papers.`;
15
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"research-mode.js","sourceRoot":"","sources":["../../../src/hooks/research-mode.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,oBAAoB,GAAG;;;;;;;;;;0NAU6L,CAAC;AAE3N;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,MAAiB,EAAE,QAAqB,EAAc,EAAE;QAC9D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;IAClD,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"research-mode.js","sourceRoot":"","sources":["../../../src/hooks/research-mode.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;0NAgB6L,CAAC;AAE3N;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,MAAiB,EAAE,QAAqB,EAAc,EAAE;QAC9D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;IAClD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ type BeforeToolCallEvent = {
2
+ toolName: string;
3
+ params?: Record<string, unknown>;
4
+ };
5
+ type BeforeToolCallContext = {
6
+ sessionKey?: string;
7
+ agentId?: string;
8
+ channel?: string;
9
+ senderId?: string;
10
+ };
11
+ export declare function createScientifyCronAutofillHook(): (event: BeforeToolCallEvent, context: BeforeToolCallContext) => {
12
+ params: Record<string, unknown>;
13
+ } | void;
14
+ export {};
15
+ //# sourceMappingURL=scientify-cron-autofill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scientify-cron-autofill.d.ts","sourceRoot":"","sources":["../../../src/hooks/scientify-cron-autofill.ts"],"names":[],"mappings":"AAAA,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAoIF,wBAAgB,+BAA+B,KAE3C,OAAO,mBAAmB,EAC1B,SAAS,qBAAqB,KAC7B;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,IAAI,CAiD9C"}
@@ -0,0 +1,156 @@
1
+ const CHANNELS_WITH_TARGET = new Set([
2
+ "telegram",
3
+ "whatsapp",
4
+ "discord",
5
+ "irc",
6
+ "googlechat",
7
+ "slack",
8
+ "signal",
9
+ "imessage",
10
+ "feishu",
11
+ "nostr",
12
+ "msteams",
13
+ "mattermost",
14
+ "nextcloud-talk",
15
+ "matrix",
16
+ "bluebubbles",
17
+ "line",
18
+ "zalo",
19
+ "zalouser",
20
+ "synology-chat",
21
+ "tlon",
22
+ ]);
23
+ function readString(value) {
24
+ if (typeof value !== "string")
25
+ return undefined;
26
+ const trimmed = value.trim();
27
+ return trimmed.length > 0 ? trimmed : undefined;
28
+ }
29
+ function readLowerString(value) {
30
+ const raw = readString(value);
31
+ return raw ? raw.toLowerCase() : undefined;
32
+ }
33
+ function splitSessionKeyParts(sessionKey) {
34
+ // OpenClaw may append thread suffix: ...:thread:<id>
35
+ // Strip that suffix first to avoid treating thread id as peer id.
36
+ const lower = sessionKey.toLowerCase();
37
+ const threadIndex = lower.lastIndexOf(":thread:");
38
+ const base = threadIndex >= 0 ? sessionKey.slice(0, threadIndex) : sessionKey;
39
+ return base.split(":").filter((part) => part.length > 0);
40
+ }
41
+ function joinParts(parts, start) {
42
+ const joined = parts.slice(start).join(":").trim();
43
+ return joined.length > 0 ? joined : undefined;
44
+ }
45
+ function deriveFromSessionKey(sessionKey) {
46
+ const raw = readString(sessionKey);
47
+ if (!raw)
48
+ return {};
49
+ // Canonical OpenClaw patterns:
50
+ // - agent:<agentId>:<channel>:direct:<peerId>
51
+ // - agent:<agentId>:<channel>:<accountId>:direct:<peerId>
52
+ // - agent:<agentId>:<channel>:group:<peerId>
53
+ // - agent:<agentId>:direct:<peerId>
54
+ const parts = splitSessionKeyParts(raw);
55
+ if (parts.length < 3 || parts[0].toLowerCase() !== "agent")
56
+ return {};
57
+ const rest = parts.slice(2);
58
+ if (rest.length === 0)
59
+ return {};
60
+ const token0 = rest[0]?.toLowerCase();
61
+ const token1 = rest[1]?.toLowerCase();
62
+ const token2 = rest[2]?.toLowerCase();
63
+ // agent:<agentId>:direct:<peerId>
64
+ if (token0 === "direct" || token0 === "dm") {
65
+ return { senderId: joinParts(rest, 1) };
66
+ }
67
+ // agent:<agentId>:<channel>:direct:<peerId>
68
+ if (token1 === "direct" || token1 === "dm") {
69
+ return {
70
+ channel: token0,
71
+ senderId: joinParts(rest, 2),
72
+ };
73
+ }
74
+ // agent:<agentId>:<channel>:<accountId>:direct:<peerId>
75
+ if (token2 === "direct" || token2 === "dm") {
76
+ return {
77
+ channel: token0,
78
+ senderId: joinParts(rest, 3),
79
+ };
80
+ }
81
+ // Non-direct session (group/channel/thread), peer id is still a valid delivery target.
82
+ if (rest.length >= 3) {
83
+ return {
84
+ channel: token0,
85
+ senderId: joinParts(rest, 2),
86
+ };
87
+ }
88
+ return { channel: token0 };
89
+ }
90
+ function deriveOrigin(context) {
91
+ const fromContext = {
92
+ channel: readLowerString(context.channel),
93
+ senderId: readString(context.senderId),
94
+ };
95
+ if (fromContext.channel && fromContext.senderId) {
96
+ return fromContext;
97
+ }
98
+ const fromSession = deriveFromSessionKey(context.sessionKey);
99
+ return {
100
+ channel: fromContext.channel ?? fromSession.channel,
101
+ senderId: fromContext.senderId ?? fromSession.senderId,
102
+ };
103
+ }
104
+ function sanitizeScopePart(value) {
105
+ const cleaned = value
106
+ .toLowerCase()
107
+ .replace(/[^a-z0-9_-]+/g, "-")
108
+ .replace(/-+/g, "-")
109
+ .replace(/^-|-$/g, "");
110
+ return cleaned || "unknown";
111
+ }
112
+ export function createScientifyCronAutofillHook() {
113
+ return (event, context) => {
114
+ if (event.toolName !== "scientify_cron_job")
115
+ return;
116
+ const params = event.params ?? {};
117
+ const action = readLowerString(params.action);
118
+ if (action !== "upsert")
119
+ return;
120
+ if (params.no_deliver === true)
121
+ return;
122
+ const explicitChannel = readLowerString(params.channel);
123
+ const explicitTo = readString(params.to);
124
+ const explicitScope = readString(params.scope);
125
+ const origin = deriveOrigin(context);
126
+ const originChannel = readLowerString(origin.channel);
127
+ const originSender = readString(origin.senderId);
128
+ let nextChannel = explicitChannel;
129
+ let nextTo = explicitTo;
130
+ let nextScope = explicitScope;
131
+ if (!nextChannel && originChannel && CHANNELS_WITH_TARGET.has(originChannel)) {
132
+ nextChannel = originChannel;
133
+ }
134
+ if (!nextTo && nextChannel && nextChannel !== "last" && originSender) {
135
+ if (!originChannel || originChannel === nextChannel) {
136
+ nextTo = originSender;
137
+ }
138
+ }
139
+ // Avoid global scope collisions across users when tool calls omit scope.
140
+ if (!nextScope && nextChannel && nextTo) {
141
+ nextScope = `${sanitizeScopePart(nextChannel)}-${sanitizeScopePart(nextTo)}`;
142
+ }
143
+ if (nextChannel === explicitChannel && nextTo === explicitTo && nextScope === explicitScope) {
144
+ return;
145
+ }
146
+ return {
147
+ params: {
148
+ ...params,
149
+ ...(nextChannel ? { channel: nextChannel } : {}),
150
+ ...(nextTo ? { to: nextTo } : {}),
151
+ ...(nextScope ? { scope: nextScope } : {}),
152
+ },
153
+ };
154
+ };
155
+ }
156
+ //# sourceMappingURL=scientify-cron-autofill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scientify-cron-autofill.js","sourceRoot":"","sources":["../../../src/hooks/scientify-cron-autofill.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scientify-signature.d.ts","sourceRoot":"","sources":["../../../src/hooks/scientify-signature.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AA6FF,wBAAgB,+BAA+B,KACrC,OAAO,mBAAmB,EAAE,SAAS,eAAe,KAAG,IAAI,CAKpE;AAED,wBAAgB,iCAAiC,KACvC,OAAO,OAAO,EAAE,SAAS,eAAe,KAAG,IAAI,CAmBxD;AAED,wBAAgB,kCAAkC,KACxC,OAAO,sBAAsB,EAAE,SAAS,eAAe,KAAG,gBAAgB,GAAG,IAAI,CAoB1F;AAED,wBAAgB,+BAA+B,KACrC,OAAO,OAAO,EAAE,SAAS,eAAe,KAAG,IAAI,CAKxD"}
1
+ {"version":3,"file":"scientify-signature.d.ts","sourceRoot":"","sources":["../../../src/hooks/scientify-signature.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAgGF,wBAAgB,+BAA+B,KACrC,OAAO,mBAAmB,EAAE,SAAS,eAAe,KAAG,IAAI,CAKpE;AAED,wBAAgB,iCAAiC,KACvC,OAAO,OAAO,EAAE,SAAS,eAAe,KAAG,IAAI,CAmBxD;AAED,wBAAgB,kCAAkC,KACxC,OAAO,sBAAsB,EAAE,SAAS,eAAe,KAAG,gBAAgB,GAAG,IAAI,CAoB1F;AAED,wBAAgB,+BAA+B,KACrC,OAAO,OAAO,EAAE,SAAS,eAAe,KAAG,IAAI,CAKxD"}
@@ -5,6 +5,8 @@ const SCIENTIFY_TOOLS = new Set([
5
5
  "paper_browser",
6
6
  "openalex_search",
7
7
  "unpaywall_download",
8
+ "scientify_cron_job",
9
+ "scientify_literature_state",
8
10
  ]);
9
11
  const SCIENTIFY_SKILLS = new Set([
10
12
  "idea-generation",
@@ -16,8 +18,9 @@ const SCIENTIFY_SKILLS = new Set([
16
18
  "research-experiment",
17
19
  "literature-survey",
18
20
  "write-review-paper",
21
+ "research-subscription",
19
22
  ]);
20
- const SCIENTIFY_SKILL_COMMAND_RE = /(?:^|\s)\/(idea-generation|research-pipeline|research-survey|research-plan|research-implement|research-review|research-experiment|literature-survey|write-review-paper)(?:\s|$)/i;
23
+ const SCIENTIFY_SKILL_COMMAND_RE = /(?:^|\s)\/(idea-generation|research-pipeline|research-survey|research-plan|research-implement|research-review|research-experiment|literature-survey|write-review-paper|research-subscription)(?:\s|$)/i;
21
24
  const SIGNATURE_PROMPT = `[Scientify Signature]
22
25
  If this response is based on Scientify workflow execution (Scientify skills/tools), append this exact footer at the end of your reply:
23
26
  ---
@@ -1 +1 @@
1
- {"version":3,"file":"scientify-signature.js","sourceRoot":"","sources":["../../../src/hooks/scientify-signature.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scientify-signature.js","sourceRoot":"","sources":["../../../src/hooks/scientify-signature.ts"],"names":[],"mappings":"AAmBA,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,cAAc;IACd,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,iBAAiB;IACjB,oBAAoB;IACpB,oBAAoB;IACpB,4BAA4B;CAC7B,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,eAAe;IACf,oBAAoB;IACpB,iBAAiB;IACjB,qBAAqB;IACrB,mBAAmB;IACnB,oBAAoB;IACpB,uBAAuB;CACxB,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAC9B,wMAAwM,CAAC;AAE3M,MAAM,gBAAgB,GAAG;;;;sCAIa,CAAC;AAEvC,iEAAiE;AACjE,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAC;AAElD,SAAS,cAAc,CAAC,KAAc,EAAE,OAAwB;IAC9D,IAAI,OAAO,CAAC,UAAU;QAAE,OAAO,OAAO,CAAC,UAAU,CAAC;IAClD,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC;IAC5C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,UAAU,CAAC;QACpE,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IAChE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAa;IACtC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC7C,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAChC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACjC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC;QACxD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAmB;IACrD,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,SAAS;QAChD,MAAM,MAAM,GAAG,IAA+B,CAAC;QAC/C,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,IAAI,IAAI,KAAK,MAAM;YAAE,SAAS;QAC9B,OAAO,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,8BAA8B,CAAC,KAA0B,EAAE,WAAmB;IACrF,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,gBAAgB;QAAE,OAAO;IAChD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,KAAK,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC7C,OAAO,CAAC,KAA0B,EAAE,OAAwB,EAAQ,EAAE;QACpE,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,8BAA8B,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC;IAC/C,OAAO,CAAC,KAAc,EAAE,OAAwB,EAAQ,EAAE;QACxD,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO;QAChD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,IAAI,GAAG;YACX,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;YACxB,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;YAC3B,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC;YAC/B,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;SAC5B;aACE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACjC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kCAAkC;IAChD,OAAO,CAAC,KAA6B,EAAE,OAAwB,EAA2B,EAAE;QAC1F,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEnD,IAAI,WAAW,IAAI,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;QAC9C,CAAC;QAED,yEAAyE;QACzE,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,MAAM,QAAQ,GAAG,GAAG,UAAU,KAAK,YAAY,EAAE,CAAC;QAClD,IAAI,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,IAAI,WAAW,EAAE,CAAC;gBAChB,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;QAC9C,CAAC;QAED,OAAO;IACT,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC7C,OAAO,CAAC,KAAc,EAAE,OAAwB,EAAQ,EAAE;QACxD,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,90 @@
1
+ export type LightweightPreferences = {
2
+ maxPapers: number;
3
+ recencyDays?: number;
4
+ sources: string[];
5
+ };
6
+ export type FeedbackSignal = "read" | "skip" | "star";
7
+ export type TopicMemoryHints = {
8
+ preferredKeywords: string[];
9
+ avoidedKeywords: string[];
10
+ preferredSources: string[];
11
+ avoidedSources: string[];
12
+ feedbackCounts: {
13
+ read: number;
14
+ skip: number;
15
+ star: number;
16
+ };
17
+ lastFeedbackAtMs?: number;
18
+ };
19
+ export type PaperRecordInput = {
20
+ id?: string;
21
+ title?: string;
22
+ url?: string;
23
+ score?: number;
24
+ reason?: string;
25
+ };
26
+ export type FeedbackInput = {
27
+ signal: FeedbackSignal;
28
+ paper?: PaperRecordInput;
29
+ source?: string;
30
+ tags?: string[];
31
+ note?: string;
32
+ runId?: string;
33
+ };
34
+ export type PrepareResult = {
35
+ scope: string;
36
+ topic: string;
37
+ topicKey: string;
38
+ preferences: LightweightPreferences;
39
+ memoryHints: TopicMemoryHints;
40
+ excludePaperIds: string[];
41
+ knownPaperCount: number;
42
+ lastPushedAtMs?: number;
43
+ };
44
+ export type RecordResult = {
45
+ scope: string;
46
+ topic: string;
47
+ topicKey: string;
48
+ preferences: LightweightPreferences;
49
+ memoryHints: TopicMemoryHints;
50
+ recordedPapers: number;
51
+ totalKnownPapers: number;
52
+ pushedAtMs: number;
53
+ };
54
+ export type FeedbackResult = {
55
+ scope: string;
56
+ topic: string;
57
+ topicKey: string;
58
+ signal: FeedbackSignal;
59
+ preferences: LightweightPreferences;
60
+ memoryHints: TopicMemoryHints;
61
+ updatedAtMs: number;
62
+ };
63
+ export declare function prepareIncrementalState(args: {
64
+ scope: string;
65
+ topic: string;
66
+ preferences?: Partial<LightweightPreferences>;
67
+ }): Promise<PrepareResult>;
68
+ export declare function recordIncrementalPush(args: {
69
+ scope: string;
70
+ topic: string;
71
+ status?: string;
72
+ papers: PaperRecordInput[];
73
+ preferences?: Partial<LightweightPreferences>;
74
+ runId?: string;
75
+ note?: string;
76
+ }): Promise<RecordResult>;
77
+ export declare function recordUserFeedback(args: {
78
+ scope: string;
79
+ topic: string;
80
+ feedback: FeedbackInput;
81
+ preferences?: Partial<LightweightPreferences>;
82
+ }): Promise<FeedbackResult>;
83
+ export declare function getIncrementalStateStatus(args: {
84
+ scope: string;
85
+ topic: string;
86
+ }): Promise<PrepareResult & {
87
+ totalRuns: number;
88
+ lastStatus?: string;
89
+ }>;
90
+ //# sourceMappingURL=subscription-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription-state.d.ts","sourceRoot":"","sources":["../../../src/literature/subscription-state.ts"],"names":[],"mappings":"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"}