@zhushanwen/extension-protocol 0.20.0 → 0.21.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/dist/index.d.ts +658 -1
- package/dist/index.js +340 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1644,6 +1644,663 @@ interface SubagentEngineConfigView {
|
|
|
1644
1644
|
engineDefaults?: Record<string, string>;
|
|
1645
1645
|
}
|
|
1646
1646
|
|
|
1647
|
+
/**
|
|
1648
|
+
* problem-solve-canvas 契约模块 —— marker 与 action 词表(U1 SSOT)。
|
|
1649
|
+
*
|
|
1650
|
+
* 设计锚点:.tmp/tech-design/problem-solve-canvas.md §3.1(1)/(2) + §5-U1。
|
|
1651
|
+
* 本目录是画布三侧(pi extension 工具面 / runtime CanvasService / renderer 视图)
|
|
1652
|
+
* 共享的唯一词表与 schema 来源——防 GUI 与工具两个入口各自发明语义。
|
|
1653
|
+
*
|
|
1654
|
+
* 两层词表(有意分开,勿合并):
|
|
1655
|
+
* - CANVAS_ACTIONS(16):CanvasService.mutate 唯一入口的 action 域,
|
|
1656
|
+
* per-action × actor 权限矩阵按此建制(matrix.ts)。
|
|
1657
|
+
* - CANVAS_MARKER_ACTIONS(16 + 'enter'):marker 通道(extension select 挂起)
|
|
1658
|
+
* 的 action 域。'enter' 是 canvas_enter 工具「打开已有画布」形态的通道动作:
|
|
1659
|
+
* 读全量 + 登记绑定(sessionId ↔ canvasId),非画布 mutation——不产事件、
|
|
1660
|
+
* 不在权限矩阵内(marker 通道调用方恒为 agent 工具)。创建形态走 'create'
|
|
1661
|
+
* (marker 通道的 create 只可能来自 canvas_enter 工具,runtime 在该通道
|
|
1662
|
+
* create 成功时一并登记绑定;GUI 托盘新建走 WS RPC 通道、不登记绑定)。
|
|
1663
|
+
*/
|
|
1664
|
+
/**
|
|
1665
|
+
* canvas 工具请求的 title marker。runtime event-adapter / CanvasHandler 检测此
|
|
1666
|
+
* marker 区分 canvas 请求与普通 select(SESSION_MANAGER 同款形态)。
|
|
1667
|
+
*
|
|
1668
|
+
* NUL 前缀确保不会与 extension 正常的 select title 冲突。
|
|
1669
|
+
* 属内部服务类 marker:走 translateInteractiveRequest 显式分支,
|
|
1670
|
+
* 不入 MARKER_DIALOG_FALLBACKS 降级表(畸形 payload 以结构化错误应答回
|
|
1671
|
+
* marker 通道,不降级为用户可见对话框)。
|
|
1672
|
+
*/
|
|
1673
|
+
declare const CANVAS_MARKER = "\0TAIJI_CANVAS";
|
|
1674
|
+
/**
|
|
1675
|
+
* 16 个 mutate / 查询 action 的运行时集合(与 CanvasAction 类型同源——从本目录
|
|
1676
|
+
* actions.ts 的 CANVAS_ACTIONS 数组派生,不写行号:跨 commit 推移会失准)。
|
|
1677
|
+
*
|
|
1678
|
+
* 词序按领域生命周期排列:创建 → 生长 → 编辑 → 方向裁决 → 选定 → 状态转移 →
|
|
1679
|
+
* 评论 → 评论响应 → 审查三动作 → 收敛确认 → 导出 → 派发 → 查询两类。
|
|
1680
|
+
*
|
|
1681
|
+
* 'read' / 'list' 是查询类:不产领域事件、不在「每个 mutation action 至少产出
|
|
1682
|
+
* 一个事件」的对账范围(U2 承接对账,ACTION_EVENT_MAP 为对账 SSOT——state.ts)。
|
|
1683
|
+
*/
|
|
1684
|
+
declare const CANVAS_ACTIONS: readonly ["create", "grow", "patch", "decide-direction", "select", "transition", "comment", "comment-respond", "review-request", "review-append", "review-resolve", "converge-check", "export", "dispatch", "read", "list"];
|
|
1685
|
+
/**
|
|
1686
|
+
* marker 通道词表 = CANVAS_ACTIONS + 'enter'(两层词表的通道层,见文件头说明)。
|
|
1687
|
+
* event-adapter 用它把 JSON 解析出的 action 字符串收窄;表外值折叠为畸形
|
|
1688
|
+
* → 结构化错误应答(不降级对话框)。
|
|
1689
|
+
*/
|
|
1690
|
+
declare const CANVAS_MARKER_ACTIONS: readonly ["create", "grow", "patch", "decide-direction", "select", "transition", "comment", "comment-respond", "review-request", "review-append", "review-resolve", "converge-check", "export", "dispatch", "read", "list", "enter"];
|
|
1691
|
+
|
|
1692
|
+
/**
|
|
1693
|
+
* problem-solve-canvas 契约 —— 领域状态 schema(CanvasState / ReviewReport)与领域事件词表。
|
|
1694
|
+
*
|
|
1695
|
+
* 形状对齐概念文档(.tmp/problem-solve-canvas.md)§2 领域模型:四类图节点 + 评论附件 +
|
|
1696
|
+
* MVP 四种边(decompose / resolve / argue / rebut;constrain / reference 第二版不入词表)+
|
|
1697
|
+
* 生命周期 × 派发二维状态机(§2.4)。
|
|
1698
|
+
*
|
|
1699
|
+
* 本 schema 同时承载两处消费:
|
|
1700
|
+
* - canvas.get RPC reply / canvas_enter(打开形态)的工具结果 = 全量只读视图
|
|
1701
|
+
* - runtime canvas.json 加速快照的落盘形状(events.jsonl 为唯一持久权威,
|
|
1702
|
+
* 快照可由事件流全量重放推导——U2 落盘契约)
|
|
1703
|
+
*
|
|
1704
|
+
* 唯一形状分叉:activeBindings 只在 canvas.get reply 出现(查询侧派生,见字段注释),
|
|
1705
|
+
* 快照与 marker 工具结果不携带。
|
|
1706
|
+
*
|
|
1707
|
+
* 时间字段一律 ISO string(不用 Date)——wire 与落盘 JSON 往返无损,序列化即契约。
|
|
1708
|
+
*/
|
|
1709
|
+
/** 四类图节点(概念文档 §2.2)。评论不是图节点(裁决点 R2:降为锚定附件)。 */
|
|
1710
|
+
type CanvasNodeType = 'question' | 'option' | 'argument' | 'constraint';
|
|
1711
|
+
/**
|
|
1712
|
+
* 节点生命周期状态机(概念文档 §2.4,全部图节点;根节点不可搁置/否决)。
|
|
1713
|
+
* 合法转移:draft→under-review / draft→shelved / under-review→passed /
|
|
1714
|
+
* under-review→rejected / under-review→shelved / rejected→draft(复活,须留理由)/
|
|
1715
|
+
* shelved→draft。表外转移 fail-fast(U2 状态机穷举单测承接)。
|
|
1716
|
+
*/
|
|
1717
|
+
type CanvasNodeLifecycle = 'draft' | 'under-review' | 'passed' | 'rejected' | 'shelved';
|
|
1718
|
+
/** MVP 四种边(概念文档 §2.3)。constrain / reference 第二版,词表不预留。 */
|
|
1719
|
+
type CanvasEdgeType = 'decompose' | 'resolve' | 'argue' | 'rebut';
|
|
1720
|
+
/** 论据极性(裁决点 R1:原「证据」「反对」合并为论据的极性字段)。 */
|
|
1721
|
+
type ArgumentPolarity = 'support' | 'object';
|
|
1722
|
+
/** 论据素材性:fact 事实(必带核实状态)/ claim 主张。 */
|
|
1723
|
+
type ArgumentMateriality = 'fact' | 'claim';
|
|
1724
|
+
/** 主干边支撑度三值(裁决点 R3:只评 decompose/resolve 主干边,论证边不评级)。 */
|
|
1725
|
+
type SupportRating = 'sufficient' | 'gap' | 'invalid';
|
|
1726
|
+
/** 图节点。per-type 字段全部 optional——类型面宽松、领域约束归 U2 不变量校验
|
|
1727
|
+
* (契约层不复制不变量逻辑,避免双权威)。 */
|
|
1728
|
+
interface CanvasNode {
|
|
1729
|
+
id: string;
|
|
1730
|
+
type: CanvasNodeType;
|
|
1731
|
+
content: string;
|
|
1732
|
+
lifecycle: CanvasNodeLifecycle;
|
|
1733
|
+
/** option:selected 标记(不变量 3:任一 question 的 resolve 边中 selected 至多一条)。 */
|
|
1734
|
+
selected?: boolean;
|
|
1735
|
+
/** option:选定对比理由(不变量 3:selected 变更须留对比与理由)。 */
|
|
1736
|
+
selectionReason?: string;
|
|
1737
|
+
/** lifecycle=rejected 时的否决记录——不可删除(MVP 不可砍:防 agent 重复提出已否决项)。 */
|
|
1738
|
+
rejection?: {
|
|
1739
|
+
reason: string;
|
|
1740
|
+
reviveCondition?: string;
|
|
1741
|
+
};
|
|
1742
|
+
/** argument:极性。 */
|
|
1743
|
+
polarity?: ArgumentPolarity;
|
|
1744
|
+
/** argument:素材性;fact 时 factVerified 必填(不变量 5)。 */
|
|
1745
|
+
materiality?: ArgumentMateriality;
|
|
1746
|
+
/** argument:核实状态(fact 论据必填;未核实 fact 不得作为 passed 依据——不变量 5)。 */
|
|
1747
|
+
factVerified?: boolean;
|
|
1748
|
+
/** option:执行叶子显式标记(裁决点 R5:叶子是结构派生、执行叶子是规划决策,两不混同)。 */
|
|
1749
|
+
dispatchable?: boolean;
|
|
1750
|
+
/** option:执行叶子完成判据(passed 前必填——不变量 7)。 */
|
|
1751
|
+
criterias?: string[];
|
|
1752
|
+
/** 派发维度(与 lifecycle 正交,仅执行叶子):dispatched 后登记下游产物指针(不变量 7)。 */
|
|
1753
|
+
dispatch?: {
|
|
1754
|
+
pointer: string;
|
|
1755
|
+
dispatchedAt: string;
|
|
1756
|
+
};
|
|
1757
|
+
createdAt: string;
|
|
1758
|
+
}
|
|
1759
|
+
/** 图边。argue 边的 to 可指向主干边 id(论证一条分解/解边本身)——targetId 域校验归 U2。 */
|
|
1760
|
+
interface CanvasEdge {
|
|
1761
|
+
id: string;
|
|
1762
|
+
type: CanvasEdgeType;
|
|
1763
|
+
/** 起点节点 id(argument 节点)。 */
|
|
1764
|
+
from: string;
|
|
1765
|
+
/** 终点:节点 id 或主干边 id(仅 argue 边可指边)。 */
|
|
1766
|
+
to: string;
|
|
1767
|
+
/** argue 边极性。 */
|
|
1768
|
+
polarity?: ArgumentPolarity;
|
|
1769
|
+
/** 主干边支撑度(decompose/resolve 专用;审查轮次溯源)。 */
|
|
1770
|
+
support?: {
|
|
1771
|
+
rating: SupportRating;
|
|
1772
|
+
gaps?: string[];
|
|
1773
|
+
round?: number;
|
|
1774
|
+
};
|
|
1775
|
+
}
|
|
1776
|
+
/** 评论附件(锚定在节点或边上,非图成员)。响应状态机承载 agent 响应义务(不变量 8)。 */
|
|
1777
|
+
interface CanvasComment {
|
|
1778
|
+
id: string;
|
|
1779
|
+
/** 锚定目标:节点 id 或边 id。 */
|
|
1780
|
+
anchorId: string;
|
|
1781
|
+
text: string;
|
|
1782
|
+
/** 待响应 / 已响应;转已响应前必须留采纳或反驳的痕(不变量 8)。 */
|
|
1783
|
+
status: 'pending' | 'responded';
|
|
1784
|
+
/** 响应留痕:采纳(并落实到图)/ 反驳(留理由)二选一。 */
|
|
1785
|
+
response?: {
|
|
1786
|
+
disposition: 'adopted' | 'rebutted';
|
|
1787
|
+
note: string;
|
|
1788
|
+
};
|
|
1789
|
+
createdAt: string;
|
|
1790
|
+
}
|
|
1791
|
+
/** 方向裁决记录(裁决点 R4:画布元数据 + 事件留痕,不是图节点)。矩阵限 user 拍板。 */
|
|
1792
|
+
interface CanvasDirectionDecision {
|
|
1793
|
+
direction: 'top-down' | 'bottom-up';
|
|
1794
|
+
reason: string;
|
|
1795
|
+
decidedAt: string;
|
|
1796
|
+
}
|
|
1797
|
+
/** 六维度审查清单(概念文档 §4.3:逐维度打靶,不泛泛「是否合理」)。 */
|
|
1798
|
+
type ReviewDimension = 'completeness' | 'necessity' | 'support' | 'authenticity' | 'conflict' | 'depth';
|
|
1799
|
+
/** 条目分级:must-fix 清零不收敛;suggestion 处置制(三选一)。 */
|
|
1800
|
+
type ReviewSeverity = 'must-fix' | 'suggestion';
|
|
1801
|
+
/** 审查终态族(对齐 review-fix-loop 终态集;除 converged 外全部停回用户)。
|
|
1802
|
+
* 各值的驻留口径:converged / max-rounds 驻留于 status;escalated 不驻留——升级经
|
|
1803
|
+
* ReviewEscalated 事件留痕,放行后即回 in-progress(每次升级裁决恰放行一轮,轮次
|
|
1804
|
+
* 预算随放行抬升);stuck 为终态族词表值,MVP 无触发路径(reviewer 派发失败经
|
|
1805
|
+
* 错误显式上报,不落聚合终态)。 */
|
|
1806
|
+
type ReviewReportStatus = 'in-progress' | 'converged' | 'max-rounds' | 'escalated' | 'stuck';
|
|
1807
|
+
/** 处置三选一(采纳 / 登记后做 / 拒绝留理由)。 */
|
|
1808
|
+
type ReviewResolutionDisposition = 'accepted' | 'deferred' | 'rejected';
|
|
1809
|
+
/** 审查报告条目:经图元素 id 引用画布(聚合 2 不变量 1:id 必须存在;R6 裁决点:
|
|
1810
|
+
* 图承载内容、报告承载过程)。 */
|
|
1811
|
+
interface ReviewEntry {
|
|
1812
|
+
id: string;
|
|
1813
|
+
round: number;
|
|
1814
|
+
dimension: ReviewDimension;
|
|
1815
|
+
severity: ReviewSeverity;
|
|
1816
|
+
/** 引用的图元素 id(节点 / 边 / 评论)。 */
|
|
1817
|
+
targetId: string;
|
|
1818
|
+
note: string;
|
|
1819
|
+
/** 随条目写回的支撑度评价输入原文(评价结果落 edge.support;round 溯源取条目 round)。 */
|
|
1820
|
+
supportRating?: SupportRating;
|
|
1821
|
+
/** rating='gap' 的缺口清单(与 edge.support.gaps 同源)。 */
|
|
1822
|
+
supportGaps?: string[];
|
|
1823
|
+
/**
|
|
1824
|
+
* 处置记录(first-writer-wins:已有处置记录后再次 review-resolve = 拒绝 +
|
|
1825
|
+
* already_resolved 错误——覆盖会让 R2 审到与登记方实际动作不符的处置表)。
|
|
1826
|
+
*/
|
|
1827
|
+
resolution?: {
|
|
1828
|
+
disposition: ReviewResolutionDisposition;
|
|
1829
|
+
/** 处置登记方(agent 执行侧 / user 复核直处)。 */
|
|
1830
|
+
by: 'user' | 'agent';
|
|
1831
|
+
note: string;
|
|
1832
|
+
};
|
|
1833
|
+
}
|
|
1834
|
+
/** 审查报告聚合(ReviewReport)。挂于 CanvasState.review;null = 从未发起审查。 */
|
|
1835
|
+
interface ReviewReport {
|
|
1836
|
+
status: ReviewReportStatus;
|
|
1837
|
+
/** 当前 / 最近轮次(R1 全面审,R2+ 只审上轮处置表 + 攻击点)。 */
|
|
1838
|
+
round: number;
|
|
1839
|
+
maxRounds: number;
|
|
1840
|
+
entries: ReviewEntry[];
|
|
1841
|
+
/** 非 converged 终态的停回说明(聚合 2 不变量 2:max-rounds / escalated / stuck 必附)。 */
|
|
1842
|
+
stopNote?: string;
|
|
1843
|
+
/** 恢复动作建议(停回说明的配套:升级裁决后可再发起)。 */
|
|
1844
|
+
recoverHint?: string;
|
|
1845
|
+
}
|
|
1846
|
+
/** 画布状态(聚合 1 全量投影;canvas.get reply 与 canvas.json 快照共用形状)。 */
|
|
1847
|
+
interface CanvasState {
|
|
1848
|
+
canvasId: string;
|
|
1849
|
+
/** 画布名(canvasId = 短随机 id;重命名属第二版多画布管理,MVP 只读)。 */
|
|
1850
|
+
name: string;
|
|
1851
|
+
/** 根问题三要素(不变量 1:有且仅有一个根节点,类型 question,带完成判据与范围排除)。 */
|
|
1852
|
+
root: {
|
|
1853
|
+
nodeId: string;
|
|
1854
|
+
statement: string;
|
|
1855
|
+
/** 完成判据(可证伪)。 */
|
|
1856
|
+
criterias: string[];
|
|
1857
|
+
/** 范围排除(设计文档 enter 参数表记作 scope 的全称形态)。 */
|
|
1858
|
+
scopeExclusions: string[];
|
|
1859
|
+
/** 根判据经用户确认(收敛判据 1)。 */
|
|
1860
|
+
confirmed?: boolean;
|
|
1861
|
+
};
|
|
1862
|
+
/** 生长方向裁决;未裁决为 null。 */
|
|
1863
|
+
direction: CanvasDirectionDecision | null;
|
|
1864
|
+
nodes: CanvasNode[];
|
|
1865
|
+
edges: CanvasEdge[];
|
|
1866
|
+
comments: CanvasComment[];
|
|
1867
|
+
/** 待重审集合(节点 id;不变量 9:用户改动后该节点到根的路径进入本集合)。 */
|
|
1868
|
+
dirtyPaths: string[];
|
|
1869
|
+
/** 审查报告聚合;null = 从未发起审查。 */
|
|
1870
|
+
review: ReviewReport | null;
|
|
1871
|
+
/** 规划收敛终态(converge-check 校验不变量 10 后置位;export 同校验)。 */
|
|
1872
|
+
converged: boolean;
|
|
1873
|
+
/**
|
|
1874
|
+
* 活跃绑定数(绑定记录 ∩ 存活 session,设计 §3.1(1) 回推节 / §3.1(3) 绑定徽标
|
|
1875
|
+
* 数据源)——canvas.get reply 的查询侧派生值:transport 装配层附加(存活判定经
|
|
1876
|
+
* sessionService,CanvasService 无该依赖),domain 产物与 canvas.json 快照均不含
|
|
1877
|
+
* (绑定是 runtime 内存态、不可由事件流重放推导——落盘会污染「快照可由事件流
|
|
1878
|
+
* 全量重放重建」的唯一权威承诺)。optional = marker 通道(enter/read 工具结果)
|
|
1879
|
+
* 与旧 runtime reply 不携带;消费方缺字段按未知处理(徽标不渲染)。
|
|
1880
|
+
*/
|
|
1881
|
+
activeBindings?: number;
|
|
1882
|
+
/**
|
|
1883
|
+
* 收敛阻断清单(canvas-foundation convergenceBlockers 的现算结果,导出面板
|
|
1884
|
+
* 门禁区②格「规划就绪」的逐项呈现数据源——门禁②的判定是 runtime 领域规则
|
|
1885
|
+
* 不跨 wire,本字段把判定结论(缺什么)随 canvas.get 携带给界面)。与
|
|
1886
|
+
* activeBindings 同款查询侧派生:transport 装配层附加,domain 产物与
|
|
1887
|
+
* canvas.json 快照均不含(纯派生值,落盘即与画布状态二源漂移)。optional =
|
|
1888
|
+
* marker 通道(enter/read 工具结果)与旧 runtime reply 不携带;消费方缺字段
|
|
1889
|
+
* 按未知处理(②格退回「由权威校验」措辞形态)。空数组 = 无阻断(已收敛或
|
|
1890
|
+
* 收敛后再改动时仅剩待重审类条目,与门禁③计数互补)。
|
|
1891
|
+
*/
|
|
1892
|
+
convergenceBlockers?: string[];
|
|
1893
|
+
createdAt: string;
|
|
1894
|
+
updatedAt: string;
|
|
1895
|
+
}
|
|
1896
|
+
/** canvas.list 条目:托盘画布列表的数据源(名称 + 阶段徽标 + must-fix 计数)。
|
|
1897
|
+
* 阶段徽标本身是 renderer 派生值(开放 must-fix 或审查进行中 = 审查中;
|
|
1898
|
+
* converged = 已收敛;其余 = 生长中),契约只给派生输入。 */
|
|
1899
|
+
interface CanvasListEntry {
|
|
1900
|
+
canvasId: string;
|
|
1901
|
+
name: string;
|
|
1902
|
+
statement: string;
|
|
1903
|
+
converged: boolean;
|
|
1904
|
+
/** 未关闭 must-fix 条目数。 */
|
|
1905
|
+
openMustFix: number;
|
|
1906
|
+
/** 审查报告状态;从未审查为 null。 */
|
|
1907
|
+
reviewStatus: ReviewReportStatus | null;
|
|
1908
|
+
}
|
|
1909
|
+
/**
|
|
1910
|
+
* 领域事件类型词表(过去式命名,概念文档 §2.6 + U2 增补)。
|
|
1911
|
+
*
|
|
1912
|
+
* 广播 canvas.updated 的 evType 取值域;renderer 按值分流——CanvasCreated 驱动
|
|
1913
|
+
* 创建后自动唤起(U5),其余类型仅作失效提示(重新拉取收敛)。
|
|
1914
|
+
*
|
|
1915
|
+
* SSOT 对账义务(U2 承接):每个 mutation action 至少产出一个事件,主事件映射
|
|
1916
|
+
* 见 ACTION_EVENT_MAP;read / list 为查询类不产事件、不在对账范围;DirtiedPathMarked
|
|
1917
|
+
* 与审查终态族是 mutate 事务 / 审查编排内的附属事件,不独立对应 action。
|
|
1918
|
+
*/
|
|
1919
|
+
declare const CANVAS_EVENT_TYPES: readonly ["CanvasCreated", "GrowthDirectionDecided", "NodeCreated", "NodeModified", "StateTransitioned", "OptionSelected", "NodeDispatched", "CommentAdded", "CommentResponded", "ReviewRequested", "ReviewEntryAppended", "ReviewEntryResolved", "ConvergenceChecked", "CanvasExported", "DirtiedPathMarked", "ReviewConverged", "ReviewMaxRoundsReached", "ReviewEscalated"];
|
|
1920
|
+
type CanvasEventType = (typeof CANVAS_EVENT_TYPES)[number];
|
|
1921
|
+
/**
|
|
1922
|
+
* mutation action → 主领域事件映射(「每个 mutation action 至少产出一个事件」
|
|
1923
|
+
* 的对账 SSOT)。键集约束(= 16 action 减 read/list 的 14 个 mutation action)
|
|
1924
|
+
* 由一致性测试锁定(不在此回引 actions 层——保持依赖单向 actions → state);
|
|
1925
|
+
* read / list(查询类)不在表内 = 不产事件、不在对账范围——查询写事件会使
|
|
1926
|
+
* append-only 日志体积随读取次数无界增长。U2 实现的事件产出与本表对账;
|
|
1927
|
+
* 本表缺失键即对账红。
|
|
1928
|
+
*/
|
|
1929
|
+
declare const ACTION_EVENT_MAP: {
|
|
1930
|
+
readonly create: "CanvasCreated";
|
|
1931
|
+
readonly grow: "NodeCreated";
|
|
1932
|
+
readonly patch: "NodeModified";
|
|
1933
|
+
readonly 'decide-direction': "GrowthDirectionDecided";
|
|
1934
|
+
readonly select: "OptionSelected";
|
|
1935
|
+
readonly transition: "StateTransitioned";
|
|
1936
|
+
readonly comment: "CommentAdded";
|
|
1937
|
+
readonly 'comment-respond': "CommentResponded";
|
|
1938
|
+
readonly 'review-request': "ReviewRequested";
|
|
1939
|
+
readonly 'review-append': "ReviewEntryAppended";
|
|
1940
|
+
readonly 'review-resolve': "ReviewEntryResolved";
|
|
1941
|
+
readonly 'converge-check': "ConvergenceChecked";
|
|
1942
|
+
readonly export: "CanvasExported";
|
|
1943
|
+
readonly dispatch: "NodeDispatched";
|
|
1944
|
+
};
|
|
1945
|
+
|
|
1946
|
+
/**
|
|
1947
|
+
* problem-solve-canvas 契约 —— 错误码词表与恢复动作文案。
|
|
1948
|
+
*
|
|
1949
|
+
* 对齐分级错误处理契约:mutate / marker 调用被拒时返回结构化错误
|
|
1950
|
+
* (code + message + recover),每码附一句恢复指引(设计 §3.1(1))——
|
|
1951
|
+
* 错误必须指向恢复动作,GUI toast 与 agent 工具结果双呈现同一文案。
|
|
1952
|
+
* 文案面向用户(中文),agent 可读。
|
|
1953
|
+
*/
|
|
1954
|
+
/** 结构化错误形状(CanvasMutateReply 失败腿 / marker 畸形请求应答共用)。 */
|
|
1955
|
+
interface CanvasError {
|
|
1956
|
+
code: CanvasErrorCode;
|
|
1957
|
+
/** 错误概述(发生了什么)。 */
|
|
1958
|
+
message: string;
|
|
1959
|
+
/** 恢复动作指引(下一步怎么做;SSOT = CANVAS_ERROR_RECOVERY,runtime 可附加动态数值)。 */
|
|
1960
|
+
recover: string;
|
|
1961
|
+
}
|
|
1962
|
+
/**
|
|
1963
|
+
* 错误码词表(封闭 15 值)。分组:
|
|
1964
|
+
* - 寻址 / 形状:canvas_not_found / node_not_found / edge_not_found /
|
|
1965
|
+
* invalid_params / unknown_action
|
|
1966
|
+
* - 权限:actor_not_allowed(矩阵表外组合 fail-fast)
|
|
1967
|
+
* - 不变量拦截:selection_conflict(不变量 3 双选定)/ cycle_detected(不变量 2 成环)/
|
|
1968
|
+
* unverified_fact(不变量 5)/ dispatch_blocked(不变量 7)/ not_converged(不变量 10)/
|
|
1969
|
+
* lifecycle_transition_illegal(状态机表外转移)
|
|
1970
|
+
* - 审查聚合:entry_ref_missing(聚合 2 不变量 1)/ already_resolved(first-writer-wins)/
|
|
1971
|
+
* review_max_rounds(轮次上限后再发起)
|
|
1972
|
+
*/
|
|
1973
|
+
declare const CANVAS_ERROR_CODES: readonly ["canvas_not_found", "node_not_found", "invalid_params", "unknown_action", "actor_not_allowed", "selection_conflict", "cycle_detected", "unverified_fact", "dispatch_blocked", "not_converged", "lifecycle_transition_illegal", "entry_ref_missing", "already_resolved", "review_max_rounds", "edge_not_found"];
|
|
1974
|
+
type CanvasErrorCode = (typeof CANVAS_ERROR_CODES)[number];
|
|
1975
|
+
/**
|
|
1976
|
+
* 每码一句恢复动作文案(SSOT;runtime 构造 CanvasError 时 recover 字段取此处
|
|
1977
|
+
* 模板,可前缀动态数值如「先处置 3 条 must-fix」。缺码 = 词表与文案表漂移,
|
|
1978
|
+
* 由测试锁定非空全覆盖)。
|
|
1979
|
+
*/
|
|
1980
|
+
declare const CANVAS_ERROR_RECOVERY: Record<CanvasErrorCode, string>;
|
|
1981
|
+
/** 构造结构化错误(recover 缺省取词表模板——每码必有恢复指引,构造性保证)。 */
|
|
1982
|
+
declare function canvasError(code: CanvasErrorCode, message: string): CanvasError;
|
|
1983
|
+
|
|
1984
|
+
/**
|
|
1985
|
+
* problem-solve-canvas 契约 —— action 参数 / 结果与运行时守卫。
|
|
1986
|
+
*
|
|
1987
|
+
* params 形状对齐设计文档 §3.1(1) action 要点与 §3.1(2) 工具面:
|
|
1988
|
+
* - grow/patch 的节点 id 由 agent 侧生成(全局唯一:时间戳 + 随机),写入按 id
|
|
1989
|
+
* upsert(同 id 重复写入无副作用)——崩溃窗口(marker 挂起期间 pi 死亡)重试安全
|
|
1990
|
+
* - select 带 replace 参数(换选 = 同一调用事务内先迁出旧 selected 再置新,
|
|
1991
|
+
* 附对比理由——不变量 3 的迁移语义承载)
|
|
1992
|
+
* - canvas_edit 族共享 reason 强制字段(留痕纪律)
|
|
1993
|
+
*
|
|
1994
|
+
* 守卫边界(对齐 session-manager 先例):类型面校验——形状 / 词表成员资格;
|
|
1995
|
+
* 领域校验(不变量 1-11、邻接矩阵、状态机合法转移)归 U2 CanvasService,
|
|
1996
|
+
* 契约层不复制不变量逻辑(避免双权威)。
|
|
1997
|
+
*/
|
|
1998
|
+
|
|
1999
|
+
/** 三类写入方(权限矩阵建制维度):user = GUI 直改 / agent = 工具面 / review = reviewer subagent。 */
|
|
2000
|
+
type CanvasActor = 'user' | 'agent' | 'review';
|
|
2001
|
+
/** create:根三要素必填(不变量 1)。GUI 托盘「+新建」与 canvas_enter 创建形态共用。 */
|
|
2002
|
+
interface CanvasCreateParams {
|
|
2003
|
+
/** 画布名(缺省由 runtime 按 statement 派生)。 */
|
|
2004
|
+
name?: string;
|
|
2005
|
+
statement: string;
|
|
2006
|
+
/** 完成判据(可证伪),至少一条。 */
|
|
2007
|
+
criterias: string[];
|
|
2008
|
+
/** 范围排除(设计文档 enter 参数表记作 scope)。 */
|
|
2009
|
+
scopeExclusions: string[];
|
|
2010
|
+
}
|
|
2011
|
+
/** grow 批条目:一条 = 一个新节点 + 其与既有图的一条连接边。 */
|
|
2012
|
+
interface CanvasGrowItem {
|
|
2013
|
+
/** agent 生成全局唯一 id(时间戳 + 随机);幂等 upsert 键——崩溃窗口重试不产生重复节点。 */
|
|
2014
|
+
id: string;
|
|
2015
|
+
type: CanvasNodeType;
|
|
2016
|
+
content: string;
|
|
2017
|
+
/** 连接目标:既有节点 id(或 argue 指主干边时的边 id)。 */
|
|
2018
|
+
attachTo: string;
|
|
2019
|
+
/** 连接边类型。 */
|
|
2020
|
+
edge: CanvasEdgeType;
|
|
2021
|
+
/** edge='argue' 时必带极性;同时作为 argument 节点的极性(裁决点 R1:极性是论据字段)。 */
|
|
2022
|
+
edgePolarity?: ArgumentPolarity;
|
|
2023
|
+
/**
|
|
2024
|
+
* type='argument' 时的素材性(缺省 claim)。fact 时核实状态随事件必带
|
|
2025
|
+
* (不变量 5:fact 论据必须携带核实状态)——U2 领域层补写的通道。
|
|
2026
|
+
*/
|
|
2027
|
+
materiality?: ArgumentMateriality;
|
|
2028
|
+
/** materiality='fact' 时的核实状态(缺省 false = 已携带「未核实」)。 */
|
|
2029
|
+
factVerified?: boolean;
|
|
2030
|
+
/** type='option' 时可显式标记执行叶子。 */
|
|
2031
|
+
dispatchable?: boolean;
|
|
2032
|
+
}
|
|
2033
|
+
interface CanvasGrowParams {
|
|
2034
|
+
canvasId: string;
|
|
2035
|
+
/** 批量生长:批内任一校验失败 = 整批拒绝、无部分写入(原子事务)。 */
|
|
2036
|
+
batch: CanvasGrowItem[];
|
|
2037
|
+
/** 变更理由(留痕纪律:没有理由的 agent 改动不可审计)。 */
|
|
2038
|
+
reason: string;
|
|
2039
|
+
}
|
|
2040
|
+
interface CanvasPatchParams {
|
|
2041
|
+
canvasId: string;
|
|
2042
|
+
nodeId: string;
|
|
2043
|
+
content?: string;
|
|
2044
|
+
/** 执行叶子完成判据编辑。 */
|
|
2045
|
+
criterias?: string[];
|
|
2046
|
+
/** 执行叶子标记变更。 */
|
|
2047
|
+
dispatchable?: boolean;
|
|
2048
|
+
/** fact 论据核实状态翻转。 */
|
|
2049
|
+
factVerified?: boolean;
|
|
2050
|
+
reason: string;
|
|
2051
|
+
}
|
|
2052
|
+
interface CanvasDecideDirectionParams {
|
|
2053
|
+
canvasId: string;
|
|
2054
|
+
direction: 'top-down' | 'bottom-up';
|
|
2055
|
+
reason: string;
|
|
2056
|
+
}
|
|
2057
|
+
interface CanvasSelectParams {
|
|
2058
|
+
canvasId: string;
|
|
2059
|
+
/** 被选定方案所属的 question 节点 id。 */
|
|
2060
|
+
questionId: string;
|
|
2061
|
+
optionId: string;
|
|
2062
|
+
/**
|
|
2063
|
+
* 换选迁移语义:同一调用事务内先迁出旧 selected(fromOptionId)再置新,
|
|
2064
|
+
* 旧选中方案的整个子树进入待重审(D9)。不带 replace 时旧选定已存在
|
|
2065
|
+
* → selection_conflict 拒绝(不变量 3)。
|
|
2066
|
+
*/
|
|
2067
|
+
replace?: {
|
|
2068
|
+
fromOptionId: string;
|
|
2069
|
+
};
|
|
2070
|
+
/** 对比理由(不变量 3:选择须留对比与理由)。 */
|
|
2071
|
+
reason: string;
|
|
2072
|
+
}
|
|
2073
|
+
interface CanvasTransitionParams {
|
|
2074
|
+
canvasId: string;
|
|
2075
|
+
nodeId: string;
|
|
2076
|
+
/** 目标生命周期态(合法转移表校验归 U2;rejected 须附否决记录——不可删除)。 */
|
|
2077
|
+
to: CanvasNodeLifecycle;
|
|
2078
|
+
/** 否决记录(to='rejected' 时必填:否决理由,可附复活条件)。 */
|
|
2079
|
+
rejection?: {
|
|
2080
|
+
reason: string;
|
|
2081
|
+
reviveCondition?: string;
|
|
2082
|
+
};
|
|
2083
|
+
reason: string;
|
|
2084
|
+
}
|
|
2085
|
+
interface CanvasCommentParams {
|
|
2086
|
+
canvasId: string;
|
|
2087
|
+
/** 锚定目标:节点 id 或边 id。 */
|
|
2088
|
+
anchorId: string;
|
|
2089
|
+
text: string;
|
|
2090
|
+
}
|
|
2091
|
+
interface CanvasCommentRespondParams {
|
|
2092
|
+
canvasId: string;
|
|
2093
|
+
commentId: string;
|
|
2094
|
+
/** 采纳(并落实到图)/ 反驳(留理由)二选一——不允许无视(不变量 8 响应义务)。 */
|
|
2095
|
+
disposition: 'adopted' | 'rebutted';
|
|
2096
|
+
/** 响应留痕(采纳的落实说明 / 反驳的理由)。 */
|
|
2097
|
+
note: string;
|
|
2098
|
+
}
|
|
2099
|
+
interface CanvasReviewRequestParams {
|
|
2100
|
+
canvasId: string;
|
|
2101
|
+
/** R2+ 轮次的审查范围收窄描述(「上轮处置表 + 攻击点」);R1 全面审缺省。 */
|
|
2102
|
+
scope?: string;
|
|
2103
|
+
}
|
|
2104
|
+
/** review-append 单条报告条目输入(id 由 reviewer 生成,幂等 upsert 同 grow)。 */
|
|
2105
|
+
interface CanvasReviewEntryInput {
|
|
2106
|
+
id: string;
|
|
2107
|
+
round: number;
|
|
2108
|
+
dimension: ReviewDimension;
|
|
2109
|
+
severity: ReviewSeverity;
|
|
2110
|
+
/** 引用的图元素 id(必须存在于画布——聚合 2 不变量 1)。 */
|
|
2111
|
+
targetId: string;
|
|
2112
|
+
note: string;
|
|
2113
|
+
/**
|
|
2114
|
+
* 支撑度评价(概念 §2.4「边的缺陷经支撑度表达」的写入通道——审查结论随条目落
|
|
2115
|
+
* edge.support,round 由 runtime 按报告轮次注入「审查轮次溯源」):targetId 须为
|
|
2116
|
+
* 主干边(decompose/resolve,裁决点 R3——论证边不评级),非主干边携带即拒。
|
|
2117
|
+
*/
|
|
2118
|
+
supportRating?: SupportRating;
|
|
2119
|
+
/** rating='gap' 的缺口清单(「有缺口附清单」词条语义:至少一条);sufficient/invalid 不带。 */
|
|
2120
|
+
supportGaps?: string[];
|
|
2121
|
+
}
|
|
2122
|
+
interface CanvasReviewAppendParams {
|
|
2123
|
+
canvasId: string;
|
|
2124
|
+
/** 报告归属轮次。 */
|
|
2125
|
+
round: number;
|
|
2126
|
+
entries: CanvasReviewEntryInput[];
|
|
2127
|
+
}
|
|
2128
|
+
interface CanvasReviewResolveParams {
|
|
2129
|
+
canvasId: string;
|
|
2130
|
+
entryId: string;
|
|
2131
|
+
/** 处置三选一(采纳 / 登记后做 / 拒绝留理由)。 */
|
|
2132
|
+
disposition: 'accepted' | 'deferred' | 'rejected';
|
|
2133
|
+
/** 处置说明(拒绝时为拒绝理由)。 */
|
|
2134
|
+
note: string;
|
|
2135
|
+
}
|
|
2136
|
+
/** converge-check:无业务参数——三门禁校验(不变量 10)+ 置 converged 终态。 */
|
|
2137
|
+
interface CanvasConvergeCheckParams {
|
|
2138
|
+
canvasId: string;
|
|
2139
|
+
}
|
|
2140
|
+
type CanvasExportTarget = {
|
|
2141
|
+
target: 'planning-doc';
|
|
2142
|
+
} | {
|
|
2143
|
+
target: 'requirement-card'; /** 需求卡对应的执行叶子节点 id。 */
|
|
2144
|
+
leafId: string;
|
|
2145
|
+
};
|
|
2146
|
+
interface CanvasExportParams {
|
|
2147
|
+
canvasId: string;
|
|
2148
|
+
target: CanvasExportTarget;
|
|
2149
|
+
}
|
|
2150
|
+
interface CanvasDispatchParams {
|
|
2151
|
+
canvasId: string;
|
|
2152
|
+
/** 执行叶子节点 id(dispatched 前必须 passed——不变量 7)。 */
|
|
2153
|
+
nodeId: string;
|
|
2154
|
+
/** 下游产物指针(必填:设计文档 / impl-plan 位置,用户手填)。 */
|
|
2155
|
+
pointer: string;
|
|
2156
|
+
}
|
|
2157
|
+
interface CanvasReadParams {
|
|
2158
|
+
canvasId: string;
|
|
2159
|
+
/** 子树读取:从该节点 id 向下的主干子树;缺省读全量。 */
|
|
2160
|
+
subtree?: string;
|
|
2161
|
+
}
|
|
2162
|
+
/** list:无参数(全量画布清单;过滤无字段——Record 结构性拒绝夹带)。 */
|
|
2163
|
+
type CanvasListParams = Record<string, never>;
|
|
2164
|
+
/** 16 action 的 params 映射(SSOT;两通道共用——WS RPC 与 marker 的 params 同构)。 */
|
|
2165
|
+
interface CanvasActionParams {
|
|
2166
|
+
create: CanvasCreateParams;
|
|
2167
|
+
grow: CanvasGrowParams;
|
|
2168
|
+
patch: CanvasPatchParams;
|
|
2169
|
+
'decide-direction': CanvasDecideDirectionParams;
|
|
2170
|
+
select: CanvasSelectParams;
|
|
2171
|
+
transition: CanvasTransitionParams;
|
|
2172
|
+
comment: CanvasCommentParams;
|
|
2173
|
+
'comment-respond': CanvasCommentRespondParams;
|
|
2174
|
+
'review-request': CanvasReviewRequestParams;
|
|
2175
|
+
'review-append': CanvasReviewAppendParams;
|
|
2176
|
+
'review-resolve': CanvasReviewResolveParams;
|
|
2177
|
+
'converge-check': CanvasConvergeCheckParams;
|
|
2178
|
+
export: CanvasExportParams;
|
|
2179
|
+
dispatch: CanvasDispatchParams;
|
|
2180
|
+
read: CanvasReadParams;
|
|
2181
|
+
list: CanvasListParams;
|
|
2182
|
+
}
|
|
2183
|
+
type CanvasAction = (typeof CANVAS_ACTIONS)[number];
|
|
2184
|
+
/** mutate 请求判别联合:按 action 收窄 params(renderer / handler 两侧 switch 同构收窄)。 */
|
|
2185
|
+
type CanvasMutateRequest = {
|
|
2186
|
+
[A in CanvasAction]: {
|
|
2187
|
+
action: A;
|
|
2188
|
+
params: CanvasActionParams[A];
|
|
2189
|
+
};
|
|
2190
|
+
}[CanvasAction];
|
|
2191
|
+
type CanvasMarkerAction = (typeof CANVAS_MARKER_ACTIONS)[number];
|
|
2192
|
+
/** enter(canvas_enter 打开形态):读全量 + 登记绑定;非画布 mutation、不产事件。 */
|
|
2193
|
+
interface CanvasEnterParams {
|
|
2194
|
+
canvasId: string;
|
|
2195
|
+
}
|
|
2196
|
+
/** marker 通道 params 映射 = mutate 词表 params + enter。 */
|
|
2197
|
+
interface CanvasMarkerParams extends CanvasActionParams {
|
|
2198
|
+
enter: CanvasEnterParams;
|
|
2199
|
+
}
|
|
2200
|
+
/** marker 请求条目(extension select 挂起载荷:[{action, params}],session-manager 同构)。 */
|
|
2201
|
+
interface CanvasMarkerRequest {
|
|
2202
|
+
action: CanvasMarkerAction;
|
|
2203
|
+
params: CanvasMarkerParams[CanvasMarkerAction];
|
|
2204
|
+
}
|
|
2205
|
+
/** mutate 统一两态信封(mcp McpMutationResult 先例;广播 canvas.updated 与本信封
|
|
2206
|
+
* 的成功腿同源同值——调用方拿本 mutation 的事件回执,全量状态经 canvas.get 拉取)。 */
|
|
2207
|
+
type CanvasMutateReply = {
|
|
2208
|
+
ok: true;
|
|
2209
|
+
eventId: string;
|
|
2210
|
+
evType: CanvasEventType;
|
|
2211
|
+
summary: string;
|
|
2212
|
+
} | {
|
|
2213
|
+
ok: false;
|
|
2214
|
+
error: CanvasError;
|
|
2215
|
+
};
|
|
2216
|
+
/** canvas.list reply。 */
|
|
2217
|
+
interface CanvasListReply {
|
|
2218
|
+
canvases: CanvasListEntry[];
|
|
2219
|
+
}
|
|
2220
|
+
/** enter / read 的结果:画布全量(打开即完整图——设计目标 1「用户点开即见完整图」)。 */
|
|
2221
|
+
type CanvasReadReply = CanvasState;
|
|
2222
|
+
declare function isCanvasCreateParams(v: unknown): v is CanvasCreateParams;
|
|
2223
|
+
declare function isCanvasGrowParams(v: unknown): v is CanvasGrowParams;
|
|
2224
|
+
declare function isCanvasPatchParams(v: unknown): v is CanvasPatchParams;
|
|
2225
|
+
declare function isCanvasDecideDirectionParams(v: unknown): v is CanvasDecideDirectionParams;
|
|
2226
|
+
declare function isCanvasSelectParams(v: unknown): v is CanvasSelectParams;
|
|
2227
|
+
declare function isCanvasTransitionParams(v: unknown): v is CanvasTransitionParams;
|
|
2228
|
+
declare function isCanvasCommentParams(v: unknown): v is CanvasCommentParams;
|
|
2229
|
+
declare function isCanvasCommentRespondParams(v: unknown): v is CanvasCommentRespondParams;
|
|
2230
|
+
declare function isCanvasReviewRequestParams(v: unknown): v is CanvasReviewRequestParams;
|
|
2231
|
+
declare function isCanvasReviewAppendParams(v: unknown): v is CanvasReviewAppendParams;
|
|
2232
|
+
declare function isCanvasReviewResolveParams(v: unknown): v is CanvasReviewResolveParams;
|
|
2233
|
+
declare function isCanvasConvergeCheckParams(v: unknown): v is CanvasConvergeCheckParams;
|
|
2234
|
+
declare function isCanvasExportParams(v: unknown): v is CanvasExportParams;
|
|
2235
|
+
declare function isCanvasDispatchParams(v: unknown): v is CanvasDispatchParams;
|
|
2236
|
+
declare function isCanvasReadParams(v: unknown): v is CanvasReadParams;
|
|
2237
|
+
/** list:无参数——Record 结构性拒绝夹带任何过滤字段(session-manager list 同款)。 */
|
|
2238
|
+
declare function isCanvasListParams(v: unknown): v is CanvasListParams;
|
|
2239
|
+
/** enter(canvas_enter 打开形态):封闭单键 canvasId。 */
|
|
2240
|
+
declare function isCanvasEnterParams(v: unknown): v is CanvasEnterParams;
|
|
2241
|
+
/** marker 通道总守卫:action + params 按 marker 词表分派;表外 action 返回 false
|
|
2242
|
+
* (event-adapter / CanvasHandler 据此走结构化错误应答)。 */
|
|
2243
|
+
declare function isCanvasMarkerRequest(v: unknown): v is CanvasMarkerRequest;
|
|
2244
|
+
/** 材料性守卫(grow item 的 materiality 类型面收窄备用;U2 重建回放读侧消费)。 */
|
|
2245
|
+
declare function isArgumentMateriality(v: unknown): v is ArgumentMateriality;
|
|
2246
|
+
/** 论据极性守卫(读侧收窄备用)。 */
|
|
2247
|
+
declare function isArgumentPolarity(v: unknown): v is ArgumentPolarity;
|
|
2248
|
+
|
|
2249
|
+
/**
|
|
2250
|
+
* 权限矩阵:action × actor → 是否合法。逐格对齐设计 §3.1(1) 矩阵表:
|
|
2251
|
+
* - decide-direction / comment / converge-check / dispatch 仅 user(用户裁决性动作,
|
|
2252
|
+
* agent 侧走对话文本建议 / 代执行边界见设计;review 无)
|
|
2253
|
+
* - review-append 仅 review(reviewer subagent 的报告写回通道)
|
|
2254
|
+
* - read / list 全 actor 开放(查询类)
|
|
2255
|
+
* - select 的 agent 格 = 仅代执行用户明示指令——语义约束落 prompt 指引层(U4),
|
|
2256
|
+
* runtime 按通道放行、不按意图判定(矩阵此格为 true)
|
|
2257
|
+
*/
|
|
2258
|
+
declare const CANVAS_ACTOR_MATRIX: Record<CanvasAction, Record<CanvasActor, boolean>>;
|
|
2259
|
+
/** 矩阵单格查询(CanvasService 唯一入口的校验原语;表外组合 = false → fail-fast)。 */
|
|
2260
|
+
declare function isActionAllowed(action: CanvasAction, actor: CanvasActor): boolean;
|
|
2261
|
+
/** 六工具动词族(全部 exposure: "deferred"):工具名 → 该工具承载的 action 清单。
|
|
2262
|
+
* enter 打开形态走 marker 通道 'enter' 动作(非 mutation、不在本表——本表只登记
|
|
2263
|
+
* mutate 词表落点);canvas_enter 创建形态落 create。 */
|
|
2264
|
+
declare const TOOL_ACTION_MAP: {
|
|
2265
|
+
readonly canvas_enter: readonly ["create"];
|
|
2266
|
+
readonly canvas_edit: readonly ["grow", "patch", "select", "transition", "comment-respond"];
|
|
2267
|
+
readonly canvas_read: readonly ["read"];
|
|
2268
|
+
readonly canvas_review: readonly ["review-request", "review-append", "review-resolve"];
|
|
2269
|
+
readonly canvas_export: readonly ["export"];
|
|
2270
|
+
readonly canvas_list: readonly ["list"];
|
|
2271
|
+
};
|
|
2272
|
+
type CanvasToolName = keyof typeof TOOL_ACTION_MAP;
|
|
2273
|
+
/** 六工具名清单(U4 工具面注册对账用)。 */
|
|
2274
|
+
declare const CANVAS_TOOL_NAMES: readonly CanvasToolName[];
|
|
2275
|
+
/**
|
|
2276
|
+
* 非工具入口动作(4 个):不进任何工具、仅 GUI(WS RPC mutate, actor=user)直达的
|
|
2277
|
+
* 用户裁决性动作——「16 action 全部进入映射对账」的另一半(工具可达 12 + GUI-only 4
|
|
2278
|
+
* = 词表 16)。全部仅 user(权限矩阵):
|
|
2279
|
+
* - decide-direction:方向裁决是终裁决动作,agent 不得自主(方向推荐走对话文本建议)
|
|
2280
|
+
* - comment:评论 = 用户注入议题;响应义务方是 agent(走 comment-respond)
|
|
2281
|
+
* - converge-check:确认收敛 = 用户点击(三门禁校验后置 converged 终态)
|
|
2282
|
+
* - dispatch:派发 = 用户逐叶确认 + 手填下游指针(D8 裁决:派发 = 用户拍板)
|
|
2283
|
+
*/
|
|
2284
|
+
declare const NON_TOOL_ACTIONS: readonly [{
|
|
2285
|
+
readonly action: "decide-direction";
|
|
2286
|
+
readonly entry: "gui-only(用户拍板:方向裁决是终裁决动作,agent 不得自主)";
|
|
2287
|
+
}, {
|
|
2288
|
+
readonly action: "comment";
|
|
2289
|
+
readonly entry: "gui-only(评论 = 用户注入议题;响应义务方是 agent,走 comment-respond)";
|
|
2290
|
+
}, {
|
|
2291
|
+
readonly action: "converge-check";
|
|
2292
|
+
readonly entry: "gui-only(确认收敛 = 用户点击,三门禁校验后置终态)";
|
|
2293
|
+
}, {
|
|
2294
|
+
readonly action: "dispatch";
|
|
2295
|
+
readonly entry: "gui-only(派发 = 用户逐叶确认 + 手填下游指针,用户拍板)";
|
|
2296
|
+
}];
|
|
2297
|
+
/** 反查:action 由哪个工具承载(未命中 = 非工具动作,见 NON_TOOL_ACTIONS)。 */
|
|
2298
|
+
declare function toolOfAction(action: CanvasAction): CanvasToolName | undefined;
|
|
2299
|
+
/** 全部映射动作的并集(对账辅助;一致性测试断言其与 CANVAS_ACTIONS 的关系)。 */
|
|
2300
|
+
declare function allToolActions(): CanvasAction[];
|
|
2301
|
+
/** 词表全集(对账辅助:-export const 引用,保持三方对账口径单点)。 */
|
|
2302
|
+
declare function allCanvasActions(): readonly CanvasAction[];
|
|
2303
|
+
|
|
1647
2304
|
/**
|
|
1648
2305
|
* pending entries 差集核心(落盘形态语义:customType 字符串 + 抵消/去重规则)——
|
|
1649
2306
|
* 跨端单一实现(ext-simplify-13 D3)。
|
|
@@ -1726,4 +2383,4 @@ declare function collectActivePendingIds(entries: unknown[], opts?: CollectPendi
|
|
|
1726
2383
|
type MappedPendingStatus = 'completed' | 'failed' | 'cancelled' | 'expired' | 'time_limited' | 'aborted';
|
|
1727
2384
|
declare function mapReasonToStatus(reason: string): MappedPendingStatus;
|
|
1728
2385
|
|
|
1729
|
-
export { ASK_USER_MARKER, type AskUserAnswers, type AskUserOption, type AskUserQuestion, type ChannelErrorResult, type ChoiceQuestion, type CollectPendingIdsOptions, type DualWidgetContent, type ExecutionRecord, type FormAnswers, type FormOption, type FormQuestion, GUI_WIDGET_MARKER, type GuiComponent, type GuiComponentProps, type GuiComponentType, type GuiContext, type GuiRenderResult, HISTORY_LIMIT, INFLIGHT_REPORT_ACK, JOURNAL_REPORT_ACK, MS_PER_DAY, MS_PER_HOUR, MS_PER_MINUTE, MS_PER_SECOND, type MappedPendingStatus, type MarkerRpcOptions, type MarkerRpcResult, PENDING_REGISTER_ENTRY_TYPE, PENDING_UNREGISTER_ENTRY_TYPE, PLAN_LIFECYCLE_EVENTS, PLAN_LIFECYCLE_STATES, PLAN_REVIEW_MARKER, PLAN_SELF_REVIEW_MAX_BYTES, PLAN_STATE_CUSTOM_TYPE, PROTOCOL_VERSION, type PendingEntriesScan, type PlanDocMeta, type PlanLifecycleEvent, type PlanLifecycleState, type PlanPhase, type PlanReviewComment, type PlanReviewDecision, type PlanReviewRequest, type PlanReviewResponse, type PlanReviewResponseEnvelope, type PlanTransitionResult, type ReplayFoldOptions, SCHEDULER_MODAL_VIEW_ID, SCHEDULE_CREATE_MARKER, SESSION_MANAGER_ACTIONS, SESSION_MANAGER_MARKER, SUBAGENTS_ENGINES_FILENAME, SUBAGENT_BG_NOTIFY_CUSTOM_TYPE, SUBAGENT_DIRECTIVE_CUSTOM_TYPE, SUBAGENT_INFLIGHT_MARKER, SUBAGENT_JOURNAL_MARKER, type ScheduleDraft, type ScheduleFormResult, type ScheduleKind, type ScheduleQuestion, type ScheduleSpec, type ScheduledTask, type SchedulerEntryLike, type SchedulerEntryOp, type SessionManagerAbortParams, type SessionManagerAbortResult, type SessionManagerAction, type SessionManagerCreateParams, type SessionManagerCreateResult, type SessionManagerErrorResult, type SessionManagerHistoryParams, type SessionManagerHistoryResult, type SessionManagerListParams, type SessionManagerListResult, type SessionManagerParams, type SessionManagerSendParams, type SessionManagerSendResult, type SessionManagerSessionSummary, type SessionManagerStatusParams, type SessionManagerStatusResult, type SessionManagerWatchParams, type SessionManagerWatchReason, type SessionManagerWatchRespondPayload, type StatItem, type SubagentEngineConfigView, type SubagentEngineModelInfo, type SubagentEnginesFile, type SubagentInFlightReport, type SubagentJournalDomain, type SubagentJournalEvent, type SubagentJournalReport, TASK_ENTRY_TYPE, type TaskKind, type TaskSnapshot, type TaskStatus, type TextQuestion, type TreeItem, type TreeItemIcon, UI_FORM_MARKER, type UiFormInteractOptions, type UiFormInteractResult, WORKFLOW_RESULT_CUSTOM_TYPE, type WidgetIconPathsRejection, type WidgetIconPathsValidation, type WidgetMeta, appendExecutionRecord, applyPendingDiff, callMarkerRpc, collectActivePendingIds, dateToOnceCron, derivePhase, extractGui, firstContentText, formatChannelErrorText, formatDuration, formatRelativeTime, formatSchedule, getAskUserAnswer, getAskUserOther, guiComponent, guiResult, guiSetWidget, isAskUserQuestion, isChannelErrorResult, isFormAnswers, isFormQuestion, isGuiCapable, isGuiComponent, isGuiRenderResult, isInFlightReportAck, isJournalReportAck, isPlanReviewRequest, isPlanReviewResponse, isScheduleDraft, isScheduleFormResult, isSessionManagerAbortParams, isSessionManagerCreateParams, isSessionManagerHistoryParams, isSessionManagerListParams, isSessionManagerNotifyId, isSessionManagerSendParams, isSessionManagerStatusParams, isSessionManagerWatchParams, isSessionManagerWatchRespondPayload, isSubagentInFlightReport, isSubagentJournalReport, mapReasonToStatus, onceCronToDate, parsePlanReviewResponse, readLifecycleState, readResumeHint, replayFoldEntries, scanPendingEntries, setWidgetDual, snapshotToTask, transition, truncateSelfReview, uiFormInteract, validateWidgetIconPaths };
|
|
2386
|
+
export { ACTION_EVENT_MAP, ASK_USER_MARKER, type ArgumentMateriality, type ArgumentPolarity, type AskUserAnswers, type AskUserOption, type AskUserQuestion, CANVAS_ACTIONS, CANVAS_ACTOR_MATRIX, CANVAS_ERROR_CODES, CANVAS_ERROR_RECOVERY, CANVAS_EVENT_TYPES, CANVAS_MARKER, CANVAS_MARKER_ACTIONS, CANVAS_TOOL_NAMES, type CanvasAction, type CanvasActionParams, type CanvasActor, type CanvasComment, type CanvasCommentParams, type CanvasCommentRespondParams, type CanvasConvergeCheckParams, type CanvasCreateParams, type CanvasDecideDirectionParams, type CanvasDirectionDecision, type CanvasDispatchParams, type CanvasEdge, type CanvasEdgeType, type CanvasEnterParams, type CanvasError, type CanvasErrorCode, type CanvasEventType, type CanvasExportParams, type CanvasExportTarget, type CanvasGrowItem, type CanvasGrowParams, type CanvasListEntry, type CanvasListParams, type CanvasListReply, type CanvasMarkerAction, type CanvasMarkerParams, type CanvasMarkerRequest, type CanvasMutateReply, type CanvasMutateRequest, type CanvasNode, type CanvasNodeLifecycle, type CanvasNodeType, type CanvasPatchParams, type CanvasReadParams, type CanvasReadReply, type CanvasReviewAppendParams, type CanvasReviewEntryInput, type CanvasReviewRequestParams, type CanvasReviewResolveParams, type CanvasSelectParams, type CanvasState, type CanvasToolName, type CanvasTransitionParams, type ChannelErrorResult, type ChoiceQuestion, type CollectPendingIdsOptions, type DualWidgetContent, type ExecutionRecord, type FormAnswers, type FormOption, type FormQuestion, GUI_WIDGET_MARKER, type GuiComponent, type GuiComponentProps, type GuiComponentType, type GuiContext, type GuiRenderResult, HISTORY_LIMIT, INFLIGHT_REPORT_ACK, JOURNAL_REPORT_ACK, MS_PER_DAY, MS_PER_HOUR, MS_PER_MINUTE, MS_PER_SECOND, type MappedPendingStatus, type MarkerRpcOptions, type MarkerRpcResult, NON_TOOL_ACTIONS, PENDING_REGISTER_ENTRY_TYPE, PENDING_UNREGISTER_ENTRY_TYPE, PLAN_LIFECYCLE_EVENTS, PLAN_LIFECYCLE_STATES, PLAN_REVIEW_MARKER, PLAN_SELF_REVIEW_MAX_BYTES, PLAN_STATE_CUSTOM_TYPE, PROTOCOL_VERSION, type PendingEntriesScan, type PlanDocMeta, type PlanLifecycleEvent, type PlanLifecycleState, type PlanPhase, type PlanReviewComment, type PlanReviewDecision, type PlanReviewRequest, type PlanReviewResponse, type PlanReviewResponseEnvelope, type PlanTransitionResult, type ReplayFoldOptions, type ReviewDimension, type ReviewEntry, type ReviewReport, type ReviewReportStatus, type ReviewResolutionDisposition, type ReviewSeverity, SCHEDULER_MODAL_VIEW_ID, SCHEDULE_CREATE_MARKER, SESSION_MANAGER_ACTIONS, SESSION_MANAGER_MARKER, SUBAGENTS_ENGINES_FILENAME, SUBAGENT_BG_NOTIFY_CUSTOM_TYPE, SUBAGENT_DIRECTIVE_CUSTOM_TYPE, SUBAGENT_INFLIGHT_MARKER, SUBAGENT_JOURNAL_MARKER, type ScheduleDraft, type ScheduleFormResult, type ScheduleKind, type ScheduleQuestion, type ScheduleSpec, type ScheduledTask, type SchedulerEntryLike, type SchedulerEntryOp, type SessionManagerAbortParams, type SessionManagerAbortResult, type SessionManagerAction, type SessionManagerCreateParams, type SessionManagerCreateResult, type SessionManagerErrorResult, type SessionManagerHistoryParams, type SessionManagerHistoryResult, type SessionManagerListParams, type SessionManagerListResult, type SessionManagerParams, type SessionManagerSendParams, type SessionManagerSendResult, type SessionManagerSessionSummary, type SessionManagerStatusParams, type SessionManagerStatusResult, type SessionManagerWatchParams, type SessionManagerWatchReason, type SessionManagerWatchRespondPayload, type StatItem, type SubagentEngineConfigView, type SubagentEngineModelInfo, type SubagentEnginesFile, type SubagentInFlightReport, type SubagentJournalDomain, type SubagentJournalEvent, type SubagentJournalReport, type SupportRating, TASK_ENTRY_TYPE, TOOL_ACTION_MAP, type TaskKind, type TaskSnapshot, type TaskStatus, type TextQuestion, type TreeItem, type TreeItemIcon, UI_FORM_MARKER, type UiFormInteractOptions, type UiFormInteractResult, WORKFLOW_RESULT_CUSTOM_TYPE, type WidgetIconPathsRejection, type WidgetIconPathsValidation, type WidgetMeta, allCanvasActions, allToolActions, appendExecutionRecord, applyPendingDiff, callMarkerRpc, canvasError, collectActivePendingIds, dateToOnceCron, derivePhase, extractGui, firstContentText, formatChannelErrorText, formatDuration, formatRelativeTime, formatSchedule, getAskUserAnswer, getAskUserOther, guiComponent, guiResult, guiSetWidget, isActionAllowed, isArgumentMateriality, isArgumentPolarity, isAskUserQuestion, isCanvasCommentParams, isCanvasCommentRespondParams, isCanvasConvergeCheckParams, isCanvasCreateParams, isCanvasDecideDirectionParams, isCanvasDispatchParams, isCanvasEnterParams, isCanvasExportParams, isCanvasGrowParams, isCanvasListParams, isCanvasMarkerRequest, isCanvasPatchParams, isCanvasReadParams, isCanvasReviewAppendParams, isCanvasReviewRequestParams, isCanvasReviewResolveParams, isCanvasSelectParams, isCanvasTransitionParams, isChannelErrorResult, isFormAnswers, isFormQuestion, isGuiCapable, isGuiComponent, isGuiRenderResult, isInFlightReportAck, isJournalReportAck, isPlanReviewRequest, isPlanReviewResponse, isScheduleDraft, isScheduleFormResult, isSessionManagerAbortParams, isSessionManagerCreateParams, isSessionManagerHistoryParams, isSessionManagerListParams, isSessionManagerNotifyId, isSessionManagerSendParams, isSessionManagerStatusParams, isSessionManagerWatchParams, isSessionManagerWatchRespondPayload, isSubagentInFlightReport, isSubagentJournalReport, mapReasonToStatus, onceCronToDate, parsePlanReviewResponse, readLifecycleState, readResumeHint, replayFoldEntries, scanPendingEntries, setWidgetDual, snapshotToTask, toolOfAction, transition, truncateSelfReview, uiFormInteract, validateWidgetIconPaths };
|
package/dist/index.js
CHANGED
|
@@ -794,6 +794,310 @@ var SUBAGENT_DIRECTIVE_CUSTOM_TYPE = "subagent-directive";
|
|
|
794
794
|
// src/extensions/subagent-engine/contract.ts
|
|
795
795
|
var SUBAGENTS_ENGINES_FILENAME = "engines.json";
|
|
796
796
|
|
|
797
|
+
// src/extensions/canvas/marker.ts
|
|
798
|
+
var CANVAS_MARKER = "\0TAIJI_CANVAS";
|
|
799
|
+
var CANVAS_ACTIONS = [
|
|
800
|
+
"create",
|
|
801
|
+
"grow",
|
|
802
|
+
"patch",
|
|
803
|
+
"decide-direction",
|
|
804
|
+
"select",
|
|
805
|
+
"transition",
|
|
806
|
+
"comment",
|
|
807
|
+
"comment-respond",
|
|
808
|
+
"review-request",
|
|
809
|
+
"review-append",
|
|
810
|
+
"review-resolve",
|
|
811
|
+
"converge-check",
|
|
812
|
+
"export",
|
|
813
|
+
"dispatch",
|
|
814
|
+
"read",
|
|
815
|
+
"list"
|
|
816
|
+
];
|
|
817
|
+
var CANVAS_MARKER_ACTIONS = [...CANVAS_ACTIONS, "enter"];
|
|
818
|
+
|
|
819
|
+
// src/extensions/canvas/actions.ts
|
|
820
|
+
function isRecord4(v) {
|
|
821
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
822
|
+
}
|
|
823
|
+
function isOptionalString3(v) {
|
|
824
|
+
return v === void 0 || typeof v === "string";
|
|
825
|
+
}
|
|
826
|
+
function isStringArray2(v) {
|
|
827
|
+
return Array.isArray(v) && v.every((x) => typeof x === "string");
|
|
828
|
+
}
|
|
829
|
+
function isOptionalStringArray(v) {
|
|
830
|
+
return v === void 0 || isStringArray2(v);
|
|
831
|
+
}
|
|
832
|
+
function isOptionalBoolean(v) {
|
|
833
|
+
return v === void 0 || typeof v === "boolean";
|
|
834
|
+
}
|
|
835
|
+
function isStringIn(set, v) {
|
|
836
|
+
return typeof v === "string" && set.includes(v);
|
|
837
|
+
}
|
|
838
|
+
function isOptionalGuarded(guard, v) {
|
|
839
|
+
return v === void 0 || guard(v);
|
|
840
|
+
}
|
|
841
|
+
function isStringField(v, key) {
|
|
842
|
+
return typeof v[key] === "string";
|
|
843
|
+
}
|
|
844
|
+
function requireCanvasId(v) {
|
|
845
|
+
return isStringField(v, "canvasId");
|
|
846
|
+
}
|
|
847
|
+
function isCanvasCreateParams(v) {
|
|
848
|
+
return isRecord4(v) && isOptionalString3(v.name) && typeof v.statement === "string" && isStringArray2(v.criterias) && isStringArray2(v.scopeExclusions);
|
|
849
|
+
}
|
|
850
|
+
var CANVAS_NODE_TYPES = ["question", "option", "argument", "constraint"];
|
|
851
|
+
var CANVAS_EDGE_TYPES = ["decompose", "resolve", "argue", "rebut"];
|
|
852
|
+
var ARGUMENT_POLARITIES = ["support", "object"];
|
|
853
|
+
function isCanvasGrowItem(v) {
|
|
854
|
+
return isRecord4(v) && isStringField(v, "id") && isStringIn(CANVAS_NODE_TYPES, v.type) && isStringField(v, "content") && isStringField(v, "attachTo") && isStringIn(CANVAS_EDGE_TYPES, v.edge) && isOptionalGuarded(isArgumentPolarity, v.edgePolarity) && isOptionalGuarded(isArgumentMateriality, v.materiality) && isOptionalBoolean(v.factVerified) && isOptionalBoolean(v.dispatchable);
|
|
855
|
+
}
|
|
856
|
+
function isCanvasGrowParams(v) {
|
|
857
|
+
return isRecord4(v) && requireCanvasId(v) && Array.isArray(v.batch) && v.batch.every((item) => isCanvasGrowItem(item)) && typeof v.reason === "string";
|
|
858
|
+
}
|
|
859
|
+
function isCanvasPatchParams(v) {
|
|
860
|
+
return isRecord4(v) && requireCanvasId(v) && isStringField(v, "nodeId") && isOptionalString3(v.content) && isOptionalStringArray(v.criterias) && isOptionalBoolean(v.dispatchable) && isOptionalBoolean(v.factVerified) && typeof v.reason === "string";
|
|
861
|
+
}
|
|
862
|
+
function isCanvasDecideDirectionParams(v) {
|
|
863
|
+
return isRecord4(v) && requireCanvasId(v) && isStringIn(["top-down", "bottom-up"], v.direction) && typeof v.reason === "string";
|
|
864
|
+
}
|
|
865
|
+
function isCanvasSelectParams(v) {
|
|
866
|
+
if (!(isRecord4(v) && requireCanvasId(v) && isStringField(v, "questionId") && isStringField(v, "optionId") && typeof v.reason === "string")) {
|
|
867
|
+
return false;
|
|
868
|
+
}
|
|
869
|
+
if (v.replace === void 0) return true;
|
|
870
|
+
return isRecord4(v.replace) && isStringField(v.replace, "fromOptionId");
|
|
871
|
+
}
|
|
872
|
+
var CANVAS_LIFECYCLES = ["draft", "under-review", "passed", "rejected", "shelved"];
|
|
873
|
+
function isCanvasTransitionParams(v) {
|
|
874
|
+
if (!(isRecord4(v) && requireCanvasId(v) && isStringField(v, "nodeId") && typeof v.reason === "string")) {
|
|
875
|
+
return false;
|
|
876
|
+
}
|
|
877
|
+
if (!isStringIn(CANVAS_LIFECYCLES, v.to)) return false;
|
|
878
|
+
if (v.rejection === void 0) return true;
|
|
879
|
+
return isRecord4(v.rejection) && isStringField(v.rejection, "reason") && isOptionalString3(v.rejection.reviveCondition);
|
|
880
|
+
}
|
|
881
|
+
function isCanvasCommentParams(v) {
|
|
882
|
+
return isRecord4(v) && requireCanvasId(v) && isStringField(v, "anchorId") && typeof v.text === "string";
|
|
883
|
+
}
|
|
884
|
+
function isCanvasCommentRespondParams(v) {
|
|
885
|
+
return isRecord4(v) && requireCanvasId(v) && isStringField(v, "commentId") && isStringIn(["adopted", "rebutted"], v.disposition) && typeof v.note === "string";
|
|
886
|
+
}
|
|
887
|
+
function isCanvasReviewRequestParams(v) {
|
|
888
|
+
return isRecord4(v) && requireCanvasId(v) && isOptionalString3(v.scope);
|
|
889
|
+
}
|
|
890
|
+
var REVIEW_DIMENSIONS = ["completeness", "necessity", "support", "authenticity", "conflict", "depth"];
|
|
891
|
+
var REVIEW_SEVERITIES = ["must-fix", "suggestion"];
|
|
892
|
+
var SUPPORT_RATINGS = ["sufficient", "gap", "invalid"];
|
|
893
|
+
function isCanvasReviewEntryInput(v) {
|
|
894
|
+
return isRecord4(v) && isStringField(v, "id") && typeof v.round === "number" && Number.isFinite(v.round) && isStringIn(REVIEW_DIMENSIONS, v.dimension) && isStringIn(REVIEW_SEVERITIES, v.severity) && isStringField(v, "targetId") && typeof v.note === "string" && isReviewSupportShape(v) && isReviewSupportSemantics(v);
|
|
895
|
+
}
|
|
896
|
+
function isReviewSupportShape(v) {
|
|
897
|
+
if (v.supportRating !== void 0 && !isStringIn(SUPPORT_RATINGS, v.supportRating)) return false;
|
|
898
|
+
return v.supportGaps === void 0 || isStringArray2(v.supportGaps);
|
|
899
|
+
}
|
|
900
|
+
function isReviewSupportSemantics(v) {
|
|
901
|
+
if (v.supportGaps === void 0) return v.supportRating !== "gap";
|
|
902
|
+
if (v.supportRating !== "gap") return false;
|
|
903
|
+
return Array.isArray(v.supportGaps) && v.supportGaps.length > 0;
|
|
904
|
+
}
|
|
905
|
+
function isCanvasReviewAppendParams(v) {
|
|
906
|
+
return isRecord4(v) && requireCanvasId(v) && typeof v.round === "number" && Number.isFinite(v.round) && Array.isArray(v.entries) && v.entries.every((entry) => isCanvasReviewEntryInput(entry));
|
|
907
|
+
}
|
|
908
|
+
function isCanvasReviewResolveParams(v) {
|
|
909
|
+
return isRecord4(v) && requireCanvasId(v) && isStringField(v, "entryId") && isStringIn(["accepted", "deferred", "rejected"], v.disposition) && typeof v.note === "string";
|
|
910
|
+
}
|
|
911
|
+
function isCanvasConvergeCheckParams(v) {
|
|
912
|
+
return isRecord4(v) && requireCanvasId(v);
|
|
913
|
+
}
|
|
914
|
+
function isCanvasExportParams(v) {
|
|
915
|
+
if (!(isRecord4(v) && requireCanvasId(v))) return false;
|
|
916
|
+
const target = v.target;
|
|
917
|
+
if (!isRecord4(target)) return false;
|
|
918
|
+
if (target.target === "planning-doc") return true;
|
|
919
|
+
return target.target === "requirement-card" && isStringField(target, "leafId");
|
|
920
|
+
}
|
|
921
|
+
function isCanvasDispatchParams(v) {
|
|
922
|
+
return isRecord4(v) && requireCanvasId(v) && isStringField(v, "nodeId") && isStringField(v, "pointer");
|
|
923
|
+
}
|
|
924
|
+
function isCanvasReadParams(v) {
|
|
925
|
+
return isRecord4(v) && requireCanvasId(v) && isOptionalString3(v.subtree);
|
|
926
|
+
}
|
|
927
|
+
function isCanvasListParams(v) {
|
|
928
|
+
return isRecord4(v);
|
|
929
|
+
}
|
|
930
|
+
function isCanvasEnterParams(v) {
|
|
931
|
+
if (!isRecord4(v)) return false;
|
|
932
|
+
const keys = Object.keys(v);
|
|
933
|
+
return keys.length === 1 && keys[0] === "canvasId" && typeof v.canvasId === "string";
|
|
934
|
+
}
|
|
935
|
+
var MARKER_PARAMS_GUARDS = {
|
|
936
|
+
create: isCanvasCreateParams,
|
|
937
|
+
grow: isCanvasGrowParams,
|
|
938
|
+
patch: isCanvasPatchParams,
|
|
939
|
+
"decide-direction": isCanvasDecideDirectionParams,
|
|
940
|
+
select: isCanvasSelectParams,
|
|
941
|
+
transition: isCanvasTransitionParams,
|
|
942
|
+
comment: isCanvasCommentParams,
|
|
943
|
+
"comment-respond": isCanvasCommentRespondParams,
|
|
944
|
+
"review-request": isCanvasReviewRequestParams,
|
|
945
|
+
"review-append": isCanvasReviewAppendParams,
|
|
946
|
+
"review-resolve": isCanvasReviewResolveParams,
|
|
947
|
+
"converge-check": isCanvasConvergeCheckParams,
|
|
948
|
+
export: isCanvasExportParams,
|
|
949
|
+
dispatch: isCanvasDispatchParams,
|
|
950
|
+
read: isCanvasReadParams,
|
|
951
|
+
list: isCanvasListParams,
|
|
952
|
+
enter: isCanvasEnterParams
|
|
953
|
+
};
|
|
954
|
+
function isCanvasMarkerRequest(v) {
|
|
955
|
+
if (!isRecord4(v)) return false;
|
|
956
|
+
if (!isStringIn(CANVAS_MARKER_ACTIONS, v.action)) return false;
|
|
957
|
+
const action = v.action;
|
|
958
|
+
return MARKER_PARAMS_GUARDS[action](v.params);
|
|
959
|
+
}
|
|
960
|
+
function isArgumentMateriality(v) {
|
|
961
|
+
return isStringIn(["fact", "claim"], v);
|
|
962
|
+
}
|
|
963
|
+
function isArgumentPolarity(v) {
|
|
964
|
+
return isStringIn(ARGUMENT_POLARITIES, v);
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
// src/extensions/canvas/state.ts
|
|
968
|
+
var CANVAS_EVENT_TYPES = [
|
|
969
|
+
"CanvasCreated",
|
|
970
|
+
"GrowthDirectionDecided",
|
|
971
|
+
"NodeCreated",
|
|
972
|
+
"NodeModified",
|
|
973
|
+
"StateTransitioned",
|
|
974
|
+
"OptionSelected",
|
|
975
|
+
"NodeDispatched",
|
|
976
|
+
"CommentAdded",
|
|
977
|
+
"CommentResponded",
|
|
978
|
+
"ReviewRequested",
|
|
979
|
+
"ReviewEntryAppended",
|
|
980
|
+
"ReviewEntryResolved",
|
|
981
|
+
"ConvergenceChecked",
|
|
982
|
+
"CanvasExported",
|
|
983
|
+
"DirtiedPathMarked",
|
|
984
|
+
"ReviewConverged",
|
|
985
|
+
"ReviewMaxRoundsReached",
|
|
986
|
+
"ReviewEscalated"
|
|
987
|
+
];
|
|
988
|
+
var ACTION_EVENT_MAP = {
|
|
989
|
+
create: "CanvasCreated",
|
|
990
|
+
grow: "NodeCreated",
|
|
991
|
+
patch: "NodeModified",
|
|
992
|
+
"decide-direction": "GrowthDirectionDecided",
|
|
993
|
+
select: "OptionSelected",
|
|
994
|
+
transition: "StateTransitioned",
|
|
995
|
+
comment: "CommentAdded",
|
|
996
|
+
"comment-respond": "CommentResponded",
|
|
997
|
+
"review-request": "ReviewRequested",
|
|
998
|
+
"review-append": "ReviewEntryAppended",
|
|
999
|
+
"review-resolve": "ReviewEntryResolved",
|
|
1000
|
+
"converge-check": "ConvergenceChecked",
|
|
1001
|
+
export: "CanvasExported",
|
|
1002
|
+
dispatch: "NodeDispatched"
|
|
1003
|
+
};
|
|
1004
|
+
|
|
1005
|
+
// src/extensions/canvas/errors.ts
|
|
1006
|
+
var CANVAS_ERROR_CODES = [
|
|
1007
|
+
"canvas_not_found",
|
|
1008
|
+
"node_not_found",
|
|
1009
|
+
"invalid_params",
|
|
1010
|
+
"unknown_action",
|
|
1011
|
+
"actor_not_allowed",
|
|
1012
|
+
"selection_conflict",
|
|
1013
|
+
"cycle_detected",
|
|
1014
|
+
"unverified_fact",
|
|
1015
|
+
"dispatch_blocked",
|
|
1016
|
+
"not_converged",
|
|
1017
|
+
"lifecycle_transition_illegal",
|
|
1018
|
+
"entry_ref_missing",
|
|
1019
|
+
"already_resolved",
|
|
1020
|
+
"review_max_rounds",
|
|
1021
|
+
"edge_not_found"
|
|
1022
|
+
];
|
|
1023
|
+
var CANVAS_ERROR_RECOVERY = {
|
|
1024
|
+
canvas_not_found: "\u753B\u5E03\u4E0D\u5B58\u5728\u6216\u5DF2\u88AB\u5220\u9664\uFF1A\u5148\u7ECF canvas_list / canvas.list \u6838\u5BF9\u753B\u5E03 id \u540E\u91CD\u8BD5",
|
|
1025
|
+
node_not_found: "\u76EE\u6807\u8282\u70B9 id \u4E0D\u5B58\u5728\uFF1A\u5148 canvas_read \u53D6\u5F53\u524D\u6001\uFF0C\u6838\u5BF9\u8282\u70B9 id \u540E\u91CD\u8BD5",
|
|
1026
|
+
edge_not_found: "\u76EE\u6807\u8FB9 id \u4E0D\u5B58\u5728\uFF1A\u5148 canvas_read \u53D6\u5F53\u524D\u6001\uFF0C\u6838\u5BF9\u8FB9 id \u540E\u91CD\u8BD5",
|
|
1027
|
+
invalid_params: "\u8BF7\u6C42\u53C2\u6570\u5F62\u72B6\u975E\u6CD5\uFF1A\u5BF9\u7167\u8BE5 action \u7684 params \u5951\u7EA6\u4FEE\u6B63\u5B57\u6BB5\u540E\u91CD\u8BD5",
|
|
1028
|
+
unknown_action: "action \u4E0D\u5728\u8BCD\u8868\uFF1A\u5BF9\u7167 CANVAS_ACTIONS \u8BCD\u8868\u4FEE\u6B63 action \u540D",
|
|
1029
|
+
actor_not_allowed: "\u5F53\u524D\u64CD\u4F5C\u65B9\u65E0\u6B64\u52A8\u4F5C\u6743\u9650\uFF1A\u67E5\u6743\u9650\u77E9\u9635\uFF08\u8BE5\u52A8\u4F5C\u4EC5\u9650\u7279\u5B9A\u64CD\u4F5C\u65B9\uFF09\uFF0C\u6539\u7531\u6709\u6743\u65B9\u6267\u884C",
|
|
1030
|
+
selection_conflict: "\u8BE5\u95EE\u9898\u5DF2\u6709\u9009\u5B9A\u65B9\u6848\uFF1A\u6362\u9009\u8D70 select \u7684 replace \u53C2\u6570\uFF08\u540C\u4E00\u8C03\u7528\u5185\u8FC1\u79FB\u65E7\u9009\u5B9A\uFF09\u5E76\u9644\u5BF9\u6BD4\u7406\u7531",
|
|
1031
|
+
cycle_detected: "\u8BE5\u8FB9\u4F1A\u4F7F\u4E3B\u5E72\u6210\u73AF\uFF1A\u5206\u89E3/\u89E3\u8FB9\u53EA\u80FD\u6307\u5411\u4E0A\u5C42\u8282\u70B9\u7684\u4E0B\u5C42\uFF0C\u53BB\u6389\u56DE\u8FB9\u540E\u91CD\u8BD5",
|
|
1032
|
+
unverified_fact: "\u672A\u6838\u5B9E\u7684 fact \u8BBA\u636E\u4E0D\u5F97\u4F5C\u4E3A\u901A\u8FC7\u4F9D\u636E\uFF1A\u5148\u8865\u6838\u5B9E\u72B6\u6001\uFF08factVerified\uFF09\u518D\u91CD\u8BD5",
|
|
1033
|
+
dispatch_blocked: "\u6267\u884C\u53F6\u5B50\u987B\u5148\u901A\u8FC7\u5BA1\u67E5\uFF08passed\uFF09\u5E76\u586B\u5199\u4E0B\u6E38\u4EA7\u7269\u6307\u9488\uFF0C\u624D\u80FD\u6D3E\u53D1",
|
|
1034
|
+
not_converged: "\u753B\u5E03\u672A\u6536\u655B\uFF1A\u5148\u5904\u7F6E\u5168\u90E8 must-fix / \u6E05\u7A7A\u5F85\u91CD\u5BA1\u8DEF\u5F84 / \u786E\u8BA4\u6839\u5224\u636E\uFF0C\u518D\u6267\u884C\u6536\u655B\u786E\u8BA4\u6216\u5BFC\u51FA",
|
|
1035
|
+
lifecycle_transition_illegal: "\u72B6\u6001\u673A\u4E0D\u5141\u8BB8\u8BE5\u8F6C\u79FB\uFF1A\u5BF9\u7167\u5408\u6CD5\u8F6C\u79FB\u8868\uFF08rejected/shelved \u987B\u5148\u590D\u6D3B\u4E3A draft\uFF09\uFF0C\u6216\u7559\u7406\u7531\u8D70\u590D\u6D3B\u8DEF\u5F84",
|
|
1036
|
+
entry_ref_missing: "\u62A5\u544A\u6761\u76EE\u5F15\u7528\u7684\u56FE\u5143\u7D20 id \u4E0D\u5B58\u5728\uFF1A\u5148 canvas_read \u6838\u5BF9\u76EE\u6807 id \u540E\u91CD\u8BD5",
|
|
1037
|
+
already_resolved: "\u8BE5\u6761\u76EE\u5DF2\u6709\u5904\u7F6E\u8BB0\u5F55\uFF08\u5148\u767B\u8BB0\u5148\u751F\u6548\uFF09\uFF1A\u6539\u5224\u8D70\u4E0B\u4E00\u8F6E\u5BA1\u67E5\u590D\u5BA1\uFF0C\u6216\u5728 GUI \u4EE5\u65B0\u8F6E\u6B21\u5904\u7F6E",
|
|
1038
|
+
review_max_rounds: "\u5BA1\u67E5\u5DF2\u8FBE\u8F6E\u6B21\u4E0A\u9650\uFF1A\u5347\u7EA7\u88C1\u51B3\uFF08\u6269\u5927\u5BA1\u67E5\u8303\u56F4\u6216\u4FEE\u6539\u5224\u636E\uFF09\u540E\u91CD\u65B0\u53D1\u8D77\u5BA1\u67E5"
|
|
1039
|
+
};
|
|
1040
|
+
function canvasError(code, message) {
|
|
1041
|
+
return { code, message, recover: CANVAS_ERROR_RECOVERY[code] };
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
// src/extensions/canvas/matrix.ts
|
|
1045
|
+
var CANVAS_ACTOR_MATRIX = {
|
|
1046
|
+
create: { user: true, agent: true, review: false },
|
|
1047
|
+
grow: { user: false, agent: true, review: false },
|
|
1048
|
+
patch: { user: true, agent: true, review: false },
|
|
1049
|
+
"decide-direction": { user: true, agent: false, review: false },
|
|
1050
|
+
select: { user: true, agent: true, review: false },
|
|
1051
|
+
transition: { user: true, agent: true, review: false },
|
|
1052
|
+
comment: { user: true, agent: false, review: false },
|
|
1053
|
+
"comment-respond": { user: false, agent: true, review: false },
|
|
1054
|
+
"review-request": { user: true, agent: true, review: false },
|
|
1055
|
+
"review-append": { user: false, agent: false, review: true },
|
|
1056
|
+
"review-resolve": { user: true, agent: true, review: false },
|
|
1057
|
+
"converge-check": { user: true, agent: false, review: false },
|
|
1058
|
+
export: { user: true, agent: true, review: false },
|
|
1059
|
+
dispatch: { user: true, agent: false, review: false },
|
|
1060
|
+
read: { user: true, agent: true, review: true },
|
|
1061
|
+
list: { user: true, agent: true, review: true }
|
|
1062
|
+
};
|
|
1063
|
+
function isActionAllowed(action, actor) {
|
|
1064
|
+
return CANVAS_ACTOR_MATRIX[action][actor];
|
|
1065
|
+
}
|
|
1066
|
+
var TOOL_ACTION_MAP = {
|
|
1067
|
+
canvas_enter: ["create"],
|
|
1068
|
+
canvas_edit: ["grow", "patch", "select", "transition", "comment-respond"],
|
|
1069
|
+
canvas_read: ["read"],
|
|
1070
|
+
canvas_review: ["review-request", "review-append", "review-resolve"],
|
|
1071
|
+
canvas_export: ["export"],
|
|
1072
|
+
canvas_list: ["list"]
|
|
1073
|
+
};
|
|
1074
|
+
var CANVAS_TOOL_NAMES = Object.keys(TOOL_ACTION_MAP);
|
|
1075
|
+
var NON_TOOL_ACTIONS = [
|
|
1076
|
+
{ action: "decide-direction", entry: "gui-only\uFF08\u7528\u6237\u62CD\u677F\uFF1A\u65B9\u5411\u88C1\u51B3\u662F\u7EC8\u88C1\u51B3\u52A8\u4F5C\uFF0Cagent \u4E0D\u5F97\u81EA\u4E3B\uFF09" },
|
|
1077
|
+
{ action: "comment", entry: "gui-only\uFF08\u8BC4\u8BBA = \u7528\u6237\u6CE8\u5165\u8BAE\u9898\uFF1B\u54CD\u5E94\u4E49\u52A1\u65B9\u662F agent\uFF0C\u8D70 comment-respond\uFF09" },
|
|
1078
|
+
{ action: "converge-check", entry: "gui-only\uFF08\u786E\u8BA4\u6536\u655B = \u7528\u6237\u70B9\u51FB\uFF0C\u4E09\u95E8\u7981\u6821\u9A8C\u540E\u7F6E\u7EC8\u6001\uFF09" },
|
|
1079
|
+
{ action: "dispatch", entry: "gui-only\uFF08\u6D3E\u53D1 = \u7528\u6237\u9010\u53F6\u786E\u8BA4 + \u624B\u586B\u4E0B\u6E38\u6307\u9488\uFF0C\u7528\u6237\u62CD\u677F\uFF09" }
|
|
1080
|
+
];
|
|
1081
|
+
function toolOfAction(action) {
|
|
1082
|
+
for (const tool of CANVAS_TOOL_NAMES) {
|
|
1083
|
+
const actions = TOOL_ACTION_MAP[tool];
|
|
1084
|
+
if (actions.includes(action)) return tool;
|
|
1085
|
+
}
|
|
1086
|
+
return void 0;
|
|
1087
|
+
}
|
|
1088
|
+
function allToolActions() {
|
|
1089
|
+
const out = [];
|
|
1090
|
+
for (const tool of CANVAS_TOOL_NAMES) {
|
|
1091
|
+
for (const action of TOOL_ACTION_MAP[tool]) {
|
|
1092
|
+
if (!out.includes(action)) out.push(action);
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
return out;
|
|
1096
|
+
}
|
|
1097
|
+
function allCanvasActions() {
|
|
1098
|
+
return CANVAS_ACTIONS;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
797
1101
|
// src/pending-entries.ts
|
|
798
1102
|
var PENDING_REGISTER_ENTRY_TYPE = "pending:register";
|
|
799
1103
|
var PENDING_UNREGISTER_ENTRY_TYPE = "pending:unregister";
|
|
@@ -854,11 +1158,20 @@ function mapReasonToStatus(reason) {
|
|
|
854
1158
|
return REASON_STATUS_MAP[reason] ?? "completed";
|
|
855
1159
|
}
|
|
856
1160
|
export {
|
|
1161
|
+
ACTION_EVENT_MAP,
|
|
857
1162
|
ASK_USER_MARKER,
|
|
858
1163
|
BACKGROUND_TASK_ID_PREFIX,
|
|
859
1164
|
BACKGROUND_TASK_REGISTRY_FILENAME,
|
|
860
1165
|
BACKGROUND_TASK_REGISTRY_VERSION,
|
|
861
1166
|
BASE_TOOL_ENHANCE_DIRNAME,
|
|
1167
|
+
CANVAS_ACTIONS,
|
|
1168
|
+
CANVAS_ACTOR_MATRIX,
|
|
1169
|
+
CANVAS_ERROR_CODES,
|
|
1170
|
+
CANVAS_ERROR_RECOVERY,
|
|
1171
|
+
CANVAS_EVENT_TYPES,
|
|
1172
|
+
CANVAS_MARKER,
|
|
1173
|
+
CANVAS_MARKER_ACTIONS,
|
|
1174
|
+
CANVAS_TOOL_NAMES,
|
|
862
1175
|
GUI_WIDGET_MARKER,
|
|
863
1176
|
HISTORY_LIMIT,
|
|
864
1177
|
INFLIGHT_REPORT_ACK,
|
|
@@ -868,6 +1181,7 @@ export {
|
|
|
868
1181
|
MS_PER_HOUR,
|
|
869
1182
|
MS_PER_MINUTE,
|
|
870
1183
|
MS_PER_SECOND,
|
|
1184
|
+
NON_TOOL_ACTIONS,
|
|
871
1185
|
PENDING_REGISTER_ENTRY_TYPE,
|
|
872
1186
|
PENDING_UNREGISTER_ENTRY_TYPE,
|
|
873
1187
|
PLAN_LIFECYCLE_EVENTS,
|
|
@@ -886,11 +1200,15 @@ export {
|
|
|
886
1200
|
SUBAGENT_INFLIGHT_MARKER,
|
|
887
1201
|
SUBAGENT_JOURNAL_MARKER,
|
|
888
1202
|
TASK_ENTRY_TYPE,
|
|
1203
|
+
TOOL_ACTION_MAP,
|
|
889
1204
|
UI_FORM_MARKER,
|
|
890
1205
|
WORKFLOW_RESULT_CUSTOM_TYPE,
|
|
1206
|
+
allCanvasActions,
|
|
1207
|
+
allToolActions,
|
|
891
1208
|
appendExecutionRecord,
|
|
892
1209
|
applyPendingDiff,
|
|
893
1210
|
callMarkerRpc,
|
|
1211
|
+
canvasError,
|
|
894
1212
|
collectActivePendingIds,
|
|
895
1213
|
dateToOnceCron,
|
|
896
1214
|
derivePhase,
|
|
@@ -905,9 +1223,30 @@ export {
|
|
|
905
1223
|
guiComponent,
|
|
906
1224
|
guiResult,
|
|
907
1225
|
guiSetWidget,
|
|
1226
|
+
isActionAllowed,
|
|
908
1227
|
isActiveBackgroundTaskState,
|
|
1228
|
+
isArgumentMateriality,
|
|
1229
|
+
isArgumentPolarity,
|
|
909
1230
|
isAskUserQuestion,
|
|
910
1231
|
isBackgroundTaskRegistryEntry,
|
|
1232
|
+
isCanvasCommentParams,
|
|
1233
|
+
isCanvasCommentRespondParams,
|
|
1234
|
+
isCanvasConvergeCheckParams,
|
|
1235
|
+
isCanvasCreateParams,
|
|
1236
|
+
isCanvasDecideDirectionParams,
|
|
1237
|
+
isCanvasDispatchParams,
|
|
1238
|
+
isCanvasEnterParams,
|
|
1239
|
+
isCanvasExportParams,
|
|
1240
|
+
isCanvasGrowParams,
|
|
1241
|
+
isCanvasListParams,
|
|
1242
|
+
isCanvasMarkerRequest,
|
|
1243
|
+
isCanvasPatchParams,
|
|
1244
|
+
isCanvasReadParams,
|
|
1245
|
+
isCanvasReviewAppendParams,
|
|
1246
|
+
isCanvasReviewRequestParams,
|
|
1247
|
+
isCanvasReviewResolveParams,
|
|
1248
|
+
isCanvasSelectParams,
|
|
1249
|
+
isCanvasTransitionParams,
|
|
911
1250
|
isChannelErrorResult,
|
|
912
1251
|
isFormAnswers,
|
|
913
1252
|
isFormQuestion,
|
|
@@ -941,6 +1280,7 @@ export {
|
|
|
941
1280
|
scanPendingEntries,
|
|
942
1281
|
setWidgetDual,
|
|
943
1282
|
snapshotToTask,
|
|
1283
|
+
toolOfAction,
|
|
944
1284
|
transition,
|
|
945
1285
|
truncateSelfReview,
|
|
946
1286
|
uiFormInteract,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhushanwen/extension-protocol",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "Cross-layer pi extension contract package: dual-mode (TUI/GUI) rendering helpers, session/background-task/pending-entries protocols, and shared behavior primitives",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|