@rho-workspace/rho 0.5.4 → 0.5.5
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/browser-access.js +3 -2
- package/dist/capabilities.d.ts +2 -2
- package/dist/capabilities.js +6 -1
- package/dist/cli.js +186 -173
- package/dist/contract.generated.d.ts +329 -4
- package/dist/contract.generated.js +1 -1
- package/dist/contracts/owners.generated.js +360 -6
- package/dist/discovery.d.ts +1 -0
- package/dist/discovery.js +3 -3
- package/dist/extension-contract.d.ts +99 -0
- package/dist/extension-contract.js +52 -0
- package/dist/extension-directory.d.ts +9 -0
- package/dist/extension-directory.js +11 -0
- package/dist/extension-worker.d.ts +1 -0
- package/dist/extension-worker.js +36 -0
- package/dist/extensions.d.ts +157 -0
- package/dist/extensions.js +349 -0
- package/dist/plugin-cli.d.ts +1 -0
- package/dist/plugin-cli.js +139 -0
- package/dist/plugin-inventory.json +18 -0
- package/dist/plugins.d.ts +3 -3
- package/dist/project-work.d.ts +3 -1
- package/dist/project-work.js +15 -2
- package/dist/protocol.d.ts +7 -0
- package/dist/protocol.js +4 -2
- package/dist/server.d.ts +4 -1
- package/dist/server.js +55 -8
- package/dist/web/.vite/manifest.json +61 -61
- package/dist/web/assets/{canvas-BXhC8RDZ.js → canvas-D8rDdfDz.js} +1 -1
- package/dist/web/assets/choices-b0XhrGQV.js +1 -0
- package/dist/web/assets/{console-Dbdo-5oO.js → console-BSjLGe0T.js} +1 -1
- package/dist/web/assets/{dist-B2V0VDO0.js → dist-Buk0lwzI.js} +2 -2
- package/dist/web/assets/dist-Cw8hRIlT.js +1 -0
- package/dist/web/assets/dist-Tzoe_zm-.js +3 -0
- package/dist/web/assets/{dist-D25Vn17i.js → dist-foH9IKc6.js} +1 -1
- package/dist/web/assets/explore-in-BVUy3ZW_.js +1 -0
- package/dist/web/assets/graph-1OdIJ9l7.js +2 -0
- package/dist/web/assets/index-CsC3sTRq.css +1 -0
- package/dist/web/assets/{index-BHQIaDsx.js → index-CxmItXqa.js} +85 -85
- package/dist/web/assets/{notes-meaning-DdPbtNzJ.js → notes-meaning-pVbbQUGP.js} +1 -1
- package/dist/web/assets/overview-B9UtVJ32.js +6 -0
- package/dist/web/assets/preview-CksD_5KS.js +1 -0
- package/dist/web/assets/{review-CmWou4Iv.js → review-CMxQlQ-C.js} +1 -1
- package/dist/web/assets/{skills-Dy7n3L9d.js → skills-BFNSyrnD.js} +1 -1
- package/dist/web/assets/{skills-work-Cj0W6b-I.js → skills-work-BGPSnF_I.js} +1 -1
- package/dist/web/assets/{studio-process-QOY_n2_8.js → studio-process-CsRoTHOh.js} +2 -2
- package/dist/web/assets/{timeline-events-DmX1BCh3.js → timeline-events-BbuuFWHV.js} +1 -1
- package/dist/web/assets/{work-turns-Co0C71rJ.js → work-turns-BvJlIMmA.js} +1 -1
- package/dist/web/assets/workspace-CWlkjLNx.js +5 -0
- package/dist/web/composition.json +67 -67
- package/dist/web/index.html +3 -3
- package/dist/web/renderer.json +1 -1
- package/dist/web-assets.d.ts +2 -1
- package/dist/web-assets.js +3 -2
- package/dist/work-contract.js +2 -2
- package/docs/HEADLESS.md +1 -1
- package/docs/PLUGIN-AUTHORING.md +4 -0
- package/docs/THIRD-PARTY-PLUGINS.md +190 -0
- package/node_modules/@rho-workspace/plugin-agent/README.md +39 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/activity-normalize.d.ts +1 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/activity-normalize.js +2 -2
- package/node_modules/@rho-workspace/plugin-agent/dist/dsh-session.d.ts +6 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/dsh-session.js +174 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/external-session-contract.d.ts +82 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/external-session-contract.js +15 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/external-session.d.ts +73 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/external-session.js +190 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/index.d.ts +373 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/index.js +1 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/operations.d.ts +33 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/operations.js +3 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/presentation.d.ts +14 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/presentation.js +2 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/ui-external-session.d.ts +15 -0
- package/node_modules/@rho-workspace/plugin-agent/dist/ui-external-session.js +37 -0
- package/node_modules/@rho-workspace/plugin-agent/package.json +5 -1
- package/package.json +5 -3
- package/protocol/index.json +58 -4
- package/protocol/operations/agent.sessions.list.json +100 -0
- package/protocol/operations/agent.sessions.read.json +266 -0
- package/protocol/operations/extension.call.json +132 -0
- package/protocol/operations/extension.content.json +78 -0
- package/protocol/operations/extension.describe.json +195 -0
- package/protocol/operations/extension.install.json +198 -0
- package/protocol/operations/extension.list.json +123 -0
- package/protocol/operations/extension.manage.json +55 -0
- package/protocol/operations/extension.read.json +112 -0
- package/protocol/operations/project.work.read.json +3 -2
- package/protocol/operations/session.grant.json +9 -0
- package/scripts/third-party-acceptance.mjs +77 -0
- package/vendor/composition.json +85 -85
- package/vendor/rho-workspace-plugin-agent-0.4.29.tgz +0 -0
- package/dist/web/assets/choices-DU9kHlyQ.js +0 -1
- package/dist/web/assets/dist-BV3hWfn_.js +0 -3
- package/dist/web/assets/dist-CLNF2g-E.js +0 -1
- package/dist/web/assets/explore-in-8Q5ftt-E.js +0 -1
- package/dist/web/assets/graph-hS2kvHTI.js +0 -2
- package/dist/web/assets/index-Cj1_iqyK.css +0 -1
- package/dist/web/assets/overview-BV6ZO5TO.js +0 -6
- package/dist/web/assets/preview-n5lOOdjN.js +0 -1
- package/dist/web/assets/workspace-BKFefRfJ.js +0 -5
- package/vendor/rho-workspace-plugin-agent-0.4.28.tgz +0 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import fs, { constants } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
4
|
+
import { Ajv } from 'ajv';
|
|
5
|
+
import { externalSessionLimits as limits, externalSessionSummarySchema, externalTurnSchema } from './external-session-contract.js';
|
|
6
|
+
export { externalSessionLimits } from './external-session-contract.js';
|
|
7
|
+
export const externalSessionId = (producer, session) => 'x-' + createHash('sha256').update(producer + '\0' + session).digest('hex');
|
|
8
|
+
const schema = new Ajv({ strict: false }).compile({ type: 'object', additionalProperties: false, required: ['format', 'projectRoot', 'summary', 'turns', 'sourceDigest'], properties: {
|
|
9
|
+
format: { const: 1 }, projectRoot: { type: 'string' }, summary: externalSessionSummarySchema,
|
|
10
|
+
turns: { type: 'array', maxItems: limits.maxTurns, items: externalTurnSchema }, sourceDigest: { type: 'string', pattern: '^[a-f0-9]{64}$' }
|
|
11
|
+
} });
|
|
12
|
+
function directory(root, create = false) {
|
|
13
|
+
let dir = fs.realpathSync(root);
|
|
14
|
+
for (const part of ['.rho', 'agent', 'external']) {
|
|
15
|
+
dir = path.join(dir, part);
|
|
16
|
+
if (create) {
|
|
17
|
+
try {
|
|
18
|
+
fs.mkdirSync(dir, { mode: 0o700 });
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
if (e.code !== 'EEXIST')
|
|
22
|
+
throw e;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const stat = fs.lstatSync(dir);
|
|
26
|
+
if (!stat.isDirectory() || stat.isSymbolicLink() || fs.realpathSync(dir) !== dir)
|
|
27
|
+
throw new Error('External session storage must stay in the project.');
|
|
28
|
+
}
|
|
29
|
+
return dir;
|
|
30
|
+
}
|
|
31
|
+
function read(file, root) {
|
|
32
|
+
const fd = fs.openSync(file, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
|
|
33
|
+
try {
|
|
34
|
+
const stat = fs.fstatSync(fd);
|
|
35
|
+
if (!stat.isFile() || stat.size > limits.maxRecordBytes)
|
|
36
|
+
throw new Error('External session record exceeds 4 MiB.');
|
|
37
|
+
const b = Buffer.alloc(stat.size + 1), n = fs.readSync(fd, b, 0, b.length, 0);
|
|
38
|
+
if (n !== stat.size)
|
|
39
|
+
throw new Error('External session changed during observation.');
|
|
40
|
+
const v = JSON.parse(b.subarray(0, n).toString('utf8'));
|
|
41
|
+
if (!schema(v) || v.projectRoot !== root || v.summary.id !== externalSessionId(v.summary.producer, v.summary.sessionId))
|
|
42
|
+
throw new Error('Invalid external session record.');
|
|
43
|
+
return v;
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
fs.closeSync(fd);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function observed(v) {
|
|
50
|
+
// No heartbeat proves the model or its native subprocess is alive.
|
|
51
|
+
if (v.summary.state !== 'running' || Date.now() - Date.parse(v.summary.observedAt) < 10000)
|
|
52
|
+
return v;
|
|
53
|
+
return { ...v, summary: { ...v.summary, state: 'unknown' }, turns: v.turns.map(t => t.state !== 'running' ? t : { ...t, state: 'unknown', tools: t.tools.map(tool => tool.outcome === 'requested' ? { ...tool, outcome: 'unknown' } : tool) }) };
|
|
54
|
+
}
|
|
55
|
+
export function listExternalSessions(root) {
|
|
56
|
+
root = fs.realpathSync(root);
|
|
57
|
+
const sessions = [];
|
|
58
|
+
let omitted = 0;
|
|
59
|
+
try {
|
|
60
|
+
const dir = directory(root), entries = fs.opendirSync(dir);
|
|
61
|
+
try {
|
|
62
|
+
let e, scanned = 0;
|
|
63
|
+
while ((e = entries.readSync())) {
|
|
64
|
+
if (++scanned > limits.maxSessions * 4) {
|
|
65
|
+
omitted++;
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
if (!/^x-[a-f0-9]{64}\.json$/.test(e.name))
|
|
69
|
+
continue;
|
|
70
|
+
if (sessions.length >= limits.maxSessions) {
|
|
71
|
+
omitted++;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
sessions.push(observed(read(path.join(dir, e.name), root)).summary);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
omitted++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
entries.closeSync();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
if (e.code !== 'ENOENT')
|
|
88
|
+
omitted++;
|
|
89
|
+
}
|
|
90
|
+
return { sessions: sessions.sort((a, b) => b.lastAt.localeCompare(a.lastAt)), omitted };
|
|
91
|
+
}
|
|
92
|
+
export function readExternalSession(root, input) {
|
|
93
|
+
if (!/^x-[a-f0-9]{64}$/.test(input.session))
|
|
94
|
+
throw new Error('Invalid external session identity.');
|
|
95
|
+
root = fs.realpathSync(root);
|
|
96
|
+
const v = observed(read(path.join(directory(root), input.session + '.json'), root));
|
|
97
|
+
const end = Math.min(v.turns.length, input.before ?? v.turns.length), first = Math.max(0, end - Math.min(20, Math.max(1, input.limit ?? 4)));
|
|
98
|
+
return { session: v.summary, first, turns: v.turns.slice(first, end) };
|
|
99
|
+
}
|
|
100
|
+
/** Native adapters retain an observation under their existing filesystem authority.
|
|
101
|
+
* No managed execution, Agent input, grant change or runtime startup is involved. */
|
|
102
|
+
export function saveExternalSession(root, value, previousDigest) {
|
|
103
|
+
root = fs.realpathSync(root);
|
|
104
|
+
if (value.projectRoot !== root || !schema(value) || value.summary.id !== externalSessionId(value.summary.producer, value.summary.sessionId))
|
|
105
|
+
throw new Error('Invalid external session observation.');
|
|
106
|
+
const bytes = JSON.stringify(value);
|
|
107
|
+
if (Buffer.byteLength(bytes) > limits.maxRecordBytes)
|
|
108
|
+
throw new Error('External session exceeds maxRecordBytes; previous observation retained.');
|
|
109
|
+
const dir = directory(root, true), file = path.join(dir, value.summary.id + '.json');
|
|
110
|
+
// The lock covers only a small local observation write; never steal a live writer's lock.
|
|
111
|
+
const lock = file + '.lock';
|
|
112
|
+
let fd;
|
|
113
|
+
try {
|
|
114
|
+
fd = fs.openSync(lock, 'wx', 0o600);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// Recover only a positively dead writer. Unknown owners and live PIDs retain the lock.
|
|
118
|
+
try {
|
|
119
|
+
const stat = fs.lstatSync(lock);
|
|
120
|
+
if (!stat.isFile() || stat.isSymbolicLink() || stat.size > 32)
|
|
121
|
+
throw new Error();
|
|
122
|
+
const pid = Number(fs.readFileSync(lock, 'utf8'));
|
|
123
|
+
if (!Number.isSafeInteger(pid) || pid <= 0)
|
|
124
|
+
throw new Error();
|
|
125
|
+
try {
|
|
126
|
+
process.kill(pid, 0);
|
|
127
|
+
throw new Error();
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
if (e.code !== 'ESRCH')
|
|
131
|
+
throw e;
|
|
132
|
+
}
|
|
133
|
+
const now = fs.lstatSync(lock);
|
|
134
|
+
if (now.ino !== stat.ino || now.dev !== stat.dev)
|
|
135
|
+
throw new Error();
|
|
136
|
+
fs.unlinkSync(lock);
|
|
137
|
+
fd = fs.openSync(lock, 'wx', 0o600);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
throw new Error('External session observation is busy; previous observation retained.');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
fs.writeFileSync(fd, String(process.pid));
|
|
144
|
+
const temp = file + '.' + randomUUID() + '.tmp';
|
|
145
|
+
try {
|
|
146
|
+
let old;
|
|
147
|
+
try {
|
|
148
|
+
old = read(file, root);
|
|
149
|
+
}
|
|
150
|
+
catch (e) {
|
|
151
|
+
if (e.code !== 'ENOENT')
|
|
152
|
+
throw e;
|
|
153
|
+
}
|
|
154
|
+
if (old) {
|
|
155
|
+
if (value.summary.sourceCursor < old.summary.sourceCursor)
|
|
156
|
+
throw new Error('External source moved backwards; previous observation retained.');
|
|
157
|
+
if (value.summary.sourceCursor === old.summary.sourceCursor && old.sourceDigest !== value.sourceDigest)
|
|
158
|
+
throw new Error('External source identity conflicts with retained content.');
|
|
159
|
+
if (value.summary.sourceCursor > old.summary.sourceCursor && previousDigest !== old.sourceDigest)
|
|
160
|
+
throw new Error('External source prefix conflicts with retained content.');
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
const entries = fs.readdirSync(dir).filter(n => /^x-[a-f0-9]{64}\.json$/.test(n));
|
|
164
|
+
if (entries.length >= limits.maxSessions)
|
|
165
|
+
throw new Error('External session maxSessions reached; previous observations retained.');
|
|
166
|
+
}
|
|
167
|
+
fs.writeFileSync(temp, bytes, { flag: 'wx', mode: 0o600 });
|
|
168
|
+
fs.renameSync(temp, file);
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
fs.closeSync(fd);
|
|
172
|
+
fs.unlinkSync(lock);
|
|
173
|
+
try {
|
|
174
|
+
fs.unlinkSync(temp);
|
|
175
|
+
}
|
|
176
|
+
catch { }
|
|
177
|
+
}
|
|
178
|
+
return value.summary;
|
|
179
|
+
}
|
|
180
|
+
export function retainedExternalSession(root, producer, sessionId) {
|
|
181
|
+
root = fs.realpathSync(root);
|
|
182
|
+
try {
|
|
183
|
+
return read(path.join(directory(root), externalSessionId(producer, sessionId) + '.json'), root);
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
if (e.code === 'ENOENT')
|
|
187
|
+
return undefined;
|
|
188
|
+
throw e;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
@@ -141,6 +141,18 @@ export declare const plugin: {
|
|
|
141
141
|
description: string;
|
|
142
142
|
readOnly: true;
|
|
143
143
|
runsCode: false;
|
|
144
|
+
} | {
|
|
145
|
+
order: number;
|
|
146
|
+
displayName: string;
|
|
147
|
+
description: string;
|
|
148
|
+
readOnly: true;
|
|
149
|
+
runsCode: false;
|
|
150
|
+
} | {
|
|
151
|
+
order: number;
|
|
152
|
+
displayName: string;
|
|
153
|
+
description: string;
|
|
154
|
+
readOnly: true;
|
|
155
|
+
runsCode: false;
|
|
144
156
|
} | {
|
|
145
157
|
order: number;
|
|
146
158
|
displayName: string;
|
|
@@ -237,6 +249,18 @@ export declare const plugin: {
|
|
|
237
249
|
description: string;
|
|
238
250
|
readOnly: true;
|
|
239
251
|
runsCode: false;
|
|
252
|
+
} | {
|
|
253
|
+
order: number;
|
|
254
|
+
displayName: string;
|
|
255
|
+
description: string;
|
|
256
|
+
readOnly: true;
|
|
257
|
+
runsCode: false;
|
|
258
|
+
} | {
|
|
259
|
+
order: number;
|
|
260
|
+
displayName: string;
|
|
261
|
+
description: string;
|
|
262
|
+
readOnly: true;
|
|
263
|
+
runsCode: false;
|
|
240
264
|
} | {
|
|
241
265
|
order: number;
|
|
242
266
|
displayName: string;
|
|
@@ -333,6 +357,234 @@ export declare const plugin: {
|
|
|
333
357
|
description: string;
|
|
334
358
|
readOnly: true;
|
|
335
359
|
runsCode: false;
|
|
360
|
+
} | {
|
|
361
|
+
order: number;
|
|
362
|
+
displayName: string;
|
|
363
|
+
description: string;
|
|
364
|
+
readOnly: true;
|
|
365
|
+
runsCode: false;
|
|
366
|
+
} | {
|
|
367
|
+
order: number;
|
|
368
|
+
displayName: string;
|
|
369
|
+
description: string;
|
|
370
|
+
readOnly: true;
|
|
371
|
+
runsCode: false;
|
|
372
|
+
} | {
|
|
373
|
+
order: number;
|
|
374
|
+
displayName: string;
|
|
375
|
+
description: string;
|
|
376
|
+
readOnly: false;
|
|
377
|
+
runsCode: false;
|
|
378
|
+
} | {
|
|
379
|
+
order: number;
|
|
380
|
+
displayName: string;
|
|
381
|
+
description: string;
|
|
382
|
+
readOnly: false;
|
|
383
|
+
runsCode: false;
|
|
384
|
+
} | {
|
|
385
|
+
order: number;
|
|
386
|
+
displayName: string;
|
|
387
|
+
description: string;
|
|
388
|
+
readOnly: false;
|
|
389
|
+
runsCode: false;
|
|
390
|
+
} | {
|
|
391
|
+
order: number;
|
|
392
|
+
displayName: string;
|
|
393
|
+
description: string;
|
|
394
|
+
readOnly: true;
|
|
395
|
+
runsCode: false;
|
|
396
|
+
} | {
|
|
397
|
+
order: number;
|
|
398
|
+
displayName: string;
|
|
399
|
+
description: string;
|
|
400
|
+
readOnly: false;
|
|
401
|
+
runsCode: false;
|
|
402
|
+
} | {
|
|
403
|
+
order: number;
|
|
404
|
+
displayName: string;
|
|
405
|
+
description: string;
|
|
406
|
+
readOnly: true;
|
|
407
|
+
runsCode: false;
|
|
408
|
+
} | {
|
|
409
|
+
order: number;
|
|
410
|
+
displayName: string;
|
|
411
|
+
description: string;
|
|
412
|
+
readOnly: true;
|
|
413
|
+
runsCode: false;
|
|
414
|
+
} | {
|
|
415
|
+
order: number;
|
|
416
|
+
displayName: string;
|
|
417
|
+
description: string;
|
|
418
|
+
readOnly: false;
|
|
419
|
+
runsCode: false;
|
|
420
|
+
} | {
|
|
421
|
+
order: number;
|
|
422
|
+
displayName: string;
|
|
423
|
+
description: string;
|
|
424
|
+
readOnly: false;
|
|
425
|
+
runsCode: false;
|
|
426
|
+
} | {
|
|
427
|
+
order: number;
|
|
428
|
+
displayName: string;
|
|
429
|
+
description: string;
|
|
430
|
+
readOnly: false;
|
|
431
|
+
runsCode: false;
|
|
432
|
+
} | {
|
|
433
|
+
order: number;
|
|
434
|
+
displayName: string;
|
|
435
|
+
description: string;
|
|
436
|
+
readOnly: true;
|
|
437
|
+
runsCode: false;
|
|
438
|
+
};
|
|
439
|
+
version: "2.0";
|
|
440
|
+
} | {
|
|
441
|
+
requires: string[];
|
|
442
|
+
inputSchema: {
|
|
443
|
+
type: string;
|
|
444
|
+
properties: Record<string, any>;
|
|
445
|
+
required: string[];
|
|
446
|
+
additionalProperties: boolean;
|
|
447
|
+
};
|
|
448
|
+
outputSchema: {
|
|
449
|
+
type: string;
|
|
450
|
+
properties: Record<string, any>;
|
|
451
|
+
required: string[];
|
|
452
|
+
additionalProperties: boolean;
|
|
453
|
+
};
|
|
454
|
+
effect: "read";
|
|
455
|
+
method: string;
|
|
456
|
+
presentation: {
|
|
457
|
+
order: number;
|
|
458
|
+
displayName: string;
|
|
459
|
+
description: string;
|
|
460
|
+
readOnly: true;
|
|
461
|
+
runsCode: false;
|
|
462
|
+
} | {
|
|
463
|
+
order: number;
|
|
464
|
+
displayName: string;
|
|
465
|
+
description: string;
|
|
466
|
+
readOnly: true;
|
|
467
|
+
runsCode: false;
|
|
468
|
+
} | {
|
|
469
|
+
order: number;
|
|
470
|
+
displayName: string;
|
|
471
|
+
description: string;
|
|
472
|
+
readOnly: true;
|
|
473
|
+
runsCode: false;
|
|
474
|
+
} | {
|
|
475
|
+
order: number;
|
|
476
|
+
displayName: string;
|
|
477
|
+
description: string;
|
|
478
|
+
readOnly: true;
|
|
479
|
+
runsCode: false;
|
|
480
|
+
} | {
|
|
481
|
+
order: number;
|
|
482
|
+
displayName: string;
|
|
483
|
+
description: string;
|
|
484
|
+
readOnly: false;
|
|
485
|
+
runsCode: false;
|
|
486
|
+
} | {
|
|
487
|
+
order: number;
|
|
488
|
+
displayName: string;
|
|
489
|
+
description: string;
|
|
490
|
+
readOnly: false;
|
|
491
|
+
runsCode: false;
|
|
492
|
+
} | {
|
|
493
|
+
order: number;
|
|
494
|
+
displayName: string;
|
|
495
|
+
description: string;
|
|
496
|
+
readOnly: false;
|
|
497
|
+
runsCode: false;
|
|
498
|
+
} | {
|
|
499
|
+
order: number;
|
|
500
|
+
displayName: string;
|
|
501
|
+
description: string;
|
|
502
|
+
readOnly: true;
|
|
503
|
+
runsCode: false;
|
|
504
|
+
} | {
|
|
505
|
+
order: number;
|
|
506
|
+
displayName: string;
|
|
507
|
+
description: string;
|
|
508
|
+
readOnly: false;
|
|
509
|
+
runsCode: false;
|
|
510
|
+
} | {
|
|
511
|
+
order: number;
|
|
512
|
+
displayName: string;
|
|
513
|
+
description: string;
|
|
514
|
+
readOnly: true;
|
|
515
|
+
runsCode: false;
|
|
516
|
+
} | {
|
|
517
|
+
order: number;
|
|
518
|
+
displayName: string;
|
|
519
|
+
description: string;
|
|
520
|
+
readOnly: true;
|
|
521
|
+
runsCode: false;
|
|
522
|
+
} | {
|
|
523
|
+
order: number;
|
|
524
|
+
displayName: string;
|
|
525
|
+
description: string;
|
|
526
|
+
readOnly: false;
|
|
527
|
+
runsCode: false;
|
|
528
|
+
} | {
|
|
529
|
+
order: number;
|
|
530
|
+
displayName: string;
|
|
531
|
+
description: string;
|
|
532
|
+
readOnly: false;
|
|
533
|
+
runsCode: false;
|
|
534
|
+
} | {
|
|
535
|
+
order: number;
|
|
536
|
+
displayName: string;
|
|
537
|
+
description: string;
|
|
538
|
+
readOnly: false;
|
|
539
|
+
runsCode: false;
|
|
540
|
+
} | {
|
|
541
|
+
order: number;
|
|
542
|
+
displayName: string;
|
|
543
|
+
description: string;
|
|
544
|
+
readOnly: true;
|
|
545
|
+
runsCode: false;
|
|
546
|
+
};
|
|
547
|
+
version: "2.0";
|
|
548
|
+
} | {
|
|
549
|
+
requires: string[];
|
|
550
|
+
inputSchema: {
|
|
551
|
+
type: string;
|
|
552
|
+
properties: Record<string, any>;
|
|
553
|
+
required: string[];
|
|
554
|
+
additionalProperties: boolean;
|
|
555
|
+
};
|
|
556
|
+
outputSchema: {
|
|
557
|
+
type: string;
|
|
558
|
+
properties: Record<string, any>;
|
|
559
|
+
required: string[];
|
|
560
|
+
additionalProperties: boolean;
|
|
561
|
+
};
|
|
562
|
+
effect: "read";
|
|
563
|
+
method: string;
|
|
564
|
+
presentation: {
|
|
565
|
+
order: number;
|
|
566
|
+
displayName: string;
|
|
567
|
+
description: string;
|
|
568
|
+
readOnly: true;
|
|
569
|
+
runsCode: false;
|
|
570
|
+
} | {
|
|
571
|
+
order: number;
|
|
572
|
+
displayName: string;
|
|
573
|
+
description: string;
|
|
574
|
+
readOnly: true;
|
|
575
|
+
runsCode: false;
|
|
576
|
+
} | {
|
|
577
|
+
order: number;
|
|
578
|
+
displayName: string;
|
|
579
|
+
description: string;
|
|
580
|
+
readOnly: true;
|
|
581
|
+
runsCode: false;
|
|
582
|
+
} | {
|
|
583
|
+
order: number;
|
|
584
|
+
displayName: string;
|
|
585
|
+
description: string;
|
|
586
|
+
readOnly: true;
|
|
587
|
+
runsCode: false;
|
|
336
588
|
} | {
|
|
337
589
|
order: number;
|
|
338
590
|
displayName: string;
|
|
@@ -541,6 +793,18 @@ export declare const plugin: {
|
|
|
541
793
|
description: string;
|
|
542
794
|
readOnly: true;
|
|
543
795
|
runsCode: false;
|
|
796
|
+
} | {
|
|
797
|
+
order: number;
|
|
798
|
+
displayName: string;
|
|
799
|
+
description: string;
|
|
800
|
+
readOnly: true;
|
|
801
|
+
runsCode: false;
|
|
802
|
+
} | {
|
|
803
|
+
order: number;
|
|
804
|
+
displayName: string;
|
|
805
|
+
description: string;
|
|
806
|
+
readOnly: true;
|
|
807
|
+
runsCode: false;
|
|
544
808
|
} | {
|
|
545
809
|
order: number;
|
|
546
810
|
displayName: string;
|
|
@@ -639,6 +903,18 @@ export declare const plugin: {
|
|
|
639
903
|
description: string;
|
|
640
904
|
readOnly: true;
|
|
641
905
|
runsCode: false;
|
|
906
|
+
} | {
|
|
907
|
+
order: number;
|
|
908
|
+
displayName: string;
|
|
909
|
+
description: string;
|
|
910
|
+
readOnly: true;
|
|
911
|
+
runsCode: false;
|
|
912
|
+
} | {
|
|
913
|
+
order: number;
|
|
914
|
+
displayName: string;
|
|
915
|
+
description: string;
|
|
916
|
+
readOnly: true;
|
|
917
|
+
runsCode: false;
|
|
642
918
|
} | {
|
|
643
919
|
order: number;
|
|
644
920
|
displayName: string;
|
|
@@ -765,6 +1041,18 @@ export declare const plugin: {
|
|
|
765
1041
|
description: string;
|
|
766
1042
|
readOnly: true;
|
|
767
1043
|
runsCode: false;
|
|
1044
|
+
} | {
|
|
1045
|
+
order: number;
|
|
1046
|
+
displayName: string;
|
|
1047
|
+
description: string;
|
|
1048
|
+
readOnly: true;
|
|
1049
|
+
runsCode: false;
|
|
1050
|
+
} | {
|
|
1051
|
+
order: number;
|
|
1052
|
+
displayName: string;
|
|
1053
|
+
description: string;
|
|
1054
|
+
readOnly: true;
|
|
1055
|
+
runsCode: false;
|
|
768
1056
|
} | {
|
|
769
1057
|
order: number;
|
|
770
1058
|
displayName: string;
|
|
@@ -893,6 +1181,18 @@ export declare const plugin: {
|
|
|
893
1181
|
description: string;
|
|
894
1182
|
readOnly: true;
|
|
895
1183
|
runsCode: false;
|
|
1184
|
+
} | {
|
|
1185
|
+
order: number;
|
|
1186
|
+
displayName: string;
|
|
1187
|
+
description: string;
|
|
1188
|
+
readOnly: true;
|
|
1189
|
+
runsCode: false;
|
|
1190
|
+
} | {
|
|
1191
|
+
order: number;
|
|
1192
|
+
displayName: string;
|
|
1193
|
+
description: string;
|
|
1194
|
+
readOnly: true;
|
|
1195
|
+
runsCode: false;
|
|
896
1196
|
} | {
|
|
897
1197
|
order: number;
|
|
898
1198
|
displayName: string;
|
|
@@ -979,6 +1279,18 @@ export declare const plugin: {
|
|
|
979
1279
|
description: string;
|
|
980
1280
|
readOnly: true;
|
|
981
1281
|
runsCode: false;
|
|
1282
|
+
} | {
|
|
1283
|
+
order: number;
|
|
1284
|
+
displayName: string;
|
|
1285
|
+
description: string;
|
|
1286
|
+
readOnly: true;
|
|
1287
|
+
runsCode: false;
|
|
1288
|
+
} | {
|
|
1289
|
+
order: number;
|
|
1290
|
+
displayName: string;
|
|
1291
|
+
description: string;
|
|
1292
|
+
readOnly: true;
|
|
1293
|
+
runsCode: false;
|
|
982
1294
|
} | {
|
|
983
1295
|
order: number;
|
|
984
1296
|
displayName: string;
|
|
@@ -1065,6 +1377,18 @@ export declare const plugin: {
|
|
|
1065
1377
|
description: string;
|
|
1066
1378
|
readOnly: true;
|
|
1067
1379
|
runsCode: false;
|
|
1380
|
+
} | {
|
|
1381
|
+
order: number;
|
|
1382
|
+
displayName: string;
|
|
1383
|
+
description: string;
|
|
1384
|
+
readOnly: true;
|
|
1385
|
+
runsCode: false;
|
|
1386
|
+
} | {
|
|
1387
|
+
order: number;
|
|
1388
|
+
displayName: string;
|
|
1389
|
+
description: string;
|
|
1390
|
+
readOnly: true;
|
|
1391
|
+
runsCode: false;
|
|
1068
1392
|
} | {
|
|
1069
1393
|
order: number;
|
|
1070
1394
|
displayName: string;
|
|
@@ -1151,6 +1475,18 @@ export declare const plugin: {
|
|
|
1151
1475
|
description: string;
|
|
1152
1476
|
readOnly: true;
|
|
1153
1477
|
runsCode: false;
|
|
1478
|
+
} | {
|
|
1479
|
+
order: number;
|
|
1480
|
+
displayName: string;
|
|
1481
|
+
description: string;
|
|
1482
|
+
readOnly: true;
|
|
1483
|
+
runsCode: false;
|
|
1484
|
+
} | {
|
|
1485
|
+
order: number;
|
|
1486
|
+
displayName: string;
|
|
1487
|
+
description: string;
|
|
1488
|
+
readOnly: true;
|
|
1489
|
+
runsCode: false;
|
|
1154
1490
|
} | {
|
|
1155
1491
|
order: number;
|
|
1156
1492
|
displayName: string;
|
|
@@ -1239,6 +1575,18 @@ export declare const plugin: {
|
|
|
1239
1575
|
description: string;
|
|
1240
1576
|
readOnly: true;
|
|
1241
1577
|
runsCode: false;
|
|
1578
|
+
} | {
|
|
1579
|
+
order: number;
|
|
1580
|
+
displayName: string;
|
|
1581
|
+
description: string;
|
|
1582
|
+
readOnly: true;
|
|
1583
|
+
runsCode: false;
|
|
1584
|
+
} | {
|
|
1585
|
+
order: number;
|
|
1586
|
+
displayName: string;
|
|
1587
|
+
description: string;
|
|
1588
|
+
readOnly: true;
|
|
1589
|
+
runsCode: false;
|
|
1242
1590
|
} | {
|
|
1243
1591
|
order: number;
|
|
1244
1592
|
displayName: string;
|
|
@@ -1327,6 +1675,18 @@ export declare const plugin: {
|
|
|
1327
1675
|
description: string;
|
|
1328
1676
|
readOnly: true;
|
|
1329
1677
|
runsCode: false;
|
|
1678
|
+
} | {
|
|
1679
|
+
order: number;
|
|
1680
|
+
displayName: string;
|
|
1681
|
+
description: string;
|
|
1682
|
+
readOnly: true;
|
|
1683
|
+
runsCode: false;
|
|
1684
|
+
} | {
|
|
1685
|
+
order: number;
|
|
1686
|
+
displayName: string;
|
|
1687
|
+
description: string;
|
|
1688
|
+
readOnly: true;
|
|
1689
|
+
runsCode: false;
|
|
1330
1690
|
} | {
|
|
1331
1691
|
order: number;
|
|
1332
1692
|
displayName: string;
|
|
@@ -1413,6 +1773,18 @@ export declare const plugin: {
|
|
|
1413
1773
|
description: string;
|
|
1414
1774
|
readOnly: true;
|
|
1415
1775
|
runsCode: false;
|
|
1776
|
+
} | {
|
|
1777
|
+
order: number;
|
|
1778
|
+
displayName: string;
|
|
1779
|
+
description: string;
|
|
1780
|
+
readOnly: true;
|
|
1781
|
+
runsCode: false;
|
|
1782
|
+
} | {
|
|
1783
|
+
order: number;
|
|
1784
|
+
displayName: string;
|
|
1785
|
+
description: string;
|
|
1786
|
+
readOnly: true;
|
|
1787
|
+
runsCode: false;
|
|
1416
1788
|
} | {
|
|
1417
1789
|
order: number;
|
|
1418
1790
|
displayName: string;
|
|
@@ -1601,3 +1973,4 @@ export declare const plugin: {
|
|
|
1601
1973
|
proactivePush: string;
|
|
1602
1974
|
};
|
|
1603
1975
|
};
|
|
1976
|
+
export { listExternalSessions, readExternalSession } from './external-session.js';
|
|
@@ -307,3 +307,4 @@ export const plugin = { entryVersion: '1.0', id: 'agent', package: '@rho-workspa
|
|
|
307
307
|
components: [{ id: 'rho.agent-note', version: '0.2.0', owner: 'rho-plugins.agent', bindings: {}, propsSchema: layeredSchemas.AgentNoteProps, ui: './ui', presentation: { displayName: 'Agent note', description: 'A plain presentation explanation with authenticated author and binding basis.', readOnly: true, runsCode: false } }],
|
|
308
308
|
skills: [{ ...agentSkill, presentation: skillPresentation }, { ...feedbackSkill, presentation: { displayName: 'Business feedback', description: 'Reads original feedback, preserves current human edits and links an explicit reply.' } }, { ...presentationSkill, presentation: { displayName: 'Presentation', description: 'Enhances the assigned visible layout without business feedback or document access.' } }],
|
|
309
309
|
agent: { id: 'claude-code-mcp', transport: 'stdio', modelLoop: 'external-client', contextDelivery: 'pull-tool-result', proactivePush: 'unsupported' } };
|
|
310
|
+
export { listExternalSessions, readExternalSession } from './external-session.js';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { externalSessionSchemas } from './external-session-contract.js';
|
|
1
2
|
export declare const operationContracts: {
|
|
2
3
|
'feedback.submit': {
|
|
3
4
|
inputSchema: any;
|
|
@@ -327,4 +328,36 @@ export declare const operationContracts: {
|
|
|
327
328
|
requires: string[];
|
|
328
329
|
effect: "metadata";
|
|
329
330
|
};
|
|
331
|
+
'agent.sessions.list': {
|
|
332
|
+
inputSchema: {
|
|
333
|
+
type: string;
|
|
334
|
+
properties: Record<string, any>;
|
|
335
|
+
required: string[];
|
|
336
|
+
additionalProperties: boolean;
|
|
337
|
+
};
|
|
338
|
+
outputSchema: {
|
|
339
|
+
type: string;
|
|
340
|
+
properties: Record<string, any>;
|
|
341
|
+
required: string[];
|
|
342
|
+
additionalProperties: boolean;
|
|
343
|
+
};
|
|
344
|
+
requires: never[];
|
|
345
|
+
effect: "read";
|
|
346
|
+
};
|
|
347
|
+
'agent.sessions.read': {
|
|
348
|
+
inputSchema: {
|
|
349
|
+
type: string;
|
|
350
|
+
properties: Record<string, any>;
|
|
351
|
+
required: string[];
|
|
352
|
+
additionalProperties: boolean;
|
|
353
|
+
};
|
|
354
|
+
outputSchema: {
|
|
355
|
+
type: string;
|
|
356
|
+
properties: Record<string, any>;
|
|
357
|
+
required: string[];
|
|
358
|
+
additionalProperties: boolean;
|
|
359
|
+
};
|
|
360
|
+
requires: never[];
|
|
361
|
+
effect: "read";
|
|
362
|
+
};
|
|
330
363
|
};
|