@harness-mix/cli 0.1.5 → 0.1.7
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/README.md +86 -56
- package/docs/harness-management.md +4 -4
- package/docs/multi-agent-collaboration.md +9 -9
- package/docs/storage-verification-design.md +49 -0
- package/output/native-build/renderer-extension.js +4210 -2273
- package/package.json +11 -9
- package/scripts/codebuddy-migration-test.cjs +1 -1
- package/scripts/collaboration-test.cjs +8 -3
- package/scripts/collaboration-ui-smoke.cjs +40 -26
- package/scripts/core-runtime-test.cjs +9 -1
- package/scripts/integrations-test.cjs +63 -4
- package/scripts/integrations-ui-smoke.cjs +77 -16
- package/scripts/native-protocol-test.cjs +113 -2
- package/scripts/native-sidebar-test.cjs +7 -0
- package/scripts/native-skill-roots-test.cjs +90 -0
- package/scripts/native-ui-smoke.cjs +23 -4
- package/scripts/projector-test.cjs +13 -0
- package/scripts/storage-verification-test.cjs +78 -0
- package/scripts/switch-harness-test.cjs +1 -1
- package/scripts/test-live-mentions.cjs +152 -0
- package/src/main/adapters/antigravity.js +20 -17
- package/src/main/adapters/claude.js +41 -8
- package/src/main/adapters/codebuddy.js +1 -0
- package/src/main/adapters/codex.js +20 -2
- package/src/main/adapters/cursor.js +5 -1
- package/src/main/adapters/dsh.js +8 -1
- package/src/main/adapters/grok.js +4 -1
- package/src/main/adapters/hermes.js +8 -0
- package/src/main/adapters/kiro.js +2 -1
- package/src/main/adapters/managed-mcp.js +15 -2
- package/src/main/adapters/omp.js +11 -0
- package/src/main/adapters/openclaw.js +6 -0
- package/src/main/adapters/opencode.js +5 -1
- package/src/main/adapters/pi.js +5 -1
- package/src/main/adapters/qoder.js +1 -0
- package/src/main/adapters/trae.js +4 -0
- package/src/main/adapters/zcode.js +3 -0
- package/src/main/host/collaboration.js +59 -11
- package/src/main/host/core-session.js +7 -1
- package/src/main/host/handoff-checkpoints.js +8 -1
- package/src/main/host/integrations.js +164 -26
- package/src/main/host/runtime.js +270 -116
- package/src/main/host/store.js +32 -11
- package/src/main/host/thread-storage.js +73 -0
- package/src/main/host/thread-store.js +123 -0
- package/src/main/host/verification-gates.js +118 -0
- package/src/main/native/protocol.js +209 -83
- package/src/main/native/thread-list.js +3 -0
- package/src/main/protocol-core/projector.js +20 -3
- package/src/main/shared-contracts/event.js +2 -1
- package/src/main/shared-contracts/item.js +1 -0
- package/src/native-ui/renderer-extension/dist/types/harness-mix-settings.d.ts +2 -2
- package/src/native-ui/renderer-extension/dist/types/harness-mix-settings.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-chatgpt-context.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts +11 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-harness-mentions.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-integrations-client.d.ts +29 -4
- package/src/native-ui/renderer-extension/dist/types/renderer-integrations-client.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts +5 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-settings-lifecycle.d.ts +2 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-settings-lifecycle.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/icons.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/icons.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/integrations-page.d.ts +2 -1
- package/src/native-ui/renderer-extension/dist/types/settings/integrations-page.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/localization.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts +5 -3
- package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/storage-page.d.ts +20 -0
- package/src/native-ui/renderer-extension/dist/types/settings/storage-page.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/tsconfig.tsbuildinfo +1 -1
- package/src/native-ui/renderer-extension/src/harness-mix-settings.ts +8 -88
- package/src/native-ui/renderer-extension/src/renderer-binding-probe.ts +150 -168
- package/src/native-ui/renderer-extension/src/renderer-chatgpt-context.ts +5 -1
- package/src/native-ui/renderer-extension/src/renderer-harness-mentions.ts +556 -123
- package/src/native-ui/renderer-extension/src/renderer-integrations-client.ts +36 -3
- package/src/native-ui/renderer-extension/src/renderer-model-client.ts +4 -0
- package/src/native-ui/renderer-extension/src/renderer-settings-lifecycle.ts +12 -0
- package/src/native-ui/renderer-extension/src/settings/icons.ts +6 -3
- package/src/native-ui/renderer-extension/src/settings/integrations-page.ts +1434 -62
- package/src/native-ui/renderer-extension/src/settings/localization.ts +8 -4
- package/src/native-ui/renderer-extension/src/settings/pages.ts +17 -8
- package/src/native-ui/renderer-extension/src/settings/shell.css +103 -8
- package/src/native-ui/renderer-extension/src/settings/storage-page.ts +74 -0
- package/src/native-ui/renderer-extension/test/renderer-chatgpt-context.test.ts +4 -1
- package/src/native-ui/renderer-extension/test/renderer-model-client.test.ts +2 -0
- package/src/native-ui/renderer-extension/test/settings/harness-settings.test.ts +5 -0
- package/src/native-ui/renderer-extension/test/settings/localization.test.ts +1 -1
- package/src/native-ui/renderer-extension/test/settings/pages.test.ts +50 -4
- package/src/native-ui/renderer-extension/test/settings/shell.test.ts +8 -2
|
@@ -1,13 +1,46 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
|
|
3
|
-
const serverSchema = z.object({
|
|
3
|
+
const serverSchema = z.object({
|
|
4
|
+
id: z.string(),
|
|
5
|
+
name: z.string(),
|
|
6
|
+
transportType: z.enum(['stdio', 'streamable_http']).optional(),
|
|
7
|
+
command: z.string().optional().default(''),
|
|
8
|
+
args: z.array(z.string()).optional().default([]),
|
|
9
|
+
env: z.record(z.string(), z.string()).optional(),
|
|
10
|
+
env_vars: z.array(z.string()).optional(),
|
|
11
|
+
cwd: z.string().nullable().optional(),
|
|
12
|
+
url: z.string().optional(),
|
|
13
|
+
bearer_token_env_var: z.string().optional(),
|
|
14
|
+
http_headers: z.record(z.string(), z.string()).optional(),
|
|
15
|
+
env_http_headers: z.record(z.string(), z.string()).optional(),
|
|
16
|
+
enabled: z.boolean(),
|
|
17
|
+
scope: z.enum(['global', 'project']),
|
|
18
|
+
editable: z.boolean(),
|
|
19
|
+
effective: z.boolean(),
|
|
20
|
+
appliedSessions: z.number(),
|
|
21
|
+
});
|
|
4
22
|
const skillSchema = z.object({ name: z.string(), path: z.string(), root: z.string(), enabled: z.boolean(), writable: z.boolean(), scope: z.enum(['global', 'project']), status: z.string() });
|
|
5
23
|
const snapshotSchema = z.object({ harnessId: z.string(), mcpSupported: z.boolean(), skillsSupported: z.boolean(), servers: z.array(serverSchema), native: z.array(z.object({ sessionId: z.string(), name: z.string(), status: z.string(), tools: z.array(z.string()) })), skills: z.array(skillSchema), note: z.string() });
|
|
6
24
|
const catalogSchema = z.object({ harnesses: z.array(z.object({ id: z.string(), name: z.string(), available: z.boolean(), mcp: z.boolean(), skills: z.boolean() })) });
|
|
7
25
|
export type IntegrationSnapshot = z.infer<typeof snapshotSchema>;
|
|
8
26
|
export interface IntegrationScope { harnessId: string; scope: 'global' | 'project'; cwd?: string }
|
|
9
|
-
export interface ManagedServer {
|
|
10
|
-
|
|
27
|
+
export interface ManagedServer {
|
|
28
|
+
id?: string | undefined;
|
|
29
|
+
name: string;
|
|
30
|
+
transportType?: 'stdio' | 'streamable_http' | undefined;
|
|
31
|
+
command?: string | undefined;
|
|
32
|
+
args?: string[] | undefined;
|
|
33
|
+
env?: Record<string, string> | undefined;
|
|
34
|
+
env_vars?: string[] | undefined;
|
|
35
|
+
cwd?: string | null | undefined;
|
|
36
|
+
url?: string | undefined;
|
|
37
|
+
bearer_token_env_var?: string | undefined;
|
|
38
|
+
http_headers?: Record<string, string> | undefined;
|
|
39
|
+
env_http_headers?: Record<string, string> | undefined;
|
|
40
|
+
enabled: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface DroppedSkillFile { path: string; contentBase64: string }
|
|
43
|
+
export interface SkillChange { name: string; root?: string; source?: string; files?: DroppedSkillFile[]; action: 'install' | 'enable' | 'disable' }
|
|
11
44
|
export interface RendererIntegrationsClient {
|
|
12
45
|
integrationCatalog(): Promise<z.infer<typeof catalogSchema>>;
|
|
13
46
|
listIntegrations(input: IntegrationScope): Promise<IntegrationSnapshot>;
|
|
@@ -174,6 +174,8 @@ function notificationTarget(manager: RequestManagerCandidate): RequestManagerCan
|
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
export interface RendererModelClient extends Partial<RendererSessionImportClient>, Partial<RendererIntegrationsClient> {
|
|
177
|
+
inspectStorage?(): Promise<import('./settings/storage-page.js').RendererStorageInspection>;
|
|
178
|
+
optimizeStorage?(): Promise<{ before: import('./settings/storage-page.js').RendererStorageInspection; after: import('./settings/storage-page.js').RendererStorageInspection }>;
|
|
177
179
|
listCollaborationAgents?(): Promise<Array<{ id: string; name: string; available: boolean; lead: boolean }>>;
|
|
178
180
|
currentHostId?(): string | null;
|
|
179
181
|
listHarnessPlugins?(): Promise<HarnessPluginListResult>;
|
|
@@ -330,6 +332,8 @@ export function createRendererModelClient(
|
|
|
330
332
|
};
|
|
331
333
|
|
|
332
334
|
return Object.freeze({
|
|
335
|
+
async inspectStorage() { return await manager.sendRequest('codexhost/storage/inspect', {}) as import('./settings/storage-page.js').RendererStorageInspection; },
|
|
336
|
+
async optimizeStorage() { return await manager.sendRequest('codexhost/storage/optimize', {}) as { before: import('./settings/storage-page.js').RendererStorageInspection; after: import('./settings/storage-page.js').RendererStorageInspection }; },
|
|
333
337
|
async listCollaborationAgents(): Promise<Array<{ id: string; name: string; available: boolean; lead: boolean }>> {
|
|
334
338
|
const result = await manager.sendRequest('codexhost/collaboration/agents', {});
|
|
335
339
|
if (!Array.isArray(result) || !result.every(a => a && typeof a.id === 'string' && typeof a.name === 'string' && typeof a.available === 'boolean' && typeof a.lead === 'boolean')) throw new Error('Invalid collaboration catalog');
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
type RendererConnectionDiagnostics,
|
|
10
10
|
type RendererCodexAccountClient,
|
|
11
11
|
type RendererUpdateClient,
|
|
12
|
+
type RendererStorageClient,
|
|
12
13
|
} from "./settings/pages.js";
|
|
13
14
|
import type {
|
|
14
15
|
RendererSessionImportClient,
|
|
@@ -29,6 +30,7 @@ export interface RendererSettingsLifecycleOptions {
|
|
|
29
30
|
getConnectionDiagnostics?(): RendererConnectionDiagnostics | null;
|
|
30
31
|
getAccountClient?(): RendererCodexAccountClient | null;
|
|
31
32
|
getSessionImportClient?(): RendererSessionImportClient | null;
|
|
33
|
+
getStorageClient?(): RendererStorageClient | null;
|
|
32
34
|
openImportedThread?: RendererImportedThreadOpener;
|
|
33
35
|
onLocaleChange?(locale: RendererSettingsLocale): void;
|
|
34
36
|
}
|
|
@@ -76,6 +78,7 @@ export function installRendererSettingsLifecycle(
|
|
|
76
78
|
if (!disposed && !signal.aborted) shell?.close();
|
|
77
79
|
},
|
|
78
80
|
options.getIntegrationsClient,
|
|
81
|
+
options.getStorageClient,
|
|
79
82
|
);
|
|
80
83
|
const nextShell = installRendererSettingsShell(definitions, messages, ownerWindow.document);
|
|
81
84
|
const nextTrigger = installRendererSettingsHeaderTrigger({
|
|
@@ -212,7 +215,15 @@ export function installRendererSettingsLifecycle(
|
|
|
212
215
|
});
|
|
213
216
|
};
|
|
214
217
|
|
|
218
|
+
const onKeyDown = (event: KeyboardEvent): void => {
|
|
219
|
+
if ((event.ctrlKey || event.metaKey) && event.key === ",") {
|
|
220
|
+
event.preventDefault();
|
|
221
|
+
shell?.openSettings(undefined, "connections");
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
|
|
215
225
|
mount();
|
|
226
|
+
ownerWindow.addEventListener?.("keydown", onKeyDown);
|
|
216
227
|
void refreshLocale();
|
|
217
228
|
refreshUpdateIndicator();
|
|
218
229
|
|
|
@@ -228,6 +239,7 @@ export function installRendererSettingsLifecycle(
|
|
|
228
239
|
dispose() {
|
|
229
240
|
if (disposed) return;
|
|
230
241
|
disposed = true;
|
|
242
|
+
ownerWindow.removeEventListener?.("keydown", onKeyDown);
|
|
231
243
|
openGeneration += 1;
|
|
232
244
|
updateCheckGeneration += 1;
|
|
233
245
|
lifecycleController.abort();
|
|
@@ -31,7 +31,8 @@ import Search from "lucide/dist/esm/icons/search.mjs";
|
|
|
31
31
|
import CircleHelp from "lucide/dist/esm/icons/circle-question-mark.mjs";
|
|
32
32
|
import X from "lucide/dist/esm/icons/x.mjs";
|
|
33
33
|
import Users from "lucide/dist/esm/icons/users.mjs";
|
|
34
|
-
import Plus from "lucide/dist/esm/icons/plus.mjs";
|
|
34
|
+
import Plus from "lucide/dist/esm/icons/plus.mjs";
|
|
35
|
+
import Database from 'lucide/dist/esm/icons/database.mjs';
|
|
35
36
|
import harnessMixLogoUrl from "../../../../assets/brand-harness-mix.png";
|
|
36
37
|
|
|
37
38
|
export const RENDERER_SETTINGS_ICON_NAMES = [
|
|
@@ -67,7 +68,8 @@ export const RENDERER_SETTINGS_ICON_NAMES = [
|
|
|
67
68
|
"trash",
|
|
68
69
|
"terminal",
|
|
69
70
|
"search",
|
|
70
|
-
"help",
|
|
71
|
+
"help",
|
|
72
|
+
"storage",
|
|
71
73
|
] as const;
|
|
72
74
|
|
|
73
75
|
export type RendererSettingsIconName = (typeof RENDERER_SETTINGS_ICON_NAMES)[number];
|
|
@@ -105,7 +107,8 @@ const iconNodes = {
|
|
|
105
107
|
trash: Trash,
|
|
106
108
|
terminal: Terminal,
|
|
107
109
|
search: Search,
|
|
108
|
-
help: CircleHelp,
|
|
110
|
+
help: CircleHelp,
|
|
111
|
+
storage: Database,
|
|
109
112
|
} satisfies Record<RendererSettingsIconName, IconNode>;
|
|
110
113
|
|
|
111
114
|
export function isRendererSettingsIconName(value: string): value is RendererSettingsIconName {
|