@useorgx/orgx-opencode-plugin 0.1.0-alpha.1 → 0.1.0-alpha.11
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 +126 -3
- package/dist/OpenCodeDriver.d.ts +5 -2
- package/dist/OpenCodeDriver.d.ts.map +1 -1
- package/dist/OpenCodeDriver.js +12 -1
- package/dist/OpenCodeDriver.js.map +1 -1
- package/dist/attentionBridge.d.ts +38 -0
- package/dist/attentionBridge.d.ts.map +1 -0
- package/dist/attentionBridge.js +230 -0
- package/dist/attentionBridge.js.map +1 -0
- package/dist/childProcessEnv.d.ts +5 -0
- package/dist/childProcessEnv.d.ts.map +1 -0
- package/dist/childProcessEnv.js +17 -0
- package/dist/childProcessEnv.js.map +1 -0
- package/dist/cli.js +6 -3
- package/dist/cli.js.map +1 -1
- package/dist/contextPackHydration.d.ts +14 -0
- package/dist/contextPackHydration.d.ts.map +1 -0
- package/dist/contextPackHydration.js +57 -0
- package/dist/contextPackHydration.js.map +1 -0
- package/dist/continuityHealth.d.ts +48 -0
- package/dist/continuityHealth.d.ts.map +1 -0
- package/dist/continuityHealth.js +118 -0
- package/dist/continuityHealth.js.map +1 -0
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/peer.d.ts +14 -0
- package/dist/peer.d.ts.map +1 -1
- package/dist/peer.js +142 -13
- package/dist/peer.js.map +1 -1
- package/dist/plugin.d.ts +17 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +124 -0
- package/dist/plugin.js.map +1 -0
- package/dist/sentry.d.ts +4 -0
- package/dist/sentry.d.ts.map +1 -0
- package/dist/sentry.js +97 -0
- package/dist/sentry.js.map +1 -0
- package/dist/sessionSummaryBridge.d.ts +20 -0
- package/dist/sessionSummaryBridge.d.ts.map +1 -0
- package/dist/sessionSummaryBridge.js +125 -0
- package/dist/sessionSummaryBridge.js.map +1 -0
- package/dist/v2Canary.d.ts +13 -0
- package/dist/v2Canary.d.ts.map +1 -0
- package/dist/v2Canary.js +27 -0
- package/dist/v2Canary.js.map +1 -0
- package/dist/workGraphOutbox.js +2 -2
- package/dist/workGraphOutbox.js.map +1 -1
- package/dist/workGraphReplay.d.ts +9 -0
- package/dist/workGraphReplay.d.ts.map +1 -0
- package/dist/workGraphReplay.js +41 -0
- package/dist/workGraphReplay.js.map +1 -0
- package/package.json +30 -9
- package/plugin.manifest.json +8 -2
- package/scripts/orgx-work-graph-reconcile.mjs +994 -0
- package/scripts/orgx-work-graph-reconcile.node-test.mjs +131 -0
package/dist/cli.js
CHANGED
|
@@ -5,13 +5,15 @@
|
|
|
5
5
|
* ORGX_API_KEY=oxk_... ORGX_WORKSPACE_ID=... orgx-opencode-plugin
|
|
6
6
|
*/
|
|
7
7
|
import { startPeer } from './peer.js';
|
|
8
|
+
import { captureFatalPluginException } from './sentry.js';
|
|
9
|
+
import { captureGatewayCredential } from './childProcessEnv.js';
|
|
8
10
|
async function main() {
|
|
9
|
-
const apiKey = process.env
|
|
11
|
+
const apiKey = captureGatewayCredential(process.env);
|
|
10
12
|
const workspaceId = process.env.ORGX_WORKSPACE_ID;
|
|
11
13
|
const baseUrl = process.env.ORGX_BASE_URL ?? 'https://useorgx.com';
|
|
12
14
|
if (!apiKey || !workspaceId) {
|
|
13
15
|
// eslint-disable-next-line no-console
|
|
14
|
-
console.error('Missing ORGX_API_KEY and/or ORGX_WORKSPACE_ID. Export both and retry.');
|
|
16
|
+
console.error('Missing ORGX_API_KEY (or ORGX_GATEWAY_KEY) and/or ORGX_WORKSPACE_ID. Export both and retry.');
|
|
15
17
|
process.exit(2);
|
|
16
18
|
}
|
|
17
19
|
const peer = await startPeer({ apiKey, workspaceId, baseUrl });
|
|
@@ -24,7 +26,8 @@ async function main() {
|
|
|
24
26
|
// eslint-disable-next-line no-console
|
|
25
27
|
console.log('[orgx-opencode-plugin] peer running — ctrl-c to stop. Dispatches will arrive when OrgX sends them.');
|
|
26
28
|
}
|
|
27
|
-
main().catch((err) => {
|
|
29
|
+
main().catch(async (err) => {
|
|
30
|
+
await captureFatalPluginException(err);
|
|
28
31
|
// eslint-disable-next-line no-console
|
|
29
32
|
console.error('[orgx-opencode-plugin] fatal', err);
|
|
30
33
|
process.exit(1);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,qBAAqB,CAAC;IAEnE,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,sCAAsC;QACtC,OAAO,CAAC,KAAK,CACX,6FAA6F,CAC9F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,sCAAsC;IACtC,OAAO,CAAC,GAAG,CACT,oGAAoG,CACrG,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACzB,MAAM,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACvC,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type Env = Record<string, string | undefined>;
|
|
2
|
+
export interface ContextPackConfig {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
initiativeId: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function resolveContextPackConfig(env: Env): ContextPackConfig | null;
|
|
8
|
+
export declare function buildContextPackRequest(config: ContextPackConfig): {
|
|
9
|
+
url: string;
|
|
10
|
+
init: RequestInit;
|
|
11
|
+
};
|
|
12
|
+
export declare function hydrateContextPack(env?: Env): Promise<boolean>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=contextPackHydration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextPackHydration.d.ts","sourceRoot":"","sources":["../src/contextPackHydration.ts"],"names":[],"mappings":"AAYA,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,GAAG,GAAG,iBAAiB,GAAG,IAAI,CAM3E;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;CACnB,CAYA;AAED,wBAAsB,kBAAkB,CAAC,GAAG,GAAE,GAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBjF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context-pack hydration (M adapter — OpenCode).
|
|
3
|
+
*
|
|
4
|
+
* On session connect, fetches the compiled AgentContextPack for the active
|
|
5
|
+
* initiative (POST /api/client/context-pack) and writes .opencode/
|
|
6
|
+
* orgx-context-pack.json (0600) so the agent starts briefed. Best-effort — never
|
|
7
|
+
* throws. The MCP backbone also returns the pack on first orgx_inspect call, so
|
|
8
|
+
* hydration is guaranteed either way.
|
|
9
|
+
*/
|
|
10
|
+
import { mkdir, writeFile, chmod } from 'node:fs/promises';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
export function resolveContextPackConfig(env) {
|
|
13
|
+
const apiKey = env.ORGX_API_KEY?.trim();
|
|
14
|
+
const baseUrl = env.ORGX_BASE_URL?.trim() || 'https://useorgx.com';
|
|
15
|
+
const initiativeId = env.ORGX_INITIATIVE_ID?.trim();
|
|
16
|
+
if (!apiKey || !initiativeId)
|
|
17
|
+
return null;
|
|
18
|
+
return { apiKey, baseUrl, initiativeId };
|
|
19
|
+
}
|
|
20
|
+
export function buildContextPackRequest(config) {
|
|
21
|
+
return {
|
|
22
|
+
url: `${config.baseUrl.replace(/\/$/, '')}/api/client/context-pack`,
|
|
23
|
+
init: {
|
|
24
|
+
method: 'POST',
|
|
25
|
+
headers: {
|
|
26
|
+
'content-type': 'application/json',
|
|
27
|
+
authorization: `Bearer ${config.apiKey}`,
|
|
28
|
+
},
|
|
29
|
+
body: JSON.stringify({ initiative_id: config.initiativeId }),
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export async function hydrateContextPack(env = process.env) {
|
|
34
|
+
try {
|
|
35
|
+
const config = resolveContextPackConfig(env);
|
|
36
|
+
if (!config)
|
|
37
|
+
return false;
|
|
38
|
+
const { url, init } = buildContextPackRequest(config);
|
|
39
|
+
const res = await fetch(url, init);
|
|
40
|
+
if (!res.ok)
|
|
41
|
+
return false;
|
|
42
|
+
const payload = (await res.json().catch(() => null));
|
|
43
|
+
const data = payload?.data ?? null;
|
|
44
|
+
if (!data)
|
|
45
|
+
return false;
|
|
46
|
+
const dir = join(process.cwd(), '.opencode');
|
|
47
|
+
await mkdir(dir, { recursive: true });
|
|
48
|
+
const out = join(dir, 'orgx-context-pack.json');
|
|
49
|
+
await writeFile(out, JSON.stringify({ fetchedAt: new Date().toISOString(), data }, null, 2), { mode: 0o600 });
|
|
50
|
+
await chmod(out, 0o600).catch(() => { });
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=contextPackHydration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextPackHydration.js","sourceRoot":"","sources":["../src/contextPackHydration.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAUjC,MAAM,UAAU,wBAAwB,CAAC,GAAQ;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,qBAAqB,CAAC;IACnE,MAAM,YAAY,GAAG,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAyB;IAI/D,OAAO;QACL,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,0BAA0B;QACnE,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;aACzC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;SAC7D;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAW,OAAO,CAAC,GAAG;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAC1B,MAAM,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAA8B,CAAC;QAClF,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;QAChD,MAAM,SAAS,CACb,GAAG,EACH,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EACtE,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;QACF,MAAM,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export type ContinuityOutboxHealth = {
|
|
2
|
+
state: 'ready' | 'pending' | 'degraded';
|
|
3
|
+
pending: number;
|
|
4
|
+
dead_letters: number;
|
|
5
|
+
last_replay_at: string | null;
|
|
6
|
+
};
|
|
7
|
+
export declare function inspectContinuityOutbox({ outboxPath, reportPath, }?: {
|
|
8
|
+
outboxPath?: string;
|
|
9
|
+
reportPath?: string;
|
|
10
|
+
}): Promise<ContinuityOutboxHealth>;
|
|
11
|
+
export declare function buildPluginContinuityHealth({ version, authState, endpoint, outbox, }: {
|
|
12
|
+
version: string;
|
|
13
|
+
authState: string;
|
|
14
|
+
endpoint?: string;
|
|
15
|
+
outbox?: ContinuityOutboxHealth;
|
|
16
|
+
}): Promise<{
|
|
17
|
+
schema_version: string;
|
|
18
|
+
endpoint: string;
|
|
19
|
+
source_client: string;
|
|
20
|
+
auth_state: string;
|
|
21
|
+
release: {
|
|
22
|
+
installed: string;
|
|
23
|
+
source: string;
|
|
24
|
+
deployed: string;
|
|
25
|
+
};
|
|
26
|
+
hooks: {
|
|
27
|
+
reported: number;
|
|
28
|
+
expected: number;
|
|
29
|
+
terminal_passive: boolean;
|
|
30
|
+
events: string[];
|
|
31
|
+
};
|
|
32
|
+
outbox: ContinuityOutboxHealth;
|
|
33
|
+
capture: {
|
|
34
|
+
adapter: string;
|
|
35
|
+
terminal_run_event: string;
|
|
36
|
+
terminal_session_event: string;
|
|
37
|
+
raw_content_included: boolean;
|
|
38
|
+
};
|
|
39
|
+
capabilities: {
|
|
40
|
+
profile: string;
|
|
41
|
+
profile_tools: number;
|
|
42
|
+
manifest_tools: number;
|
|
43
|
+
inspectable_entities: number;
|
|
44
|
+
visible_entities: number;
|
|
45
|
+
};
|
|
46
|
+
last_receipt_at: string | null;
|
|
47
|
+
}>;
|
|
48
|
+
//# sourceMappingURL=continuityHealth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuityHealth.d.ts","sourceRoot":"","sources":["../src/continuityHealth.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAkBF,wBAAsB,uBAAuB,CAAC,EAC5C,UAAkE,EAClE,UAC8D,GAC/D,GAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAmDvC;AAED,wBAAsB,2BAA2B,CAAC,EAChD,OAAO,EACP,SAAS,EACT,QAAoE,EACpE,MAAM,GACP,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CA"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
const DEFAULT_OUTBOX = join(homedir(), '.config', 'useorgx', 'wizard', 'hooks', 'events.jsonl');
|
|
5
|
+
const DEFAULT_REPORT = join(homedir(), '.config', 'useorgx', 'wizard', 'hooks', 'reports', 'latest-work-graph-report.json');
|
|
6
|
+
async function readText(path) {
|
|
7
|
+
try {
|
|
8
|
+
return await readFile(path, 'utf8');
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
if (error &&
|
|
12
|
+
typeof error === 'object' &&
|
|
13
|
+
'code' in error &&
|
|
14
|
+
error.code === 'ENOENT') {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function inspectContinuityOutbox({ outboxPath = process.env.ORGX_WIZARD_HOOK_OUTBOX ?? DEFAULT_OUTBOX, reportPath = process.env.ORGX_WIZARD_HOOK_REPORT_OUTPUT ?? DEFAULT_REPORT, } = {}) {
|
|
21
|
+
const [outboxText, reportText] = await Promise.all([
|
|
22
|
+
readText(outboxPath),
|
|
23
|
+
readText(reportPath),
|
|
24
|
+
]);
|
|
25
|
+
const lines = (outboxText ?? '')
|
|
26
|
+
.split('\n')
|
|
27
|
+
.map((line) => line.trim())
|
|
28
|
+
.filter(Boolean)
|
|
29
|
+
.slice(-5000);
|
|
30
|
+
let validRecords = 0;
|
|
31
|
+
let deadLetters = 0;
|
|
32
|
+
for (const line of lines) {
|
|
33
|
+
try {
|
|
34
|
+
const parsed = JSON.parse(line);
|
|
35
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
36
|
+
validRecords += 1;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
deadLetters += 1;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
deadLetters += 1;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
let replayedRecords = 0;
|
|
47
|
+
let lastReplayAt = null;
|
|
48
|
+
if (reportText) {
|
|
49
|
+
try {
|
|
50
|
+
const report = JSON.parse(reportText);
|
|
51
|
+
if (report?.posted) {
|
|
52
|
+
replayedRecords = Number.isFinite(report.records_read)
|
|
53
|
+
? Math.max(0, Math.round(report.records_read))
|
|
54
|
+
: 0;
|
|
55
|
+
lastReplayAt =
|
|
56
|
+
typeof report.report?.generated_at === 'string'
|
|
57
|
+
? report.report.generated_at
|
|
58
|
+
: null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
deadLetters += 1;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const pending = Math.max(0, validRecords - replayedRecords);
|
|
66
|
+
return {
|
|
67
|
+
state: deadLetters > 0 ? 'degraded' : pending > 0 ? 'pending' : 'ready',
|
|
68
|
+
pending,
|
|
69
|
+
dead_letters: deadLetters,
|
|
70
|
+
last_replay_at: lastReplayAt,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export async function buildPluginContinuityHealth({ version, authState, endpoint = process.env.ORGX_MCP_URL ?? 'https://mcp.useorgx.com/mcp', outbox, }) {
|
|
74
|
+
const outboxHealth = outbox ?? (await inspectContinuityOutbox());
|
|
75
|
+
const hookEvents = [
|
|
76
|
+
'session.created',
|
|
77
|
+
'message.updated:user',
|
|
78
|
+
'tool.execute.before',
|
|
79
|
+
'tool.execute.after',
|
|
80
|
+
'permission.asked',
|
|
81
|
+
'session.idle',
|
|
82
|
+
'session.error',
|
|
83
|
+
'session.deleted',
|
|
84
|
+
];
|
|
85
|
+
return {
|
|
86
|
+
schema_version: 'plugin-health.v1',
|
|
87
|
+
endpoint,
|
|
88
|
+
source_client: 'opencode',
|
|
89
|
+
auth_state: authState,
|
|
90
|
+
release: {
|
|
91
|
+
installed: version,
|
|
92
|
+
source: version,
|
|
93
|
+
deployed: version,
|
|
94
|
+
},
|
|
95
|
+
hooks: {
|
|
96
|
+
reported: hookEvents.length,
|
|
97
|
+
expected: hookEvents.length,
|
|
98
|
+
terminal_passive: true,
|
|
99
|
+
events: hookEvents,
|
|
100
|
+
},
|
|
101
|
+
outbox: outboxHealth,
|
|
102
|
+
capture: {
|
|
103
|
+
adapter: 'wizard_session_summary',
|
|
104
|
+
terminal_run_event: 'session.idle',
|
|
105
|
+
terminal_session_event: 'session.deleted',
|
|
106
|
+
raw_content_included: false,
|
|
107
|
+
},
|
|
108
|
+
capabilities: {
|
|
109
|
+
profile: 'opencode',
|
|
110
|
+
profile_tools: 33,
|
|
111
|
+
manifest_tools: 33,
|
|
112
|
+
inspectable_entities: 20,
|
|
113
|
+
visible_entities: 20,
|
|
114
|
+
},
|
|
115
|
+
last_receipt_at: outboxHealth.last_replay_at,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=continuityHealth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuityHealth.js","sourceRoot":"","sources":["../src/continuityHealth.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
export { OpenCodeDriver, type OpenCodeDriverOptions } from './OpenCodeDriver';
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
1
|
+
export { OpenCodeDriver, type OpenCodeDriverOptions } from './OpenCodeDriver.js';
|
|
2
|
+
export { default, createOrgXOpenCodePlugin, OrgXOpenCodePlugin, type CreateOrgXOpenCodePluginOptions, } from './plugin.js';
|
|
3
|
+
export type { StartedPeer, StartPeerOptions } from './peer.js';
|
|
4
|
+
export { buildWorkGraphEventRecord, recordWorkGraphEvent, resolveWorkGraphOutboxPath, } from './workGraphOutbox.js';
|
|
5
|
+
export { inspectOpenCodeV2Canary } from './v2Canary.js';
|
|
6
|
+
export declare function startPeer(opts: import('./peer.js').StartPeerOptions): Promise<import('./peer.js').StartedPeer>;
|
|
4
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EACL,OAAO,EACP,wBAAwB,EACxB,kBAAkB,EAClB,KAAK,+BAA+B,GACrC,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,wBAAsB,SAAS,CAC7B,IAAI,EAAE,OAAO,WAAW,EAAE,gBAAgB,GACzC,OAAO,CAAC,OAAO,WAAW,EAAE,WAAW,CAAC,CAG1C"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
export { OpenCodeDriver } from './OpenCodeDriver';
|
|
2
|
-
export {
|
|
3
|
-
export { buildWorkGraphEventRecord, recordWorkGraphEvent, resolveWorkGraphOutboxPath, } from './workGraphOutbox';
|
|
1
|
+
export { OpenCodeDriver } from './OpenCodeDriver.js';
|
|
2
|
+
export { default, createOrgXOpenCodePlugin, OrgXOpenCodePlugin, } from './plugin.js';
|
|
3
|
+
export { buildWorkGraphEventRecord, recordWorkGraphEvent, resolveWorkGraphOutboxPath, } from './workGraphOutbox.js';
|
|
4
|
+
export { inspectOpenCodeV2Canary } from './v2Canary.js';
|
|
5
|
+
export async function startPeer(opts) {
|
|
6
|
+
const peer = await import('./peer.js');
|
|
7
|
+
return peer.startPeer(opts);
|
|
8
|
+
}
|
|
4
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA8B,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA8B,MAAM,qBAAqB,CAAC;AACjF,OAAO,EACL,OAAO,EACP,wBAAwB,EACxB,kBAAkB,GAEnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAA0C;IAE1C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
|
package/dist/peer.d.ts
CHANGED
|
@@ -12,6 +12,12 @@
|
|
|
12
12
|
* });
|
|
13
13
|
*/
|
|
14
14
|
import { type Driver } from '@useorgx/orgx-gateway-sdk';
|
|
15
|
+
import { type ContinuityOutboxHealth } from './continuityHealth.js';
|
|
16
|
+
export declare function summarizeTransportError(error: unknown): {
|
|
17
|
+
name: string;
|
|
18
|
+
message: string;
|
|
19
|
+
code?: string | number;
|
|
20
|
+
};
|
|
15
21
|
export type StartPeerOptions = {
|
|
16
22
|
apiKey: string;
|
|
17
23
|
workspaceId: string;
|
|
@@ -23,6 +29,14 @@ export type StartPeerOptions = {
|
|
|
23
29
|
skipHeartbeat?: boolean;
|
|
24
30
|
/** Local Work Graph JSONL outbox path. Set false to disable. */
|
|
25
31
|
workGraphOutboxPath?: string | false;
|
|
32
|
+
/** Stable installation identity used to join heartbeat observations. */
|
|
33
|
+
installationId?: string;
|
|
34
|
+
/** MCP endpoint advertised in Chronicle health. */
|
|
35
|
+
mcpEndpoint?: string;
|
|
36
|
+
/** Override local replay state for tests. */
|
|
37
|
+
continuityOutbox?: ContinuityOutboxHealth;
|
|
38
|
+
/** Disable terminal replay for tests or intentionally offline installs. */
|
|
39
|
+
autoReplayWorkGraph?: boolean;
|
|
26
40
|
};
|
|
27
41
|
export type StartedPeer = {
|
|
28
42
|
stop: () => Promise<void>;
|
package/dist/peer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../src/peer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../src/peer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAMpE,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAC;AAuB/B,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAyBA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACrC,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,CAAC;AAEF,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiG5E"}
|
package/dist/peer.js
CHANGED
|
@@ -15,52 +15,131 @@ import { PeerClient } from '@useorgx/orgx-gateway-sdk';
|
|
|
15
15
|
import { readFile } from 'fs/promises';
|
|
16
16
|
import { resolve } from 'path';
|
|
17
17
|
import { fileURLToPath } from 'url';
|
|
18
|
-
import { OpenCodeDriver } from './OpenCodeDriver';
|
|
18
|
+
import { OpenCodeDriver } from './OpenCodeDriver.js';
|
|
19
|
+
import { buildPluginContinuityHealth, } from './continuityHealth.js';
|
|
20
|
+
import { capturePluginException, initializePluginSentry, } from './sentry.js';
|
|
21
|
+
import { createWorkGraphReplay } from './workGraphReplay.js';
|
|
22
|
+
const PRESENCE_HEARTBEAT_MS = 20_000;
|
|
23
|
+
const LICENSE_HEARTBEAT_MS = 7 * 24 * 60 * 60 * 1000;
|
|
24
|
+
const PLUGIN_ID = 'orgx-opencode-plugin';
|
|
25
|
+
// Protocol v2 requires a canonical proof-bearing ExecutionResult. Keep the
|
|
26
|
+
// production peer on v1 until the driver can obtain that proof from OrgX.
|
|
27
|
+
const GATEWAY_PROTOCOL_VERSION = 1;
|
|
28
|
+
const MAX_TRANSPORT_LOG_LENGTH = 500;
|
|
29
|
+
function redactTransportText(value) {
|
|
30
|
+
return String(value)
|
|
31
|
+
.slice(0, MAX_TRANSPORT_LOG_LENGTH)
|
|
32
|
+
.replace(/\bBearer\s+[^\s,;]+/gi, 'Bearer [redacted]')
|
|
33
|
+
.replace(/\bbearer\.[A-Za-z0-9._~-]+/gi, 'bearer.[redacted]')
|
|
34
|
+
.replace(/\boxk_[A-Za-z0-9_-]+\b/g, 'oxk_[redacted]');
|
|
35
|
+
}
|
|
36
|
+
export function summarizeTransportError(error) {
|
|
37
|
+
const record = error !== null && typeof error === 'object'
|
|
38
|
+
? error
|
|
39
|
+
: undefined;
|
|
40
|
+
const name = typeof record?.name === 'string' && record.name.trim()
|
|
41
|
+
? redactTransportText(record.name)
|
|
42
|
+
: 'TransportError';
|
|
43
|
+
const message = typeof record?.message === 'string' && record.message.trim()
|
|
44
|
+
? redactTransportText(record.message)
|
|
45
|
+
: typeof error === 'string' && error.trim()
|
|
46
|
+
? redactTransportText(error)
|
|
47
|
+
: 'Gateway transport failed';
|
|
48
|
+
const code = record?.code;
|
|
49
|
+
return {
|
|
50
|
+
name,
|
|
51
|
+
message,
|
|
52
|
+
...(typeof code === 'number' ||
|
|
53
|
+
(typeof code === 'string' && /^[A-Za-z0-9_-]{1,32}$/.test(code))
|
|
54
|
+
? { code }
|
|
55
|
+
: {}),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
19
58
|
export async function startPeer(opts) {
|
|
20
59
|
const baseUrl = opts.baseUrl ?? 'https://useorgx.com';
|
|
60
|
+
const manifest = await loadManifest();
|
|
61
|
+
initializePluginSentry(manifest.version);
|
|
62
|
+
const replayWorkGraph = opts.autoReplayWorkGraph === false
|
|
63
|
+
? undefined
|
|
64
|
+
: createWorkGraphReplay({
|
|
65
|
+
apiKey: opts.apiKey,
|
|
66
|
+
baseUrl,
|
|
67
|
+
workspaceId: opts.workspaceId,
|
|
68
|
+
outboxPath: opts.workGraphOutboxPath,
|
|
69
|
+
});
|
|
21
70
|
const driver = opts.driver ??
|
|
22
71
|
new OpenCodeDriver({
|
|
23
72
|
skillRules: async () => fetchSkillRules(baseUrl, opts),
|
|
24
73
|
workGraphOutboxPath: opts.workGraphOutboxPath,
|
|
74
|
+
replayWorkGraph,
|
|
25
75
|
});
|
|
26
|
-
|
|
76
|
+
let transportOnline = false;
|
|
77
|
+
let presenceTimer = null;
|
|
78
|
+
const heartbeatPresence = () => postPresenceHeartbeat(baseUrl, opts, manifest, driver, transportOnline);
|
|
27
79
|
const client = new PeerClient({
|
|
28
80
|
baseUrl: httpsToWss(baseUrl),
|
|
29
81
|
apiKey: opts.apiKey,
|
|
30
82
|
workspaceId: opts.workspaceId,
|
|
31
|
-
pluginId:
|
|
83
|
+
pluginId: PLUGIN_ID,
|
|
84
|
+
installationId: opts.installationId ?? defaultInstallationId(),
|
|
85
|
+
protocolVersion: GATEWAY_PROTOCOL_VERSION,
|
|
32
86
|
drivers: [driver],
|
|
33
87
|
onOpen: () => {
|
|
88
|
+
transportOnline = true;
|
|
34
89
|
// eslint-disable-next-line no-console
|
|
35
90
|
console.log('[orgx-opencode-plugin] connected');
|
|
91
|
+
void heartbeatPresence().catch((err) => {
|
|
92
|
+
// eslint-disable-next-line no-console
|
|
93
|
+
console.warn('[orgx-opencode-plugin] open heartbeat failed', err);
|
|
94
|
+
});
|
|
36
95
|
},
|
|
37
96
|
onClose: (code, reason) => {
|
|
97
|
+
transportOnline = false;
|
|
38
98
|
// eslint-disable-next-line no-console
|
|
39
99
|
console.warn('[orgx-opencode-plugin] closed', { code, reason });
|
|
40
100
|
},
|
|
41
101
|
onError: (err) => {
|
|
102
|
+
const safeError = summarizeTransportError(err);
|
|
103
|
+
capturePluginException(new Error(`${safeError.name}: ${safeError.message}`), {
|
|
104
|
+
stage: 'gateway_transport',
|
|
105
|
+
});
|
|
42
106
|
// eslint-disable-next-line no-console
|
|
43
|
-
console.error('[orgx-opencode-plugin] error',
|
|
107
|
+
console.error('[orgx-opencode-plugin] error', safeError);
|
|
44
108
|
},
|
|
45
109
|
});
|
|
46
110
|
client.connect();
|
|
47
|
-
let
|
|
111
|
+
let licenseHeartbeatTimer = null;
|
|
48
112
|
if (!opts.skipHeartbeat) {
|
|
49
|
-
await
|
|
113
|
+
await heartbeatPresence().catch((err) => {
|
|
114
|
+
// eslint-disable-next-line no-console
|
|
115
|
+
console.warn('[orgx-opencode-plugin] initial presence heartbeat failed', err);
|
|
116
|
+
});
|
|
117
|
+
presenceTimer = setInterval(() => {
|
|
118
|
+
void heartbeatPresence().catch((err) => {
|
|
119
|
+
// eslint-disable-next-line no-console
|
|
120
|
+
console.warn('[orgx-opencode-plugin] presence heartbeat failed', err);
|
|
121
|
+
});
|
|
122
|
+
}, PRESENCE_HEARTBEAT_MS);
|
|
123
|
+
presenceTimer.unref?.();
|
|
124
|
+
await postLicenseHeartbeat(baseUrl, opts, manifest).catch((err) => {
|
|
50
125
|
// eslint-disable-next-line no-console
|
|
51
|
-
console.warn('[orgx-opencode-plugin] initial heartbeat failed', err);
|
|
126
|
+
console.warn('[orgx-opencode-plugin] initial license heartbeat failed', err);
|
|
52
127
|
});
|
|
53
|
-
|
|
54
|
-
void
|
|
128
|
+
licenseHeartbeatTimer = setInterval(() => {
|
|
129
|
+
void postLicenseHeartbeat(baseUrl, opts, manifest).catch((err) => {
|
|
55
130
|
// eslint-disable-next-line no-console
|
|
56
131
|
console.warn('[orgx-opencode-plugin] weekly heartbeat failed', err);
|
|
57
132
|
});
|
|
58
|
-
},
|
|
133
|
+
}, LICENSE_HEARTBEAT_MS);
|
|
134
|
+
licenseHeartbeatTimer.unref?.();
|
|
59
135
|
}
|
|
60
136
|
return {
|
|
61
137
|
stop: async () => {
|
|
62
|
-
if (
|
|
63
|
-
clearInterval(
|
|
138
|
+
if (presenceTimer)
|
|
139
|
+
clearInterval(presenceTimer);
|
|
140
|
+
if (licenseHeartbeatTimer)
|
|
141
|
+
clearInterval(licenseHeartbeatTimer);
|
|
142
|
+
transportOnline = false;
|
|
64
143
|
client.disconnect();
|
|
65
144
|
},
|
|
66
145
|
};
|
|
@@ -84,7 +163,54 @@ async function loadManifest() {
|
|
|
84
163
|
};
|
|
85
164
|
}
|
|
86
165
|
}
|
|
87
|
-
async function
|
|
166
|
+
async function postPresenceHeartbeat(baseUrl, opts, manifest, driver, transportOnline) {
|
|
167
|
+
const detected = await driver.detect();
|
|
168
|
+
const authenticated = detected.authenticated === true;
|
|
169
|
+
const authState = authenticated
|
|
170
|
+
? 'authenticated'
|
|
171
|
+
: detected.installed
|
|
172
|
+
? 'unauthenticated'
|
|
173
|
+
: 'unavailable';
|
|
174
|
+
const continuityHealth = await buildPluginContinuityHealth({
|
|
175
|
+
version: manifest.version,
|
|
176
|
+
authState,
|
|
177
|
+
endpoint: opts.mcpEndpoint,
|
|
178
|
+
outbox: opts.continuityOutbox,
|
|
179
|
+
});
|
|
180
|
+
const r = await fetch(`${baseUrl.replace(/\/$/, '')}/api/v1/gateway/heartbeat`, {
|
|
181
|
+
method: 'POST',
|
|
182
|
+
headers: {
|
|
183
|
+
'Content-Type': 'application/json',
|
|
184
|
+
Authorization: `Bearer ${opts.apiKey}`,
|
|
185
|
+
},
|
|
186
|
+
body: JSON.stringify({
|
|
187
|
+
workspace_id: opts.workspaceId,
|
|
188
|
+
plugin_id: PLUGIN_ID,
|
|
189
|
+
installation_id: opts.installationId ?? defaultInstallationId(),
|
|
190
|
+
host_platform: process.platform,
|
|
191
|
+
drivers_installed: [driver.id],
|
|
192
|
+
gateway_version: manifest.version,
|
|
193
|
+
protocol_version: GATEWAY_PROTOCOL_VERSION,
|
|
194
|
+
plan_tier: null,
|
|
195
|
+
subscription_type: null,
|
|
196
|
+
subscription_active: authenticated,
|
|
197
|
+
metadata: {
|
|
198
|
+
runtime: 'peer',
|
|
199
|
+
transport_online: transportOnline,
|
|
200
|
+
runtime_online: true,
|
|
201
|
+
dispatch_ready: transportOnline && detected.installed === true && authenticated,
|
|
202
|
+
auth_status: authState,
|
|
203
|
+
auth_method: null,
|
|
204
|
+
probe_version: detected.version ?? null,
|
|
205
|
+
continuity_health: continuityHealth,
|
|
206
|
+
},
|
|
207
|
+
}),
|
|
208
|
+
});
|
|
209
|
+
if (!r.ok) {
|
|
210
|
+
throw new Error(`presence heartbeat ${r.status}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async function postLicenseHeartbeat(baseUrl, opts, manifest) {
|
|
88
214
|
const r = await fetch(`${baseUrl.replace(/\/$/, '')}/api/v1/licenses/heartbeat`, {
|
|
89
215
|
method: 'POST',
|
|
90
216
|
headers: {
|
|
@@ -103,6 +229,9 @@ async function postHeartbeat(baseUrl, opts, manifest) {
|
|
|
103
229
|
throw new Error(`heartbeat ${r.status}: ${await r.text().catch(() => '')}`);
|
|
104
230
|
}
|
|
105
231
|
}
|
|
232
|
+
function defaultInstallationId() {
|
|
233
|
+
return `${PLUGIN_ID}:${process.platform}:${process.env.USER ?? 'local'}`;
|
|
234
|
+
}
|
|
106
235
|
async function fetchSkillRules(baseUrl, opts) {
|
|
107
236
|
try {
|
|
108
237
|
const r = await fetch(`${baseUrl.replace(/\/$/, '')}/api/v1/plan-skills?workspace_id=${encodeURIComponent(opts.workspaceId)}`, {
|
package/dist/peer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer.js","sourceRoot":"","sources":["../src/peer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAe,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"peer.js","sourceRoot":"","sources":["../src/peer.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Plugin } from '@opencode-ai/plugin';
|
|
2
|
+
import type { StartedPeer, StartPeerOptions } from './peer.js';
|
|
3
|
+
import { bridgeOpenCodeSessionSummary } from './sessionSummaryBridge.js';
|
|
4
|
+
type StartPeer = (opts: StartPeerOptions) => Promise<StartedPeer>;
|
|
5
|
+
type Env = Record<string, string | undefined>;
|
|
6
|
+
type Logger = Pick<Console, 'log' | 'warn' | 'error'>;
|
|
7
|
+
type BridgeSessionSummary = typeof bridgeOpenCodeSessionSummary;
|
|
8
|
+
export type CreateOrgXOpenCodePluginOptions = {
|
|
9
|
+
startPeer?: StartPeer;
|
|
10
|
+
env?: Env;
|
|
11
|
+
logger?: Logger;
|
|
12
|
+
bridgeSessionSummary?: BridgeSessionSummary;
|
|
13
|
+
};
|
|
14
|
+
export declare function createOrgXOpenCodePlugin(opts?: CreateOrgXOpenCodePluginOptions): Plugin;
|
|
15
|
+
export declare const OrgXOpenCodePlugin: Plugin;
|
|
16
|
+
export default OrgXOpenCodePlugin;
|
|
17
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAQ/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAEzE,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAClE,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAC9C,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AACtD,KAAK,oBAAoB,GAAG,OAAO,4BAA4B,CAAC;AAEhE,MAAM,MAAM,+BAA+B,GAAG;IAC5C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,IAAI,GAAE,+BAAoC,GACzC,MAAM,CA0HR;AAYD,eAAO,MAAM,kBAAkB,QAA6B,CAAC;AAC7D,eAAe,kBAAkB,CAAC"}
|