@madebywild/agent-harness-framework 1.3.1 → 1.5.0

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 CHANGED
@@ -1,5 +1,7 @@
1
1
  # @madebywild/agent-harness-framework
2
2
 
3
+ [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/madebywild/agent-harness)
4
+
3
5
  CLI and engine for [Agent Harness](https://github.com/madebywild/agent-harness) — unified AI agent configuration management for Claude Code, GitHub Copilot, and OpenAI Codex. The Shadcn for agent harnesses.
4
6
 
5
7
  Agent Harness manages agent configurations (system prompts, skills, MCP servers, subagents, and lifecycle hooks) from a single source of truth in a `.harness/` directory and generates provider-specific outputs for each enabled provider. Like [shadcn/ui](https://ui.shadcn.com/) does for UI components, entities can be pulled from external git registries as full, editable source code — no opaque library imports, complete transparency and ownership.
@@ -0,0 +1,13 @@
1
+ export interface AutocompleteSelectOption {
2
+ label: string;
3
+ value: string;
4
+ }
5
+ export interface AutocompleteSelectProps {
6
+ options: AutocompleteSelectOption[];
7
+ onChange: (value: string) => void;
8
+ onCancel?: () => void;
9
+ label?: string;
10
+ visibleOptionCount?: number;
11
+ }
12
+ export declare function AutocompleteSelect({ options, onChange, onCancel, label, visibleOptionCount, }: AutocompleteSelectProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=autocomplete-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete-select.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/autocomplete-select.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,KAAgB,EAChB,kBAAsB,GACvB,EAAE,uBAAuB,2CA0EzB"}
@@ -0,0 +1,74 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from "ink";
3
+ import { useMemo, useRef, useState } from "react";
4
+ export function AutocompleteSelect({ options, onChange, onCancel, label = "Search", visibleOptionCount = 8, }) {
5
+ const [query, setQuery] = useState("");
6
+ const [focusIndex, setFocusIndex] = useState(0);
7
+ const scrollRef = useRef(0);
8
+ const filtered = useMemo(() => {
9
+ if (!query)
10
+ return options;
11
+ const q = query.toLowerCase();
12
+ return options.filter((o) => o.label.toLowerCase().includes(q));
13
+ }, [options, query]);
14
+ // Clamp focus to valid range
15
+ const focus = Math.min(focusIndex, Math.max(0, filtered.length - 1));
16
+ const actualVisible = Math.min(visibleOptionCount, filtered.length);
17
+ // Adjust scroll to keep focus visible
18
+ if (focus < scrollRef.current) {
19
+ scrollRef.current = focus;
20
+ }
21
+ else if (focus >= scrollRef.current + actualVisible) {
22
+ scrollRef.current = focus - actualVisible + 1;
23
+ }
24
+ scrollRef.current = Math.max(0, Math.min(scrollRef.current, Math.max(0, filtered.length - actualVisible)));
25
+ const visibleSlice = filtered.slice(scrollRef.current, scrollRef.current + actualVisible);
26
+ useInput((input, key) => {
27
+ if (key.downArrow) {
28
+ setFocusIndex((i) => Math.min(i + 1, filtered.length - 1));
29
+ }
30
+ else if (key.upArrow) {
31
+ setFocusIndex((i) => Math.max(i - 1, 0));
32
+ }
33
+ else if (key.return) {
34
+ const selected = filtered[focus];
35
+ if (selected)
36
+ onChange(selected.value);
37
+ }
38
+ else if (key.escape) {
39
+ if (query) {
40
+ setQuery("");
41
+ setFocusIndex(0);
42
+ scrollRef.current = 0;
43
+ }
44
+ else {
45
+ onCancel?.();
46
+ }
47
+ }
48
+ else if (key.backspace || key.delete) {
49
+ setQuery((q) => q.slice(0, -1));
50
+ setFocusIndex(0);
51
+ scrollRef.current = 0;
52
+ }
53
+ else if (input && !key.ctrl && !key.meta && !key.tab) {
54
+ setQuery((q) => q + input);
55
+ setFocusIndex(0);
56
+ scrollRef.current = 0;
57
+ }
58
+ });
59
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { dimColor: true, children: [label, ": "] }), _jsx(Text, { children: query }), _jsx(Text, { dimColor: true, children: "\u2588" }), filtered.length !== options.length && _jsx(Text, { dimColor: true, children: ` (${filtered.length}/${options.length})` })] }), scrollRef.current > 0 && _jsx(Text, { dimColor: true, children: " ↑" }), visibleSlice.map((option, i) => {
60
+ const isFocused = scrollRef.current + i === focus;
61
+ return (_jsxs(Box, { children: [_jsx(Text, { color: isFocused ? "cyan" : undefined, children: isFocused ? "❯ " : " " }), _jsx(HighlightedLabel, { label: option.label, query: query, isFocused: isFocused })] }, option.value));
62
+ }), scrollRef.current + actualVisible < filtered.length && _jsx(Text, { dimColor: true, children: " ↓" }), filtered.length === 0 && _jsx(Text, { dimColor: true, children: " No matches" })] }));
63
+ }
64
+ function HighlightedLabel({ label, query, isFocused }) {
65
+ if (!query) {
66
+ return _jsx(Text, { color: isFocused ? "cyan" : undefined, children: label });
67
+ }
68
+ const idx = label.toLowerCase().indexOf(query.toLowerCase());
69
+ if (idx === -1) {
70
+ return _jsx(Text, { color: isFocused ? "cyan" : undefined, children: label });
71
+ }
72
+ return (_jsxs(Text, { color: isFocused ? "cyan" : undefined, children: [label.slice(0, idx), _jsx(Text, { bold: true, underline: true, children: label.slice(idx, idx + query.length) }), label.slice(idx + query.length)] }));
73
+ }
74
+ //# sourceMappingURL=autocomplete-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete-select.js","sourceRoot":"","sources":["../../../src/cli/adapters/autocomplete-select.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +1,32 @@
1
- import type { CliResolvedContext, CommandInput, CommandOutput } from "../contracts.js";
1
+ import type { Diagnostic } from "../../types.js";
2
+ import type { CommandInput, CommandOutput } from "../contracts.js";
2
3
  export interface InteractiveExecutionApi {
3
4
  execute: (input: CommandInput) => Promise<CommandOutput>;
4
- renderOutput: (output: CommandOutput, durationMs: number, json: boolean) => void;
5
5
  }
6
+ export type WorkspaceStatus = {
7
+ state: "missing";
8
+ } | {
9
+ state: "unhealthy";
10
+ diagnostics: Diagnostic[];
11
+ } | {
12
+ state: "healthy";
13
+ };
14
+ export declare function detectWorkspaceStatus(cwd: string): Promise<WorkspaceStatus>;
6
15
  interface InteractiveRunResult {
7
16
  exitCode: number;
8
17
  }
9
- export declare function runInteractiveAdapter(context: CliResolvedContext, api: InteractiveExecutionApi): Promise<InteractiveRunResult>;
18
+ export interface AppProps {
19
+ api: InteractiveExecutionApi;
20
+ presets: Array<{
21
+ id: string;
22
+ name: string;
23
+ }>;
24
+ workspaceStatus?: WorkspaceStatus;
25
+ onExit: (exitCode: number) => void;
26
+ }
27
+ export declare function App({ api, presets, workspaceStatus, onExit }: AppProps): import("react/jsx-runtime").JSX.Element;
28
+ export declare function runInteractiveAdapter(api: InteractiveExecutionApi, options?: {
29
+ cwd?: string;
30
+ }): Promise<InteractiveRunResult>;
10
31
  export {};
11
32
  //# sourceMappingURL=interactive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/interactive.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAa,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAElG,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IACzD,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAClF;AAED,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AA4eD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,kBAAkB,EAC3B,GAAG,EAAE,uBAAuB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CA2E/B"}
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../../src/cli/adapters/interactive.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKjD,OAAO,KAAK,EAAa,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAK9E,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CAC1D;AAMD,MAAM,MAAM,eAAe,GACvB;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GACpB;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,UAAU,EAAE,CAAA;CAAE,GACjD;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAEzB,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAyBjF;AAED,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAgdD,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,uBAAuB,CAAC;IAC7B,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAQD,wBAAgB,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,QAAQ,2CA2OtE;AA+lBD,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,uBAAuB,EAC5B,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAuB/B"}