claude-plugin-dsh 0.0.0-stage → 0.1.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.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -2
  3. package/dist/bin/cli.d.ts +3 -0
  4. package/dist/bin/cli.d.ts.map +1 -0
  5. package/dist/bin/cli.js +80 -0
  6. package/dist/bin/cli.js.map +1 -0
  7. package/dist/bin/inspect.d.ts +2 -0
  8. package/dist/bin/inspect.d.ts.map +1 -0
  9. package/dist/bin/inspect.js +45 -0
  10. package/dist/bin/inspect.js.map +1 -0
  11. package/dist/bin/runtime.d.ts +2 -0
  12. package/dist/bin/runtime.d.ts.map +1 -0
  13. package/dist/bin/runtime.js +4 -0
  14. package/dist/bin/runtime.js.map +1 -0
  15. package/dist/bin/scaffold.d.ts +2 -0
  16. package/dist/bin/scaffold.d.ts.map +1 -0
  17. package/dist/bin/scaffold.js +44 -0
  18. package/dist/bin/scaffold.js.map +1 -0
  19. package/dist/bin/sync.d.ts +2 -0
  20. package/dist/bin/sync.d.ts.map +1 -0
  21. package/dist/bin/sync.js +24 -0
  22. package/dist/bin/sync.js.map +1 -0
  23. package/dist/claude-compat.js +825 -0
  24. package/dist/src/claude-compat.d.ts +8 -0
  25. package/dist/src/claude-compat.d.ts.map +1 -0
  26. package/dist/src/claude-compat.js +7 -0
  27. package/dist/src/claude-compat.js.map +1 -0
  28. package/dist/src/dsh-types.d.ts +252 -0
  29. package/dist/src/dsh-types.d.ts.map +1 -0
  30. package/dist/src/dsh-types.js +6 -0
  31. package/dist/src/dsh-types.js.map +1 -0
  32. package/dist/src/hooks.d.ts +38 -0
  33. package/dist/src/hooks.d.ts.map +1 -0
  34. package/dist/src/hooks.js +136 -0
  35. package/dist/src/hooks.js.map +1 -0
  36. package/dist/src/plugin-files.d.ts +92 -0
  37. package/dist/src/plugin-files.d.ts.map +1 -0
  38. package/dist/src/plugin-files.js +198 -0
  39. package/dist/src/plugin-files.js.map +1 -0
  40. package/dist/src/plugin.d.ts +35 -0
  41. package/dist/src/plugin.d.ts.map +1 -0
  42. package/dist/src/plugin.js +422 -0
  43. package/dist/src/plugin.js.map +1 -0
  44. package/dist/src/transcript.d.ts +25 -0
  45. package/dist/src/transcript.d.ts.map +1 -0
  46. package/dist/src/transcript.js +198 -0
  47. package/dist/src/transcript.js.map +1 -0
  48. package/package.json +54 -4
@@ -0,0 +1,198 @@
1
+ // DSH session log -> Claude Code transcript JSONL, the format hook scripts read
2
+ // through `transcript_path`.
3
+ import { randomUUID } from 'node:crypto';
4
+ import { appendFileSync, existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
5
+ import { homedir } from 'node:os';
6
+ import { dirname, join } from 'node:path';
7
+ // DSH tool name -> Claude Code tool name, for matchers and tool_name in hook input.
8
+ export const TOOL_NAME_MAP = {
9
+ bash: 'Bash',
10
+ read: 'Read',
11
+ read_image: 'Read',
12
+ write: 'Write',
13
+ edit: 'Edit',
14
+ str_replace_editor: 'Edit',
15
+ glob: 'Glob',
16
+ grep: 'Grep',
17
+ web_fetch: 'WebFetch',
18
+ web_search: 'WebSearch',
19
+ skill: 'Skill',
20
+ subagent: 'Agent',
21
+ subagent_fork: 'Agent',
22
+ spawn_teammate: 'Agent',
23
+ todo_write: 'TodoWrite',
24
+ ask_user_question: 'AskUserQuestion',
25
+ };
26
+ export const claudeToolName = (dshName) => TOOL_NAME_MAP[dshName] ?? dshName;
27
+ export function textOf(message) {
28
+ return (message?.content ?? [])
29
+ .filter((b) => b?.type === 'text' && typeof b.text === 'string' && b.text !== '')
30
+ .map((b) => b.text)
31
+ .join('\n');
32
+ }
33
+ export function parseArguments(raw) {
34
+ if (raw === undefined || raw === null)
35
+ return {};
36
+ if (typeof raw !== 'string')
37
+ return raw;
38
+ try {
39
+ return JSON.parse(raw);
40
+ }
41
+ catch {
42
+ return { raw };
43
+ }
44
+ }
45
+ /** DSH tool arguments -> Claude Code `tool_input` shape. */
46
+ export function toClaudeToolInput(dshName, args) {
47
+ const input = { ...(args ?? {}) };
48
+ if (dshName === 'glob' || dshName === 'grep') {
49
+ if (input.include && !input.glob)
50
+ input.glob = input.include;
51
+ }
52
+ if (dshName === 'subagent' || dshName === 'subagent_fork' || dshName === 'spawn_teammate') {
53
+ if (input.description === undefined && input.name)
54
+ input.description = input.name;
55
+ if (input.subagent_type === undefined)
56
+ input.subagent_type = input.name ?? 'general-purpose';
57
+ }
58
+ if (dshName === 'skill' && input.name && input.skill === undefined)
59
+ input.skill = input.name;
60
+ return input;
61
+ }
62
+ /** DSH tool result -> the `tool_response` Claude Code hands to PostToolUse hooks. */
63
+ export function toClaudeToolResponse(dshName, args, result) {
64
+ const input = args ?? {};
65
+ const output = textOf(result);
66
+ const isError = result?.isError === true;
67
+ switch (dshName) {
68
+ case 'bash':
69
+ return { stdout: isError ? '' : output, stderr: isError ? output : '', interrupted: false, isImage: false };
70
+ case 'read':
71
+ case 'read_image':
72
+ return { type: 'text', file: { filePath: String(input.file_path ?? input.path ?? ''), content: output } };
73
+ case 'write':
74
+ return { type: 'update', filePath: String(input.file_path ?? ''), content: String(input.content ?? ''), originalFile: null };
75
+ case 'edit':
76
+ case 'str_replace_editor':
77
+ return {
78
+ filePath: String(input.file_path ?? input.path ?? ''),
79
+ oldString: String(input.old_string ?? input.old_str ?? ''),
80
+ newString: String(input.new_string ?? input.new_str ?? ''),
81
+ };
82
+ case 'glob': {
83
+ const filenames = output.split('\n').map((line) => line.trim()).filter(Boolean);
84
+ return { filenames, durationMs: 0, numFiles: filenames.length, truncated: false };
85
+ }
86
+ case 'grep': {
87
+ const lines = output.split('\n').filter(Boolean);
88
+ return { content: output, numFiles: lines.length };
89
+ }
90
+ case 'web_fetch':
91
+ return { url: String(input.url ?? ''), result: output };
92
+ case 'web_search':
93
+ return { query: String(input.query ?? (Array.isArray(input.queries) ? input.queries.join(' ') : '')), results: output };
94
+ default:
95
+ return { content: output, isError };
96
+ }
97
+ }
98
+ const isUserMessageEvent = (e) => e.type === 'user/message';
99
+ /**
100
+ * Export DSH session events as Claude Code transcript JSONL records:
101
+ * `{type:"user"|"assistant", message:{role, content:[...]}, sessionId, timestamp, cwd}`.
102
+ * Tool calls become `tool_use` blocks with Claude tool names; results become `tool_result`.
103
+ */
104
+ export function toClaudeTranscript(events, sessionId, cwd) {
105
+ const lines = [];
106
+ const stamp = (event) => new Date(event.time ?? Date.now()).toISOString();
107
+ for (const event of events) {
108
+ if (!event || typeof event !== 'object')
109
+ continue;
110
+ if (isUserMessageEvent(event)) {
111
+ const message = event.data;
112
+ if (message?.source?.kind !== 'user')
113
+ continue;
114
+ const text = textOf(message);
115
+ if (!text)
116
+ continue;
117
+ lines.push({ type: 'user', uuid: randomUUID(), sessionId, cwd, timestamp: stamp(event), message: { role: 'user', content: text } });
118
+ }
119
+ else if (event.type === 'assistant/message') {
120
+ const message = event.data?.message;
121
+ if (!message)
122
+ continue;
123
+ const content = [];
124
+ for (const block of message.content ?? []) {
125
+ if (block?.type === 'text' && 'text' in block && typeof block.text === 'string' && block.text)
126
+ content.push({ type: 'text', text: block.text });
127
+ else if (block?.type === 'tool-call') {
128
+ const call = block;
129
+ content.push({ type: 'tool_use', id: call.id, name: claudeToolName(call.name), input: toClaudeToolInput(call.name, parseArguments(call.arguments)) });
130
+ }
131
+ }
132
+ if (content.length)
133
+ lines.push({ type: 'assistant', uuid: randomUUID(), sessionId, cwd, timestamp: stamp(event), message: { role: 'assistant', content } });
134
+ }
135
+ else if (event.type === 'tool/result') {
136
+ const message = event.data?.message;
137
+ if (!message?.toolCallId)
138
+ continue;
139
+ lines.push({
140
+ type: 'user',
141
+ uuid: randomUUID(),
142
+ sessionId,
143
+ cwd,
144
+ timestamp: stamp(event),
145
+ message: { role: 'user', content: [{ type: 'tool_result', tool_use_id: message.toolCallId, content: textOf(message), is_error: message.isError === true }] },
146
+ });
147
+ }
148
+ }
149
+ return lines.map((line) => JSON.stringify(line)).join('\n') + (lines.length ? '\n' : '');
150
+ }
151
+ // The full log, fork-inherited prefix included, as Claude Code transcripts also carry it.
152
+ export function sessionEvents(session) {
153
+ try {
154
+ return session.snapshotEvents?.() ?? session.events ?? session.ownEvents?.() ?? [];
155
+ }
156
+ catch {
157
+ return [];
158
+ }
159
+ }
160
+ export function lastAssistantText(session) {
161
+ const events = sessionEvents(session);
162
+ for (let i = events.length - 1; i >= 0; i--) {
163
+ const event = events[i];
164
+ if (event?.type === 'assistant/message')
165
+ return textOf(event.data?.message);
166
+ }
167
+ return '';
168
+ }
169
+ function stateHome() {
170
+ const base = process.env.DSH_HOME || join(homedir(), '.dsh');
171
+ return join(base, 'state', 'claude-compat');
172
+ }
173
+ export function transcriptPath(agent) {
174
+ return join(stateHome(), 'transcripts', `${String(agent.session.header.id).replace(/[^A-Za-z0-9_-]/g, '')}.jsonl`);
175
+ }
176
+ // Exported event count per transcript path; the file only ever grows by the new tail.
177
+ const exported = new Map();
178
+ /** Bring the Claude-shaped transcript up to date by appending events not yet written. */
179
+ export function syncTranscript(agent, cwd) {
180
+ const path = transcriptPath(agent);
181
+ const events = sessionEvents(agent.session);
182
+ let done = exported.get(path);
183
+ if (done === undefined || done > events.length || !existsSync(path)) {
184
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
185
+ writeFileSync(path, '', { mode: 0o600 });
186
+ done = 0;
187
+ }
188
+ if (events.length > done)
189
+ appendFileSync(path, toClaudeTranscript(events.slice(done), agent.session.header.id, cwd), { mode: 0o600 });
190
+ exported.set(path, events.length);
191
+ return path;
192
+ }
193
+ export function dropTranscript(agent) {
194
+ const path = transcriptPath(agent);
195
+ exported.delete(path);
196
+ rmSync(path, { force: true });
197
+ }
198
+ //# sourceMappingURL=transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/transcript.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,6BAA6B;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGzC,oFAAoF;AACpF,MAAM,CAAC,MAAM,aAAa,GAAqC;IAC7D,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,MAAM;IAClB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,kBAAkB,EAAE,MAAM;IAC1B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,OAAO;IACjB,aAAa,EAAE,OAAO;IACtB,cAAc,EAAE,OAAO;IACvB,UAAU,EAAE,WAAW;IACvB,iBAAiB,EAAE,iBAAiB;CACrC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,CAAA;AAI5F,MAAM,UAAU,MAAM,CAAC,OAA0D;IAC/E,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,IAAI,OAAQ,CAAwB,CAAC,IAAI,KAAK,QAAQ,IAAK,CAAsB,CAAC,IAAI,KAAK,EAAE,CAAC;SACnK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,CAAA;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAgB,CAAA;IACpD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,EAAE,CAAA;IAChB,CAAC;AACH,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,IAA2B;IAC5E,MAAM,KAAK,GAAc,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAA;IAC5C,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAA;IAC9D,CAAC;IACD,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,eAAe,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;QAC1F,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI;YAAE,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAA;QACjF,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;YAAE,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,IAAI,iBAAiB,CAAA;IAC9F,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;IAC5F,OAAO,KAAK,CAAA;AACd,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,IAA2B,EAAE,MAA2B;IAC5G,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;IACxB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAC7B,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IACxC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QAC7G,KAAK,MAAM,CAAC;QACZ,KAAK,YAAY;YACf,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAA;QAC3G,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAA;QAC9H,KAAK,MAAM,CAAC;QACZ,KAAK,oBAAoB;YACvB,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrD,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC1D,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;aAC3D,CAAA;QACH,KAAK,MAAM,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAC/E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;QACnF,CAAC;QACD,KAAK,MAAM,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAChD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,CAAA;QACpD,CAAC;QACD,KAAK,WAAW;YACd,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;QACzD,KAAK,YAAY;YACf,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;QACzH;YACE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;IACvC,CAAC;AACH,CAAC;AAgBD,MAAM,kBAAkB,GAAG,CAAC,CAAe,EAAgF,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAA;AAEvJ;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA+B,EAAE,SAAiB,EAAE,GAAW;IAChG,MAAM,KAAK,GAAqB,EAAE,CAAA;IAClC,MAAM,KAAK,GAAG,CAAC,KAAmB,EAAU,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IAC/F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAQ;QACjD,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAA;YAC1B,IAAI,OAAO,EAAE,MAAM,EAAE,IAAI,KAAK,MAAM;gBAAE,SAAQ;YAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;YAC5B,IAAI,CAAC,IAAI;gBAAE,SAAQ;YACnB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;QACrI,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAI,KAAK,CAAC,IAAwE,EAAE,OAAO,CAAA;YACxG,IAAI,CAAC,OAAO;gBAAE,SAAQ;YACtB,MAAM,OAAO,GAAsB,EAAE,CAAA;YACrC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;gBAC1C,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI;oBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;qBAC1I,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;oBACrC,MAAM,IAAI,GAAG,KAAwD,CAAA;oBACrE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAA;gBACvJ,CAAC;YACH,CAAC;YACD,IAAI,OAAO,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;QAC7J,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACxC,MAAM,OAAO,GAAI,KAAK,CAAC,IAAgH,EAAE,OAAO,CAAA;YAChJ,IAAI,CAAC,OAAO,EAAE,UAAU;gBAAE,SAAQ;YAClC,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU,EAAE;gBAClB,SAAS;gBACT,GAAG;gBACH,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;gBACvB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC,EAAE;aAC7J,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAC1F,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,cAAc,EAAE,EAAE,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAA;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACrC,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,KAAK,EAAE,IAAI,KAAK,mBAAmB;YAAE,OAAO,MAAM,CAAE,KAAK,CAAC,IAAwE,EAAE,OAAO,CAAC,CAAA;IAClJ,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAA;IAC5D,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAY;IACzC,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAA;AACpH,CAAC;AAED,sFAAsF;AACtF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;AAE1C,yFAAyF;AACzF,MAAM,UAAU,cAAc,CAAC,KAAY,EAAE,GAAW;IACtD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IAClC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC3C,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAC1D,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QACxC,IAAI,GAAG,CAAC,CAAA;IACV,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI;QAAE,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACrI,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IACjC,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAY;IACzC,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IAClC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACrB,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAC/B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,56 @@
1
1
  {
2
2
  "name": "claude-plugin-dsh",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "Run unmodified Claude Code plugins inside DeepSeek Harness (DSH)",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/src/claude-compat.d.ts",
9
+ "default": "./dist/claude-compat.js"
10
+ },
11
+ "./package.json": "./package.json"
12
+ },
13
+ "bin": {
14
+ "claude-plugin-dsh": "dist/bin/cli.js",
15
+ "claude-plugins-dsh": "dist/bin/cli.js"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsc -p tsconfig.build.json && esbuild src/claude-compat.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/claude-compat.js",
24
+ "typecheck": "tsc -p tsconfig.json --noEmit",
25
+ "test": "bun run build && node --test test/*.test.mjs",
26
+ "prepack": "bun run build",
27
+ "prepublishOnly": "bun run typecheck && bun run test"
28
+ },
29
+ "engines": {
30
+ "node": ">=20"
31
+ },
32
+ "license": "MIT",
33
+ "author": "Mariusz Rakus",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+https://github.com/kolezka/claude-plugins-dsh.git"
37
+ },
38
+ "homepage": "https://github.com/kolezka/claude-plugins-dsh#readme",
39
+ "bugs": "https://github.com/kolezka/claude-plugins-dsh/issues",
40
+ "keywords": [
41
+ "deepseek-harness",
42
+ "dsh",
43
+ "claude-code",
44
+ "claude-code-plugins",
45
+ "cordis"
46
+ ],
47
+ "publishConfig": {
48
+ "access": "public"
49
+ },
50
+ "packageManager": "bun@1.4.4",
51
+ "devDependencies": {
52
+ "@types/node": "^26.6.6",
53
+ "esbuild": "0.28.2",
54
+ "typescript": "7.0.2"
55
+ }
56
+ }