@dsh-enhanced/assistant-proactive 0.1.30

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 dsh-enhanced contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # @dsh-enhanced/assistant-proactive
2
+
3
+ 为已获主人授权的目标事件等待增加机会筛选。事件经过合并窗口、静默时段、收益阈值、冷却及每目标预算判断后,保存静默记录、向主人发送提醒,或交回 Goals 恢复原目标。实际执行继续使用原会话、Policy、预算和独立验收。
4
+
5
+ ## 安装
6
+
7
+ ```sh
8
+ dsh plugin --profile web add @dsh-enhanced/assistant-proactive
9
+ dsh --profile web --dump-config
10
+ ```
11
+
12
+ 插件可独立安装;与 `assistant-goals`、`event-triggers` 配合使用时,先按 Goals 文档配置持久化事件等待、主人路由、执行预算与独立验收。安装本插件不会自行创建目标或订阅事件。
13
+
14
+ ## 配置与使用
15
+
16
+ 在本插件的 Cordis 配置行设置(将数据库路径替换为本机私有目录):
17
+
18
+ ```yaml
19
+ databasePath: /home/operator/.dsh/assistant-proactive.sqlite
20
+ profiles:
21
+ - id: useful-report
22
+ mode: execute
23
+ expectedBenefit: 100
24
+ successPpm: 900000
25
+ executionCost: 10
26
+ interruptionCost: 5
27
+ possibleLoss: 5
28
+ minimumUtility: 1
29
+ mergeWindowMs: 2000
30
+ cooldownMs: 60000
31
+ rejectionCooldownMs: 3600000
32
+ quietHours:
33
+ timezone: Asia/Shanghai
34
+ startMinute: 1380
35
+ endMinute: 480
36
+ maxDecisionsPerGoal: 20
37
+ maxExecutionsPerGoal: 2
38
+ maxRemindersPerGoal: 0
39
+ - id: useful-draft
40
+ mode: prepare
41
+ preparation:
42
+ provider: configured-provider
43
+ model: configured-model
44
+ budgetId: preparation-runs
45
+ maxOutputTokens: 2048
46
+ timeoutMs: 120000
47
+ expectedBenefit: 100
48
+ successPpm: 900000
49
+ executionCost: 10
50
+ interruptionCost: 5
51
+ possibleLoss: 5
52
+ minimumUtility: 1
53
+ mergeWindowMs: 2000
54
+ cooldownMs: 60000
55
+ rejectionCooldownMs: 3600000
56
+ maxDecisionsPerGoal: 20
57
+ maxExecutionsPerGoal: 0
58
+ maxRemindersPerGoal: 0
59
+ ```
60
+
61
+ `useful-draft` 还需要在 Policy 的 `budgets` 中配置 `id: preparation-runs`、`metric: automation-runs`、例如 `limit: 5`、`periodMs: 86400000`、`scope: subject`,并为 `background:assistant-proactive/v1` 授予目标资源的 `prepare`。subject 预算固定统计 `assistant-proactive-v1-preparation`,不会随事件或目标变更另开额度。将 provider/model 替换为当前实际可用线路。
62
+
63
+ 对话示例:`为当前目标等待 report-file 触发器,使用 useful-report 机会策略,截止时间为一小时后。` 模型在当前主人请求中调用 `goal_wait_event`,显式提供 `opportunity_profile: useful-report`,以及实际目标 ID、native revision、触发器 ID 和毫秒时间戳。未知策略在暂停前被拒绝;省略策略保留 Goals 原有行为。
64
+
65
+ - `execute`:达到条件后返回执行候选;Goals 再次核验当前目标和授权,才能恢复。
66
+ - `remind`:向冻结的主人会话投递一条持久提醒,包含目标、事件标识与配置估值;不调用模型,不执行目标。要求 Delivery 支持 `enqueueOwnerNotification`、已配置主人路由,并为背景主体 `assistant-proactive/v1` 授予该会话消息的 `send` 权限。设置 `maxRemindersPerGoal` 为正数;重复处理同一决定复用相同投递键。Web 在原会话输入区显示“主动提醒”,重启后可继续读取;其他渠道通过已有适配器发送。
67
+ - `prepare`:默认只保存目标、事件标识与判断理由,供 `proactive_status` 查询;省略 `preparation` 时不生成模型草稿、不修改业务文件。显式配置 `preparation { provider, model, budgetId, maxOutputTokens, timeoutMs }` 后,才会排入持久准备队列并请求一次真实模型草稿。该草稿使用独立 Session、最多一次模型请求、`tools: []`、`maxToolCalls: 0`;准备运行只解析预设身份,不装载预设工具和 persona,原目标保持 `paused`;运行器禁止工具执行;提示要求只提供草稿、不声称完成或验收。模型文本本身不构成执行或验收证据。`proactive_status` 返回的草稿始终是 `verified: false` / `unverified-draft`,不是验收结果。目标继续等待后续事件,直到截止或主人控制。
68
+ - `proactive_feedback`:当前已认证主人可以接受或拒绝指定决定;拒绝为该目标/策略的后续决定设置持久冷却。反馈不会撤销已经执行的业务动作,也不会创建执行授权;对准备任务,拒绝会取消排队、请求在途运行停止并拒收迟到结果。
69
+
70
+ 收益值为操作者配置的同一抽象单位,公式为 `floor(expectedBenefit * successPpm / 1000000) - executionCost - interruptionCost - possibleLoss`。它们不是独立测得的成功概率、货币成本或真实效果。策略首次用于目标时冻结;改变部署配置不会放宽该目标已冻结的策略。预算统计覆盖同一主人和目标下的所有策略;执行预算仍由 Goals 单独强制执行。
71
+
72
+ 静默时段按 IANA 时区计算,支持跨午夜。合并等待和静默结束依靠 Goals 的周期核对;重启后继续读取原记录。事件内容不提供权限,也不作为新的目标指令。提醒投递有效期不晚于目标等待期限或下一个静默时段开始;未及时发送的提醒会失效,不跨静默时段补发。发送前及 Web 读取时重查原主人、绑定代次、路由和当前发送权限。Web 接受表示通知已可供读取,不表示用户已阅读。
73
+
74
+ ## 权限与数据
75
+
76
+ - 文件系统:保存配置数据库及 SQLite WAL/SHM;其中含主人身份范围、目标文本、事件标识、判断和反馈。另保存 `databasePath + '.preparations'` 及 WAL/SHM,其中含准备请求、模型草稿、有限 usage、独立 Session ID、状态和原因。数据库要求私有普通文件及不可由组/其他用户写入的父目录;不读取事件正文或业务文件。
77
+ - 网络:本插件本身不直接联网;显式开启准备后,`assistant-automations` 通过宿主已配置的模型 provider 发送草稿请求,目标文本和草稿会进入该请求和本地准备账本。子进程、凭据、浏览器、安装脚本:本插件均不直接使用。
78
+ - 工具:注册 `proactive_status` 和 `proactive_feedback`,均要求真实 Agent、Delivery 主人身份及 Policy;反馈还要求当前主人请求。Policy 资源为 `goal:proactive-opportunities`,动作分别为 `inspect`、`feedback`;通用工具审批仍由宿主处理。
79
+ - 执行:未配置 `preparation` 时本插件不执行模型调用、不恢复目标;提醒通过 Delivery 的有类型接口持久入队。配置准备后还要求 Automations、Goals、Delivery 和 Policy 都可用,且 `background:assistant-proactive/v1` 对该 goal 的 `prepare` 被允许。真正业务操作及消息发送的权限由 Goals、Delivery 与具体工具负责。
80
+ - 卸载释放数据库和工具;保留历史数据库,重新安装可继续读取。删除历史数据库会丢失本插件计数和反馈,不应在活跃目标期间清空。
81
+
82
+ ## 当前边界
83
+
84
+ 提醒为结构化文本;Web 读取继承固定主人会话能力,并重查当前发送权限,不另设独立的消息读取 Policy 动作。`prepare` 只有显式 `preparation` 配置才生成模型草稿。准备队列持久化:重启发现 `running` 记录时标为 `unknown` 且不自动重试;撤销授权、目标/来源变化、静默截止或目标截止、主人拒绝都会阻止排队或在途准备。已经写成的 draft 不会因后续 feedback 删除。草稿未经独立验收,不能作为原目标完成、业务事实或主动性效果的证明。当前提供配置估值的事件筛选,未证明长期主动性收益;长期观察可在交付后的使用中进行。
85
+
86
+ ## 兼容性
87
+
88
+ 遵循仓库 [兼容性基线](../../docs/compatibility.md)。可选服务缺失时不授予执行能力。
@@ -0,0 +1,3 @@
1
+ - insert:
2
+ - id: dsh-enhanced-assistant-proactive
3
+ name: '@dsh-enhanced/assistant-proactive'
@@ -0,0 +1,17 @@
1
+ import type { OpportunityDecision, OpportunityEvaluation, OpportunityInput, OpportunityProfile, OpportunityScope } from './types.js';
2
+ export declare function privatePath(path: string): void;
3
+ export declare function validateProfile(input: OpportunityProfile): Readonly<OpportunityProfile>;
4
+ /** Durable, owner-scoped opportunity accounting. Utility is an operator estimate, not a probability or a bill. */
5
+ export declare class OpportunityEngine {
6
+ #private;
7
+ constructor(path: string, profiles: readonly OpportunityProfile[], options?: {
8
+ now?: () => number;
9
+ });
10
+ evaluate(input: OpportunityInput): OpportunityEvaluation;
11
+ feedback(id: string, scopeInput: OpportunityScope, feedback: 'accepted' | 'rejected'): OpportunityDecision;
12
+ list(scopeInput: OpportunityScope, goalId?: string): readonly OpportunityDecision[];
13
+ profileSnapshot(scope: OpportunityScope, goalId: string, profileId: string): Readonly<OpportunityProfile>;
14
+ closeWait(waitId: string, scope: OpportunityScope, reason: 'expired' | 'cancelled'): void;
15
+ close(): void;
16
+ }
17
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AASpI,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAa9C;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAoBvF;AA2BD,kHAAkH;AAClH,qBAAa,iBAAiB;;gBAIhB,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,kBAAkB,EAAE,EAAE,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;KAAO;IAYvG,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,qBAAqB;IAgCxD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,mBAAmB;IAS1G,IAAI,CAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,mBAAmB,EAAE;IAKnF,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC,kBAAkB,CAAC;IAKzG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,IAAI;IAQzF,KAAK,IAAI,IAAI;CAsDd"}
package/lib/engine.js ADDED
@@ -0,0 +1,311 @@
1
+ import { closeSync, constants, lstatSync, mkdirSync, openSync, chmodSync } from 'node:fs';
2
+ import { dirname, isAbsolute } from 'node:path';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { DatabaseSync } from 'node:sqlite';
5
+ const max = 1_000_000_000;
6
+ const integer = (value, limit = max) => typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 && value <= limit;
7
+ const text = (value, limit = 4096) => typeof value === 'string' && value.length > 0 && value.length <= limit && !/[\s\p{Cc}]/u.test(value);
8
+ const content = (value, limit = 65_536) => typeof value === 'string' && value.length > 0 && value.length <= limit && !/[\p{Cc}]/u.test(value.replace(/[\r\n]/gu, ''));
9
+ const freeze = (value) => Object.freeze(JSON.parse(JSON.stringify(value)));
10
+ function fail(message = 'assistant-proactive: invalid opportunity input') { throw new Error(message); }
11
+ export function privatePath(path) {
12
+ if (!isAbsolute(path))
13
+ fail('assistant-proactive: databasePath must be absolute');
14
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
15
+ const directory = lstatSync(dirname(path));
16
+ if (!directory.isDirectory() || directory.isSymbolicLink() || (directory.mode & 0o022) !== 0)
17
+ fail('assistant-proactive: unsafe database directory');
18
+ try {
19
+ lstatSync(path);
20
+ }
21
+ catch (error) {
22
+ if (!error || typeof error !== 'object' || !('code' in error) || error.code !== 'ENOENT')
23
+ throw error;
24
+ closeSync(openSync(path, constants.O_CREAT | constants.O_EXCL | constants.O_RDWR | constants.O_NOFOLLOW, 0o600));
25
+ chmodSync(path, 0o600);
26
+ }
27
+ for (const item of [path, `${path}-wal`, `${path}-shm`]) {
28
+ try {
29
+ const stat = lstatSync(item);
30
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.nlink !== 1 || (stat.mode & 0o077) !== 0)
31
+ fail('assistant-proactive: unsafe database file');
32
+ }
33
+ catch (error) {
34
+ if (!error || typeof error !== 'object' || !('code' in error) || error.code !== 'ENOENT')
35
+ throw error;
36
+ }
37
+ }
38
+ }
39
+ export function validateProfile(input) {
40
+ if (!input || typeof input !== 'object' || Object.keys(input).some(key => !['preparation', 'id', 'mode', 'expectedBenefit', 'successPpm', 'executionCost', 'interruptionCost', 'possibleLoss', 'minimumUtility', 'mergeWindowMs', 'cooldownMs', 'rejectionCooldownMs', 'quietHours', 'maxDecisionsPerGoal', 'maxExecutionsPerGoal', 'maxRemindersPerGoal'].includes(key))
41
+ || !text(input.id) || !['prepare', 'remind', 'execute'].includes(input.mode) || input.successPpm > 1_000_000
42
+ || ![input.expectedBenefit, input.successPpm, input.executionCost, input.interruptionCost, input.possibleLoss, input.minimumUtility, input.mergeWindowMs, input.cooldownMs, input.rejectionCooldownMs, input.maxDecisionsPerGoal, input.maxExecutionsPerGoal, input.maxRemindersPerGoal].every(value => integer(value)))
43
+ fail('assistant-proactive: invalid profile');
44
+ if (input.quietHours !== undefined) {
45
+ const quiet = input.quietHours;
46
+ if (!quiet || typeof quiet !== 'object' || Object.keys(quiet).length !== 3 || typeof quiet.timezone !== 'string' || quiet.timezone.length > 128 || !integer(quiet.startMinute, 1439) || !integer(quiet.endMinute, 1439) || quiet.startMinute === quiet.endMinute)
47
+ fail('assistant-proactive: invalid quiet hours');
48
+ try {
49
+ Intl.DateTimeFormat('en-US', { timeZone: quiet.timezone }).format();
50
+ }
51
+ catch {
52
+ fail('assistant-proactive: invalid quiet hours');
53
+ }
54
+ }
55
+ if (input.preparation !== undefined) {
56
+ const p = input.preparation;
57
+ if (input.mode !== 'prepare' || !p || typeof p !== 'object' || Object.keys(p).length !== 5
58
+ || ![p.provider, p.model, p.budgetId].every(value => text(value, 512))
59
+ || !integer(p.maxOutputTokens, 32_768) || p.maxOutputTokens < 1
60
+ || !integer(p.timeoutMs, 300_000) || p.timeoutMs < 1_000)
61
+ fail('assistant-proactive: invalid preparation settings');
62
+ }
63
+ // BigInt makes the product exact before the bounded public number conversion.
64
+ const utility = BigInt(input.expectedBenefit) * BigInt(input.successPpm) / 1000000n - BigInt(input.executionCost) - BigInt(input.interruptionCost) - BigInt(input.possibleLoss);
65
+ if (utility < BigInt(-Number.MAX_SAFE_INTEGER) || utility > BigInt(Number.MAX_SAFE_INTEGER))
66
+ fail('assistant-proactive: unsafe utility');
67
+ return freeze({ ...input, ...(input.quietHours === undefined ? {} : { quietHours: { ...input.quietHours } }) });
68
+ }
69
+ function scopeKey(scope) {
70
+ if (!scope || typeof scope !== 'object' || Object.keys(scope).length !== 5 || ![scope.principalId, scope.principalRecordId, scope.preset].every(item => text(item, 4096)) || !content(scope.workspace, 4096) || !integer(scope.principalVersion) || scope.principalVersion < 1 || !scope.workspace.startsWith('/'))
71
+ fail();
72
+ return JSON.stringify({ principalId: scope.principalId, principalRecordId: scope.principalRecordId, principalVersion: scope.principalVersion, workspace: scope.workspace, preset: scope.preset });
73
+ }
74
+ function validateInput(input) {
75
+ if (!input || typeof input !== 'object' || ![input.waitId, input.profileId, input.goalId, input.sessionId, input.definitionDigest, input.nativeGoalId, input.ownerRouteId, input.sourceDigest, input.sourceId, input.event.id, input.event.digest].every(value => text(value)) || !content(input.objective)
76
+ || !integer(input.nativeRevision) || !integer(input.event.sequence) || !integer(input.event.occurredAt, Number.MAX_SAFE_INTEGER) || !integer(input.expiresAt, Number.MAX_SAFE_INTEGER))
77
+ fail();
78
+ scopeKey(input.scope);
79
+ }
80
+ function utility(profile) { return Number(BigInt(profile.expectedBenefit) * BigInt(profile.successPpm) / 1000000n - BigInt(profile.executionCost) - BigInt(profile.interruptionCost) - BigInt(profile.possibleLoss)); }
81
+ function minuteAt(now, timezone) {
82
+ const parts = new Intl.DateTimeFormat('en-US', { timeZone: timezone, hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }).formatToParts(new Date(now));
83
+ const get = (name) => Number(parts.find(part => part.type === name)?.value);
84
+ return get('hour') * 60 + get('minute');
85
+ }
86
+ function quiet(now, profile) {
87
+ const value = profile.quietHours;
88
+ if (!value)
89
+ return false;
90
+ const minute = minuteAt(now, value.timezone);
91
+ return value.startMinute < value.endMinute ? minute >= value.startMinute && minute < value.endMinute : minute >= value.startMinute || minute < value.endMinute;
92
+ }
93
+ function quietEndsAt(now, profile) {
94
+ for (let offset = 60_000; offset <= 25 * 60 * 60_000; offset += 60_000)
95
+ if (!quiet(now + offset, profile))
96
+ return now + offset;
97
+ fail('assistant-proactive: quiet hours did not end');
98
+ }
99
+ /** Durable, owner-scoped opportunity accounting. Utility is an operator estimate, not a probability or a bill. */
100
+ export class OpportunityEngine {
101
+ #db;
102
+ #profiles = new Map();
103
+ #now;
104
+ constructor(path, profiles, options = {}) {
105
+ if (!Array.isArray(profiles))
106
+ fail('assistant-proactive: profiles must be an array');
107
+ for (const item of profiles) {
108
+ const profile = validateProfile(item);
109
+ if (this.#profiles.has(profile.id))
110
+ fail('assistant-proactive: duplicate profile');
111
+ this.#profiles.set(profile.id, profile);
112
+ }
113
+ this.#now = options.now ?? Date.now;
114
+ if (path !== ':memory:')
115
+ privatePath(path);
116
+ this.#db = new DatabaseSync(path);
117
+ this.#db.exec(`PRAGMA journal_mode = WAL; PRAGMA synchronous = FULL; PRAGMA busy_timeout = 250;
118
+ CREATE TABLE IF NOT EXISTS proactive_profiles(scope_json TEXT NOT NULL, goal_id TEXT NOT NULL, profile_id TEXT NOT NULL, profile_json TEXT NOT NULL, PRIMARY KEY(scope_json, goal_id, profile_id)) STRICT, WITHOUT ROWID;
119
+ CREATE TABLE IF NOT EXISTS proactive_decisions(id TEXT PRIMARY KEY, scope_json TEXT NOT NULL, goal_id TEXT NOT NULL, profile_id TEXT NOT NULL, payload_json TEXT NOT NULL) STRICT;
120
+ CREATE TABLE IF NOT EXISTS proactive_events(scope_json TEXT NOT NULL, goal_id TEXT NOT NULL, profile_id TEXT NOT NULL, source_id TEXT NOT NULL, event_sequence INTEGER NOT NULL, event_digest TEXT NOT NULL, decision_id TEXT NOT NULL REFERENCES proactive_decisions(id), PRIMARY KEY(scope_json, goal_id, profile_id, source_id, event_sequence, event_digest)) STRICT, WITHOUT ROWID;
121
+ CREATE INDEX IF NOT EXISTS proactive_decisions_goal ON proactive_decisions(scope_json, goal_id, profile_id);`);
122
+ }
123
+ evaluate(input) {
124
+ this.#db.exec('BEGIN IMMEDIATE');
125
+ try {
126
+ const value = this.#evaluate(input);
127
+ this.#db.exec('COMMIT');
128
+ return value;
129
+ }
130
+ catch (error) {
131
+ try {
132
+ this.#db.exec('ROLLBACK');
133
+ }
134
+ catch { }
135
+ throw error;
136
+ }
137
+ }
138
+ #evaluate(input) {
139
+ validateInput(input);
140
+ const now = this.#now();
141
+ if (!integer(now, Number.MAX_SAFE_INTEGER))
142
+ fail('assistant-proactive: invalid clock');
143
+ const scope = scopeKey(input.scope);
144
+ const profile = this.#profile(scope, input.goalId, input.profileId);
145
+ const existing = this.#event(scope, input);
146
+ if (existing) {
147
+ if (!this.#sameIdentity(existing, input))
148
+ fail('assistant-proactive: event identity conflict');
149
+ if (now >= input.expiresAt)
150
+ return this.#terminal(existing, 'consume', 'suppress', 'expired', now);
151
+ const rejected = this.#latestRejected(scope, input.goalId, profile.id);
152
+ if (rejected && rejected.id !== existing.id && now < rejected.updatedAt + profile.rejectionCooldownMs)
153
+ return this.#terminal(existing, 'consume', 'suppress', 'rejected-cooldown', now);
154
+ if (existing.state === 'pending' && now >= existing.eligibleAt)
155
+ return this.#mature(scope, existing, input, profile, now);
156
+ return freeze({ disposition: existing.mode === 'execute' && existing.state === 'decided' ? 'execute' : existing.state === 'pending' ? 'defer' : 'consume', decision: existing });
157
+ }
158
+ if (this.#sequenceConflict(scope, input))
159
+ fail('assistant-proactive: event sequence conflict');
160
+ const latest = this.#latest(scope, input.goalId, profile.id, input.sourceId);
161
+ if (latest && input.event.sequence < latest.eventSequence)
162
+ return freeze({ disposition: 'consume', decision: latest });
163
+ if (now >= input.expiresAt)
164
+ return this.#save(scope, input, profile, 'consume', 'suppress', 'expired', now, now);
165
+ const rejected = this.#latestRejected(scope, input.goalId, profile.id);
166
+ if (rejected && now < rejected.updatedAt + profile.rejectionCooldownMs)
167
+ return this.#save(scope, input, profile, 'consume', 'suppress', 'rejected-cooldown', now, now);
168
+ if (latest?.state === 'pending' && this.#sameIdentity(latest, input) && now < latest.eligibleAt)
169
+ return this.#merge(scope, latest, input, now);
170
+ if (latest?.state === 'pending' && this.#sameIdentity(latest, input))
171
+ return this.#mature(scope, latest, input, profile, now);
172
+ const counts = this.#counts(scope, input.goalId);
173
+ if (counts.ledger >= profile.maxDecisionsPerGoal || profile.mode === 'execute' && counts.executions >= profile.maxExecutionsPerGoal || profile.mode === 'remind' && counts.reminders >= profile.maxRemindersPerGoal)
174
+ return this.#budgetProjection(input, profile, now);
175
+ if (quiet(now, profile))
176
+ return this.#save(scope, input, profile, 'defer', 'suppress', 'quiet-hours', now, quietEndsAt(now, profile));
177
+ if (utility(profile) < profile.minimumUtility)
178
+ return this.#save(scope, input, profile, 'consume', 'suppress', 'below-threshold', now, now);
179
+ if (latest && now < latest.updatedAt + profile.cooldownMs)
180
+ return this.#save(scope, input, profile, 'consume', 'suppress', 'cooldown', now, now);
181
+ if (profile.mergeWindowMs > 0)
182
+ return this.#save(scope, input, profile, 'defer', 'suppress', 'coalescing', now, now + profile.mergeWindowMs);
183
+ return this.#save(scope, input, profile, profile.mode === 'execute' ? 'execute' : 'consume', profile.mode, profile.mode === 'execute' ? 'execution' : profile.mode === 'remind' ? 'reminder' : 'prepared', now, now);
184
+ }
185
+ feedback(id, scopeInput, feedback) {
186
+ this.#db.exec('BEGIN IMMEDIATE');
187
+ try {
188
+ if (!text(id) || !['accepted', 'rejected'].includes(feedback))
189
+ fail();
190
+ const scope = scopeKey(scopeInput);
191
+ const found = this.#decision(id);
192
+ if (!found || scopeKey(found.scope) !== scope || found.state !== 'decided')
193
+ fail('assistant-proactive: opportunity decision is unavailable');
194
+ const next = freeze({ ...found, state: 'closed', feedback, updatedAt: this.#now() });
195
+ this.#put(next);
196
+ this.#db.exec('COMMIT');
197
+ return next;
198
+ }
199
+ catch (error) {
200
+ try {
201
+ this.#db.exec('ROLLBACK');
202
+ }
203
+ catch { }
204
+ throw error;
205
+ }
206
+ }
207
+ list(scopeInput, goalId) {
208
+ const scope = scopeKey(scopeInput);
209
+ if (goalId !== undefined && !text(goalId))
210
+ fail();
211
+ const rows = this.#db.prepare(`SELECT payload_json FROM proactive_decisions WHERE scope_json = ? ${goalId === undefined ? '' : 'AND goal_id = ?'} ORDER BY json_extract(payload_json, '$.firstObservedAt'), id`).all(...(goalId === undefined ? [scope] : [scope, goalId]));
212
+ return freeze(rows.map(row => this.#parse(row.payload_json)));
213
+ }
214
+ profileSnapshot(scope, goalId, profileId) {
215
+ const row = this.#db.prepare('SELECT profile_json FROM proactive_profiles WHERE scope_json = ? AND goal_id = ? AND profile_id = ?').get(scopeKey(scope), goalId, profileId);
216
+ if (!row)
217
+ fail('assistant-proactive: frozen goal profile unavailable');
218
+ return validateProfile(JSON.parse(row.profile_json));
219
+ }
220
+ closeWait(waitId, scope, reason) {
221
+ if (!text(waitId) || !['expired', 'cancelled'].includes(reason))
222
+ fail();
223
+ this.#db.exec('BEGIN IMMEDIATE');
224
+ try {
225
+ for (const decision of this.list(scope))
226
+ if (decision.waitId === waitId && decision.state === 'pending')
227
+ this.#terminal(decision, 'consume', 'suppress', reason, this.#now());
228
+ this.#db.exec('COMMIT');
229
+ }
230
+ catch (error) {
231
+ this.#db.exec('ROLLBACK');
232
+ throw error;
233
+ }
234
+ }
235
+ close() { this.#db.close(); }
236
+ #profile(scope, goalId, profileId) {
237
+ const row = this.#db.prepare('SELECT profile_json FROM proactive_profiles WHERE scope_json = ? AND goal_id = ? AND profile_id = ?').get(scope, goalId, profileId);
238
+ if (row)
239
+ return validateProfile(JSON.parse(row.profile_json));
240
+ const configured = this.#profiles.get(profileId);
241
+ if (!configured)
242
+ fail('assistant-proactive: unknown profile');
243
+ const prior = this.#db.prepare('SELECT profile_json FROM proactive_profiles WHERE scope_json = ? AND goal_id = ?').all(scope, goalId);
244
+ const bounds = prior.map(item => validateProfile(JSON.parse(item.profile_json)));
245
+ const profile = { ...configured, maxDecisionsPerGoal: Math.min(configured.maxDecisionsPerGoal, ...bounds.map(item => item.maxDecisionsPerGoal)), maxExecutionsPerGoal: Math.min(configured.maxExecutionsPerGoal, ...bounds.map(item => item.maxExecutionsPerGoal)), maxRemindersPerGoal: Math.min(configured.maxRemindersPerGoal, ...bounds.map(item => item.maxRemindersPerGoal)) };
246
+ this.#db.prepare('INSERT INTO proactive_profiles VALUES (?, ?, ?, ?)').run(scope, goalId, profileId, JSON.stringify(profile));
247
+ return profile;
248
+ }
249
+ #parse(value) { try {
250
+ return freeze(JSON.parse(value));
251
+ }
252
+ catch {
253
+ fail('assistant-proactive: corrupt database');
254
+ } }
255
+ #decision(id) { const row = this.#db.prepare('SELECT payload_json FROM proactive_decisions WHERE id = ?').get(id); return row ? this.#parse(row.payload_json) : undefined; }
256
+ #event(scope, input) { const row = this.#db.prepare('SELECT decision_id FROM proactive_events WHERE scope_json = ? AND goal_id = ? AND profile_id = ? AND source_id = ? AND event_sequence = ? AND event_digest = ?').get(scope, input.goalId, input.profileId, input.sourceId, input.event.sequence, input.event.digest); return row ? this.#decision(row.decision_id) : undefined; }
257
+ #sequenceConflict(scope, input) { return this.#db.prepare('SELECT 1 AS found FROM proactive_events WHERE scope_json = ? AND goal_id = ? AND profile_id = ? AND source_id = ? AND event_sequence = ? LIMIT 1').get(scope, input.goalId, input.profileId, input.sourceId, input.event.sequence) !== undefined; }
258
+ #latest(scope, goalId, profileId, sourceId) { const row = this.#db.prepare("SELECT payload_json FROM proactive_decisions WHERE scope_json = ? AND goal_id = ? AND profile_id = ? AND json_extract(payload_json, '$.sourceId') = ? ORDER BY json_extract(payload_json, '$.eventSequence') DESC, json_extract(payload_json, '$.updatedAt') DESC LIMIT 1").get(scope, goalId, profileId, sourceId); return row ? this.#parse(row.payload_json) : undefined; }
259
+ #latestRejected(scope, goalId, profileId) { const row = this.#db.prepare("SELECT payload_json FROM proactive_decisions WHERE scope_json = ? AND goal_id = ? AND profile_id = ? AND json_extract(payload_json, '$.feedback') = 'rejected' ORDER BY json_extract(payload_json, '$.updatedAt') DESC LIMIT 1").get(scope, goalId, profileId); return row ? this.#parse(row.payload_json) : undefined; }
260
+ #counts(scope, goalId) {
261
+ const rows = this.list(JSON.parse(scope), goalId);
262
+ return { ledger: rows.length, executions: rows.filter(value => value.mode === 'execute').length, reminders: rows.filter(value => value.mode === 'remind').length };
263
+ }
264
+ #merge(scope, existing, input, now) {
265
+ const next = input.event.sequence > existing.eventSequence ? freeze({ ...existing, waitId: input.waitId, sessionId: input.sessionId, ownerRouteId: input.ownerRouteId, sourceId: input.sourceId, eventId: input.event.id, eventSequence: input.event.sequence, eventDigest: input.event.digest, sourceDigest: input.sourceDigest, objective: input.objective, definitionDigest: input.definitionDigest, nativeGoalId: input.nativeGoalId, nativeRevision: input.nativeRevision, updatedAt: now, observations: existing.observations + 1 }) : freeze({ ...existing, updatedAt: now, observations: existing.observations + 1 });
266
+ this.#put(next);
267
+ this.#link(scope, input, next.id);
268
+ return freeze({ disposition: 'defer', decision: next });
269
+ }
270
+ #mature(scope, existing, input, profile, now) {
271
+ if (now >= input.expiresAt)
272
+ return this.#terminal(existing, 'consume', 'suppress', 'expired', now);
273
+ const rejected = this.#latestRejected(scope, input.goalId, profile.id);
274
+ if (rejected && rejected.id !== existing.id && now < rejected.updatedAt + profile.rejectionCooldownMs)
275
+ return this.#terminal(existing, 'consume', 'suppress', 'rejected-cooldown', now);
276
+ if (quiet(now, profile)) {
277
+ const delayed = freeze({ ...existing, reason: 'quiet-hours', updatedAt: now, eligibleAt: quietEndsAt(now, profile) });
278
+ this.#put(delayed);
279
+ return freeze({ disposition: 'defer', decision: delayed });
280
+ }
281
+ if (utility(profile) < profile.minimumUtility) {
282
+ const suppressed = freeze({ ...existing, state: 'decided', mode: 'suppress', reason: 'below-threshold', updatedAt: now });
283
+ this.#put(suppressed);
284
+ return freeze({ disposition: 'consume', decision: suppressed });
285
+ }
286
+ const counts = this.#counts(scope, input.goalId);
287
+ const budget = counts.ledger > profile.maxDecisionsPerGoal || profile.mode === 'execute' && counts.executions >= profile.maxExecutionsPerGoal || profile.mode === 'remind' && counts.reminders >= profile.maxRemindersPerGoal;
288
+ const mode = budget ? 'suppress' : profile.mode;
289
+ const reason = budget ? 'budget' : profile.mode === 'execute' ? 'execution' : profile.mode === 'remind' ? 'reminder' : 'prepared';
290
+ const next = freeze({ ...existing, ...(input.event.sequence > existing.eventSequence ? { eventId: input.event.id, eventSequence: input.event.sequence, eventDigest: input.event.digest, observations: existing.observations + 1 } : {}), mode, state: 'decided', reason, updatedAt: now });
291
+ this.#put(next);
292
+ this.#link(scope, input, next.id);
293
+ return freeze({ disposition: mode === 'execute' ? 'execute' : 'consume', decision: next });
294
+ }
295
+ #save(scope, input, profile, disposition, mode, reason, now, eligibleAt) {
296
+ if (this.#counts(scope, input.goalId).ledger >= profile.maxDecisionsPerGoal)
297
+ return this.#budgetProjection(input, profile, now);
298
+ const decision = freeze({ id: `opportunity-${randomUUID()}`, waitId: input.waitId, profileId: profile.id, scope: input.scope, goalId: input.goalId, sessionId: input.sessionId, ownerRouteId: input.ownerRouteId, sourceId: input.sourceId, eventId: input.event.id, eventSequence: input.event.sequence, eventDigest: input.event.digest, sourceDigest: input.sourceDigest, objective: input.objective, definitionDigest: input.definitionDigest, nativeGoalId: input.nativeGoalId, nativeRevision: input.nativeRevision, mode, state: eligibleAt > now ? 'pending' : 'decided', reason, utility: utility(profile), firstObservedAt: now, updatedAt: now, eligibleAt, expiresAt: input.expiresAt, observations: 1 });
299
+ this.#put(decision);
300
+ this.#link(scope, input, decision.id);
301
+ return freeze({ disposition, decision });
302
+ }
303
+ #put(decision) { this.#db.prepare('INSERT INTO proactive_decisions(id, scope_json, goal_id, profile_id, payload_json) VALUES (?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET payload_json = excluded.payload_json').run(decision.id, scopeKey(decision.scope), decision.goalId, decision.profileId, JSON.stringify(decision)); }
304
+ #link(scope, input, id) { this.#db.prepare('INSERT OR IGNORE INTO proactive_events VALUES (?, ?, ?, ?, ?, ?, ?)').run(scope, input.goalId, input.profileId, input.sourceId, input.event.sequence, input.event.digest, id); }
305
+ #terminal(existing, disposition, mode, reason, now) { const next = freeze({ ...existing, mode, reason, state: 'decided', updatedAt: now }); if (existing.state === 'pending')
306
+ this.#put(next); return freeze({ disposition, decision: next }); }
307
+ #budgetProjection(input, profile, now) { return freeze({ disposition: 'consume', decision: freeze({ id: `opportunity-budget-${input.event.digest}`, waitId: input.waitId, profileId: profile.id, scope: input.scope, goalId: input.goalId, sessionId: input.sessionId, ownerRouteId: input.ownerRouteId, sourceId: input.sourceId, eventId: input.event.id, eventSequence: input.event.sequence, eventDigest: input.event.digest, sourceDigest: input.sourceDigest, objective: input.objective, definitionDigest: input.definitionDigest, nativeGoalId: input.nativeGoalId, nativeRevision: input.nativeRevision, mode: 'suppress', state: 'decided', reason: 'budget', utility: utility(profile), firstObservedAt: now, updatedAt: now, eligibleAt: now, expiresAt: input.expiresAt, observations: 0 }) }); }
308
+ #sameIdentity(value, input) { return value.waitId === input.waitId && value.sessionId === input.sessionId && value.nativeGoalId === input.nativeGoalId && value.nativeRevision === input.nativeRevision && value.ownerRouteId === input.ownerRouteId && value.sourceId === input.sourceId && value.sourceDigest === input.sourceDigest && value.definitionDigest === input.definitionDigest && value.objective === input.objective && value.expiresAt === input.expiresAt && value.goalId === input.goalId && sameScope(value.scope, input.scope); }
309
+ }
310
+ function sameScope(left, right) { return scopeKey(left) === scopeKey(right); }
311
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,80 @@
1
+ import { Context, Service } from '@deepseek-ai/cordis';
2
+ import type { Agent } from '@deepseek-ai/dsh-agent';
3
+ import Schema from '@deepseek-ai/schemastery';
4
+ import { OpportunityEngine, validateProfile } from './engine.js';
5
+ import type { OpportunityInput, OpportunityProfile, OpportunityScope } from './types.js';
6
+ import { version } from './version.js';
7
+ export declare const name = "dsh-enhanced-assistant-proactive";
8
+ export { version, OpportunityEngine, validateProfile };
9
+ export type * from './types.js';
10
+ export interface Config {
11
+ databasePath?: string;
12
+ profiles?: OpportunityProfile[];
13
+ }
14
+ export declare const Config: Schema<Config>;
15
+ declare module '@deepseek-ai/cordis' {
16
+ interface Context {
17
+ assistantProactive: AssistantProactiveService;
18
+ }
19
+ }
20
+ /** This optional decision gate cannot resume a goal or grant tool/route authority. */
21
+ export declare class AssistantProactiveService extends Service {
22
+ #private;
23
+ static Config: Schema<Config>;
24
+ constructor(ctx: Context, config?: Config);
25
+ assertProfile: (profileId: string) => void;
26
+ evaluate: (input: OpportunityInput) => import("./types.js").OpportunityEvaluation;
27
+ closeWait: (waitId: string, scope: OpportunityScope, reason: "expired" | "cancelled") => void;
28
+ inspect: (agent: Agent | undefined, goalId?: string) => (import("./types.js").OpportunityDecision | {
29
+ preparation: {
30
+ output?: string;
31
+ sessionId?: string;
32
+ usage?: Readonly<Record<string, unknown>>;
33
+ diagnostic?: Readonly<{
34
+ failureClass: string;
35
+ failurePhase: string;
36
+ failureCode: string;
37
+ }>;
38
+ verified?: boolean;
39
+ state: "cancelled" | "unknown" | "queued" | "running" | "draft" | "failed";
40
+ reason: string | undefined;
41
+ updatedAt: number;
42
+ };
43
+ id: string;
44
+ waitId: string;
45
+ profileId: string;
46
+ scope: OpportunityScope;
47
+ goalId: string;
48
+ sessionId: string;
49
+ ownerRouteId: string;
50
+ sourceId: string;
51
+ eventId: string;
52
+ eventSequence: number;
53
+ eventDigest: string;
54
+ sourceDigest: string;
55
+ objective: string;
56
+ definitionDigest: string;
57
+ nativeGoalId: string;
58
+ nativeRevision: number;
59
+ mode: "prepare" | "remind" | "execute" | "suppress";
60
+ state: "pending" | "decided" | "closed";
61
+ reason: import("./types.js").OpportunityReason;
62
+ utility: number;
63
+ firstObservedAt: number;
64
+ updatedAt: number;
65
+ eligibleAt: number;
66
+ expiresAt: number;
67
+ observations: number;
68
+ feedback?: "accepted" | "rejected";
69
+ })[];
70
+ reconcilePreparations: () => Promise<void>;
71
+ feedback: (agent: Agent | undefined, id: string, feedback: "accepted" | "rejected") => import("./types.js").OpportunityDecision;
72
+ }
73
+ export declare function apply(ctx: Context, config?: Config): void;
74
+ declare const _default: {
75
+ name: string;
76
+ Config: Schema<Config>;
77
+ apply: typeof apply;
78
+ };
79
+ export default _default;
80
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAInD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAI7C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAIxF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,eAAO,MAAM,IAAI,qCAAqC,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAA;AACtD,mBAAmB,YAAY,CAAA;AAE/B,MAAM,WAAW,MAAM;IAAG,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAAE;AAElF,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAWhC,CAAA;AACF,OAAO,QAAQ,qBAAqB,CAAC;IAAE,UAAU,OAAO;QAAG,kBAAkB,EAAE,yBAAyB,CAAA;KAAE;CAAE;AAE5G,sFAAsF;AACtF,qBAAa,yBAA0B,SAAQ,OAAO;;IACpD,MAAM,CAAC,MAAM,iBAAS;gBAKV,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW;IA8B7C,aAAa,GAAI,WAAW,MAAM,KAAG,IAAI,CAIxC;IACD,QAAQ,GAAI,OAAO,gBAAgB,gDAmBlC;IAKD,SAAS,GAAI,QAAQ,MAAM,EAAE,OAAO,gBAAgB,EAAE,QAAQ,SAAS,GAAG,WAAW,KAAG,IAAI,CAI3F;IAgBD,OAAO,GAAI,OAAO,KAAK,GAAG,SAAS,EAAE,SAAS,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAMnD;IACD,qBAAqB,QAAO,OAAO,CAAC,IAAI,CAAC,CAA6B;IACtE,QAAQ,GAAI,OAAO,KAAK,GAAG,SAAS,EAAE,IAAI,MAAM,EAAE,UAAU,UAAU,GAAG,UAAU,8CAA0K;CAC9P;AACD,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW,GAAG,IAAI,CAA+C;;;;;;AAC7G,wBAAsC"}