claude-plugin-dsh 0.0.0-stage → 0.2.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 (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +178 -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 +107 -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/bin/update.d.ts +27 -0
  24. package/dist/bin/update.d.ts.map +1 -0
  25. package/dist/bin/update.js +183 -0
  26. package/dist/bin/update.js.map +1 -0
  27. package/dist/claude-compat.js +825 -0
  28. package/dist/src/claude-compat.d.ts +8 -0
  29. package/dist/src/claude-compat.d.ts.map +1 -0
  30. package/dist/src/claude-compat.js +7 -0
  31. package/dist/src/claude-compat.js.map +1 -0
  32. package/dist/src/dsh-types.d.ts +252 -0
  33. package/dist/src/dsh-types.d.ts.map +1 -0
  34. package/dist/src/dsh-types.js +6 -0
  35. package/dist/src/dsh-types.js.map +1 -0
  36. package/dist/src/hooks.d.ts +38 -0
  37. package/dist/src/hooks.d.ts.map +1 -0
  38. package/dist/src/hooks.js +136 -0
  39. package/dist/src/hooks.js.map +1 -0
  40. package/dist/src/plugin-files.d.ts +92 -0
  41. package/dist/src/plugin-files.d.ts.map +1 -0
  42. package/dist/src/plugin-files.js +198 -0
  43. package/dist/src/plugin-files.js.map +1 -0
  44. package/dist/src/plugin.d.ts +35 -0
  45. package/dist/src/plugin.d.ts.map +1 -0
  46. package/dist/src/plugin.js +422 -0
  47. package/dist/src/plugin.js.map +1 -0
  48. package/dist/src/transcript.d.ts +25 -0
  49. package/dist/src/transcript.d.ts.map +1 -0
  50. package/dist/src/transcript.js +198 -0
  51. package/dist/src/transcript.js.map +1 -0
  52. package/package.json +54 -4
@@ -0,0 +1,183 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { existsSync, readdirSync, readFileSync, realpathSync, writeFileSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { basename, dirname, join, resolve } from 'node:path';
5
+ function git(root, ...args) {
6
+ const result = spawnSync('git', ['-C', root, ...args], { encoding: 'utf8' });
7
+ if (result.error)
8
+ throw result.error;
9
+ return { ok: result.status === 0, out: result.stdout.trim(), err: result.stderr.trim() };
10
+ }
11
+ function short(hash) {
12
+ return hash.slice(0, 7);
13
+ }
14
+ function escapeRegExp(value) {
15
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
16
+ }
17
+ function dshHome(env) {
18
+ return env.DSH_HOME || join(homedir(), '.dsh');
19
+ }
20
+ export function defaultPatchFile(env = process.env) {
21
+ return join(dshHome(env), 'cordis.patch.yml');
22
+ }
23
+ /** Every git checkout directly under $DSH_HOME/plugins-src. */
24
+ export function discoverCheckouts(env = process.env) {
25
+ const source = join(dshHome(env), 'plugins-src');
26
+ if (!existsSync(source))
27
+ return [];
28
+ return readdirSync(source, { withFileTypes: true })
29
+ .filter((entry) => entry.isDirectory() && existsSync(join(source, entry.name, '.git')))
30
+ .map((entry) => join(source, entry.name))
31
+ .sort();
32
+ }
33
+ /** The plugin version from .claude-plugin/plugin.json at the checkout root, if any. */
34
+ function pluginVersion(root) {
35
+ const manifest = join(root, '.claude-plugin', 'plugin.json');
36
+ if (!existsSync(manifest))
37
+ return undefined;
38
+ try {
39
+ const value = JSON.parse(readFileSync(manifest, 'utf8'));
40
+ if (typeof value === 'object' && value !== null && 'version' in value && typeof value.version === 'string')
41
+ return value.version;
42
+ }
43
+ catch {
44
+ // a broken manifest is the plugin's problem, not the updater's
45
+ }
46
+ return undefined;
47
+ }
48
+ /** Resolve the tracking ref: the configured upstream, else origin/<branch>, else origin/HEAD. */
49
+ function resolveUpstream(root) {
50
+ const tracked = git(root, 'rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{u}');
51
+ if (tracked.ok && tracked.out)
52
+ return { upstream: tracked.out, branch: tracked.out.replace(/^[^/]+\//, '') };
53
+ const head = git(root, 'rev-parse', '--abbrev-ref', 'HEAD');
54
+ if (head.ok && head.out !== 'HEAD' && git(root, 'rev-parse', '--verify', '--quiet', `origin/${head.out}`).ok) {
55
+ return { upstream: `origin/${head.out}`, branch: head.out };
56
+ }
57
+ const remoteHead = git(root, 'symbolic-ref', '--quiet', '--short', 'refs/remotes/origin/HEAD');
58
+ if (remoteHead.ok && remoteHead.out)
59
+ return { upstream: remoteHead.out, branch: remoteHead.out.replace(/^[^/]+\//, '') };
60
+ throw new Error(`${basename(root)}: cannot determine the upstream branch (detached HEAD?); run git checkout <branch> or git branch --set-upstream-to first`);
61
+ }
62
+ function openCheckout(directory) {
63
+ const root = resolve(directory);
64
+ const inside = git(root, 'rev-parse', '--is-inside-work-tree');
65
+ if (!inside.ok || inside.out !== 'true')
66
+ throw new Error(`${root}: not a git checkout`);
67
+ const top = git(root, 'rev-parse', '--show-toplevel').out;
68
+ if (realpathSync(top) !== realpathSync(root))
69
+ throw new Error(`${root}: pass the checkout root (${top})`);
70
+ const { upstream, branch } = resolveUpstream(root);
71
+ return { root, name: basename(root), upstream, branch };
72
+ }
73
+ /** Adapter directories: every tracked dsh/bun.lock, so nested adapters are found too. */
74
+ function adapterDirectories(root) {
75
+ const listed = git(root, 'ls-files', '--', 'dsh/bun.lock', '**/dsh/bun.lock');
76
+ return listed.out ? listed.out.split('\n').map((file) => join(root, dirname(file))) : [];
77
+ }
78
+ function installAdapterDependencies(root) {
79
+ for (const dsh of adapterDirectories(root)) {
80
+ const result = spawnSync('bun', ['install', '--frozen-lockfile'], { cwd: dsh, encoding: 'utf8' });
81
+ if (result.error)
82
+ throw new Error(`${dsh}: bun install failed to start: ${result.error.message}`);
83
+ if (result.status !== 0)
84
+ throw new Error(`${dsh}: bun install --frozen-lockfile failed\n${result.stderr.trim()}`);
85
+ }
86
+ }
87
+ /**
88
+ * Rewrite the `# <dir> <branch> <hash>` pin comment above the checkout's insert row.
89
+ * The comment is documentation only; DSH loads whatever the checkout contains.
90
+ * Returns false when the patch file has no pin for this checkout.
91
+ */
92
+ export function rewritePin(patchFile, checkout, hash, write) {
93
+ if (!existsSync(patchFile))
94
+ return false;
95
+ const lines = readFileSync(patchFile, 'utf8').split('\n');
96
+ const pin = new RegExp(`^# ${escapeRegExp(checkout.name)} \\S+ [0-9a-f]{7,40}\\s*$`);
97
+ for (let index = 0; index < lines.length; index++) {
98
+ const line = lines[index];
99
+ if (line === undefined || !pin.test(line))
100
+ continue;
101
+ const below = lines.slice(index + 1, index + 5).join('\n');
102
+ if (!below.includes(`file://${checkout.root}/`))
103
+ continue;
104
+ const replacement = `# ${checkout.name} ${checkout.branch} ${hash}`;
105
+ if (line !== replacement && write) {
106
+ lines[index] = replacement;
107
+ writeFileSync(patchFile, lines.join('\n'));
108
+ }
109
+ return true;
110
+ }
111
+ return false;
112
+ }
113
+ export function update(directories, options) {
114
+ const patchFile = options.patch ?? defaultPatchFile();
115
+ let status = 0;
116
+ for (const directory of directories) {
117
+ try {
118
+ if (!updateOne(openCheckout(directory), options, patchFile))
119
+ status = 1;
120
+ }
121
+ catch (error) {
122
+ status = 1;
123
+ console.error(error instanceof Error ? error.message : String(error));
124
+ }
125
+ }
126
+ return status;
127
+ }
128
+ /** Returns false when the checkout is behind in --check mode. Throws when it cannot be updated. */
129
+ function updateOne(checkout, options, patchFile) {
130
+ const { root, name, upstream } = checkout;
131
+ const label = `${name}:`;
132
+ const remote = upstream.split('/')[0] ?? 'origin';
133
+ const fetch = git(root, 'fetch', '--quiet', remote);
134
+ if (!fetch.ok)
135
+ throw new Error(`${label} git fetch ${remote} failed\n${fetch.err}`);
136
+ const dirty = git(root, 'status', '--porcelain', '--untracked-files=no');
137
+ if (dirty.out)
138
+ throw new Error(`${label} working tree has uncommitted changes, commit or stash them first`);
139
+ const before = git(root, 'rev-parse', 'HEAD').out;
140
+ const target = git(root, 'rev-parse', '--verify', '--quiet', upstream);
141
+ if (!target.ok)
142
+ throw new Error(`${label} unknown upstream ${upstream}`);
143
+ const versionBefore = pluginVersion(root);
144
+ const noPin = `, no pin comment in ${patchFile}`;
145
+ if (before === target.out) {
146
+ const pinned = rewritePin(patchFile, checkout, before, !options.check);
147
+ console.log(`${label} up to date at ${short(before)}${versionBefore ? ` (${versionBefore})` : ''}${pinned ? '' : noPin}`);
148
+ return true;
149
+ }
150
+ const base = git(root, 'merge-base', before, target.out);
151
+ const fastForward = base.ok && base.out === before;
152
+ const localOnly = base.ok ? git(root, 'rev-list', '--count', `${target.out}..${before}`).out : '';
153
+ if (options.check) {
154
+ const behind = git(root, 'rev-list', '--count', `${before}..${target.out}`).out;
155
+ const how = fastForward ? 'fast-forward' : base.ok ? `diverged, ${localOnly} local commit(s)` : 'unrelated history, needs --reset';
156
+ console.log(`${label} behind ${upstream} by ${behind} commit(s), ${short(before)} -> ${short(target.out)} (${how})`);
157
+ return false;
158
+ }
159
+ if (fastForward) {
160
+ const merge = git(root, 'merge', '--ff-only', '--quiet', target.out);
161
+ if (!merge.ok)
162
+ throw new Error(`${label} git merge --ff-only failed\n${merge.err}`);
163
+ }
164
+ else if (options.reset) {
165
+ const reset = git(root, 'reset', '--hard', '--quiet', target.out);
166
+ if (!reset.ok)
167
+ throw new Error(`${label} git reset --hard failed\n${reset.err}`);
168
+ }
169
+ else {
170
+ const why = base.ok
171
+ ? `the local branch has ${localOnly} commit(s) not on ${upstream}`
172
+ : `local and ${upstream} share no history (the remote was rewritten)`;
173
+ throw new Error(`${label} cannot fast-forward: ${why}. Re-run with --reset to move the branch onto ${upstream} (undo: git -C ${root} reset --hard ${short(before)}).`);
174
+ }
175
+ installAdapterDependencies(root);
176
+ const after = git(root, 'rev-parse', 'HEAD').out;
177
+ const pinned = rewritePin(patchFile, checkout, after, true);
178
+ const versionAfter = pluginVersion(root);
179
+ const versions = versionBefore || versionAfter ? ` (${versionBefore ?? '?'} -> ${versionAfter ?? '?'})` : '';
180
+ console.log(`${label} ${short(before)} -> ${short(after)}${versions}${pinned ? '' : noPin}`);
181
+ return true;
182
+ }
183
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../bin/update.ts"],"names":[],"mappings":"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"}