@dsh-enhanced/assistant-proactive 0.1.65 → 0.1.67

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 CHANGED
@@ -56,16 +56,40 @@ profiles:
56
56
  maxDecisionsPerGoal: 20
57
57
  maxExecutionsPerGoal: 0
58
58
  maxRemindersPerGoal: 0
59
+ # 可选(默认关闭):把 WorkItems 的 inferred 入站文本交给一个冻结的
60
+ # provider/model 判断。规则即 Host 的一次性授权;ceiling 是模型只能下调、
61
+ # 不能上调的上限。显式开启前本插件不读取 llm/WorkItems 服务。
62
+ intakeEvaluation:
63
+ enabled: true
64
+ rules:
65
+ - ruleId: triage
66
+ ceiling: digest
67
+ provider: configured-provider
68
+ model: configured-model
69
+ maxCallsPerHour: 20
70
+ timeoutMs: 30000
71
+ maxConsecutiveFailures: 3
59
72
  ```
60
73
 
61
74
  `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
75
 
76
+ ### 主动 intake 判断(`intakeEvaluation`,默认关闭)
77
+
78
+ 本插件可以为 `assistant-work-items` 的 inferred intake 评估提供生产模型判断者。默认关闭:不配置(或 `enabled: false`)时不读取 `llm`/`assistantWorkItems` 服务、不注册、不新增任何行为。显式开启后,只有本插件、`llm` 服务和已启用 `intakeLedger.evaluation` 的 `assistant-work-items` 同时就绪时才注册;任一缺失时插件照常加载、保持不注册,并由 `intakeEvaluationHealth()` 报出原因。
79
+
80
+ - 配置即授权:`rules[]` 的 `ruleId` 与 `ceiling`(`ignore | digest | notify | accept`,work-items 协议 1 的枚举)固定在这里;模型只能把等级下调到 ceiling 或更低,不能上调。`provider`/`model` 在运行期冻结。`maxCallsPerHour`、`timeoutMs`、`maxConsecutiveFailures` 约束本地产者:预算耗尽、连续失败断路和超时都会失败关闭(抛错),由 WorkItems 记录 `unavailable` 并按其自身退避/上限重试。
81
+ - 输入输出契约:一次调用只携带一个规则的 `ruleId`、其 ceiling 与已认证的入站正文;`tools: []`、输出 token 与流字节有界,模型只能返回 `{"ruleId","level","quotes"}`。规则 `ruleId` 必须与请求一致,`quotes` 必须是正文的精确子串(最多 4 段、每段最多 280 个 UTF-16 单元);非严格 JSON、额外字段、非子串引文、非 ignore 却无引文都会抛错,WorkItems 队列还会再校验一次引文与 ceiling。
82
+ - 生命周期:注册随 `llm`/`assistantWorkItems` 服务代次绑定,服务替换会注销并重新注册,插件卸载时释放;不新增 Loop 或 timer,评估只由 WorkItems 的入站路径与原生 scheduler wake 驱动。
83
+ - 版本与重排:`policy().version` 是规范化规则加 provider/model 的 SHA-256(`v1-…`),仅调整规则顺序不改变版本;规则或 provider/model 改变必然换版本,使 WorkItems 按新版本重排已持有的文本并追加新结果行(旧行只追加、不覆盖)。
84
+ - 只读评估:本插件只提供判断者,不写 intake 工作项账本、不准入、不派发、不投递。WorkItems 仍按自身配置处于 observe;把 accept 结果准入为工作项需要 WorkItems 自己的 `intakeLedger.evaluation.admit` 显式授权。审计证据在 WorkItems 数据库:`work_item_intake_evaluation` 行只含等级、原因与引文的 UTF-16 偏移,不含正文。
85
+ - 只读健康:`assistantProactive.intakeEvaluationHealth()` 返回 `{ enabled, registered, policyVersion, lastError, readiness: disabled|unavailable|registered|degraded, provider, model, consecutiveFailures, callsInWindow, budgetExhausted }`,供 doctor/运维展示;不授予任何权限,组合展示时还可读 `assistantWorkItems.intakeEvaluationHealth()`。
86
+
63
87
  对话示例:`为当前目标等待 report-file 触发器,使用 useful-report 机会策略,截止时间为一小时后。` 模型在当前主人请求中调用 `goal_wait_event`,显式提供 `opportunity_profile: useful-report`,以及实际目标 ID、native revision、触发器 ID 和毫秒时间戳。未知策略在暂停前被拒绝;省略策略保留 Goals 原有行为。
64
88
 
65
89
  启用 Goals 事件等待后,主人目标上下文会列出当前可用策略的 ID、模式和每目标上限,供选择 `opportunity_profile`;不展示准备模型、供应商或预算标识。空策略配置不提供主动动作。列表只读且不授予等待、提醒、模型或执行权限;目标首次使用策略时仍按原逻辑冻结,执行时再次核验主人及权限。已认证主人可用 `proactive_status` 只读查看决定,无需对每次合法查询重复工具审批;`proactive_feedback` 仍需当前主人回合及原有审批。
66
90
 
67
91
  - `execute`:达到条件后返回执行候选;Goals 再次核验当前目标和授权,才能恢复。
68
- - `remind`:向冻结的主人会话投递一条持久提醒,包含目标、事件标识与配置估值;不调用模型,不执行目标。要求 Delivery 支持 `enqueueOwnerNotification`、已配置主人路由,并为背景主体 `assistant-proactive/v1` 授予该会话消息的 `send` 权限。设置 `maxRemindersPerGoal` 为正数;重复处理同一决定复用相同投递键。Web 在原会话输入区显示“主动提醒”,重启后可继续读取;其他渠道通过已有适配器发送。
92
+ - `remind`:向冻结的主人会话投递一条持久提醒,正文只含主人自己的目标摘录(最多 200 个字素)和固定说明,不含配置估值、净收益、来源/事件/机会 ID 或事件元数据;这些仍可经 `proactive_status` 查看。不调用模型,不执行目标。同一主人、目标和来源(`sourceId`)只提醒一次:后续事件若来源观测内容(Goals 传入的事件 `observation.digest`)、正文、目标 revision/definition 与来源配置都未变化,记为 `suppress`/`unchanged` 并不再投递,不占用提醒预算;同一来源的观测内容变化仍会提醒。未提供观测摘要的旧 Goals 不做此去重。去重记录与决定在同一事务内持久化,重启后保持;若决定后、交给 Delivery 前发送窗口已关闭(例如重试落入静默时段),该记录被撤销,下一同内容事件仍可提醒。Delivery 接受后又过期或失败不会撤销去重。目标 revision 或来源配置变化、或主人对上次提醒给出 `proactive_feedback`(接受;拒绝另受拒绝冷却约束)后,才可再次提醒。提醒以 attention 目的 `result` 投递(无工作项或结构化问题,不适用 `attention`);旧 Delivery 忽略该字段。要求 Delivery 支持 `enqueueOwnerNotification`、已配置主人路由,并为背景主体 `assistant-proactive/v1` 授予该会话消息的 `send` 权限。设置 `maxRemindersPerGoal` 为正数;重复处理同一决定复用相同投递键。Web 在原会话输入区显示“主动提醒”,重启后可继续读取;其他渠道通过已有适配器发送。
69
93
  - `prepare`:默认只保存目标、事件标识与判断理由,供 `proactive_status` 查询;省略 `preparation` 时不生成模型草稿、不修改业务文件。显式配置 `preparation { provider, model, budgetId, maxOutputTokens, timeoutMs }` 后,才会排入持久准备队列并请求一次真实模型草稿。该草稿使用独立 Session、最多一次模型请求、`tools: []`、`maxToolCalls: 0`;准备运行只解析预设身份,不装载预设工具和 persona,原目标保持 `paused`;运行器禁止工具执行;提示要求只提供草稿、不声称完成或验收。模型文本本身不构成执行或验收证据。`proactive_status` 返回的草稿始终是 `verified: false` / `unverified-draft`,不是验收结果。目标继续等待后续事件,直到截止或主人控制。
70
94
  - `proactive_feedback`:当前已认证主人可以接受或拒绝指定决定;拒绝为该目标/策略的后续决定设置持久冷却。反馈不会撤销已经执行的业务动作,也不会创建执行授权;对准备任务,拒绝会取消排队、请求在途运行停止并拒收迟到结果。
71
95
 
@@ -73,18 +97,20 @@ profiles:
73
97
 
74
98
  静默时段按 IANA 时区计算,支持跨午夜。合并等待和静默结束依靠 Goals 的周期核对;重启后继续读取原记录。事件内容不提供权限,也不作为新的目标指令。提醒投递有效期不晚于目标等待期限或下一个静默时段开始;未及时发送的提醒会失效,不跨静默时段补发。发送前及 Web 读取时重查原主人、绑定代次、路由和当前发送权限。Web 接受表示通知已可供读取,不表示用户已阅读。
75
99
 
100
+ `remind` 策略可选读取 Evaluation 的注意力版本(WP22 切片 2):每次评估时按目标 scope 的 workspace/preset 与 cohort `owner-notification` / `assistant-proactive/v1` 调用 `currentAttentionTuning`,只接受界内、非默认、带 digest 的版本,并仅在本次评估叠加到冻结策略上(不写回冻结快照):提高 `interruptionCost` 与 `minimumUtility`、在已配置静默时段两侧延长(未配置静默时段则不变)、或以 `attention-muted` 静默消费提醒。决定记录 `attentionTuning: { version, digest }`;提醒文本与有效期使用叠加后的估值和静默时段。Evaluation 缺席、开关关闭、返回版本 0、抛错或格式不符时不叠加,行为与未调参完全一致。`prepare` 与 `execute` 策略不受影响。
101
+
76
102
  ## 权限与数据
77
103
 
78
- - 文件系统:保存配置数据库及 SQLite WAL/SHM;其中含主人身份范围、目标文本、事件标识、判断和反馈。另保存 `databasePath + '.preparations'` 及 WAL/SHM,其中含准备请求、模型草稿、有限 usage、独立 Session ID、状态和原因。数据库要求私有普通文件及不可由组/其他用户写入的父目录;不读取事件正文或业务文件。
79
- - 网络:本插件本身不直接联网;显式开启准备后,`assistant-automations` 通过宿主已配置的模型 provider 发送草稿请求,目标文本和草稿会进入该请求和本地准备账本。子进程、凭据、浏览器、安装脚本:本插件均不直接使用。
104
+ - 文件系统:保存配置数据库及 SQLite WAL/SHM;其中含主人身份范围、目标文本、事件标识、判断、反馈,以及按目标与来源记录的最后一次提醒内容摘要及是否已交给 Delivery(`proactive_reminders`,旧库启动时自动增建,不改动既有表)。另保存 `databasePath + '.preparations'` 及 WAL/SHM,其中含准备请求、模型草稿、有限 usage、独立 Session ID、状态和原因。数据库要求私有普通文件及不可由组/其他用户写入的父目录;不读取事件正文或业务文件。显式开启 `intakeEvaluation` 后,已认证的入站正文只在本插件与 WorkItems 进程内持有并调用模型,不写入本插件数据库;评估结果与引文偏移由 WorkItems 自己的数据库保存。
105
+ - 网络:本插件本身不直接联网;显式开启准备后,`assistant-automations` 通过宿主已配置的模型 provider 发送草稿请求,目标文本和草稿会进入该请求和本地准备账本。显式开启 `intakeEvaluation` 后,本插件只通过宿主 `llm` 服务调用配置行里冻结的 provider/model,每次请求携带一个规则的 ID、ceiling 和已认证入站正文(不回传其它工作项、主人身份或工具)。子进程、凭据、浏览器、安装脚本:本插件均不直接使用。
80
106
  - 工具:注册 `proactive_status` 和 `proactive_feedback`,均要求真实 Agent、Delivery 主人身份及 Policy;反馈还要求当前主人请求。Policy 资源为 `goal:proactive-opportunities`,动作分别为 `inspect`、`feedback`;安装配套 Policy 后,仅严格匹配的只读 `proactive_status` 可按当前 owner 和 Policy 预授权,其他调用仍由宿主审批。
81
- - 执行:未配置 `preparation` 时本插件不执行模型调用、不恢复目标;提醒通过 Delivery 的有类型接口持久入队。配置准备后还要求 Automations、Goals、Delivery 和 Policy 都可用,且 `background:assistant-proactive/v1` 对该 goal 的 `prepare` 被允许。真正业务操作及消息发送的权限由 Goals、Delivery 与具体工具负责。
107
+ - 执行:未配置 `preparation` 且未开启 `intakeEvaluation` 时本插件不执行模型调用、不恢复目标;提醒通过 Delivery 的有类型接口持久入队。配置准备后还要求 Automations、Goals、Delivery 和 Policy 都可用,且 `background:assistant-proactive/v1` 对该 goal 的 `prepare` 被允许。开启 `intakeEvaluation` 只新增一次 allowlisted 且未点名的 inferred 入站文本判断,不写工作项、不准入、不派发、不恢复目标、不发送消息;accept 结果是否变成工作项仍由 WorkItems 自身的 `intakeLedger.evaluation.admit` 授权。真正业务操作及消息发送的权限由 Goals、Delivery 与具体工具负责。
82
108
  - 卸载释放数据库和工具;保留历史数据库,重新安装可继续读取。删除历史数据库会丢失本插件计数和反馈,不应在活跃目标期间清空。
83
109
 
84
110
  ## 当前边界
85
111
 
86
- 提醒为结构化文本;Web 读取继承固定主人会话能力,并重查当前发送权限,不另设独立的消息读取 Policy 动作。`prepare` 只有显式 `preparation` 配置才生成模型草稿。准备队列持久化:重启发现 `running` 记录时标为 `unknown` 且不自动重试;撤销授权、目标/来源变化、静默截止或目标截止、主人拒绝都会阻止排队或在途准备。已经写成的 draft 不会因后续 feedback 删除。草稿未经独立验收,不能作为原目标完成、业务事实或主动性效果的证明。当前提供配置估值的事件筛选,未证明长期主动性收益;长期观察可在交付后的使用中进行。
112
+ 提醒为结构化文本;Web 读取继承固定主人会话能力,并重查当前发送权限,不另设独立的消息读取 Policy 动作。`prepare` 只有显式 `preparation` 配置才生成模型草稿。准备队列持久化:重启发现 `running` 记录时标为 `unknown` 且不自动重试;撤销授权、目标/来源变化、静默截止或目标截止、主人拒绝都会阻止排队或在途准备。已经写成的 draft 不会因后续 feedback 删除。草稿未经独立验收,不能作为原目标完成、业务事实或主动性效果的证明。`intakeEvaluation` 默认关闭;开启后只评估注册之后到达的 inferred 行(入站正文从不落盘,重启不会重放历史正文),评估本身是 observe 证据,不是工作项准入、执行成功或主动性收益的证明。当前提供配置估值的事件筛选,未证明长期主动性收益;长期观察可在交付后的使用中进行。
87
113
 
88
114
  ## 兼容性
89
115
 
90
- 遵循仓库 [兼容性基线](../../docs/compatibility.md)。可选服务缺失时不授予执行能力。
116
+ 遵循仓库 [兼容性基线](../../docs/compatibility.md)。可选服务缺失时不授予执行能力。`intakeEvaluation` 需要的宿主 `llm` 与 `@dsh-enhanced/assistant-work-items`(`intakeLedger.evaluation.enabled: true`)都是可选 peer;缺失或未启用时本插件不注册评估者、行为与未配置一致。
@@ -0,0 +1,31 @@
1
+ import type { OpportunityProfile } from './types.js';
2
+ /** Evaluation cohort for proactive reminders (WP22 slice 2). */
3
+ export declare const proactiveAttentionCohort: Readonly<{
4
+ lane: "owner-notification";
5
+ sourceId: "assistant-proactive/v1";
6
+ }>;
7
+ /** A verified, tighten-only overlay published by assistant-evaluation. */
8
+ export interface AttentionOverlay {
9
+ version: number;
10
+ digest: string;
11
+ parameters: {
12
+ interruptionCostDelta: number;
13
+ minimumUtilityDelta: number;
14
+ quietExtensionMinutes: number;
15
+ muted: boolean;
16
+ };
17
+ }
18
+ /**
19
+ * Accepts only a well-formed, non-default overlay inside the fixed bounds.
20
+ * Anything else (missing service, version 0, malformed) means no overlay, which
21
+ * is byte-for-byte the untuned behavior.
22
+ */
23
+ export declare function attentionOverlay(value: unknown): AttentionOverlay | undefined;
24
+ /**
25
+ * Applies an overlay to a reminder profile. Every effect only makes a reminder
26
+ * less likely or later: higher interruption cost, higher utility threshold,
27
+ * a quiet window widened on both sides (capped below a full day), or muting.
28
+ * Non-remind profiles and profiles without quiet hours keep those fields.
29
+ */
30
+ export declare function tuneProfile(profile: Readonly<OpportunityProfile>, overlay: AttentionOverlay | undefined): Readonly<OpportunityProfile>;
31
+ //# sourceMappingURL=attention-tuning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attention-tuning.d.ts","sourceRoot":"","sources":["../src/attention-tuning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,gEAAgE;AAChE,eAAO,MAAM,wBAAwB;;;EAAoF,CAAA;AAEzH,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE;QAAE,qBAAqB,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAC;QAAC,qBAAqB,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAA;CAC1H;AAKD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS,CAW7E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAatI"}
@@ -0,0 +1,45 @@
1
+ /** Evaluation cohort for proactive reminders (WP22 slice 2). */
2
+ export const proactiveAttentionCohort = Object.freeze({ lane: 'owner-notification', sourceId: 'assistant-proactive/v1' });
3
+ const bounded = (value, max, step) => Number.isSafeInteger(value) && value >= 0 && value <= max && value % step === 0;
4
+ /**
5
+ * Accepts only a well-formed, non-default overlay inside the fixed bounds.
6
+ * Anything else (missing service, version 0, malformed) means no overlay, which
7
+ * is byte-for-byte the untuned behavior.
8
+ */
9
+ export function attentionOverlay(value) {
10
+ if (!value || typeof value !== 'object')
11
+ return undefined;
12
+ const input = value;
13
+ const parameters = input.parameters;
14
+ if (!Number.isSafeInteger(input.version) || input.version < 1 || typeof input.digest !== 'string'
15
+ || !/^[0-9a-f]{64}$/.test(input.digest) || !parameters || typeof parameters !== 'object'
16
+ || !bounded(parameters.interruptionCostDelta, 100, 10) || !bounded(parameters.minimumUtilityDelta, 100, 10)
17
+ || !bounded(parameters.quietExtensionMinutes, 120, 30) || typeof parameters.muted !== 'boolean')
18
+ return undefined;
19
+ return Object.freeze({ version: input.version, digest: input.digest, parameters: Object.freeze({
20
+ interruptionCostDelta: parameters.interruptionCostDelta, minimumUtilityDelta: parameters.minimumUtilityDelta,
21
+ quietExtensionMinutes: parameters.quietExtensionMinutes, muted: parameters.muted
22
+ }) });
23
+ }
24
+ /**
25
+ * Applies an overlay to a reminder profile. Every effect only makes a reminder
26
+ * less likely or later: higher interruption cost, higher utility threshold,
27
+ * a quiet window widened on both sides (capped below a full day), or muting.
28
+ * Non-remind profiles and profiles without quiet hours keep those fields.
29
+ */
30
+ export function tuneProfile(profile, overlay) {
31
+ if (!overlay || profile.mode !== 'remind')
32
+ return profile;
33
+ const { interruptionCostDelta, minimumUtilityDelta, quietExtensionMinutes } = overlay.parameters;
34
+ let quietHours = profile.quietHours;
35
+ if (quietHours && quietExtensionMinutes > 0) {
36
+ const length = (quietHours.endMinute - quietHours.startMinute + 1440) % 1440;
37
+ const room = Math.max(0, 1439 - length);
38
+ const before = Math.min(quietExtensionMinutes, Math.floor(room / 2));
39
+ const after = Math.min(quietExtensionMinutes, room - before);
40
+ quietHours = { timezone: quietHours.timezone, startMinute: (quietHours.startMinute - before + 1440) % 1440, endMinute: (quietHours.endMinute + after) % 1440 };
41
+ }
42
+ return Object.freeze({ ...profile, interruptionCost: profile.interruptionCost + interruptionCostDelta,
43
+ minimumUtility: profile.minimumUtility + minimumUtilityDelta, ...(quietHours ? { quietHours: Object.freeze(quietHours) } : {}) });
44
+ }
45
+ //# sourceMappingURL=attention-tuning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attention-tuning.js","sourceRoot":"","sources":["../src/attention-tuning.ts"],"names":[],"mappings":"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"}
package/lib/engine.d.ts CHANGED
@@ -7,11 +7,23 @@ export declare class OpportunityEngine {
7
7
  constructor(path: string, profiles: readonly OpportunityProfile[], options?: {
8
8
  now?: () => number;
9
9
  });
10
- evaluate(input: OpportunityInput): OpportunityEvaluation;
10
+ /**
11
+ * `overlay` is an optional verified tighten-only Evaluation attention version.
12
+ * It is applied to the frozen goal profile for this evaluation only and is
13
+ * never persisted into the profile snapshot.
14
+ */
15
+ evaluate(input: OpportunityInput, overlay?: unknown): OpportunityEvaluation;
11
16
  feedback(id: string, scopeInput: OpportunityScope, feedback: 'accepted' | 'rejected'): OpportunityDecision;
12
17
  list(scopeInput: OpportunityScope, goalId?: string): readonly OpportunityDecision[];
13
18
  profileSnapshot(scope: OpportunityScope, goalId: string, profileId: string): Readonly<OpportunityProfile>;
14
19
  closeWait(waitId: string, scope: OpportunityScope, reason: 'expired' | 'cancelled'): void;
20
+ /** Delivery accepted (queued) this decision's reminder; a later replay past its send window keeps the dedupe. */
21
+ confirmReminder(decision: Readonly<Pick<OpportunityDecision, 'id' | 'scope' | 'goalId' | 'sourceId'>>): void;
22
+ /**
23
+ * This decision's reminder was never accepted by Delivery and its send window has closed, so it must not
24
+ * count as seen. Only the unconfirmed row this decision wrote is removed; a newer reminder is left alone.
25
+ */
26
+ releaseReminder(decision: Readonly<Pick<OpportunityDecision, 'id' | 'scope' | 'goalId' | 'sourceId'>>): void;
15
27
  close(): void;
16
28
  }
17
29
  //# sourceMappingURL=engine.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAMA,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;AAgCD,kHAAkH;AAClH,qBAAa,iBAAiB;;gBAKhB,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,kBAAkB,EAAE,EAAE,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;KAAO;IAgBvG;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,qBAAqB;IAkC3E,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,iHAAiH;IACjH,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI;IAG5G;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI;IAG5G,KAAK,IAAI,IAAI;CAkFd"}
package/lib/engine.js CHANGED
@@ -2,6 +2,8 @@ import { closeSync, constants, lstatSync, mkdirSync, openSync, chmodSync } from
2
2
  import { dirname, isAbsolute } from 'node:path';
3
3
  import { randomUUID } from 'node:crypto';
4
4
  import { DatabaseSync } from 'node:sqlite';
5
+ import { reminderContentDigest } from './reminder.js';
6
+ import { attentionOverlay, tuneProfile } from './attention-tuning.js';
5
7
  const max = 1_000_000_000;
6
8
  const integer = (value, limit = max) => typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 && value <= limit;
7
9
  const text = (value, limit = 4096) => typeof value === 'string' && value.length > 0 && value.length <= limit && !/[\s\p{Cc}]/u.test(value);
@@ -73,10 +75,15 @@ function scopeKey(scope) {
73
75
  }
74
76
  function validateInput(input) {
75
77
  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)
78
+ || input.event.observationDigest !== undefined && (typeof input.event.observationDigest !== 'string' || !/^[a-f0-9]{64}$/u.test(input.event.observationDigest))
76
79
  || !integer(input.nativeRevision) || !integer(input.event.sequence) || !integer(input.event.occurredAt, Number.MAX_SAFE_INTEGER) || !integer(input.expiresAt, Number.MAX_SAFE_INTEGER))
77
80
  fail();
78
81
  scopeKey(input.scope);
79
82
  }
83
+ function reminderContent(input) {
84
+ return { goalId: input.goalId, objective: input.objective, definitionDigest: input.definitionDigest, nativeGoalId: input.nativeGoalId, nativeRevision: input.nativeRevision,
85
+ sourceId: input.sourceId, sourceDigest: input.sourceDigest, eventDigest: input.event.digest, eventObservationDigest: input.event.observationDigest };
86
+ }
80
87
  function utility(profile) { return Number(BigInt(profile.expectedBenefit) * BigInt(profile.successPpm) / 1000000n - BigInt(profile.executionCost) - BigInt(profile.interruptionCost) - BigInt(profile.possibleLoss)); }
81
88
  function minuteAt(now, timezone) {
82
89
  const parts = new Intl.DateTimeFormat('en-US', { timeZone: timezone, hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }).formatToParts(new Date(now));
@@ -101,6 +108,7 @@ export class OpportunityEngine {
101
108
  #db;
102
109
  #profiles = new Map();
103
110
  #now;
111
+ #overlay;
104
112
  constructor(path, profiles, options = {}) {
105
113
  if (!Array.isArray(profiles))
106
114
  fail('assistant-proactive: profiles must be an array');
@@ -118,11 +126,21 @@ export class OpportunityEngine {
118
126
  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
127
  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
128
  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);`);
129
+ CREATE INDEX IF NOT EXISTS proactive_decisions_goal ON proactive_decisions(scope_json, goal_id, profile_id);
130
+ CREATE TABLE IF NOT EXISTS proactive_reminders(scope_json TEXT NOT NULL, goal_id TEXT NOT NULL, source_id TEXT NOT NULL, content_digest TEXT NOT NULL, decision_id TEXT NOT NULL REFERENCES proactive_decisions(id), queued INTEGER NOT NULL DEFAULT 0 CHECK(queued IN (0, 1)), PRIMARY KEY(scope_json, goal_id, source_id)) STRICT, WITHOUT ROWID;`);
131
+ // Pre-release development databases may hold the table without `queued`; add it in place.
132
+ if (!this.#db.prepare('PRAGMA table_info(proactive_reminders)').all().some(column => column.name === 'queued'))
133
+ this.#db.exec('ALTER TABLE proactive_reminders ADD COLUMN queued INTEGER NOT NULL DEFAULT 0 CHECK(queued IN (0, 1))');
122
134
  }
123
- evaluate(input) {
135
+ /**
136
+ * `overlay` is an optional verified tighten-only Evaluation attention version.
137
+ * It is applied to the frozen goal profile for this evaluation only and is
138
+ * never persisted into the profile snapshot.
139
+ */
140
+ evaluate(input, overlay) {
124
141
  this.#db.exec('BEGIN IMMEDIATE');
125
142
  try {
143
+ this.#overlay = attentionOverlay(overlay);
126
144
  const value = this.#evaluate(input);
127
145
  this.#db.exec('COMMIT');
128
146
  return value;
@@ -134,6 +152,9 @@ export class OpportunityEngine {
134
152
  catch { }
135
153
  throw error;
136
154
  }
155
+ finally {
156
+ this.#overlay = undefined;
157
+ }
137
158
  }
138
159
  #evaluate(input) {
139
160
  validateInput(input);
@@ -141,7 +162,7 @@ export class OpportunityEngine {
141
162
  if (!integer(now, Number.MAX_SAFE_INTEGER))
142
163
  fail('assistant-proactive: invalid clock');
143
164
  const scope = scopeKey(input.scope);
144
- const profile = this.#profile(scope, input.goalId, input.profileId);
165
+ const profile = tuneProfile(this.#profile(scope, input.goalId, input.profileId), this.#overlay);
145
166
  const existing = this.#event(scope, input);
146
167
  if (existing) {
147
168
  if (!this.#sameIdentity(existing, input))
@@ -172,6 +193,8 @@ export class OpportunityEngine {
172
193
  const counts = this.#counts(scope, input.goalId);
173
194
  if (counts.ledger >= profile.maxDecisionsPerGoal || profile.mode === 'execute' && counts.executions >= profile.maxExecutionsPerGoal || profile.mode === 'remind' && counts.reminders >= profile.maxRemindersPerGoal)
174
195
  return this.#budgetProjection(input, profile, now);
196
+ if (this.#muted(profile))
197
+ return this.#save(scope, input, profile, 'consume', 'suppress', 'attention-muted', now, now);
175
198
  if (quiet(now, profile))
176
199
  return this.#save(scope, input, profile, 'defer', 'suppress', 'quiet-hours', now, quietEndsAt(now, profile));
177
200
  if (utility(profile) < profile.minimumUtility)
@@ -180,6 +203,8 @@ export class OpportunityEngine {
180
203
  return this.#save(scope, input, profile, 'consume', 'suppress', 'cooldown', now, now);
181
204
  if (profile.mergeWindowMs > 0)
182
205
  return this.#save(scope, input, profile, 'defer', 'suppress', 'coalescing', now, now + profile.mergeWindowMs);
206
+ if (profile.mode === 'remind' && this.#unchangedReminder(scope, reminderContent(input)))
207
+ return this.#save(scope, input, profile, 'consume', 'suppress', 'unchanged', now, now);
183
208
  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
209
  }
185
210
  feedback(id, scopeInput, feedback) {
@@ -232,7 +257,27 @@ export class OpportunityEngine {
232
257
  throw error;
233
258
  }
234
259
  }
260
+ /** Delivery accepted (queued) this decision's reminder; a later replay past its send window keeps the dedupe. */
261
+ confirmReminder(decision) {
262
+ this.#db.prepare('UPDATE proactive_reminders SET queued = 1 WHERE scope_json = ? AND goal_id = ? AND source_id = ? AND decision_id = ?').run(scopeKey(decision.scope), decision.goalId, decision.sourceId, decision.id);
263
+ }
264
+ /**
265
+ * This decision's reminder was never accepted by Delivery and its send window has closed, so it must not
266
+ * count as seen. Only the unconfirmed row this decision wrote is removed; a newer reminder is left alone.
267
+ */
268
+ releaseReminder(decision) {
269
+ this.#db.prepare('DELETE FROM proactive_reminders WHERE scope_json = ? AND goal_id = ? AND source_id = ? AND decision_id = ? AND queued = 0').run(scopeKey(decision.scope), decision.goalId, decision.sourceId, decision.id);
270
+ }
235
271
  close() { this.#db.close(); }
272
+ #muted(profile) { return profile.mode === 'remind' && this.#overlay?.parameters.muted === true; }
273
+ /** Records which attention version shaped a decision; absent when no overlay applied. */
274
+ #attention(profile) {
275
+ return this.#overlay && profile.mode === 'remind' ? { attentionTuning: freeze({ version: this.#overlay.version, digest: this.#overlay.digest }) } : {};
276
+ }
277
+ #tag(existing, profile) {
278
+ const { attentionTuning: _previous, ...rest } = existing;
279
+ return { ...rest, ...this.#attention(profile) };
280
+ }
236
281
  #profile(scope, goalId, profileId) {
237
282
  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
283
  if (row)
@@ -262,7 +307,7 @@ export class OpportunityEngine {
262
307
  return { ledger: rows.length, executions: rows.filter(value => value.mode === 'execute').length, reminders: rows.filter(value => value.mode === 'remind').length };
263
308
  }
264
309
  #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 });
310
+ 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, eventObservationDigest: input.event.observationDigest, 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
311
  this.#put(next);
267
312
  this.#link(scope, input, next.id);
268
313
  return freeze({ disposition: 'defer', decision: next });
@@ -273,38 +318,63 @@ export class OpportunityEngine {
273
318
  const rejected = this.#latestRejected(scope, input.goalId, profile.id);
274
319
  if (rejected && rejected.id !== existing.id && now < rejected.updatedAt + profile.rejectionCooldownMs)
275
320
  return this.#terminal(existing, 'consume', 'suppress', 'rejected-cooldown', now);
321
+ if (this.#muted(profile)) {
322
+ const muted = freeze({ ...this.#tag(existing, profile), state: 'decided', mode: 'suppress', reason: 'attention-muted', updatedAt: now });
323
+ this.#put(muted);
324
+ return freeze({ disposition: 'consume', decision: muted });
325
+ }
276
326
  if (quiet(now, profile)) {
277
- const delayed = freeze({ ...existing, reason: 'quiet-hours', updatedAt: now, eligibleAt: quietEndsAt(now, profile) });
327
+ const delayed = freeze({ ...this.#tag(existing, profile), reason: 'quiet-hours', updatedAt: now, eligibleAt: quietEndsAt(now, profile) });
278
328
  this.#put(delayed);
279
329
  return freeze({ disposition: 'defer', decision: delayed });
280
330
  }
281
331
  if (utility(profile) < profile.minimumUtility) {
282
- const suppressed = freeze({ ...existing, state: 'decided', mode: 'suppress', reason: 'below-threshold', updatedAt: now });
332
+ const suppressed = freeze({ ...this.#tag(existing, profile), state: 'decided', mode: 'suppress', reason: 'below-threshold', updatedAt: now });
283
333
  this.#put(suppressed);
284
334
  return freeze({ disposition: 'consume', decision: suppressed });
285
335
  }
286
336
  const counts = this.#counts(scope, input.goalId);
287
337
  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 });
338
+ // Compare the content of the latest coalesced observation, i.e. what this decision will actually report.
339
+ const observed = { ...this.#tag(existing, profile), ...(input.event.sequence > existing.eventSequence ? { eventId: input.event.id, eventSequence: input.event.sequence, eventDigest: input.event.digest, eventObservationDigest: input.event.observationDigest, observations: existing.observations + 1 } : {}) };
340
+ const unchanged = !budget && profile.mode === 'remind' && this.#unchangedReminder(scope, observed);
341
+ const mode = budget || unchanged ? 'suppress' : profile.mode;
342
+ const reason = budget ? 'budget' : unchanged ? 'unchanged' : profile.mode === 'execute' ? 'execution' : profile.mode === 'remind' ? 'reminder' : 'prepared';
343
+ const next = freeze({ ...observed, mode, state: 'decided', reason, utility: utility(profile), updatedAt: now });
291
344
  this.#put(next);
292
345
  this.#link(scope, input, next.id);
346
+ if (mode === 'remind')
347
+ this.#remember(scope, next);
293
348
  return freeze({ disposition: mode === 'execute' ? 'execute' : 'consume', decision: next });
294
349
  }
295
350
  #save(scope, input, profile, disposition, mode, reason, now, eligibleAt) {
296
351
  if (this.#counts(scope, input.goalId).ledger >= profile.maxDecisionsPerGoal)
297
352
  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 });
353
+ 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, eventObservationDigest: input.event.observationDigest, 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, ...this.#attention(profile) });
299
354
  this.#put(decision);
300
355
  this.#link(scope, input, decision.id);
356
+ if (mode === 'remind')
357
+ this.#remember(scope, decision);
301
358
  return freeze({ disposition, decision });
302
359
  }
360
+ /**
361
+ * One reminder per goal source until what the owner would read changes or the owner answers it. Durable in
362
+ * the same transaction as the decision, so a restart neither forgets nor re-sends an unchanged reminder.
363
+ */
364
+ #unchangedReminder(scope, value) {
365
+ const row = this.#db.prepare('SELECT content_digest, decision_id FROM proactive_reminders WHERE scope_json = ? AND goal_id = ? AND source_id = ?').get(scope, value.goalId, value.sourceId);
366
+ if (!row || row.content_digest !== reminderContentDigest(value))
367
+ return false;
368
+ return this.#decision(row.decision_id)?.feedback === undefined;
369
+ }
370
+ #remember(scope, decision) {
371
+ this.#db.prepare('INSERT INTO proactive_reminders(scope_json, goal_id, source_id, content_digest, decision_id, queued) VALUES (?, ?, ?, ?, ?, 0) ON CONFLICT(scope_json, goal_id, source_id) DO UPDATE SET content_digest = excluded.content_digest, decision_id = excluded.decision_id, queued = 0').run(scope, decision.goalId, decision.sourceId, reminderContentDigest(decision), decision.id);
372
+ }
303
373
  #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
374
  #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
375
  #terminal(existing, disposition, mode, reason, now) { const next = freeze({ ...existing, mode, reason, state: 'decided', updatedAt: now }); if (existing.state === 'pending')
306
376
  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 }) }); }
377
+ #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, eventObservationDigest: input.event.observationDigest, 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
378
  #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
379
  }
310
380
  function sameScope(left, right) { return scopeKey(left) === scopeKey(right); }
package/lib/engine.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -4,13 +4,20 @@ import { type ToolExecution } from '@deepseek-ai/dsh-tools';
4
4
  import Schema from '@deepseek-ai/schemastery';
5
5
  import { OpportunityEngine, validateProfile } from './engine.js';
6
6
  import type { OpportunityInput, OpportunityProfile, OpportunityScope } from './types.js';
7
+ import { attentionOverlay, proactiveAttentionCohort, tuneProfile, type AttentionOverlay } from './attention-tuning.js';
8
+ import { type IntakeEvaluationConfig, type ProactiveIntakeEvaluationHealth } from './intake-evaluation.js';
7
9
  import { version } from './version.js';
8
10
  export declare const name = "dsh-enhanced-assistant-proactive";
9
- export { version, OpportunityEngine, validateProfile };
11
+ export { version, OpportunityEngine, validateProfile, attentionOverlay, tuneProfile, proactiveAttentionCohort };
12
+ export { DISABLED_INTAKE_EVALUATION_HEALTH, INTAKE_EVALUATION_LEVELS, IntakeEvaluationError, IntakeEvaluationProducer, intakeEvaluationPolicy, MAX_INTAKE_EVALUATION_QUOTES, MAX_INTAKE_EVALUATION_RULES, MAX_INTAKE_EVALUATION_QUOTE_CHARS, MAX_INTAKE_SOURCE_TEXT, normalizeIntakeEvaluation, } from './intake-evaluation.js';
13
+ export type { IntakeEvaluationConfig, IntakeEvaluationErrorCode, IntakeEvaluationLevel, IntakeEvaluationPolicy, IntakeEvaluationRule, IntakeEvaluationRuleConfig, IntakeEvaluationVerdict, IntakeModelRequest, IntakeWorkItemsRegistration, NormalizedIntakeEvaluation, ProactiveIntakeEvaluationHealth, ProactiveIntakeEvaluationReadiness, } from './intake-evaluation.js';
14
+ export type { AttentionOverlay };
10
15
  export type * from './types.js';
11
16
  export interface Config {
12
17
  databasePath?: string;
13
18
  profiles?: OpportunityProfile[];
19
+ /** WP20 stage 3 producer: absent or disabled keeps the plugin behavior identical. */
20
+ intakeEvaluation?: IntakeEvaluationConfig;
14
21
  }
15
22
  export declare const Config: Schema<Config>;
16
23
  declare module '@deepseek-ai/cordis' {
@@ -23,6 +30,8 @@ export declare class AssistantProactiveService extends Service {
23
30
  #private;
24
31
  static Config: Schema<Config>;
25
32
  constructor(ctx: Context, config?: Config);
33
+ /** Host-only read-only readiness/health for operators and doctor; grants nothing. */
34
+ intakeEvaluationHealth: () => ProactiveIntakeEvaluationHealth;
26
35
  assertProfile: (profileId: string) => void;
27
36
  availableProfiles: (agent: Agent | undefined) => readonly Readonly<{
28
37
  id: string;
@@ -61,6 +70,7 @@ export declare class AssistantProactiveService extends Service {
61
70
  eventSequence: number;
62
71
  eventDigest: string;
63
72
  sourceDigest: string;
73
+ eventObservationDigest?: string | undefined;
64
74
  objective: string;
65
75
  definitionDigest: string;
66
76
  nativeGoalId: string;
@@ -75,6 +85,10 @@ export declare class AssistantProactiveService extends Service {
75
85
  expiresAt: number;
76
86
  observations: number;
77
87
  feedback?: "accepted" | "rejected";
88
+ attentionTuning?: {
89
+ version: number;
90
+ digest: string;
91
+ };
78
92
  })[];
79
93
  reconcilePreparations: () => Promise<void>;
80
94
  feedback: (agent: Agent | undefined, id: string, feedback: "accepted" | "rejected") => import("./types.js").OpportunityDecision;