@xrkseek/harness 0.2.2 → 0.2.4

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 (128) hide show
  1. package/node_modules/@xrkseek/core-tools/dist/subagent-prompt.d.ts +2 -2
  2. package/node_modules/@xrkseek/core-tools/dist/subagent-prompt.d.ts.map +1 -1
  3. package/node_modules/@xrkseek/core-tools/dist/subagent-prompt.js +5 -6
  4. package/node_modules/@xrkseek/core-tools/dist/subagent-prompt.js.map +1 -1
  5. package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts +5 -0
  6. package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts.map +1 -1
  7. package/node_modules/@xrkseek/preset-harness/dist/preset.js +21 -8
  8. package/node_modules/@xrkseek/preset-harness/dist/preset.js.map +1 -1
  9. package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
  10. package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
  11. package/node_modules/@xrkseek/preset-server/dist/preset.d.ts +1 -0
  12. package/node_modules/@xrkseek/preset-server/dist/preset.d.ts.map +1 -1
  13. package/node_modules/@xrkseek/preset-server/dist/preset.js +12 -2
  14. package/node_modules/@xrkseek/preset-server/dist/preset.js.map +1 -1
  15. package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
  16. package/node_modules/@xrkseek/preset-server/package.json +1 -0
  17. package/node_modules/@xrkseek/server-config/dist/index.d.ts +5 -1
  18. package/node_modules/@xrkseek/server-config/dist/index.d.ts.map +1 -1
  19. package/node_modules/@xrkseek/server-config/dist/index.js +15 -3
  20. package/node_modules/@xrkseek/server-config/dist/index.js.map +1 -1
  21. package/node_modules/@xrkseek/server-face/dist/handlers/catalog.d.ts.map +1 -1
  22. package/node_modules/@xrkseek/server-face/dist/handlers/catalog.js +15 -1
  23. package/node_modules/@xrkseek/server-face/dist/handlers/catalog.js.map +1 -1
  24. package/node_modules/@xrkseek/server-face/dist/handlers/session.d.ts.map +1 -1
  25. package/node_modules/@xrkseek/server-face/dist/handlers/session.js +8 -1
  26. package/node_modules/@xrkseek/server-face/dist/handlers/session.js.map +1 -1
  27. package/node_modules/@xrkseek/server-face/dist/index.d.ts +1 -1
  28. package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
  29. package/node_modules/@xrkseek/server-face/dist/index.js +1 -1
  30. package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
  31. package/node_modules/@xrkseek/server-face/dist/presets-catalog.d.ts +51 -6
  32. package/node_modules/@xrkseek/server-face/dist/presets-catalog.d.ts.map +1 -1
  33. package/node_modules/@xrkseek/server-face/dist/presets-catalog.js +110 -10
  34. package/node_modules/@xrkseek/server-face/dist/presets-catalog.js.map +1 -1
  35. package/node_modules/@xrkseek/server-face/dist/settings-schemas.d.ts.map +1 -1
  36. package/node_modules/@xrkseek/server-face/dist/settings-schemas.js +2 -1
  37. package/node_modules/@xrkseek/server-face/dist/settings-schemas.js.map +1 -1
  38. package/node_modules/@xrkseek/server-face/dist/slash.d.ts +4 -0
  39. package/node_modules/@xrkseek/server-face/dist/slash.d.ts.map +1 -1
  40. package/node_modules/@xrkseek/server-face/dist/slash.js +14 -2
  41. package/node_modules/@xrkseek/server-face/dist/slash.js.map +1 -1
  42. package/node_modules/@xrkseek/server-face/dist/subagent-tools.d.ts +7 -1
  43. package/node_modules/@xrkseek/server-face/dist/subagent-tools.d.ts.map +1 -1
  44. package/node_modules/@xrkseek/server-face/dist/subagent-tools.js +27 -7
  45. package/node_modules/@xrkseek/server-face/dist/subagent-tools.js.map +1 -1
  46. package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
  47. package/node_modules/@xrkseek/server-host/dist/index.js +26 -7
  48. package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
  49. package/node_modules/@xrkseek/server-host/dist/sidebar-face-bridge.d.ts.map +1 -1
  50. package/node_modules/@xrkseek/server-host/dist/sidebar-face-bridge.js +4 -111
  51. package/node_modules/@xrkseek/server-host/dist/sidebar-face-bridge.js.map +1 -1
  52. package/node_modules/@xrkseek/server-host/dist/sidebar-live-line.d.ts +9 -0
  53. package/node_modules/@xrkseek/server-host/dist/sidebar-live-line.d.ts.map +1 -0
  54. package/node_modules/@xrkseek/server-host/dist/sidebar-live-line.js +43 -0
  55. package/node_modules/@xrkseek/server-host/dist/sidebar-live-line.js.map +1 -0
  56. package/node_modules/@xrkseek/server-host/dist/standing-tools.d.ts.map +1 -1
  57. package/node_modules/@xrkseek/server-host/dist/standing-tools.js +11 -4
  58. package/node_modules/@xrkseek/server-host/dist/standing-tools.js.map +1 -1
  59. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-providers.d.ts.map +1 -1
  60. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-providers.js +0 -21
  61. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-providers.js.map +1 -1
  62. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-types.d.ts +3 -2
  63. package/node_modules/@xrkseek/server-http/dist/dsh-compat/adapter-types.d.ts.map +1 -1
  64. package/node_modules/@xrkseek/server-http/dist/dsh-compat/bundle-chunk-stub.d.ts +1 -1
  65. package/node_modules/@xrkseek/server-http/dist/dsh-compat/bundle-chunk-stub.d.ts.map +1 -1
  66. package/node_modules/@xrkseek/server-http/dist/dsh-compat/bundle-chunk-stub.js +7 -5
  67. package/node_modules/@xrkseek/server-http/dist/dsh-compat/bundle-chunk-stub.js.map +1 -1
  68. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-matrix.js +3 -3
  69. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-matrix.js.map +1 -1
  70. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-path-capabilities.d.ts.map +1 -1
  71. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-path-capabilities.js +0 -1
  72. package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-path-capabilities.js.map +1 -1
  73. package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.d.ts +2 -1
  74. package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.d.ts.map +1 -1
  75. package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.js +1 -0
  76. package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.js.map +1 -1
  77. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-face-bridge.d.ts +18 -7
  78. package/node_modules/@xrkseek/server-http/dist/dsh-compat/sidebar-face-bridge.d.ts.map +1 -1
  79. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind-workspace.js +1 -1
  80. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind-workspace.js.map +1 -1
  81. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind.d.ts +1 -1
  82. package/node_modules/@xrkseek/server-http/dist/dsh-compat/turn-rewind.d.ts.map +1 -1
  83. package/node_modules/@xrkseek/server-http/dist/index.d.ts +2 -1
  84. package/node_modules/@xrkseek/server-http/dist/index.d.ts.map +1 -1
  85. package/node_modules/@xrkseek/server-http/dist/index.js +1 -0
  86. package/node_modules/@xrkseek/server-http/dist/index.js.map +1 -1
  87. package/node_modules/@xrkseek/server-http/dist/sidebar/bundle-chunk-stub.d.ts +21 -0
  88. package/node_modules/@xrkseek/server-http/dist/sidebar/bundle-chunk-stub.d.ts.map +1 -0
  89. package/node_modules/@xrkseek/server-http/dist/sidebar/bundle-chunk-stub.js +123 -0
  90. package/node_modules/@xrkseek/server-http/dist/sidebar/bundle-chunk-stub.js.map +1 -0
  91. package/node_modules/@xrkseek/server-http/dist/sidebar/index.d.ts +20 -0
  92. package/node_modules/@xrkseek/server-http/dist/sidebar/index.d.ts.map +1 -0
  93. package/node_modules/@xrkseek/server-http/dist/sidebar/index.js +27 -0
  94. package/node_modules/@xrkseek/server-http/dist/sidebar/index.js.map +1 -0
  95. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-adapter.d.ts +19 -0
  96. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-adapter.d.ts.map +1 -0
  97. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-adapter.js +495 -0
  98. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-adapter.js.map +1 -0
  99. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-browser.d.ts +3 -0
  100. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-browser.d.ts.map +1 -0
  101. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-browser.js +82 -0
  102. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-browser.js.map +1 -0
  103. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-face-bridge.d.ts +41 -0
  104. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-face-bridge.d.ts.map +1 -0
  105. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-face-bridge.js +2 -0
  106. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-face-bridge.js.map +1 -0
  107. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-git.d.ts +59 -0
  108. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-git.d.ts.map +1 -0
  109. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-git.js +197 -0
  110. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-git.js.map +1 -0
  111. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-html.d.ts +20 -0
  112. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-html.d.ts.map +1 -0
  113. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-html.js +135 -0
  114. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-html.js.map +1 -0
  115. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-prefs-store.d.ts +9 -0
  116. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-prefs-store.d.ts.map +1 -0
  117. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-prefs-store.js +57 -0
  118. package/node_modules/@xrkseek/server-http/dist/sidebar/sidebar-prefs-store.js.map +1 -0
  119. package/node_modules/@xrkseek/server-http/package.json +5 -0
  120. package/node_modules/@xrkseek/workspace/dist/index.d.ts +1 -1
  121. package/node_modules/@xrkseek/workspace/dist/index.d.ts.map +1 -1
  122. package/node_modules/@xrkseek/workspace/dist/index.js +1 -1
  123. package/node_modules/@xrkseek/workspace/dist/index.js.map +1 -1
  124. package/node_modules/@xrkseek/workspace/dist/recipes.d.ts +2 -0
  125. package/node_modules/@xrkseek/workspace/dist/recipes.d.ts.map +1 -1
  126. package/node_modules/@xrkseek/workspace/dist/recipes.js +9 -0
  127. package/node_modules/@xrkseek/workspace/dist/recipes.js.map +1 -1
  128. package/package.json +1 -1
@@ -0,0 +1,82 @@
1
+ /**
2
+ * better-sidebar embedded browser probe — HEAD/GET remote URL headers.
3
+ */
4
+ import { request as httpRequest } from "node:http";
5
+ import { request as httpsRequest } from "node:https";
6
+ const PROBE_TIMEOUT_MS = 8_000;
7
+ function parseFrameAncestors(csp) {
8
+ if (!csp)
9
+ return undefined;
10
+ const match = /frame-ancestors\s+([^;]+)/i.exec(csp);
11
+ if (!match?.[1])
12
+ return undefined;
13
+ return match[1]
14
+ .trim()
15
+ .split(/\s+/)
16
+ .map((s) => s.replace(/['"]/g, ""))
17
+ .filter(Boolean);
18
+ }
19
+ function probeOnce(url) {
20
+ const transport = url.protocol === "https:" ? httpsRequest : httpRequest;
21
+ return new Promise((resolve) => {
22
+ const req = transport(url, { method: "HEAD", timeout: PROBE_TIMEOUT_MS }, (res) => {
23
+ res.resume();
24
+ const out = { reachable: true };
25
+ const xfo = res.headers["x-frame-options"];
26
+ if (typeof xfo === "string")
27
+ out.xFrameOptions = xfo;
28
+ const fa = parseFrameAncestors(res.headers["content-security-policy"]);
29
+ if (fa)
30
+ out.frameAncestors = fa;
31
+ resolve(out);
32
+ });
33
+ req.on("timeout", () => {
34
+ req.destroy();
35
+ resolve({ reachable: false });
36
+ });
37
+ req.on("error", () => resolve({ reachable: false }));
38
+ req.end();
39
+ });
40
+ }
41
+ /** Probe embeddability headers for better-sidebar browser tabs. */
42
+ export async function probeBrowserUrl(rawUrl) {
43
+ const trimmed = rawUrl.trim();
44
+ if (!trimmed) {
45
+ return { reachable: false, supported: false, reason: "empty-url" };
46
+ }
47
+ let url;
48
+ try {
49
+ url = new URL(trimmed);
50
+ }
51
+ catch {
52
+ return { reachable: false, supported: false, reason: "invalid-url" };
53
+ }
54
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
55
+ return { reachable: false, supported: false, reason: "unsupported-scheme" };
56
+ }
57
+ const head = await probeOnce(url);
58
+ if (!head.reachable && url.protocol === "https:") {
59
+ const get = await new Promise((resolve) => {
60
+ const req = httpsRequest(url, { method: "GET", timeout: PROBE_TIMEOUT_MS }, (res) => {
61
+ res.resume();
62
+ const out = { reachable: true };
63
+ const xfo = res.headers["x-frame-options"];
64
+ if (typeof xfo === "string")
65
+ out.xFrameOptions = xfo;
66
+ const fa = parseFrameAncestors(res.headers["content-security-policy"]);
67
+ if (fa)
68
+ out.frameAncestors = fa;
69
+ resolve(out);
70
+ });
71
+ req.on("timeout", () => {
72
+ req.destroy();
73
+ resolve({ reachable: false });
74
+ });
75
+ req.on("error", () => resolve({ reachable: false }));
76
+ req.end();
77
+ });
78
+ return { ...get, supported: true, url: url.toString() };
79
+ }
80
+ return { ...head, supported: true, url: url.toString() };
81
+ }
82
+ //# sourceMappingURL=sidebar-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-browser.js","sourceRoot":"","sources":["../../src/sidebar/sidebar-browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Native Host Face bridge contract for `/sidebar/*`.
3
+ * Implementation: `@xrkseek/server-host` (`createSidebarFaceBridgeFromFace`).
4
+ * Client: `xrkh-better-sidebar` (kind: client only).
5
+ */
6
+ export type SidebarSubagentLiveActivity = {
7
+ readonly text?: string;
8
+ readonly tool?: {
9
+ readonly name: string;
10
+ readonly args: string;
11
+ };
12
+ };
13
+ export interface SidebarFaceBridge {
14
+ readonly openExternal: (payload: {
15
+ action: "reveal" | "url";
16
+ path?: string;
17
+ url?: string;
18
+ }) => Promise<{
19
+ ok: true;
20
+ }>;
21
+ readonly readJobOutput?: (jobId: string) => {
22
+ text: string;
23
+ truncated?: boolean;
24
+ };
25
+ readonly killJob?: (jobId: string, reason?: string) => Promise<{
26
+ ok: boolean;
27
+ killed: boolean;
28
+ reason?: string;
29
+ }>;
30
+ readonly forkSessionAt?: (sessionId: string, beforeSeq: number) => Promise<{
31
+ sessionId: string;
32
+ }>;
33
+ /**
34
+ * Running-child live lines for `POST /sidebar/api/subagents.live`.
35
+ * Wire: nested `tool` (`LastActivity` / {@link SidebarSubagentLiveActivity}).
36
+ */
37
+ readonly listSubagentsLive?: (rootSessionId: string) => Promise<{
38
+ readonly live: Readonly<Record<string, SidebarSubagentLiveActivity>>;
39
+ }>;
40
+ }
41
+ //# sourceMappingURL=sidebar-face-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-face-bridge.d.ts","sourceRoot":"","sources":["../../src/sidebar/sidebar-face-bridge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE;QAC/B,MAAM,EAAE,QAAQ,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,CACvB,KAAK,EAAE,MAAM,KACV;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,CACjB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,KACZ,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,QAAQ,CAAC,aAAa,CAAC,EAAE,CACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,KACd,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAC3B,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QACX,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC;KACtE,CAAC,CAAC;CACJ"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sidebar-face-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-face-bridge.js","sourceRoot":"","sources":["../../src/sidebar/sidebar-face-bridge.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ export interface GitStatusEntry {
2
+ /** Porcelain XY pair — client reads `entry.xy[0]` / `entry.xy[1]`. */
3
+ readonly xy: string;
4
+ /** First porcelain char (index); kept for internal rewind helpers. */
5
+ readonly index: string;
6
+ /** Second porcelain char (worktree). */
7
+ readonly worktree: string;
8
+ readonly path: string;
9
+ }
10
+ export declare function gitStatus(cwd: string): {
11
+ available: boolean;
12
+ branch: string | null;
13
+ entries: GitStatusEntry[];
14
+ };
15
+ /** Client expects `{ current, names }` (not `branches`). */
16
+ export declare function gitBranches(cwd: string): {
17
+ available: boolean;
18
+ current: string;
19
+ names: string[];
20
+ };
21
+ export interface GitLogEntry {
22
+ readonly hash: string;
23
+ readonly hashFull: string;
24
+ readonly subject: string;
25
+ readonly author: string;
26
+ readonly date: string;
27
+ readonly refs: string;
28
+ }
29
+ /** Client expects a bare array (not `{ entries }`). */
30
+ export declare function gitLog(cwd: string, limit?: number, skip?: number): GitLogEntry[];
31
+ export declare function gitDiff(cwd: string, filePath: string | undefined, staged: boolean): {
32
+ diff: string;
33
+ };
34
+ export declare function gitCommitDiff(cwd: string, hash: string): {
35
+ diff: string;
36
+ };
37
+ export declare function gitStage(cwd: string, filePath?: string): {
38
+ ok: true;
39
+ };
40
+ export declare function gitUnstage(cwd: string, filePath?: string): {
41
+ ok: true;
42
+ };
43
+ export declare function gitCommit(cwd: string, message: string): {
44
+ ok: true;
45
+ hash?: string;
46
+ };
47
+ export declare function gitCheckout(cwd: string, branch: string): {
48
+ ok: true;
49
+ };
50
+ export declare function gitDiscard(cwd: string, filePath: string): {
51
+ ok: true;
52
+ };
53
+ export declare function gitRevert(cwd: string, hash: string): {
54
+ ok: true;
55
+ };
56
+ export declare function gitCherryPick(cwd: string, hash: string): {
57
+ ok: true;
58
+ };
59
+ //# sourceMappingURL=sidebar-git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-git.d.ts","sourceRoot":"","sources":["../../src/sidebar/sidebar-git.ts"],"names":[],"mappings":"AA2CA,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B,CA2BA;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAUA;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,uDAAuD;AACvD,wBAAgB,MAAM,CACpB,GAAG,EAAE,MAAM,EACX,KAAK,SAAK,EACV,IAAI,SAAI,GACP,WAAW,EAAE,CA0Bf;AAED,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,OAAO,GACd;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAOlB;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAQlB;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAQrE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAQvE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAOnF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAMrE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAYtE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAIjE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAIrE"}
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Git helpers for dsh-better-sidebar (workspace-scoped, best-effort).
3
+ * Wire shapes match the community client (`xy`, `names`, log array, `{ diff }`).
4
+ */
5
+ import { execFileSync } from "node:child_process";
6
+ import { existsSync } from "node:fs";
7
+ import path from "node:path";
8
+ function isGitRepo(cwd) {
9
+ return existsSync(path.join(cwd, ".git"));
10
+ }
11
+ function runGit(cwd, args, options = {}) {
12
+ try {
13
+ return execFileSync("git", args, {
14
+ cwd,
15
+ encoding: "utf8",
16
+ stdio: ["ignore", "pipe", "pipe"],
17
+ maxBuffer: 8 * 1024 * 1024,
18
+ }).trimEnd();
19
+ }
20
+ catch (err) {
21
+ if (options.allowFail) {
22
+ const e = err;
23
+ const out = typeof e.stdout === "string" ? e.stdout.trimEnd() : "";
24
+ return out.length > 0 ? out : null;
25
+ }
26
+ return null;
27
+ }
28
+ }
29
+ function runGitOrThrow(cwd, args) {
30
+ return execFileSync("git", args, {
31
+ cwd,
32
+ encoding: "utf8",
33
+ stdio: ["ignore", "pipe", "pipe"],
34
+ maxBuffer: 8 * 1024 * 1024,
35
+ }).trimEnd();
36
+ }
37
+ export function gitStatus(cwd) {
38
+ if (!isGitRepo(cwd)) {
39
+ return { available: false, branch: null, entries: [] };
40
+ }
41
+ const branch = runGit(cwd, ["branch", "--show-current"]);
42
+ const porcelain = runGit(cwd, ["status", "--porcelain", "-uall"]);
43
+ if (porcelain === null) {
44
+ return { available: false, branch, entries: [] };
45
+ }
46
+ const entries = [];
47
+ for (const line of porcelain.split(/\r?\n/)) {
48
+ if (line.length < 3)
49
+ continue;
50
+ const xy = line.slice(0, 2);
51
+ let filePath = line.slice(3);
52
+ // rename: "R old -> new"
53
+ const arrow = filePath.indexOf(" -> ");
54
+ if (arrow >= 0)
55
+ filePath = filePath.slice(arrow + 4);
56
+ filePath = filePath.replace(/^"|"$/g, "").trim();
57
+ if (!filePath)
58
+ continue;
59
+ entries.push({
60
+ xy,
61
+ index: xy[0] ?? " ",
62
+ worktree: xy[1] ?? " ",
63
+ path: filePath,
64
+ });
65
+ }
66
+ return { available: true, branch, entries };
67
+ }
68
+ /** Client expects `{ current, names }` (not `branches`). */
69
+ export function gitBranches(cwd) {
70
+ if (!isGitRepo(cwd)) {
71
+ return { available: false, current: "", names: [] };
72
+ }
73
+ const current = runGit(cwd, ["branch", "--show-current"]) ?? "";
74
+ const listed = runGit(cwd, ["branch", "--format=%(refname:short)"]);
75
+ const names = listed
76
+ ? listed.split(/\r?\n/).map((b) => b.trim()).filter(Boolean)
77
+ : [];
78
+ return { available: true, current, names };
79
+ }
80
+ /** Client expects a bare array (not `{ entries }`). */
81
+ export function gitLog(cwd, limit = 20, skip = 0) {
82
+ if (!isGitRepo(cwd))
83
+ return [];
84
+ const max = Math.min(Math.max(limit, 1), 100);
85
+ const offset = Math.max(0, Math.floor(skip));
86
+ const out = runGit(cwd, [
87
+ "log",
88
+ `-n`,
89
+ String(max),
90
+ `--skip=${String(offset)}`,
91
+ "--pretty=format:%h%x00%H%x00%s%x00%an%x00%ar%x00%D",
92
+ ]);
93
+ if (!out)
94
+ return [];
95
+ return out.split(/\r?\n/).flatMap((line) => {
96
+ const [hash, hashFull, subject, author, date, refs] = line.split("\0");
97
+ if (!hash || !hashFull)
98
+ return [];
99
+ return [
100
+ {
101
+ hash,
102
+ hashFull,
103
+ subject: subject ?? "",
104
+ author: author ?? "",
105
+ date: date ?? "",
106
+ refs: refs ?? "",
107
+ },
108
+ ];
109
+ });
110
+ }
111
+ export function gitDiff(cwd, filePath, staged) {
112
+ if (!isGitRepo(cwd))
113
+ return { diff: "" };
114
+ const args = ["diff", "--no-color"];
115
+ if (staged)
116
+ args.push("--cached");
117
+ if (filePath?.trim())
118
+ args.push("--", filePath.trim());
119
+ const out = runGit(cwd, args, { allowFail: true });
120
+ return { diff: out ?? "" };
121
+ }
122
+ export function gitCommitDiff(cwd, hash) {
123
+ if (!isGitRepo(cwd) || !hash.trim())
124
+ return { diff: "" };
125
+ const out = runGit(cwd, ["show", "--no-color", "--format=", hash.trim()], { allowFail: true });
126
+ return { diff: out ?? "" };
127
+ }
128
+ export function gitStage(cwd, filePath) {
129
+ if (!isGitRepo(cwd))
130
+ throw new Error("not a git repository");
131
+ if (filePath?.trim()) {
132
+ runGitOrThrow(cwd, ["add", "--", filePath.trim()]);
133
+ }
134
+ else {
135
+ runGitOrThrow(cwd, ["add", "-A"]);
136
+ }
137
+ return { ok: true };
138
+ }
139
+ export function gitUnstage(cwd, filePath) {
140
+ if (!isGitRepo(cwd))
141
+ throw new Error("not a git repository");
142
+ if (filePath?.trim()) {
143
+ runGitOrThrow(cwd, ["restore", "--staged", "--", filePath.trim()]);
144
+ }
145
+ else {
146
+ runGitOrThrow(cwd, ["restore", "--staged", "."]);
147
+ }
148
+ return { ok: true };
149
+ }
150
+ export function gitCommit(cwd, message) {
151
+ if (!isGitRepo(cwd))
152
+ throw new Error("not a git repository");
153
+ const msg = message.trim();
154
+ if (!msg)
155
+ throw new Error("empty commit message");
156
+ runGitOrThrow(cwd, ["commit", "-m", msg]);
157
+ const hash = runGit(cwd, ["rev-parse", "--short", "HEAD"]) ?? undefined;
158
+ return { ok: true, ...(hash ? { hash } : {}) };
159
+ }
160
+ export function gitCheckout(cwd, branch) {
161
+ if (!isGitRepo(cwd))
162
+ throw new Error("not a git repository");
163
+ const name = branch.trim();
164
+ if (!name)
165
+ throw new Error("empty branch");
166
+ runGitOrThrow(cwd, ["checkout", name]);
167
+ return { ok: true };
168
+ }
169
+ export function gitDiscard(cwd, filePath) {
170
+ if (!isGitRepo(cwd))
171
+ throw new Error("not a git repository");
172
+ const p = filePath.trim();
173
+ if (!p)
174
+ throw new Error("empty path");
175
+ // Untracked: remove; tracked: restore worktree.
176
+ const staged = runGit(cwd, ["ls-files", "--", p]);
177
+ if (!staged) {
178
+ runGitOrThrow(cwd, ["clean", "-f", "--", p]);
179
+ }
180
+ else {
181
+ runGitOrThrow(cwd, ["restore", "--", p]);
182
+ }
183
+ return { ok: true };
184
+ }
185
+ export function gitRevert(cwd, hash) {
186
+ if (!isGitRepo(cwd))
187
+ throw new Error("not a git repository");
188
+ runGitOrThrow(cwd, ["revert", "--no-edit", hash.trim()]);
189
+ return { ok: true };
190
+ }
191
+ export function gitCherryPick(cwd, hash) {
192
+ if (!isGitRepo(cwd))
193
+ throw new Error("not a git repository");
194
+ runGitOrThrow(cwd, ["cherry-pick", hash.trim()]);
195
+ return { ok: true };
196
+ }
197
+ //# sourceMappingURL=sidebar-git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-git.js","sourceRoot":"","sources":["../../src/sidebar/sidebar-git.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,MAAM,CACb,GAAW,EACX,IAAc,EACd,UAAmC,EAAE;IAErC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;YAC/B,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;SAC3B,CAAC,CAAC,OAAO,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,GAA2C,CAAC;YACtD,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,IAAc;IAChD,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;QAC/B,GAAG;QACH,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QACjC,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;KAC3B,CAAC,CAAC,OAAO,EAAE,CAAC;AACf,CAAC;AAYD,MAAM,UAAU,SAAS,CAAC,GAAW;IAKnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACzD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnD,CAAC;IACD,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,0BAA0B;QAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,KAAK,IAAI,CAAC;YAAE,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACrD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,OAAO,CAAC,IAAI,CAAC;YACX,EAAE;YACF,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG;YACnB,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG;YACtB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,WAAW,CAAC,GAAW;IAKrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACtD,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,MAAM;QAClB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAC5D,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC7C,CAAC;AAWD,uDAAuD;AACvD,MAAM,UAAU,MAAM,CACpB,GAAW,EACX,KAAK,GAAG,EAAE,EACV,IAAI,GAAG,CAAC;IAER,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE;QACtB,KAAK;QACL,IAAI;QACJ,MAAM,CAAC,GAAG,CAAC;QACX,UAAU,MAAM,CAAC,MAAM,CAAC,EAAE;QAC1B,oDAAoD;KACrD,CAAC,CAAC;IACH,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACzC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAClC,OAAO;YACL;gBACE,IAAI;gBACJ,QAAQ;gBACR,OAAO,EAAE,OAAO,IAAI,EAAE;gBACtB,MAAM,EAAE,MAAM,IAAI,EAAE;gBACpB,IAAI,EAAE,IAAI,IAAI,EAAE;gBAChB,IAAI,EAAE,IAAI,IAAI,EAAE;aACjB;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,GAAW,EACX,QAA4B,EAC5B,MAAe;IAEf,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,IAAI,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,IAAI,QAAQ,EAAE,IAAI,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,GAAW,EACX,IAAY;IAEZ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACzD,MAAM,GAAG,GAAG,MAAM,CAChB,GAAG,EACH,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAChD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,QAAiB;IACrD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC7D,IAAI,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QACrB,aAAa,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,QAAiB;IACvD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC7D,IAAI,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QACrB,aAAa,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,OAAe;IACpD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAClD,aAAa,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC;IACxE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,MAAc;IACrD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAC3C,aAAa,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IACvC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,QAAgB;IACtD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,gDAAgD;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,aAAa,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,IAAY;IACjD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC7D,aAAa,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,IAAY;IACrD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC7D,aAAa,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Host sidebar HTML preview: GET /sidebar/html/<sessionId>/<abs-path-segments…>
3
+ * Serves workspace files with real MIME so the iframe does not fall through to the SPA.
4
+ */
5
+ import type { IncomingMessage, ServerResponse } from "node:http";
6
+ /** Decode `/sidebar/html/<session>/<segments…>` into an absolute filesystem path. */
7
+ export declare function decodeSidebarHtmlPath(pathname: string): {
8
+ sessionId: string;
9
+ absPath: string;
10
+ } | undefined;
11
+ export interface SidebarHtmlOptions {
12
+ readonly resolveSessionCwd?: (sessionId: string) => string | undefined;
13
+ readonly defaultCwd?: string;
14
+ }
15
+ /**
16
+ * Serve one file for the HTML preview iframe (and its relative assets).
17
+ * @returns true when the request was handled.
18
+ */
19
+ export declare function handleSidebarHtml(_req: IncomingMessage, res: ServerResponse, pathname: string, options: SidebarHtmlOptions): Promise<boolean>;
20
+ //# sourceMappingURL=sidebar-html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-html.d.ts","sourceRoot":"","sources":["../../src/sidebar/sidebar-html.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA+BjE,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,SAAS,CA2CZ;AAeD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,OAAO,CAAC,CAsClB"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Host sidebar HTML preview: GET /sidebar/html/<sessionId>/<abs-path-segments…>
3
+ * Serves workspace files with real MIME so the iframe does not fall through to the SPA.
4
+ */
5
+ import { createReadStream, existsSync, statSync } from "node:fs";
6
+ import path from "node:path";
7
+ import { sendJson } from "../http-json.js";
8
+ const HTML_PREFIX = "/sidebar/html/";
9
+ const MIME_BY_EXT = {
10
+ ".html": "text/html; charset=utf-8",
11
+ ".htm": "text/html; charset=utf-8",
12
+ ".css": "text/css; charset=utf-8",
13
+ ".js": "text/javascript; charset=utf-8",
14
+ ".mjs": "text/javascript; charset=utf-8",
15
+ ".json": "application/json; charset=utf-8",
16
+ ".svg": "image/svg+xml",
17
+ ".png": "image/png",
18
+ ".jpg": "image/jpeg",
19
+ ".jpeg": "image/jpeg",
20
+ ".gif": "image/gif",
21
+ ".webp": "image/webp",
22
+ ".ico": "image/x-icon",
23
+ ".woff": "font/woff",
24
+ ".woff2": "font/woff2",
25
+ ".ttf": "font/ttf",
26
+ ".map": "application/json",
27
+ ".txt": "text/plain; charset=utf-8",
28
+ ".wasm": "application/wasm",
29
+ };
30
+ function fail(code, message) {
31
+ return { ok: false, error: { code, message } };
32
+ }
33
+ /** Decode `/sidebar/html/<session>/<segments…>` into an absolute filesystem path. */
34
+ export function decodeSidebarHtmlPath(pathname) {
35
+ if (!pathname.startsWith(HTML_PREFIX))
36
+ return undefined;
37
+ const rest = pathname.slice(HTML_PREFIX.length);
38
+ if (!rest)
39
+ return undefined;
40
+ const parts = rest.split("/").filter((p) => p.length > 0);
41
+ if (parts.length < 2)
42
+ return undefined;
43
+ // UNC: /sidebar/html/<session>//server/share/... → empty segment after session
44
+ const rawSplit = rest.split("/");
45
+ const sessionAt = rawSplit.findIndex((p) => p.length > 0);
46
+ if (sessionAt < 0)
47
+ return undefined;
48
+ const sessionEnc = rawSplit[sessionAt];
49
+ const afterSession = rawSplit.slice(sessionAt + 1);
50
+ const unc = afterSession[0] === "" && afterSession.length > 1;
51
+ const pathParts = (unc ? afterSession.slice(1) : afterSession).filter((p) => p.length > 0);
52
+ if (pathParts.length === 0)
53
+ return undefined;
54
+ let sessionId;
55
+ try {
56
+ sessionId = decodeURIComponent(sessionEnc);
57
+ }
58
+ catch {
59
+ return undefined;
60
+ }
61
+ const decoded = pathParts.map((p) => {
62
+ try {
63
+ return decodeURIComponent(p);
64
+ }
65
+ catch {
66
+ return p;
67
+ }
68
+ });
69
+ // Windows drive: first segment "C:" + rest → C:\...
70
+ if (/^[A-Za-z]:$/.test(decoded[0])) {
71
+ const absPath = path.win32.join(`${decoded[0]}\\`, ...decoded.slice(1));
72
+ return { sessionId, absPath };
73
+ }
74
+ if (unc) {
75
+ return {
76
+ sessionId,
77
+ absPath: path.win32.join("\\\\" + decoded[0], ...decoded.slice(1)),
78
+ };
79
+ }
80
+ // POSIX absolute
81
+ return { sessionId, absPath: path.posix.join("/", ...decoded) };
82
+ }
83
+ function mimeFor(filePath) {
84
+ const ext = path.extname(filePath).toLowerCase();
85
+ return MIME_BY_EXT[ext] ?? "application/octet-stream";
86
+ }
87
+ function underRoot(root, target) {
88
+ const rootResolved = path.resolve(root);
89
+ const abs = path.resolve(target);
90
+ return (abs === rootResolved || abs.startsWith(rootResolved + path.sep));
91
+ }
92
+ /**
93
+ * Serve one file for the HTML preview iframe (and its relative assets).
94
+ * @returns true when the request was handled.
95
+ */
96
+ export async function handleSidebarHtml(_req, res, pathname, options) {
97
+ if (!pathname.startsWith(HTML_PREFIX))
98
+ return false;
99
+ if ((_req.method ?? "GET").toUpperCase() !== "GET") {
100
+ sendJson(res, 405, fail("method", "GET required"));
101
+ return true;
102
+ }
103
+ const decoded = decodeSidebarHtmlPath(pathname);
104
+ if (!decoded) {
105
+ sendJson(res, 400, fail("bad-request", "invalid html preview path"));
106
+ return true;
107
+ }
108
+ const cwd = (decoded.sessionId && options.resolveSessionCwd
109
+ ? options.resolveSessionCwd(decoded.sessionId)
110
+ : undefined) ?? options.defaultCwd ?? process.cwd();
111
+ const abs = path.resolve(decoded.absPath);
112
+ if (!underRoot(cwd, abs) && !underRoot(path.resolve(cwd), abs)) {
113
+ // Allow absolute paths that resolve inside cwd only (same fence as relative).
114
+ sendJson(res, 403, fail("path", "html preview path escapes workspace"));
115
+ return true;
116
+ }
117
+ if (!existsSync(abs)) {
118
+ sendJson(res, 404, fail("not-found", "file missing"));
119
+ return true;
120
+ }
121
+ const st = statSync(abs);
122
+ if (!st.isFile()) {
123
+ sendJson(res, 400, fail("not-file", "not a file"));
124
+ return true;
125
+ }
126
+ res.writeHead(200, {
127
+ "content-type": mimeFor(abs),
128
+ "content-length": st.size,
129
+ // Preview iframes must not be framed as the product SPA; no CSP that blocks scripts in games.
130
+ "x-content-type-options": "nosniff",
131
+ });
132
+ createReadStream(abs).pipe(res);
133
+ return true;
134
+ }
135
+ //# sourceMappingURL=sidebar-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-html.js","sourceRoot":"","sources":["../../src/sidebar/sidebar-html.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const SIDEBAR_PREFS_DEFAULT: Record<string, unknown>;
2
+ export interface PrefsFile {
3
+ revision: number;
4
+ value: Record<string, unknown>;
5
+ }
6
+ export declare function loadSidebarPrefs(xrkHome?: string): PrefsFile;
7
+ export declare function saveSidebarPrefs(xrkHome: string | undefined, value: Record<string, unknown>, _revision?: number): number;
8
+ export declare function patchSidebarPrefs(xrkHome: string | undefined, patch: Record<string, unknown>): PrefsFile;
9
+ //# sourceMappingURL=sidebar-prefs-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-prefs-store.d.ts","sourceRoot":"","sources":["../../src/sidebar/sidebar-prefs-store.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CA2BzD,CAAC;AAOF,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAM5D;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAGR;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,SAAS,CAUX"}