@router-agent/runtime 0.0.0-stage → 0.3.31

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.
Files changed (124) hide show
  1. package/dist/agents/claude.d.ts +51 -0
  2. package/dist/agents/claude.js +270 -0
  3. package/dist/agents/claude.js.map +1 -0
  4. package/dist/agents/codex.d.ts +36 -0
  5. package/dist/agents/codex.js +292 -0
  6. package/dist/agents/codex.js.map +1 -0
  7. package/dist/agents/profile.d.ts +39 -0
  8. package/dist/agents/profile.js +2 -0
  9. package/dist/agents/profile.js.map +1 -0
  10. package/dist/agents/registry.d.ts +21 -0
  11. package/dist/agents/registry.js +78 -0
  12. package/dist/agents/registry.js.map +1 -0
  13. package/dist/errors.d.ts +4 -0
  14. package/dist/errors.js +9 -0
  15. package/dist/errors.js.map +1 -0
  16. package/dist/evidence-gate.d.ts +78 -0
  17. package/dist/evidence-gate.js +196 -0
  18. package/dist/evidence-gate.js.map +1 -0
  19. package/dist/index.d.ts +22 -0
  20. package/dist/index.js +21 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/naming.d.ts +23 -0
  23. package/dist/naming.js +40 -0
  24. package/dist/naming.js.map +1 -0
  25. package/dist/orca/commands.js +60 -0
  26. package/dist/orca/commands.js.map +1 -0
  27. package/dist/orca/index.js +452 -0
  28. package/dist/orca/index.js.map +1 -0
  29. package/dist/orca/options.js +33 -0
  30. package/dist/orca/options.js.map +1 -0
  31. package/dist/orca/report-poller.js +143 -0
  32. package/dist/orca/report-poller.js.map +1 -0
  33. package/dist/permissions/acp.d.ts +21 -0
  34. package/dist/permissions/acp.js +73 -0
  35. package/dist/permissions/acp.js.map +1 -0
  36. package/dist/permissions.d.ts +1 -0
  37. package/dist/permissions.js +2 -0
  38. package/dist/permissions.js.map +1 -0
  39. package/dist/plugins/loader.d.ts +46 -0
  40. package/dist/plugins/loader.js +117 -0
  41. package/dist/plugins/loader.js.map +1 -0
  42. package/dist/plugins/types.d.ts +52 -0
  43. package/dist/plugins/types.js +2 -0
  44. package/dist/plugins/types.js.map +1 -0
  45. package/dist/port.d.ts +295 -0
  46. package/dist/port.js +17 -0
  47. package/dist/port.js.map +1 -0
  48. package/dist/registry.d.ts +13 -0
  49. package/dist/registry.js +35 -0
  50. package/dist/registry.js.map +1 -0
  51. package/dist/report-poller.d.ts +58 -0
  52. package/dist/report-poller.js +130 -0
  53. package/dist/report-poller.js.map +1 -0
  54. package/dist/resume.d.ts +52 -0
  55. package/dist/resume.js +109 -0
  56. package/dist/resume.js.map +1 -0
  57. package/dist/runtimes/acp/admin.js +470 -0
  58. package/dist/runtimes/acp/admin.js.map +1 -0
  59. package/dist/runtimes/acp/agents.js +167 -0
  60. package/dist/runtimes/acp/agents.js.map +1 -0
  61. package/dist/runtimes/acp/detect.js +379 -0
  62. package/dist/runtimes/acp/detect.js.map +1 -0
  63. package/dist/runtimes/acp/index.js +633 -0
  64. package/dist/runtimes/acp/index.js.map +1 -0
  65. package/dist/runtimes/acp/install.js +264 -0
  66. package/dist/runtimes/acp/install.js.map +1 -0
  67. package/dist/runtimes/acp/permissions.js +83 -0
  68. package/dist/runtimes/acp/permissions.js.map +1 -0
  69. package/dist/runtimes/acp/protocol.js +207 -0
  70. package/dist/runtimes/acp/protocol.js.map +1 -0
  71. package/dist/runtimes/acp-agents.d.ts +85 -0
  72. package/dist/runtimes/acp-agents.js +167 -0
  73. package/dist/runtimes/acp-agents.js.map +1 -0
  74. package/dist/runtimes/acp-detect-utils.d.ts +4 -0
  75. package/dist/runtimes/acp-detect-utils.js +35 -0
  76. package/dist/runtimes/acp-detect-utils.js.map +1 -0
  77. package/dist/runtimes/builtin-options.d.ts +3 -0
  78. package/dist/runtimes/builtin-options.js +44 -0
  79. package/dist/runtimes/builtin-options.js.map +1 -0
  80. package/dist/runtimes/catalog.d.ts +31 -0
  81. package/dist/runtimes/catalog.js +75 -0
  82. package/dist/runtimes/catalog.js.map +1 -0
  83. package/dist/runtimes/claude-code/index.js +544 -0
  84. package/dist/runtimes/claude-code/index.js.map +1 -0
  85. package/dist/runtimes/claude-code/inject.js +71 -0
  86. package/dist/runtimes/claude-code/inject.js.map +1 -0
  87. package/dist/runtimes/codex/client.js +203 -0
  88. package/dist/runtimes/codex/client.js.map +1 -0
  89. package/dist/runtimes/codex/detect.js +240 -0
  90. package/dist/runtimes/codex/detect.js.map +1 -0
  91. package/dist/runtimes/codex/index.js +1066 -0
  92. package/dist/runtimes/codex/index.js.map +1 -0
  93. package/dist/runtimes/herdr/agents.js +38 -0
  94. package/dist/runtimes/herdr/agents.js.map +1 -0
  95. package/dist/runtimes/herdr/commands.js +68 -0
  96. package/dist/runtimes/herdr/commands.js.map +1 -0
  97. package/dist/runtimes/herdr/index.js +712 -0
  98. package/dist/runtimes/herdr/index.js.map +1 -0
  99. package/dist/runtimes/herdr/options.js +29 -0
  100. package/dist/runtimes/herdr/options.js.map +1 -0
  101. package/dist/runtimes/herdr/server.js +75 -0
  102. package/dist/runtimes/herdr/server.js.map +1 -0
  103. package/dist/runtimes/options.d.ts +60 -0
  104. package/dist/runtimes/options.js +89 -0
  105. package/dist/runtimes/options.js.map +1 -0
  106. package/dist/spec/contract.md +120 -0
  107. package/dist/spec/index.d.ts +35 -0
  108. package/dist/spec/index.js +59 -0
  109. package/dist/spec/index.js.map +1 -0
  110. package/dist/spec/prompt-mode.md +176 -0
  111. package/dist/spec/reader.d.ts +5 -0
  112. package/dist/spec/reader.js +32 -0
  113. package/dist/spec/reader.js.map +1 -0
  114. package/dist/status.d.ts +8 -0
  115. package/dist/status.js +22 -0
  116. package/dist/status.js.map +1 -0
  117. package/dist/workspaces/git-worktree.d.ts +44 -0
  118. package/dist/workspaces/git-worktree.js +183 -0
  119. package/dist/workspaces/git-worktree.js.map +1 -0
  120. package/dist/workspaces/overview.d.ts +66 -0
  121. package/dist/workspaces/overview.js +12 -0
  122. package/dist/workspaces/overview.js.map +1 -0
  123. package/package.json +36 -4
  124. package/README.md +0 -3
@@ -0,0 +1,60 @@
1
+ export function worktreeCreate(opts) {
2
+ return [
3
+ 'worktree', 'create',
4
+ '--repo', repoSelector(opts.repo),
5
+ '--name', opts.name,
6
+ ...(opts.baseBranch ? ['--base-branch', opts.baseBranch] : []),
7
+ ...(opts.branch ? ['--branch', opts.branch] : []),
8
+ ...(opts.agent ? ['--agent', opts.agent] : []),
9
+ // 必须是终端 surface:chat 会话不在 terminal list 里,send/close/inspect 都用不了。
10
+ '--surface', 'terminal',
11
+ '--prompt', opts.prompt,
12
+ '--no-parent',
13
+ '--setup', 'skip',
14
+ '--json',
15
+ ];
16
+ }
17
+ /**
18
+ * 配置里可以写 Orca 的 displayName(如 `teamwork-repos`),
19
+ * 也可以直接写完整选择器(`id:xxx` / `name:xxx` / `path:/abs`)。
20
+ */
21
+ export function repoSelector(repo) {
22
+ const trimmed = repo.trim();
23
+ if (/^(id|name|path):/.test(trimmed))
24
+ return trimmed;
25
+ return `name:${trimmed}`;
26
+ }
27
+ export function terminalSend(handle, text) {
28
+ return ['terminal', 'send', '--terminal', handle, '--text', text, '--enter', '--json'];
29
+ }
30
+ export function terminalClose(handle) {
31
+ return ['terminal', 'close', '--terminal', handle];
32
+ }
33
+ export function terminalList() {
34
+ return ['terminal', 'list', '--json'];
35
+ }
36
+ /** 读取渲染屏幕的尾部行;--screen 比默认的累计流更适合看「现在在做什么」。 */
37
+ export function terminalRead(handle, opts = {}) {
38
+ return ['terminal', 'read', '--terminal', handle, '--screen', '--limit', String(opts.limit ?? 60), '--json'];
39
+ }
40
+ export function worktreeShow(selector) {
41
+ return ['worktree', 'show', '--worktree', selector, '--json'];
42
+ }
43
+ export function worktreeRemove(selector, opts = {}) {
44
+ return [
45
+ 'worktree', 'rm',
46
+ '--worktree', selector,
47
+ // 默认不强删:脏工作区由 Orca 拒绝,避免误删未提交改动。
48
+ ...(opts.force ? ['--force'] : []),
49
+ '--json',
50
+ ];
51
+ }
52
+ export function agentLaunch(opts) {
53
+ return [
54
+ 'agent', 'launch',
55
+ ...(opts.agent ? ['--agent', opts.agent] : []),
56
+ '--worktree', opts.worktree,
57
+ '--prompt', opts.prompt,
58
+ ];
59
+ }
60
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/orca/commands.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,cAAc,CAAC,IAAmB;IAChD,OAAO;QACL,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,mEAAmE;QACnE,WAAW,EAAE,UAAU;QACvB,UAAU,EAAE,IAAI,CAAC,MAAM;QACvB,aAAa;QACb,SAAS,EAAE,MAAM;QACjB,QAAQ;KACT,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IACpD,OAAO,QAAQ,OAAO,EAAE,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAAY;IACvD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;AACxF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;AACvC,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,OAA2B,EAAE;IACxE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;AAC9G,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,OAA4B,EAAE;IAC7E,OAAO;QACL,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,QAAQ;QACtB,iCAAiC;QACjC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,QAAQ;KACT,CAAA;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAA0D;IACpF,OAAO;QACL,OAAO,EAAE,QAAQ;QACjB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,YAAY,EAAE,IAAI,CAAC,QAAQ;QAC3B,UAAU,EAAE,IAAI,CAAC,MAAM;KACxB,CAAA;AACH,CAAC"}
@@ -0,0 +1,452 @@
1
+ import { mkdirSync, writeFileSync, existsSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { buildWorkerPrompt } from '../spec/index.js';
4
+ import { workBranch, worktreeName } from '../naming.js';
5
+ import { resolveSession } from '../agents/registry.js';
6
+ import { runtimeOptionDefault } from '../runtimes/options.js';
7
+ import { ORCA_RUNTIME_ID } from '../runtimes/catalog.js';
8
+ import { agentLaunch, terminalClose, terminalList, terminalRead, terminalSend, worktreeCreate, worktreeRemove, worktreeShow, } from './commands.js';
9
+ export class OrcaCommandError extends Error {
10
+ detail;
11
+ constructor(detail) {
12
+ super(formatCommandFailure(detail));
13
+ this.name = 'OrcaCommandError';
14
+ this.detail = detail;
15
+ }
16
+ }
17
+ /** 把一次失败整理成便于日志与消息展示的一行。 */
18
+ export function formatCommandFailure(detail) {
19
+ const parts = [`orca:command-failed(${detail.command}): exit=${detail.code}`];
20
+ if (detail.orcaCode)
21
+ parts.push(`code=${detail.orcaCode}`);
22
+ if (detail.orcaMessage)
23
+ parts.push(`message=${detail.orcaMessage}`);
24
+ if (detail.orcaCause)
25
+ parts.push(`cause=${detail.orcaCause}`);
26
+ if (detail.orcaOperationId)
27
+ parts.push(`operationId=${detail.orcaOperationId}`);
28
+ if (!detail.orcaCode && !detail.orcaMessage && detail.stdoutTail)
29
+ parts.push(`stdout=${detail.stdoutTail}`);
30
+ if (detail.stderrTail)
31
+ parts.push(`stderr=${detail.stderrTail}`);
32
+ return parts.join(' | ');
33
+ }
34
+ /** 从 argv 生成脱敏摘要:跳过长文本参数,保留可复现的关键选项。 */
35
+ export function summarizeArgs(args) {
36
+ const out = [];
37
+ for (let i = 0; i < args.length; i += 1) {
38
+ const arg = args[i];
39
+ if (arg === '--prompt') {
40
+ const value = args[i + 1] ?? '';
41
+ out.push(`--prompt <${value.length} chars>`);
42
+ i += 1;
43
+ continue;
44
+ }
45
+ const next = args[i + 1];
46
+ if (arg.startsWith('--') && next !== undefined && !next.startsWith('--')) {
47
+ out.push(`${arg} ${next}`);
48
+ i += 1;
49
+ continue;
50
+ }
51
+ out.push(arg);
52
+ }
53
+ return out.join(' ');
54
+ }
55
+ export function describeCommandFailure(argv, res) {
56
+ const command = argv.slice(0, 2).join(' ');
57
+ const args = summarizeArgs(argv.slice(2));
58
+ let orcaCode;
59
+ let orcaMessage;
60
+ let orcaCause;
61
+ let orcaOperationId;
62
+ let stdoutTail = '';
63
+ try {
64
+ const parsed = JSON.parse(res.stdout);
65
+ if (parsed?.error) {
66
+ if (parsed.error.code)
67
+ orcaCode = String(parsed.error.code);
68
+ if (parsed.error.message)
69
+ orcaMessage = String(parsed.error.message);
70
+ const data = parsed.error.data;
71
+ if (data) {
72
+ if (typeof data.cause === 'string') {
73
+ // cause 可能是带堆栈的多行文本,只留第一行有效信息。
74
+ const first = data.cause.split('\n').map((line) => line.trim()).find(Boolean);
75
+ if (first)
76
+ orcaCause = first.slice(0, 300);
77
+ }
78
+ if (typeof data.operationId === 'string' && data.operationId)
79
+ orcaOperationId = data.operationId;
80
+ }
81
+ }
82
+ else {
83
+ stdoutTail = res.stdout.slice(0, 300);
84
+ }
85
+ }
86
+ catch {
87
+ stdoutTail = res.stdout.slice(0, 300);
88
+ }
89
+ return {
90
+ command,
91
+ code: res.code,
92
+ ...(orcaCode ? { orcaCode } : {}),
93
+ ...(orcaMessage ? { orcaMessage } : {}),
94
+ ...(orcaCause ? { orcaCause } : {}),
95
+ ...(orcaOperationId ? { orcaOperationId } : {}),
96
+ args,
97
+ stdoutTail,
98
+ stderrTail: res.stderr.slice(0, 300),
99
+ };
100
+ }
101
+ /** 解析 `orca worktree create --json` 的返回;不同 Orca 版本字段不同。 */
102
+ export function parseCreateResult(stdout) {
103
+ let json;
104
+ try {
105
+ json = JSON.parse(stdout);
106
+ }
107
+ catch {
108
+ throw new Error(`orca:invalid-json: ${stdout.slice(0, 200)}`);
109
+ }
110
+ const root = json;
111
+ if (root.ok === false) {
112
+ throw new Error(`orca:create-failed: ${root.error?.message ?? JSON.stringify(root).slice(0, 200)}`);
113
+ }
114
+ const result = (root.result ?? root);
115
+ const handle = result.launch?.outcome?.handle ?? result.agentTerminalHandle ?? result.terminalHandle ?? result.terminal?.handle;
116
+ if (!handle)
117
+ throw new Error(`orca:create-failed: 返回中没有 terminal handle: ${stdout.slice(0, 200)}`);
118
+ const workdir = result.worktree?.path ?? result.worktreePath ?? result.path;
119
+ const branch = result.worktree?.branch ?? result.branch;
120
+ return {
121
+ handle: String(handle),
122
+ ...(workdir ? { workdir: String(workdir) } : {}),
123
+ // Orca 分支名可能是 `refs/heads/xxx`;若同名分支已存在还会自动加数字后缀,回读一次保证记录准确。
124
+ ...(branch ? { branch: String(branch).replace(/^refs\/heads\//, '') } : {}),
125
+ };
126
+ }
127
+ /** Orca 的 linkedPR / linkedGitLabMR 状态归一化;GitLab 用 opened/locked 表示未关闭。 */
128
+ function normalizeLinkedState(state) {
129
+ const value = String(state ?? '').trim().toLowerCase();
130
+ if (value === 'merged')
131
+ return 'merged';
132
+ if (value === 'closed')
133
+ return 'closed';
134
+ if (value === 'open' || value === 'opened' || value === 'locked')
135
+ return 'open';
136
+ return undefined;
137
+ }
138
+ export class OrcaRuntime {
139
+ id = 'orca';
140
+ capabilities = {
141
+ agent: { liveStatus: true, processExit: false, output: true, activity: true, structuredInput: true, nudge: true },
142
+ workspace: { cleanup: true, prLink: true, discovery: true },
143
+ };
144
+ runner;
145
+ workersDir;
146
+ home;
147
+ agent;
148
+ claudeProjectsDir;
149
+ constructor(opts) {
150
+ this.runner = opts.runner;
151
+ this.workersDir = opts.workersDir;
152
+ this.home = opts.home;
153
+ // Orca 的 --prompt 必须配 --agent,没有「不传」这种形态,因此这里必须落到一个具体值。
154
+ this.agent = String(opts.agent || runtimeOptionDefault(ORCA_RUNTIME_ID, 'agent') || '').trim();
155
+ this.claudeProjectsDir = opts.claudeProjectsDir;
156
+ }
157
+ async start(ctx) {
158
+ const statePath = ctx.report?.statePath ?? join(this.workersDir, ctx.ticket.id, 'state.json');
159
+ const eventsPath = ctx.report?.eventsPath ?? join(this.workersDir, ctx.ticket.id, 'events.log');
160
+ const name = worktreeName(ctx.ticket);
161
+ // 每张工单自带 repo/branch(多项目派工);缺了说明是脏数据,直接报错不猜。
162
+ const repo = ctx.ticket.repo;
163
+ // 工单上的 branch 是「起始分支」;worktree 自己的工作分支由工单号 + 标题语义生成。
164
+ const baseBranch = ctx.ticket.branch;
165
+ const branch = workBranch(ctx.ticket);
166
+ if (!repo)
167
+ throw new Error('orca:missing-repo: 工单没有指定仓库,拒绝创建 worktree');
168
+ if (!baseBranch)
169
+ throw new Error('orca:missing-branch: 工单没有指定起始分支,拒绝创建 worktree');
170
+ const prompt = ctx.brief?.contract ?? buildWorkerPrompt({
171
+ ticket: ctx.ticket,
172
+ mandateScope: ctx.ticket.title,
173
+ statePath,
174
+ eventsPath,
175
+ repo,
176
+ branch: baseBranch,
177
+ workBranch: branch,
178
+ workdir: ctx.workdir,
179
+ ...(this.home ? { home: this.home } : {}),
180
+ });
181
+ const res = await this.run(worktreeCreate({
182
+ repo,
183
+ name,
184
+ prompt,
185
+ branch,
186
+ ...(baseBranch ? { baseBranch } : {}),
187
+ ...(this.agent ? { agent: this.agent } : {}),
188
+ }));
189
+ const parsed = parseCreateResult(res.stdout);
190
+ const workdir = parsed.workdir ?? ctx.workdir;
191
+ if (!workdir)
192
+ throw new Error('orca:workdir-missing: worktree create 没有返回路径');
193
+ this.writeMeta(ctx, {
194
+ handle: parsed.handle,
195
+ workdir,
196
+ statePath,
197
+ eventsPath,
198
+ repo,
199
+ branch: baseBranch,
200
+ workBranch: parsed.branch ?? branch,
201
+ ...(this.agent ? { agent: this.agent } : {}),
202
+ });
203
+ return {
204
+ handle: parsed.handle,
205
+ workdir,
206
+ ...(parsed.branch ? { branch: parsed.branch } : { branch }),
207
+ };
208
+ }
209
+ async deliver(ref, inputs, _opts) {
210
+ const handle = this.handleOf(ref);
211
+ const accepted = [];
212
+ for (const input of inputs) {
213
+ if (!input.text.trim())
214
+ continue;
215
+ await this.run(terminalSend(handle, renderInput(input)));
216
+ accepted.push(input.id);
217
+ }
218
+ return { status: 'accepted', inputIds: accepted };
219
+ }
220
+ async registerContext(ref, items) {
221
+ const text = renderContext(items);
222
+ if (!text)
223
+ return;
224
+ await this.run(terminalSend(this.handleOf(ref), text));
225
+ }
226
+ async stop(ref, reason) {
227
+ void reason;
228
+ await this.run(terminalClose(this.handleOf(ref)));
229
+ }
230
+ async nudge(ref) {
231
+ await this.run(terminalSend(this.handleOf(ref), 'status?'));
232
+ }
233
+ /** 中立活性:把 Orca 终端字段映射成 AgentStatus;查询失败返回 null。 */
234
+ async status(ref) {
235
+ const handle = this.handleOf(ref);
236
+ let info;
237
+ try {
238
+ info = await this.inspect(handle);
239
+ }
240
+ catch {
241
+ return null;
242
+ }
243
+ if (!info)
244
+ return { alive: false, phase: 'lost', acceptingInput: false, detail: { source: 'orca' } };
245
+ if (!info.connected) {
246
+ return { alive: false, phase: 'lost', acceptingInput: false, detail: { source: 'orca', connected: false, orphaned: info.orphaned } };
247
+ }
248
+ if (info.orphaned && !info.writable) {
249
+ return {
250
+ alive: false,
251
+ phase: 'unknown',
252
+ acceptingInput: false,
253
+ ...(info.lastOutputAt ? { lastActivityAt: info.lastOutputAt } : {}),
254
+ detail: { source: 'orca', orphaned: true, writable: false },
255
+ };
256
+ }
257
+ return {
258
+ alive: true,
259
+ phase: 'running',
260
+ acceptingInput: info.writable,
261
+ ...(info.lastOutputAt ? { lastActivityAt: info.lastOutputAt } : {}),
262
+ detail: { source: 'orca', orphaned: info.orphaned, writable: info.writable },
263
+ };
264
+ }
265
+ /** 输出尾部:等价于旧的 read()。 */
266
+ async output(ref, opts = {}) {
267
+ return this.read(this.handleOf(ref), opts);
268
+ }
269
+ /** 结构化活动:优先读 Agent 自己的会话记录;没有 workdir 时返回 null。 */
270
+ async activity(query) {
271
+ const workdir = query.ref.workdir;
272
+ if (!workdir)
273
+ return null;
274
+ return this.session(workdir, query.opts ?? {});
275
+ }
276
+ async inspectWorkspace(ref) {
277
+ const selector = ref.workspaceRef ?? `path:${ref.workdir}`;
278
+ const worktree = await this.inspectWorktree(selector);
279
+ if (!worktree)
280
+ return null;
281
+ const linked = (worktree.linkedPR ?? worktree.linkedGitLabMR ?? worktree.worktree?.linkedPR);
282
+ const branch = String(worktree.branch ?? worktree.worktree?.branch ?? '').replace(/^refs\/heads\//, '');
283
+ const linkedState = normalizeLinkedState(linked?.state);
284
+ return {
285
+ workdir: String(worktree.path ?? worktree.worktree?.path ?? ref.workdir),
286
+ branch,
287
+ ...(linked && Number(linked.number ?? linked.iid) > 0
288
+ ? {
289
+ linkedPr: {
290
+ number: Number(linked.number ?? linked.iid),
291
+ url: String(linked.url ?? linked.webUrl ?? ''),
292
+ ...(linkedState ? { state: linkedState } : {}),
293
+ },
294
+ }
295
+ : {}),
296
+ };
297
+ }
298
+ async removeWorkspace(ref) {
299
+ const selector = ref.workspaceRef ?? `path:${ref.workdir}`;
300
+ await this.removeWorktree(selector);
301
+ }
302
+ async listRepos() {
303
+ const res = await this.run(['repo', 'list', '--json']);
304
+ const parsed = parseJsonOrThrow(res.stdout);
305
+ const result = (parsed.result ?? parsed);
306
+ const list = result.repos ?? result.rows ?? result.items ?? (Array.isArray(result) ? result : []);
307
+ return (Array.isArray(list) ? list : []).map((item) => ({
308
+ name: String(item.displayName ?? item.name ?? ''),
309
+ path: String(item.path ?? ''),
310
+ ...(item.kind ? { kind: String(item.kind) } : {}),
311
+ }));
312
+ }
313
+ /** 旧接口:保留给兼容调用与单测。 */
314
+ async inspect(handle) {
315
+ const res = await this.run(terminalList());
316
+ const parsed = parseJsonOrThrow(res.stdout);
317
+ const terminals = extractTerminals(parsed);
318
+ const found = terminals.find(t => String(t.handle) === handle);
319
+ return found ? normalizeTerminal(found) : null;
320
+ }
321
+ /** 读取终端渲染屏幕的尾部输出;失败(终端已销毁 / 旧版 Orca)时交给调用方跳过本轮巡检。 */
322
+ async read(handle, opts = {}) {
323
+ const res = await this.run(terminalRead(handle, opts));
324
+ const parsed = parseJsonOrThrow(res.stdout);
325
+ const raw = parsed.result?.terminal ?? parsed.terminal;
326
+ if (!raw)
327
+ return null;
328
+ const status = raw.status === 'running' || raw.status === 'exited' ? raw.status : 'unknown';
329
+ const lines = Array.isArray(raw.tail) ? raw.tail.map((line) => String(line)) : [];
330
+ return { status, lines, ...(raw.source ? { source: String(raw.source) } : {}) };
331
+ }
332
+ /**
333
+ * 优先读 Agent 自己的结构化会话记录(按配置的 Agent 选读取器),
334
+ * 比终端屏幕干净得多;找不到时返回 null,由调用方退回 read()。
335
+ */
336
+ async session(workdir, opts = {}) {
337
+ const resolved = resolveSession(workdir, this.agent, {
338
+ ...(this.claudeProjectsDir ? { roots: { claude: this.claudeProjectsDir } } : {}),
339
+ });
340
+ if (!resolved)
341
+ return null;
342
+ return resolved.reader.read(workdir, opts);
343
+ }
344
+ async inspectWorktree(selector) {
345
+ const res = await this.run(worktreeShow(selector));
346
+ const parsed = parseJsonOrThrow(res.stdout);
347
+ const result = parsed.result ?? parsed;
348
+ return (result.worktree ?? result);
349
+ }
350
+ async removeWorktree(selector, opts = {}) {
351
+ await this.run(worktreeRemove(selector, opts));
352
+ }
353
+ async relaunchAgent(worktree, prompt) {
354
+ await this.run(agentLaunch({ worktree, prompt, ...(this.agent ? { agent: this.agent } : {}) }));
355
+ }
356
+ handleOf(ref) {
357
+ return typeof ref === 'string' ? ref : ref.handle;
358
+ }
359
+ async run(argv) {
360
+ const res = await this.runner.run(argv);
361
+ if (res.code !== 0) {
362
+ throw new OrcaCommandError(describeCommandFailure(argv, res));
363
+ }
364
+ return res;
365
+ }
366
+ writeMeta(ctx, extra) {
367
+ const dir = join(this.workersDir, ctx.ticket.id);
368
+ mkdirSync(dir, { recursive: true });
369
+ const metaPath = join(dir, 'meta.json');
370
+ const meta = {
371
+ schemaVersion: 2,
372
+ ticketId: ctx.ticket.id,
373
+ assignmentId: ctx.assignment.id,
374
+ handle: extra.handle,
375
+ workdir: extra.workdir,
376
+ statePath: extra.statePath,
377
+ eventsPath: extra.eventsPath,
378
+ repo: extra.repo,
379
+ /** 起始分支(base branch)。 */
380
+ branch: extra.branch,
381
+ /** worktree 自己实际使用的工作分支。 */
382
+ workBranch: extra.workBranch,
383
+ /** 派工时用的 Agent;没配时留空,表示跟随 Orca 自己的默认。 */
384
+ ...(extra.agent ? { agent: extra.agent } : {}),
385
+ runtime: this.id,
386
+ status: 'running',
387
+ startedAt: new Date().toISOString(),
388
+ };
389
+ writeFileSync(metaPath, `${JSON.stringify(meta, null, 2)}\n`, 'utf8');
390
+ if (!existsSync(extra.eventsPath))
391
+ writeFileSync(extra.eventsPath, '', 'utf8');
392
+ mkdirSync(dirname(metaPath), { recursive: true });
393
+ }
394
+ }
395
+ /**
396
+ * 投递时带上输入 id:worker 只有看到 id 才能写进 acked_inputs,Router 才不会重投。
397
+ */
398
+ export function renderInput(input) {
399
+ return `【Router 输入 ${input.id}】\n${input.text}`;
400
+ }
401
+ function renderContext(items) {
402
+ const lines = [];
403
+ for (const item of items) {
404
+ if (item.kind === 'system-prompt')
405
+ lines.push(item.text);
406
+ else if (item.kind === 'file')
407
+ lines.push(`# 文件 ${item.path}\n${item.content}`);
408
+ else if (item.kind === 'env')
409
+ lines.push(`${item.key}=${item.value}`);
410
+ else
411
+ lines.push(`# 目录 ${item.path}`);
412
+ }
413
+ return lines.join('\n\n');
414
+ }
415
+ function parseJsonOrThrow(stdout) {
416
+ try {
417
+ return JSON.parse(stdout);
418
+ }
419
+ catch {
420
+ throw new Error(`orca:invalid-json: ${stdout.slice(0, 200)}`);
421
+ }
422
+ }
423
+ function extractTerminals(parsed) {
424
+ const root = parsed;
425
+ const result = root.result ?? root;
426
+ const list = result.terminals ?? result.rows ?? result.items ?? (Array.isArray(result) ? result : []);
427
+ return Array.isArray(list) ? list : [];
428
+ }
429
+ function normalizeTerminal(raw) {
430
+ return {
431
+ handle: String(raw.handle ?? ''),
432
+ connected: Boolean(raw.connected),
433
+ writable: Boolean(raw.writable),
434
+ orphaned: Boolean(raw.orphaned),
435
+ lastOutputAt: toIsoTime(raw.lastOutputAt),
436
+ worktreePath: String(raw.worktreePath ?? ''),
437
+ branch: String(raw.branch ?? ''),
438
+ };
439
+ }
440
+ /** Orca 的 lastOutputAt 实测是毫秒时间戳数字,也兼容 ISO 字符串与秒级时间戳。 */
441
+ export function toIsoTime(value) {
442
+ if (value === null || value === undefined || value === '')
443
+ return '';
444
+ if (typeof value === 'number' || (typeof value === 'string' && /^\d+$/.test(value))) {
445
+ const n = Number(value);
446
+ const ms = n > 1e12 ? n : n > 1e9 ? n * 1000 : 0;
447
+ return ms > 0 ? new Date(ms).toISOString() : '';
448
+ }
449
+ const parsed = Date.parse(String(value));
450
+ return Number.isFinite(parsed) ? new Date(parsed).toISOString() : '';
451
+ }
452
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/orca/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Orca 运行时的可配置项声明。
3
+ *
4
+ * 只放纯常量(面板会把它打进前端包)。这里声明的是「ra 允许覆盖什么」,
5
+ * 具体的命令行参数由 Orca adapter 自己映射,声明本身不含任何 Orca 逻辑。
6
+ */
7
+ import { ORCA_RUNTIME_ID } from '../runtimes/catalog.js';
8
+ /**
9
+ * Orca 支持的 TUI Agent(与 `orca agent-context` 里的 `--agent` 取值一致)。
10
+ *
11
+ * Orca 的 `worktree create --prompt` 必须同时给 `--agent`,没有「不传」这种形态,
12
+ * 所以这里给一个显式默认值;用户可以覆盖成其它 Agent。
13
+ */
14
+ export const ORCA_OPTION_SPEC = {
15
+ runtimeId: ORCA_RUNTIME_ID,
16
+ fields: [
17
+ {
18
+ key: 'agent',
19
+ label: '执行 Agent',
20
+ kind: 'select',
21
+ default: 'claude',
22
+ options: [
23
+ { value: 'claude', label: 'claude · Claude Code' },
24
+ { value: 'codex', label: 'codex · Codex' },
25
+ { value: 'opencode', label: 'opencode · OpenCode' },
26
+ { value: 'devin', label: 'devin · Devin' },
27
+ { value: 'antigravity', label: 'antigravity · Antigravity' },
28
+ ],
29
+ hint: 'Orca 在工单 worktree 里启动哪个 Agent;默认 Claude Code',
30
+ },
31
+ ],
32
+ };
33
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../../../packages/runtime/src/orca/options.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGxD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE;QACN;YACE,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE;gBAClD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE;gBAC1C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,qBAAqB,EAAE;gBACnD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE;gBAC1C,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,2BAA2B,EAAE;aAC7D;YACD,IAAI,EAAE,8CAA8C;SACrD;KACF;CACF,CAAA"}