@bd7pil/reeve 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +223 -2
- package/THIRD-PARTY.md +25 -0
- package/agents/advisor.md +45 -0
- package/agents/critic.md +66 -0
- package/agents/executor.md +49 -0
- package/agents/foreman.md +120 -0
- package/agents/librarian.md +43 -0
- package/agents/planner.md +51 -0
- package/agents/reviewer.md +60 -0
- package/agents/scout.md +42 -0
- package/default-chain.json +251 -0
- package/index.js +4 -0
- package/licenses/oh-my-opencode-slim.LICENSE +21 -0
- package/licenses/open-code-review.LICENSE +201 -0
- package/package.json +43 -3
- package/skills/review/SKILL.md +116 -0
- package/skills/review/default.md +22 -0
- package/skills/review/go.md +69 -0
- package/skills/review/json.md +1 -0
- package/skills/review/package_json.md +3 -0
- package/skills/review/python.md +77 -0
- package/skills/review/ts_js_tsx_jsx.md +40 -0
- package/skills/review/yaml.md +1 -0
- package/src/chain.js +358 -0
- package/src/concurrency.js +125 -0
- package/src/config-write.js +136 -0
- package/src/constants.js +107 -0
- package/src/index.js +613 -0
- package/src/ledger.js +253 -0
- package/src/models.js +114 -0
- package/src/proxy.js +587 -0
- package/src/reconcile.js +141 -0
- package/src/register.js +137 -0
- package/src/roster.js +44 -0
- package/src/snapshot.js +171 -0
- package/src/stats.js +384 -0
- package/src/supervisor.js +124 -0
- package/src/terminal-gate.js +98 -0
package/src/constants.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// REEVE 记账层的常量与状态机定义。
|
|
2
|
+
// 施工图:docs/research/opencode-v2-plugin-api.md
|
|
3
|
+
|
|
4
|
+
export const PLUGIN_ID = 'reeve'
|
|
5
|
+
|
|
6
|
+
/** 与 package.json 的 version 保持一致;快照文件里会带上,便于面板判断版本。 */
|
|
7
|
+
export const PLUGIN_VERSION = '0.0.1'
|
|
8
|
+
|
|
9
|
+
/** 工具注册的命名空间。注意:真正决定"模型能否看见"的是 codemode:false(施工图 §3.1)。 */
|
|
10
|
+
export const TOOL_NAMESPACE = 'reeve'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* 静默死亡的宽限期。
|
|
14
|
+
* `session.idle` 只是候选信号;只有转录判定 absent **且**静默超过这个宽限,
|
|
15
|
+
* 才允许落 stopped —— 否则会把每个正常完成的子任务都误报成死亡。
|
|
16
|
+
*/
|
|
17
|
+
export const STOP_CONFIRMATION_GRACE_MS = 5_000
|
|
18
|
+
|
|
19
|
+
/** 发出 abort 之后,等多久确认;到期仍未确认就标 statusUncertain。 */
|
|
20
|
+
export const DEFAULT_ABORT_GRACE_MS = 10_000
|
|
21
|
+
|
|
22
|
+
/** 无法证明为终态时,最多排几次重试。 */
|
|
23
|
+
export const DEFAULT_MAX_ATTEMPTS = 3
|
|
24
|
+
|
|
25
|
+
/** 台账落盘时的键前缀(宿主会自动再加 `plugin.<id>.`)。 */
|
|
26
|
+
export const STORAGE_PREFIX = 'ledger/'
|
|
27
|
+
|
|
28
|
+
/** 墓碑保留期。 */
|
|
29
|
+
export const TOMBSTONE_TTL_MS = 7 * 24 * 60 * 60 * 1000
|
|
30
|
+
|
|
31
|
+
export const STATE = Object.freeze({
|
|
32
|
+
RUNNING: 'running',
|
|
33
|
+
COMPLETED: 'completed',
|
|
34
|
+
ERROR: 'error',
|
|
35
|
+
STOPPED: 'stopped',
|
|
36
|
+
CANCELLED: 'cancelled',
|
|
37
|
+
RECONCILED: 'reconciled',
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
export const TERMINAL_STATES = new Set([
|
|
41
|
+
STATE.COMPLETED,
|
|
42
|
+
STATE.ERROR,
|
|
43
|
+
STATE.STOPPED,
|
|
44
|
+
STATE.CANCELLED,
|
|
45
|
+
STATE.RECONCILED,
|
|
46
|
+
])
|
|
47
|
+
|
|
48
|
+
export const REASON = Object.freeze({
|
|
49
|
+
/** 转录判定为"没有终态结果"而停止——静默死亡的落点。 */
|
|
50
|
+
STOPPED_WITHOUT_TERMINAL_RESULT: 'stopped_without_terminal_result',
|
|
51
|
+
/** 墙钟到期并已中断。 */
|
|
52
|
+
WALL_CLOCK_TIMEOUT: 'wall_clock_timeout',
|
|
53
|
+
/** 宿主报了 execution.interrupted。 */
|
|
54
|
+
HOST_INTERRUPTED: 'host_interrupted',
|
|
55
|
+
/** 跨重启对账时发现子会话已不存在。 */
|
|
56
|
+
CHILD_SESSION_MISSING: 'child_session_missing',
|
|
57
|
+
/** 跨重启对账未能确认终态。 */
|
|
58
|
+
UNRECONCILED: 'unreconciled',
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
/** 台账记录里所有"可能不确定"的字段都显式列出,方便落盘与审计。 */
|
|
62
|
+
export function newRecord({
|
|
63
|
+
taskID,
|
|
64
|
+
parentSessionID,
|
|
65
|
+
childSessionID = null,
|
|
66
|
+
agent = null,
|
|
67
|
+
description = null,
|
|
68
|
+
background = false,
|
|
69
|
+
model = null,
|
|
70
|
+
now = Date.now(),
|
|
71
|
+
}) {
|
|
72
|
+
return {
|
|
73
|
+
taskID,
|
|
74
|
+
parentSessionID,
|
|
75
|
+
childSessionID,
|
|
76
|
+
agent,
|
|
77
|
+
description,
|
|
78
|
+
background,
|
|
79
|
+
model,
|
|
80
|
+
state: STATE.RUNNING,
|
|
81
|
+
/** 每次"重新武装"(例如重试)自增;墙钟只对新 generation 重新武装。 */
|
|
82
|
+
generation: 0,
|
|
83
|
+
/** 该任务第一次进入 running 的时间,用作静默判定的下界。 */
|
|
84
|
+
attemptStartedAt: now,
|
|
85
|
+
/** 最后一次观测到活动的时刻。 */
|
|
86
|
+
lastActivityAt: now,
|
|
87
|
+
startedAt: now,
|
|
88
|
+
endedAt: null,
|
|
89
|
+
/** 终态已发布且不可被迟到的完成覆盖。 */
|
|
90
|
+
terminalPublished: false,
|
|
91
|
+
terminalSource: null,
|
|
92
|
+
reason: null,
|
|
93
|
+
/** 无法证明为终态。 */
|
|
94
|
+
statusUncertain: false,
|
|
95
|
+
timedOut: false,
|
|
96
|
+
terminalUnreconciled: false,
|
|
97
|
+
/**
|
|
98
|
+
* 已经发过中断,以及**为什么发**。
|
|
99
|
+
* 用途:我们发的中断会让宿主回 `session.execution.interrupted`,
|
|
100
|
+
* 事件处理器必须靠这个字段把它归因成"墙钟超时",
|
|
101
|
+
* 而不是误记成"宿主中断"(否则 timedOut 永远是 false)。
|
|
102
|
+
*/
|
|
103
|
+
interruptSent: false,
|
|
104
|
+
interruptReason: null,
|
|
105
|
+
attempts: 0,
|
|
106
|
+
}
|
|
107
|
+
}
|