@hy-sde-org/dsh-tool-debug 0.1.1-rc.2
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 +26 -0
- package/README.md +54 -0
- package/cordis.patch.yml +15 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +473 -0
- package/dist/index.js.map +1 -0
- package/dist/invariant.d.ts +16 -0
- package/dist/invariant.d.ts.map +1 -0
- package/dist/invariant.js +23 -0
- package/dist/invariant.js.map +1 -0
- package/dist/render.d.ts +319 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +524 -0
- package/dist/render.js.map +1 -0
- package/dist/session.d.ts +34 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +40 -0
- package/dist/session.js.map +1 -0
- package/dist/types.d.ts +80 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +60 -0
- package/dist/types.js.map +1 -0
- package/examples/agent-preset/agent.cordis.yml +50 -0
- package/examples/agent-preset/preset.yml +3 -0
- package/package.json +85 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-level vocabulary for the `debug` tool: the closed action set and the
|
|
3
|
+
* raw model-facing argument shape (snake_case, DAP terminology). Ported from
|
|
4
|
+
* oh-my-pi's `coding-agent/src/tools/debug.ts` (MIT).
|
|
5
|
+
* @module @hy-sde-org/dsh-tool-debug/types
|
|
6
|
+
*/
|
|
7
|
+
/** The 28 debug actions. Read-only introspection actions are safe to read from
|
|
8
|
+
* a paused program; everything else mutates execution state. */
|
|
9
|
+
export declare const DEBUG_ACTIONS: readonly ["launch", "attach", "set_breakpoint", "remove_breakpoint", "set_instruction_breakpoint", "remove_instruction_breakpoint", "data_breakpoint_info", "set_data_breakpoint", "remove_data_breakpoint", "continue", "step_over", "step_in", "step_out", "pause", "evaluate", "stack_trace", "threads", "scopes", "variables", "disassemble", "read_memory", "write_memory", "modules", "loaded_sources", "custom_request", "output", "terminate", "sessions"];
|
|
10
|
+
/** The closed union of debug actions. */
|
|
11
|
+
export type DebugToolAction = (typeof DEBUG_ACTIONS)[number];
|
|
12
|
+
/**
|
|
13
|
+
* Narrow a runtime value to `DebugToolAction` when it names one.
|
|
14
|
+
* @param value - the runtime value to test.
|
|
15
|
+
* @returns whether `value` is a known debug action.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isDebugAction(value: unknown): value is DebugToolAction;
|
|
18
|
+
/** Read-only actions that only inspect program state (no mutation/execution). */
|
|
19
|
+
export declare const DEBUG_READONLY_ACTIONS: ReadonlySet<string>;
|
|
20
|
+
/** Model-facing arguments of one `debug` call (all optional except `action`). */
|
|
21
|
+
export interface DebugToolArgs {
|
|
22
|
+
readonly action: DebugToolAction;
|
|
23
|
+
/** Debug target path; Delve accepts Go package directories. */
|
|
24
|
+
readonly program?: string;
|
|
25
|
+
/** Program arguments for launch. */
|
|
26
|
+
readonly args?: string[];
|
|
27
|
+
/** Configured adapter id (gdb, lldb-dap, debugpy, dlv, ... or a dap.json entry). */
|
|
28
|
+
readonly adapter?: string;
|
|
29
|
+
/** Call working directory; defaults to the session workspace. */
|
|
30
|
+
readonly cwd?: string;
|
|
31
|
+
/** Source file (breakpoint operations; resolved against cwd). */
|
|
32
|
+
readonly file?: string;
|
|
33
|
+
readonly line?: number;
|
|
34
|
+
/** Function name (breakpoint operations). */
|
|
35
|
+
readonly function?: string;
|
|
36
|
+
/** Variable or data name (data_breakpoint_info). */
|
|
37
|
+
readonly name?: string;
|
|
38
|
+
/** Breakpoint condition expression. */
|
|
39
|
+
readonly condition?: string;
|
|
40
|
+
readonly hit_condition?: string;
|
|
41
|
+
/** Expression to evaluate. */
|
|
42
|
+
readonly expression?: string;
|
|
43
|
+
/** Evaluate context: watch | repl | hover | variables | clipboard. */
|
|
44
|
+
readonly context?: string;
|
|
45
|
+
readonly frame_id?: number;
|
|
46
|
+
/** Scope variables reference. */
|
|
47
|
+
readonly scope_id?: number;
|
|
48
|
+
/** Variable reference. */
|
|
49
|
+
readonly variable_ref?: number;
|
|
50
|
+
/** Process id for attach. */
|
|
51
|
+
readonly pid?: number;
|
|
52
|
+
/** Remote attach port. */
|
|
53
|
+
readonly port?: number;
|
|
54
|
+
readonly host?: string;
|
|
55
|
+
/** Max stack frames for stack_trace. */
|
|
56
|
+
readonly levels?: number;
|
|
57
|
+
/** Memory reference or address. */
|
|
58
|
+
readonly memory_reference?: string;
|
|
59
|
+
readonly instruction_reference?: string;
|
|
60
|
+
readonly instruction_count?: number;
|
|
61
|
+
readonly instruction_offset?: number;
|
|
62
|
+
/** Bytes to read for read_memory. */
|
|
63
|
+
readonly count?: number;
|
|
64
|
+
/** Base64 memory payload for write_memory. */
|
|
65
|
+
readonly data?: string;
|
|
66
|
+
readonly data_id?: string;
|
|
67
|
+
readonly access_type?: 'read' | 'write' | 'readWrite';
|
|
68
|
+
/** Custom DAP request command. */
|
|
69
|
+
readonly command?: string;
|
|
70
|
+
/** Custom request arguments. */
|
|
71
|
+
readonly arguments?: Record<string, unknown>;
|
|
72
|
+
readonly offset?: number;
|
|
73
|
+
readonly resolve_symbols?: boolean;
|
|
74
|
+
readonly allow_partial?: boolean;
|
|
75
|
+
readonly start_module?: number;
|
|
76
|
+
readonly module_count?: number;
|
|
77
|
+
/** Per-request timeout seconds. */
|
|
78
|
+
readonly timeout?: number;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-level vocabulary for the `debug` tool: the closed action set and the
|
|
3
|
+
* raw model-facing argument shape (snake_case, DAP terminology). Ported from
|
|
4
|
+
* oh-my-pi's `coding-agent/src/tools/debug.ts` (MIT).
|
|
5
|
+
* @module @hy-sde-org/dsh-tool-debug/types
|
|
6
|
+
*/
|
|
7
|
+
/** The 28 debug actions. Read-only introspection actions are safe to read from
|
|
8
|
+
* a paused program; everything else mutates execution state. */
|
|
9
|
+
export const DEBUG_ACTIONS = [
|
|
10
|
+
'launch',
|
|
11
|
+
'attach',
|
|
12
|
+
'set_breakpoint',
|
|
13
|
+
'remove_breakpoint',
|
|
14
|
+
'set_instruction_breakpoint',
|
|
15
|
+
'remove_instruction_breakpoint',
|
|
16
|
+
'data_breakpoint_info',
|
|
17
|
+
'set_data_breakpoint',
|
|
18
|
+
'remove_data_breakpoint',
|
|
19
|
+
'continue',
|
|
20
|
+
'step_over',
|
|
21
|
+
'step_in',
|
|
22
|
+
'step_out',
|
|
23
|
+
'pause',
|
|
24
|
+
'evaluate',
|
|
25
|
+
'stack_trace',
|
|
26
|
+
'threads',
|
|
27
|
+
'scopes',
|
|
28
|
+
'variables',
|
|
29
|
+
'disassemble',
|
|
30
|
+
'read_memory',
|
|
31
|
+
'write_memory',
|
|
32
|
+
'modules',
|
|
33
|
+
'loaded_sources',
|
|
34
|
+
'custom_request',
|
|
35
|
+
'output',
|
|
36
|
+
'terminate',
|
|
37
|
+
'sessions',
|
|
38
|
+
];
|
|
39
|
+
/**
|
|
40
|
+
* Narrow a runtime value to `DebugToolAction` when it names one.
|
|
41
|
+
* @param value - the runtime value to test.
|
|
42
|
+
* @returns whether `value` is a known debug action.
|
|
43
|
+
*/
|
|
44
|
+
export function isDebugAction(value) {
|
|
45
|
+
return typeof value === 'string' && DEBUG_ACTIONS.includes(value);
|
|
46
|
+
}
|
|
47
|
+
/** Read-only actions that only inspect program state (no mutation/execution). */
|
|
48
|
+
export const DEBUG_READONLY_ACTIONS = new Set([
|
|
49
|
+
'output',
|
|
50
|
+
'threads',
|
|
51
|
+
'stack_trace',
|
|
52
|
+
'scopes',
|
|
53
|
+
'variables',
|
|
54
|
+
'disassemble',
|
|
55
|
+
'read_memory',
|
|
56
|
+
'loaded_sources',
|
|
57
|
+
'modules',
|
|
58
|
+
'sessions',
|
|
59
|
+
]);
|
|
60
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;iEACiE;AACjE,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,QAAQ;IACR,QAAQ;IACR,gBAAgB;IAChB,mBAAmB;IACnB,4BAA4B;IAC5B,+BAA+B;IAC/B,sBAAsB;IACtB,qBAAqB;IACrB,wBAAwB;IACxB,UAAU;IACV,WAAW;IACX,SAAS;IACT,UAAU;IACV,OAAO;IACP,UAAU;IACV,aAAa;IACb,SAAS;IACT,QAAQ;IACR,WAAW;IACX,aAAa;IACb,aAAa;IACb,cAAc;IACd,SAAS;IACT,gBAAgB;IAChB,gBAAgB;IAChB,QAAQ;IACR,WAAW;IACX,UAAU;CACF,CAAA;AAKV;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,aAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC1F,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAC;IACjE,QAAQ;IACR,SAAS;IACT,aAAa;IACb,QAAQ;IACR,WAAW;IACX,aAAa;IACb,aAAa;IACb,gBAAgB;IAChB,SAAS;IACT,UAAU;CACX,CAAC,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# User agent preset for @hy-sde-org/dsh-tool-debug — "agents get a real DAP
|
|
2
|
+
# debugger".
|
|
3
|
+
#
|
|
4
|
+
# Install: copy this directory to ~/.dsh/.agent-presets/<id>/ (pick any id),
|
|
5
|
+
# then select the preset in the Web UI preset picker (or `dsh agent` CLI).
|
|
6
|
+
#
|
|
7
|
+
# Structure: the `dap` service lives in an entry-local realm (isolate:
|
|
8
|
+
# dap) so each mounted session owns its adapter processes and captured
|
|
9
|
+
# output; tool-debug sits beside it and resolves `ctx.dap` from that realm.
|
|
10
|
+
# The DAP adapters themselves are local binaries (debugpy / dlv / lldb-dap /
|
|
11
|
+
# gdb...) resolved at runtime; no separate provider package is needed.
|
|
12
|
+
#
|
|
13
|
+
# Copy any other rows from the preset you normally use (bash, todo, ask-user,
|
|
14
|
+
# skills, ...) next to these; only the debugging rows are special.
|
|
15
|
+
|
|
16
|
+
- id: persona
|
|
17
|
+
name: '@deepseek-ai/dsh-persona'
|
|
18
|
+
config:
|
|
19
|
+
text: >-
|
|
20
|
+
You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}.
|
|
21
|
+
Debug code with the `debug` tool, which attaches or launches a real
|
|
22
|
+
debugger (debugpy, lldb-dap, gdb, dlv, ...): set source/function/
|
|
23
|
+
instruction/data breakpoints, continue/pause/step, read stack
|
|
24
|
+
frames/scopes/variables, evaluate expressions, disassemble, read/write
|
|
25
|
+
memory, list modules and loaded sources, and send custom debugger
|
|
26
|
+
requests. One live debug session at a time; terminate it before
|
|
27
|
+
launching another.
|
|
28
|
+
|
|
29
|
+
- id: agent-instructions
|
|
30
|
+
name: '@deepseek-ai/dsh-agent-instructions'
|
|
31
|
+
config:
|
|
32
|
+
maxBytes: 65536
|
|
33
|
+
|
|
34
|
+
# DAP capability seam + the model-facing debug tool. The seam's realm means
|
|
35
|
+
# adapter processes and breakpoint state belong to this session alone.
|
|
36
|
+
- id: debug
|
|
37
|
+
name: cordis:group
|
|
38
|
+
group: true
|
|
39
|
+
isolate:
|
|
40
|
+
dap: true
|
|
41
|
+
config:
|
|
42
|
+
- id: dap
|
|
43
|
+
name: '@hy-sde-org/dsh-dap'
|
|
44
|
+
|
|
45
|
+
- id: tool-debug
|
|
46
|
+
name: '@hy-sde-org/dsh-tool-debug'
|
|
47
|
+
config:
|
|
48
|
+
maxResultChars: 16000
|
|
49
|
+
requestTimeoutSec: 30
|
|
50
|
+
timeoutMs: 120000
|
package/package.json
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hy-sde-org/dsh-tool-debug",
|
|
3
|
+
"version": "0.1.1-rc.2",
|
|
4
|
+
"description": "The `debug` tool for DeepSeek Harness — a model-facing Debug Adapter Protocol tool with 28 operations (launch/attach, breakpoints, continue/pause/step, threads/stackTrace/scopes/variables/evaluate, disassembly, memory, modules, output, terminate) over the standalone DAP seam — a standalone plugin with no upstream harness changes required.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./invariant": {
|
|
14
|
+
"types": "./dist/invariant.d.ts",
|
|
15
|
+
"default": "./dist/invariant.js"
|
|
16
|
+
},
|
|
17
|
+
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
18
|
+
"./package.json": "./package.json"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist",
|
|
22
|
+
"cordis.patch.yml",
|
|
23
|
+
"examples/agent-preset/agent.cordis.yml",
|
|
24
|
+
"examples/agent-preset/preset.yml",
|
|
25
|
+
"README.md",
|
|
26
|
+
"LICENSE"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"clean": "rm -rf dist",
|
|
30
|
+
"build": "tsc -p tsconfig.build.json",
|
|
31
|
+
"check": "tsc -p tsconfig.json --noEmit",
|
|
32
|
+
"test": "vitest run",
|
|
33
|
+
"prepack": "pnpm run clean && pnpm run build"
|
|
34
|
+
},
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=22.19.0"
|
|
37
|
+
},
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "public"
|
|
40
|
+
},
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "git+https://github.com/hy-sde/dsh-tool-debug.git"
|
|
44
|
+
},
|
|
45
|
+
"license": "MIT",
|
|
46
|
+
"dsh": {
|
|
47
|
+
"bundle": {
|
|
48
|
+
"patch": "./cordis.patch.yml"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"@hy-sde-org/dsh-dap": "workspace:^",
|
|
53
|
+
"@deepseek-ai/schemastery": "3.18.1"
|
|
54
|
+
},
|
|
55
|
+
"peerDependencies": {
|
|
56
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
57
|
+
"@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
|
|
58
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.2",
|
|
59
|
+
"@deepseek-ai/dsh-timeout": "^0.1.1-rc.2",
|
|
60
|
+
"@deepseek-ai/dsh-tools": "^0.1.1-rc.2"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
64
|
+
"@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
|
|
65
|
+
"@deepseek-ai/dsh-subprocess": "^0.1.1-rc.2",
|
|
66
|
+
"@deepseek-ai/dsh-subprocess-local": "^0.1.1-rc.2",
|
|
67
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.2",
|
|
68
|
+
"@deepseek-ai/dsh-timeout": "^0.1.1-rc.2",
|
|
69
|
+
"@deepseek-ai/dsh-tools": "^0.1.1-rc.2",
|
|
70
|
+
"@deepseek-ai/schemastery": "3.18.1",
|
|
71
|
+
"@hy-sde-org/dsh-dap": "workspace:^",
|
|
72
|
+
"@types/node": "^24.13.3",
|
|
73
|
+
"typescript": "^5.9.3",
|
|
74
|
+
"vitest": "^3.2.7"
|
|
75
|
+
},
|
|
76
|
+
"keywords": [
|
|
77
|
+
"deepseek",
|
|
78
|
+
"agent",
|
|
79
|
+
"harness",
|
|
80
|
+
"dsh-plugin",
|
|
81
|
+
"debug",
|
|
82
|
+
"dap",
|
|
83
|
+
"debugger"
|
|
84
|
+
]
|
|
85
|
+
}
|