copperhead 0.10.0 → 0.11.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 +41 -2
- package/dist/agent/context.js +2 -0
- package/dist/agent/context.js.map +1 -0
- package/dist/agent/dock-renderer.js +2 -2
- package/dist/agent/dock-renderer.js.map +1 -1
- package/dist/agent/envelope.js +105 -0
- package/dist/agent/envelope.js.map +1 -0
- package/dist/agent/loop.js +34 -14
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/providers/claude-code.js +17 -1
- package/dist/agent/providers/claude-code.js.map +1 -1
- package/dist/agent/providers/codex.js +84 -39
- package/dist/agent/providers/codex.js.map +1 -1
- package/dist/agent/recovery.js +91 -14
- package/dist/agent/recovery.js.map +1 -1
- package/dist/agent/registry.js +49 -0
- package/dist/agent/registry.js.map +1 -0
- package/dist/agent/render.js +2 -2
- package/dist/agent/render.js.map +1 -1
- package/dist/agent/theme.js +10 -5
- package/dist/agent/theme.js.map +1 -1
- package/dist/agent/tools.js +99 -769
- package/dist/agent/tools.js.map +1 -1
- package/dist/capabilities/define.js +35 -0
- package/dist/capabilities/define.js.map +1 -0
- package/dist/capabilities/handlers.js +744 -0
- package/dist/capabilities/handlers.js.map +1 -0
- package/dist/capabilities/helpers.js +39 -0
- package/dist/capabilities/helpers.js.map +1 -0
- package/dist/capabilities/index.js +50 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/skills/generate-report.js +23 -0
- package/dist/capabilities/skills/generate-report.js.map +1 -0
- package/dist/cli.js +84 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/create.js +5 -2
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/doctor.js +33 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/skill.js +109 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/sync.js +3 -1
- package/dist/commands/sync.js.map +1 -1
- package/dist/config.js +18 -6
- package/dist/config.js.map +1 -1
- package/dist/kicad/cli.js +106 -18
- package/dist/kicad/cli.js.map +1 -1
- package/dist/kicad/draft/draft.js +3 -0
- package/dist/kicad/draft/draft.js.map +1 -1
- package/dist/kicad/draft/engine.js +3139 -218
- package/dist/kicad/draft/engine.js.map +1 -1
- package/dist/kicad/draft/symsource.js +24 -10
- package/dist/kicad/draft/symsource.js.map +1 -1
- package/dist/kicad/emit.js +45 -6
- package/dist/kicad/emit.js.map +1 -1
- package/dist/kicad/legibility.js +51 -4
- package/dist/kicad/legibility.js.map +1 -1
- package/dist/kicad/score.js +173 -3
- package/dist/kicad/score.js.map +1 -1
- package/dist/kicad/sexp.js +32 -6
- package/dist/kicad/sexp.js.map +1 -1
- package/dist/mcp/server.js +485 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/memory/scaffold.js +8 -1
- package/dist/memory/scaffold.js.map +1 -1
- package/package.json +5 -2
- package/src/agent/context.ts +35 -0
- package/src/agent/dock-renderer.ts +3 -2
- package/src/agent/envelope.ts +124 -0
- package/src/agent/loop.ts +45 -17
- package/src/agent/providers/claude-code.ts +22 -1
- package/src/agent/providers/codex.ts +91 -42
- package/src/agent/recovery.ts +89 -12
- package/src/agent/registry.ts +58 -0
- package/src/agent/render.ts +4 -3
- package/src/agent/theme.ts +15 -5
- package/src/agent/tools.ts +124 -816
- package/src/agent/types.ts +10 -5
- package/src/capabilities/define.ts +88 -0
- package/src/capabilities/handlers.ts +769 -0
- package/src/capabilities/helpers.ts +37 -0
- package/src/capabilities/index.ts +53 -0
- package/src/capabilities/skills/generate-report.ts +25 -0
- package/src/cli.ts +84 -1
- package/src/commands/create.ts +5 -2
- package/src/commands/doctor.ts +34 -3
- package/src/commands/skill.ts +127 -0
- package/src/commands/sync.ts +5 -3
- package/src/config.ts +32 -8
- package/src/kicad/cli.ts +129 -18
- package/src/kicad/draft/draft.ts +2 -0
- package/src/kicad/draft/engine.ts +3034 -226
- package/src/kicad/draft/symsource.ts +24 -10
- package/src/kicad/emit.ts +71 -7
- package/src/kicad/legibility.ts +55 -6
- package/src/kicad/score.ts +187 -8
- package/src/kicad/sexp.ts +37 -6
- package/src/mcp/server.ts +560 -0
- package/src/memory/scaffold.ts +8 -1
package/src/agent/types.ts
CHANGED
|
@@ -35,11 +35,16 @@ export interface Turn {
|
|
|
35
35
|
export interface ChatOpts {
|
|
36
36
|
maxTokens?: number;
|
|
37
37
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
38
|
+
* Progress callback (5.1). A streaming provider calls it as the turn makes
|
|
39
|
+
* progress, passing the cumulative streamed-output length in chars. The loop
|
|
40
|
+
* uses it twice: the heartbeat shows the count, so a slow turn can be told
|
|
41
|
+
* apart from a hung one, and every call restarts the turn's inactivity
|
|
42
|
+
* watchdog, so a long turn that keeps producing output is not aborted as hung.
|
|
43
|
+
* Call it on any progress (thinking, block boundaries), not only new text; an
|
|
44
|
+
* unchanged count is fine. Providers that don't stream simply never call it
|
|
45
|
+
* (the heartbeat still reports elapsed time, and the watchdog acts as a
|
|
46
|
+
* whole-turn deadline). Never used for billing — real token usage is reported
|
|
47
|
+
* once, on the returned Turn.
|
|
43
48
|
*/
|
|
44
49
|
onStream?: (streamedChars: number) => void;
|
|
45
50
|
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { ToolSchema } from '../agent/types.js';
|
|
2
|
+
import type { RunContext } from '../agent/context.js';
|
|
3
|
+
import type { ToolResult, ViewHint } from '../agent/envelope.js';
|
|
4
|
+
|
|
5
|
+
export interface CatalogTool {
|
|
6
|
+
kind: 'tool';
|
|
7
|
+
name: string;
|
|
8
|
+
version: number;
|
|
9
|
+
viewHint: ViewHint;
|
|
10
|
+
schema: ToolSchema;
|
|
11
|
+
gate: (ctx: RunContext) => boolean;
|
|
12
|
+
/** Own gate as declared, before the registry applies the tools-conjunction. */
|
|
13
|
+
ownGate: (ctx: RunContext) => boolean;
|
|
14
|
+
handler: (ctx: RunContext, args: Record<string, unknown>) => Promise<ToolResult>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface CatalogSkill {
|
|
18
|
+
kind: 'skill';
|
|
19
|
+
name: string;
|
|
20
|
+
version: number;
|
|
21
|
+
viewHint: ViewHint;
|
|
22
|
+
schema: ToolSchema;
|
|
23
|
+
gate: (ctx: RunContext) => boolean;
|
|
24
|
+
ownGate: (ctx: RunContext) => boolean;
|
|
25
|
+
/** False when `gate` was omitted and should default to the tools-conjunction. */
|
|
26
|
+
gateProvided: boolean;
|
|
27
|
+
tools: string[];
|
|
28
|
+
prompt: (ctx: RunContext, args: Record<string, unknown>) => string;
|
|
29
|
+
isComplete: (ctx: RunContext, args: Record<string, unknown>) => Promise<boolean> | boolean;
|
|
30
|
+
maxTurns?: number;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type CatalogEntry = CatalogTool | CatalogSkill;
|
|
34
|
+
|
|
35
|
+
export interface ToolInit {
|
|
36
|
+
schema: ToolSchema;
|
|
37
|
+
version: number;
|
|
38
|
+
viewHint: ViewHint;
|
|
39
|
+
gate: (ctx: RunContext) => boolean;
|
|
40
|
+
handler: (ctx: RunContext, args: Record<string, unknown>) => Promise<ToolResult>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface SkillInit {
|
|
44
|
+
schema: ToolSchema;
|
|
45
|
+
version: number;
|
|
46
|
+
viewHint: ViewHint;
|
|
47
|
+
tools: string[];
|
|
48
|
+
prompt: (ctx: RunContext, args: Record<string, unknown>) => string;
|
|
49
|
+
isComplete: (ctx: RunContext, args: Record<string, unknown>) => Promise<boolean> | boolean;
|
|
50
|
+
maxTurns?: number;
|
|
51
|
+
gate?: (ctx: RunContext) => boolean;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Identity helper: freeze defaults and tag the tier. */
|
|
55
|
+
export function defineTool(def: ToolInit): CatalogTool {
|
|
56
|
+
return {
|
|
57
|
+
kind: 'tool',
|
|
58
|
+
name: def.schema.name,
|
|
59
|
+
version: def.version,
|
|
60
|
+
viewHint: def.viewHint,
|
|
61
|
+
schema: def.schema,
|
|
62
|
+
gate: def.gate,
|
|
63
|
+
ownGate: def.gate,
|
|
64
|
+
handler: def.handler,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Identity helper. When `gate` is omitted the skill is available only if every
|
|
70
|
+
* declared tool's gate is true (applied by the registry at list-time).
|
|
71
|
+
*/
|
|
72
|
+
export function defineSkill(def: SkillInit): CatalogSkill {
|
|
73
|
+
const ownGate = def.gate ?? ((_ctx: RunContext) => true);
|
|
74
|
+
return {
|
|
75
|
+
kind: 'skill',
|
|
76
|
+
name: def.schema.name,
|
|
77
|
+
version: def.version,
|
|
78
|
+
viewHint: def.viewHint,
|
|
79
|
+
schema: def.schema,
|
|
80
|
+
gate: ownGate,
|
|
81
|
+
ownGate,
|
|
82
|
+
gateProvided: def.gate !== undefined,
|
|
83
|
+
tools: def.tools,
|
|
84
|
+
prompt: def.prompt,
|
|
85
|
+
isComplete: def.isComplete,
|
|
86
|
+
...(def.maxTurns !== undefined ? { maxTurns: def.maxTurns } : {}),
|
|
87
|
+
};
|
|
88
|
+
}
|