scientify 1.9.0 → 1.10.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.
- package/README.md +21 -0
- package/README.zh.md +21 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -1
- package/dist/src/hooks/research-mode.d.ts.map +1 -1
- package/dist/src/hooks/research-mode.js +3 -0
- package/dist/src/hooks/research-mode.js.map +1 -1
- package/dist/src/hooks/scientify-cron-autofill.d.ts +15 -0
- package/dist/src/hooks/scientify-cron-autofill.d.ts.map +1 -0
- package/dist/src/hooks/scientify-cron-autofill.js +156 -0
- package/dist/src/hooks/scientify-cron-autofill.js.map +1 -0
- package/dist/src/hooks/scientify-signature.d.ts.map +1 -1
- package/dist/src/hooks/scientify-signature.js +3 -1
- package/dist/src/hooks/scientify-signature.js.map +1 -1
- package/dist/src/research-subscriptions.d.ts +10 -0
- package/dist/src/research-subscriptions.d.ts.map +1 -0
- package/dist/src/research-subscriptions.js +762 -0
- package/dist/src/research-subscriptions.js.map +1 -0
- package/dist/src/tools/scientify-cron.d.ts +42 -0
- package/dist/src/tools/scientify-cron.d.ts.map +1 -0
- package/dist/src/tools/scientify-cron.js +153 -0
- package/dist/src/tools/scientify-cron.js.map +1 -0
- package/openclaw.plugin.json +2 -1
- package/package.json +1 -1
- package/skills/_shared/workspace-spec.md +10 -0
- package/skills/research-subscription/SKILL.md +90 -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,7 @@ 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`, `channel`, `to`, `no_deliver`, `job_id`. |
|
|
337
339
|
|
|
338
340
|
### Commands (direct, no LLM)
|
|
339
341
|
|
|
@@ -345,6 +347,25 @@ You can also check status anytime with:
|
|
|
345
347
|
| `/projects` | List all projects |
|
|
346
348
|
| `/project-switch <id>` | Switch active project |
|
|
347
349
|
| `/project-delete <id>` | Delete a project |
|
|
350
|
+
| `/research-subscribe ...` | Create/update scheduled Scientify jobs (supports `daily`, `weekly`, `every`, `at`, `cron`; options: `--channel`, `--to`, `--topic`, `--message`, `--no-deliver`) |
|
|
351
|
+
| `/research-subscriptions` | Show your scheduled Scientify jobs |
|
|
352
|
+
| `/research-unsubscribe [job-id]` | Remove your scheduled Scientify jobs (or a specific job) |
|
|
353
|
+
|
|
354
|
+
`/research-subscribe` examples:
|
|
355
|
+
- `/research-subscribe daily 09:00 Asia/Shanghai` (auto-deliver to current chat sender/channel when possible)
|
|
356
|
+
- `/research-subscribe every 2h --channel feishu --to ou_xxx`
|
|
357
|
+
- `/research-subscribe at 2m --channel feishu --to ou_xxx`
|
|
358
|
+
- `/research-subscribe weekly mon 09:30 --channel telegram --to 123456789`
|
|
359
|
+
- `/research-subscribe daily 08:00 --topic "LLM alignment"`
|
|
360
|
+
- `/research-subscribe at 1m --message "Time to drink coffee."`
|
|
361
|
+
- `/research-subscribe daily 09:00 --no-deliver` (background only, no push)
|
|
362
|
+
|
|
363
|
+
Behavior notes:
|
|
364
|
+
- Scoped upsert: per sender/channel scope, creating a new subscription replaces the previous one in that scope.
|
|
365
|
+
- 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.
|
|
366
|
+
- One-shot topic (`at ... --topic ...`) uses focused retrieval of representative papers; recurring schedules (`daily/weekly/every/cron`) use incremental tracking mode.
|
|
367
|
+
- Storage: subscription jobs are stored in OpenClaw cron storage, not in project workspace files.
|
|
368
|
+
- Global inspect: `openclaw cron list --all --json`
|
|
348
369
|
|
|
349
370
|
---
|
|
350
371
|
|
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,7 @@ 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`、`channel`、`to`、`no_deliver`、`job_id`。 |
|
|
337
339
|
|
|
338
340
|
### Commands(直接执行,不经 LLM)
|
|
339
341
|
|
|
@@ -345,6 +347,25 @@ openclaw gateway
|
|
|
345
347
|
| `/projects` | 列出所有项目 |
|
|
346
348
|
| `/project-switch <id>` | 切换当前项目 |
|
|
347
349
|
| `/project-delete <id>` | 删除项目 |
|
|
350
|
+
| `/research-subscribe ...` | 创建/更新定时 Scientify 任务(支持 `daily`、`weekly`、`every`、`at`、`cron`;可选参数:`--channel`、`--to`、`--topic`、`--message`、`--no-deliver`) |
|
|
351
|
+
| `/research-subscriptions` | 查看你的 Scientify 定时任务 |
|
|
352
|
+
| `/research-unsubscribe [job-id]` | 取消你的 Scientify 定时任务(或删除指定任务) |
|
|
353
|
+
|
|
354
|
+
`/research-subscribe` 示例:
|
|
355
|
+
- `/research-subscribe daily 09:00 Asia/Shanghai`(默认尽量推送到当前消息来源的用户/频道)
|
|
356
|
+
- `/research-subscribe every 2h --channel feishu --to ou_xxx`
|
|
357
|
+
- `/research-subscribe at 2m --channel feishu --to ou_xxx`
|
|
358
|
+
- `/research-subscribe weekly mon 09:30 --channel telegram --to 123456789`
|
|
359
|
+
- `/research-subscribe daily 08:00 --topic "LLM alignment"`
|
|
360
|
+
- `/research-subscribe at 1m --message "Time to drink coffee."`
|
|
361
|
+
- `/research-subscribe daily 09:00 --no-deliver`(仅后台运行,不主动推送)
|
|
362
|
+
|
|
363
|
+
行为说明:
|
|
364
|
+
- Scoped upsert:按 sender/channel 作用域覆盖更新,同一作用域新建任务会替换旧任务。
|
|
365
|
+
- 提醒兜底:如果 `topic` 看起来是普通提醒(例如“提醒我睡觉”),Scientify 会自动按提醒消息处理,不走文献流水线。
|
|
366
|
+
- 一次性研究任务(`at ... --topic ...`)使用“代表论文聚焦检索”;周期任务(`daily/weekly/every/cron`)保持“增量追踪”模式。
|
|
367
|
+
- 存储位置:订阅任务保存在 OpenClaw cron 存储中,不写入项目 workspace 文件。
|
|
368
|
+
- 全局查看:`openclaw cron list --all --json`
|
|
348
369
|
|
|
349
370
|
---
|
|
350
371
|
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAmClD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,QA+HtD"}
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
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";
|
|
9
11
|
import { createAutoUpdaterService } from "./src/services/auto-updater.js";
|
|
10
12
|
import { createSkillInjectionHook } from "./src/hooks/inject-skill.js";
|
|
11
13
|
import { createResearchModeHook } from "./src/hooks/research-mode.js";
|
|
14
|
+
import { createScientifyCronAutofillHook } from "./src/hooks/scientify-cron-autofill.js";
|
|
12
15
|
import { createScientifyMessageTrackerHook, createScientifySignaturePromptHook, createScientifyUsageCleanupHook, createScientifyUsageTrackerHook, } from "./src/hooks/scientify-signature.js";
|
|
13
16
|
// Default: check every hour
|
|
14
17
|
const UPDATE_CHECK_INTERVAL_MS = 60 * 60 * 1000;
|
|
@@ -20,6 +23,7 @@ export default function register(api) {
|
|
|
20
23
|
api.registerTool(createPaperBrowserTool());
|
|
21
24
|
api.registerTool(createOpenAlexSearchTool());
|
|
22
25
|
api.registerTool(createUnpaywallDownloadTool());
|
|
26
|
+
api.registerTool(createScientifyCronTool({ runtime: api.runtime, logger: api.logger }));
|
|
23
27
|
// Register auto-updater service (silent updates)
|
|
24
28
|
const pluginConfig = api.pluginConfig;
|
|
25
29
|
const autoUpdateEnabled = pluginConfig?.autoUpdate !== false; // enabled by default
|
|
@@ -77,6 +81,27 @@ export default function register(api) {
|
|
|
77
81
|
requireAuth: true, // Require auth for destructive operation
|
|
78
82
|
handler: handleProjectDelete,
|
|
79
83
|
});
|
|
84
|
+
api.registerCommand({
|
|
85
|
+
name: "research-subscribe",
|
|
86
|
+
description: "Create/update a scheduled Scientify job (research digest or reminder). Example: /research-subscribe daily 09:00 Asia/Shanghai",
|
|
87
|
+
acceptsArgs: true,
|
|
88
|
+
requireAuth: false,
|
|
89
|
+
handler: createResearchSubscribeHandler({ runtime: api.runtime, logger: api.logger }),
|
|
90
|
+
});
|
|
91
|
+
api.registerCommand({
|
|
92
|
+
name: "research-subscriptions",
|
|
93
|
+
description: "Show your Scientify scheduled jobs",
|
|
94
|
+
acceptsArgs: false,
|
|
95
|
+
requireAuth: false,
|
|
96
|
+
handler: createResearchSubscriptionsHandler({ runtime: api.runtime, logger: api.logger }),
|
|
97
|
+
});
|
|
98
|
+
api.registerCommand({
|
|
99
|
+
name: "research-unsubscribe",
|
|
100
|
+
description: "Remove your Scientify scheduled jobs (or pass a specific job id)",
|
|
101
|
+
acceptsArgs: true,
|
|
102
|
+
requireAuth: false,
|
|
103
|
+
handler: createResearchUnsubscribeHandler({ runtime: api.runtime, logger: api.logger }),
|
|
104
|
+
});
|
|
80
105
|
// Inject SKILL.md content into sessions_spawn tasks.
|
|
81
106
|
// Sub-agents run in "minimal" prompt mode and don't see <available_skills>,
|
|
82
107
|
// so this hook reads the matching SKILL.md and embeds it in the task body.
|
|
@@ -86,6 +111,8 @@ export default function register(api) {
|
|
|
86
111
|
// Track whether a session actually used Scientify skills/tools.
|
|
87
112
|
// The signature is prompt-driven (model-generated), not post-processed.
|
|
88
113
|
api.on("before_tool_call", createScientifyUsageTrackerHook());
|
|
114
|
+
// Auto-fill cron delivery target from current conversation origin when omitted.
|
|
115
|
+
api.on("before_tool_call", createScientifyCronAutofillHook());
|
|
89
116
|
api.on("message_received", createScientifyMessageTrackerHook());
|
|
90
117
|
api.on("session_end", createScientifyUsageCleanupHook());
|
|
91
118
|
// 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;
|
|
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;
|
|
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;AAoBF;;GAEG;AACH,wBAAgB,sBAAsB,KAC5B,QAAQ,SAAS,EAAE,UAAU,WAAW,KAAG,UAAU,CAG9D"}
|
|
@@ -10,6 +10,9 @@ 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
|
+
Do not stop at explanation when user explicitly asks to set a schedule.
|
|
13
16
|
Rules: file exists = step done (skip). Outputs immutable unless user asks. project/ mutable during review loop.
|
|
14
17
|
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
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research-mode.js","sourceRoot":"","sources":["../../../src/hooks/research-mode.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,oBAAoB,GAAG
|
|
1
|
+
{"version":3,"file":"research-mode.js","sourceRoot":"","sources":["../../../src/hooks/research-mode.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;0NAa6L,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":"AAYA,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,UAAU;IACV,UAAU;IACV,SAAS;IACT,KAAK;IACL,YAAY;IACZ,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,OAAO;IACP,SAAS;IACT,YAAY;IACZ,gBAAgB;IAChB,QAAQ;IACR,aAAa;IACb,MAAM;IACN,MAAM;IACN,UAAU;IACV,eAAe;IACf,MAAM;CACP,CAAC,CAAC;AAOH,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,qDAAqD;IACrD,kEAAkE;IAClE,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC9E,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,SAAS,CAAC,KAAe,EAAE,KAAa;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAmB;IAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAEpB,+BAA+B;IAC/B,8CAA8C;IAC9C,0DAA0D;IAC1D,6CAA6C;IAC7C,oCAAoC;IACpC,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IAEtE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IAEtC,kCAAkC;IAClC,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3C,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,4CAA4C;IAC5C,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3C,OAAO;YACL,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;SAC7B,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3C,OAAO;YACL,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;SAC7B,CAAC;IACJ,CAAC;IAED,uFAAuF;IACvF,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;SAC7B,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,YAAY,CAAC,OAA8B;IAClD,MAAM,WAAW,GAAW;QAC1B,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC;QACzC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;KACvC,CAAC;IAEF,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QAChD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7D,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO;QACnD,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ;KACvD,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,OAAO,GAAG,KAAK;SAClB,WAAW,EAAE;SACb,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzB,OAAO,OAAO,IAAI,SAAS,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC7C,OAAO,CACL,KAA0B,EAC1B,OAA8B,EACc,EAAE;QAC9C,IAAI,KAAK,CAAC,QAAQ,KAAK,oBAAoB;YAAE,OAAO;QAEpD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,MAAM,KAAK,QAAQ;YAAE,OAAO;QAEhC,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI;YAAE,OAAO;QAEvC,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEjD,IAAI,WAAW,GAAG,eAAe,CAAC;QAClC,IAAI,MAAM,GAAG,UAAU,CAAC;QACxB,IAAI,SAAS,GAAG,aAAa,CAAC;QAE9B,IAAI,CAAC,WAAW,IAAI,aAAa,IAAI,oBAAoB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7E,WAAW,GAAG,aAAa,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,WAAW,IAAI,WAAW,KAAK,MAAM,IAAI,YAAY,EAAE,CAAC;YACrE,IAAI,CAAC,aAAa,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;gBACpD,MAAM,GAAG,YAAY,CAAC;YACxB,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,IAAI,CAAC,SAAS,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;YACxC,SAAS,GAAG,GAAG,iBAAiB,CAAC,WAAW,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/E,CAAC;QAED,IAAI,WAAW,KAAK,eAAe,IAAI,MAAM,KAAK,UAAU,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YAC5F,OAAO;QACT,CAAC;QAED,OAAO;YACL,MAAM,EAAE;gBACN,GAAG,MAAM;gBACT,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3C;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -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;
|
|
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;AA+FF,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,7 @@ const SCIENTIFY_TOOLS = new Set([
|
|
|
5
5
|
"paper_browser",
|
|
6
6
|
"openalex_search",
|
|
7
7
|
"unpaywall_download",
|
|
8
|
+
"scientify_cron_job",
|
|
8
9
|
]);
|
|
9
10
|
const SCIENTIFY_SKILLS = new Set([
|
|
10
11
|
"idea-generation",
|
|
@@ -16,8 +17,9 @@ const SCIENTIFY_SKILLS = new Set([
|
|
|
16
17
|
"research-experiment",
|
|
17
18
|
"literature-survey",
|
|
18
19
|
"write-review-paper",
|
|
20
|
+
"research-subscription",
|
|
19
21
|
]);
|
|
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;
|
|
22
|
+
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
23
|
const SIGNATURE_PROMPT = `[Scientify Signature]
|
|
22
24
|
If this response is based on Scientify workflow execution (Scientify skills/tools), append this exact footer at the end of your reply:
|
|
23
25
|
---
|
|
@@ -1 +1 @@
|
|
|
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;CACrB,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;
|
|
1
|
+
{"version":3,"file":"scientify-signature.js","sourceRoot":"","sources":["../../../src/hooks/scientify-signature.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PluginCommandContext, PluginCommandResult, PluginLogger, PluginRuntime } from "openclaw";
|
|
2
|
+
type CronCommandDeps = {
|
|
3
|
+
runtime: PluginRuntime;
|
|
4
|
+
logger: PluginLogger;
|
|
5
|
+
};
|
|
6
|
+
export declare function createResearchSubscribeHandler(deps: CronCommandDeps): (ctx: PluginCommandContext) => Promise<PluginCommandResult>;
|
|
7
|
+
export declare function createResearchUnsubscribeHandler(deps: CronCommandDeps): (ctx: PluginCommandContext) => Promise<PluginCommandResult>;
|
|
8
|
+
export declare function createResearchSubscriptionsHandler(deps: CronCommandDeps): (ctx: PluginCommandContext) => Promise<PluginCommandResult>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=research-subscriptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-subscriptions.d.ts","sourceRoot":"","sources":["../../src/research-subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,aAAa,EAEd,MAAM,UAAU,CAAC;AAkGlB,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAsmBF,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,eAAe,IACpD,KAAK,oBAAoB,KAAG,OAAO,CAAC,mBAAmB,CAAC,CA0IvE;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,eAAe,IACtD,KAAK,oBAAoB,KAAG,OAAO,CAAC,mBAAmB,CAAC,CA0CvE;AAED,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,eAAe,IACxD,KAAK,oBAAoB,KAAG,OAAO,CAAC,mBAAmB,CAAC,CAmCvE"}
|