@sigil0/looking-glass 0.1.0 → 0.2.1

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 (75) hide show
  1. package/README.md +143 -61
  2. package/dist/agents/coordinator.js +1 -1
  3. package/dist/agents/coordinator.js.map +1 -1
  4. package/dist/cli.js +17 -15
  5. package/dist/cli.js.map +1 -1
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +5 -3
  8. package/dist/config.js.map +1 -1
  9. package/dist/doctor.d.ts +14 -0
  10. package/dist/doctor.d.ts.map +1 -0
  11. package/dist/doctor.js +26 -0
  12. package/dist/doctor.js.map +1 -0
  13. package/dist/paths.d.ts +8 -4
  14. package/dist/paths.d.ts.map +1 -1
  15. package/dist/paths.js +39 -15
  16. package/dist/paths.js.map +1 -1
  17. package/dist/scheduler/index.d.ts +5 -1
  18. package/dist/scheduler/index.d.ts.map +1 -1
  19. package/dist/scheduler/index.js +3 -1
  20. package/dist/scheduler/index.js.map +1 -1
  21. package/dist/scheduler/runner.d.ts.map +1 -1
  22. package/dist/scheduler/runner.js +35 -3
  23. package/dist/scheduler/runner.js.map +1 -1
  24. package/dist/scheduler/service.d.ts +15 -0
  25. package/dist/scheduler/service.d.ts.map +1 -0
  26. package/dist/scheduler/service.js +20 -0
  27. package/dist/scheduler/service.js.map +1 -0
  28. package/dist/scheduler/windows.d.ts +87 -0
  29. package/dist/scheduler/windows.d.ts.map +1 -0
  30. package/dist/scheduler/windows.js +505 -0
  31. package/dist/scheduler/windows.js.map +1 -0
  32. package/dist/storage/artifact-store.d.ts +2 -1
  33. package/dist/storage/artifact-store.d.ts.map +1 -1
  34. package/dist/storage/artifact-store.js +8 -3
  35. package/dist/storage/artifact-store.js.map +1 -1
  36. package/dist/storage/database.d.ts +1 -1
  37. package/dist/storage/database.d.ts.map +1 -1
  38. package/dist/storage/database.js +10 -6
  39. package/dist/storage/database.js.map +1 -1
  40. package/dist/tools/apply-patch.d.ts +15 -0
  41. package/dist/tools/apply-patch.d.ts.map +1 -1
  42. package/dist/tools/apply-patch.js +81 -12
  43. package/dist/tools/apply-patch.js.map +1 -1
  44. package/dist/tools/bash.d.ts +2 -0
  45. package/dist/tools/bash.d.ts.map +1 -1
  46. package/dist/tools/bash.js +43 -22
  47. package/dist/tools/bash.js.map +1 -1
  48. package/dist/tools/executable.d.ts +13 -0
  49. package/dist/tools/executable.d.ts.map +1 -0
  50. package/dist/tools/executable.js +82 -0
  51. package/dist/tools/executable.js.map +1 -0
  52. package/dist/tools/process.d.ts +8 -0
  53. package/dist/tools/process.d.ts.map +1 -1
  54. package/dist/tools/process.js +105 -35
  55. package/dist/tools/process.js.map +1 -1
  56. package/dist/tools/safety.d.ts +5 -1
  57. package/dist/tools/safety.d.ts.map +1 -1
  58. package/dist/tools/safety.js +125 -7
  59. package/dist/tools/safety.js.map +1 -1
  60. package/dist/tools/schedule.d.ts.map +1 -1
  61. package/dist/tools/schedule.js +4 -3
  62. package/dist/tools/schedule.js.map +1 -1
  63. package/dist/tools/search.d.ts.map +1 -1
  64. package/dist/tools/search.js +9 -4
  65. package/dist/tools/search.js.map +1 -1
  66. package/dist/tools/shell.d.ts +30 -0
  67. package/dist/tools/shell.d.ts.map +1 -0
  68. package/dist/tools/shell.js +51 -0
  69. package/dist/tools/shell.js.map +1 -0
  70. package/dist/ui/tui.d.ts +6 -0
  71. package/dist/ui/tui.d.ts.map +1 -1
  72. package/dist/ui/tui.js +44 -21
  73. package/dist/ui/tui.js.map +1 -1
  74. package/looking-glass-title.svg +69 -0
  75. package/package.json +7 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,YAAY,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAYD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,GAAE,MAAM,GAAG,SAAkC,GAAG,MAAM,CAGjG;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED,wBAAgB,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAE7D;AAED,wBAAgB,SAAS,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,SAAS,CAEjF;AAED,wBAAgB,eAAe,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAAE,OAAO,GAAE,YAAiB,GAAG,eAAe,CAQzH;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,YAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG;IACvH,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAGA"}
@@ -0,0 +1,51 @@
1
+ import { win32 } from "node:path";
2
+ const BASH_SHELL = {
3
+ kind: "bash",
4
+ executable: "/bin/bash",
5
+ args: (command) => ["--noprofile", "--norc", "-c", command],
6
+ description: "Run one noninteractive Bash command in the workspace. Do not start background jobs or commands requiring a TTY.",
7
+ };
8
+ const WINDOWS_FALLBACK_SYSTEM_ROOT = "C:\\Windows";
9
+ const POWERSHELL_UTF8_SETUP = "$OutputEncoding = [System.Text.UTF8Encoding]::new($false); [Console]::OutputEncoding = $OutputEncoding; ";
10
+ /**
11
+ * Return an absolute, deterministic Windows system root. A relative
12
+ * SystemRoot would make executable resolution depend on the working
13
+ * directory, so it is rejected rather than used for security-sensitive
14
+ * helpers such as PowerShell and taskkill.
15
+ */
16
+ export function windowsSystemRoot(systemRoot = process.env.SystemRoot) {
17
+ if (systemRoot && !systemRoot.includes("\0") && /^[A-Za-z]:[\\/]/.test(systemRoot))
18
+ return win32.normalize(systemRoot);
19
+ return WINDOWS_FALLBACK_SYSTEM_ROOT;
20
+ }
21
+ export function windowsSystemExecutable(name, systemRoot) {
22
+ return win32.join(windowsSystemRoot(systemRoot), "System32", name);
23
+ }
24
+ export function powershellExecutable(systemRoot) {
25
+ return win32.join(windowsSystemRoot(systemRoot), "System32", "WindowsPowerShell", "v1.0", "powershell.exe");
26
+ }
27
+ export function taskkillExecutable(systemRoot) {
28
+ return windowsSystemExecutable("taskkill.exe", systemRoot);
29
+ }
30
+ /** Select arguments for a noninteractive UTF-8 Windows PowerShell process. */
31
+ export function powershellArguments(command) {
32
+ return ["-NoLogo", "-NoProfile", "-NonInteractive", "-Command", `${POWERSHELL_UTF8_SETUP}${command}`];
33
+ }
34
+ export function shellKind(platform = process.platform) {
35
+ return platform === "win32" ? "powershell" : "bash";
36
+ }
37
+ export function shellDefinition(platform = process.platform, options = {}) {
38
+ if (shellKind(platform) === "bash")
39
+ return BASH_SHELL;
40
+ return {
41
+ kind: "powershell",
42
+ executable: powershellExecutable(options.systemRoot),
43
+ args: powershellArguments,
44
+ description: "Run one noninteractive Windows PowerShell command in the workspace. Do not start background jobs or commands requiring a TTY.",
45
+ };
46
+ }
47
+ export function shellCommand(platform = process.platform, command, options = {}) {
48
+ const shell = shellDefinition(platform, options);
49
+ return { executable: shell.executable, args: shell.args(command) };
50
+ }
51
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAgBlC,MAAM,UAAU,GAAoB;IAClC,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,WAAW;IACvB,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;IAC3D,WAAW,EAAE,iHAAiH;CAC/H,CAAC;AAEF,MAAM,4BAA4B,GAAG,aAAa,CAAC;AACnD,MAAM,qBAAqB,GAAG,0GAA0G,CAAC;AAEzI;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAAiC,OAAO,CAAC,GAAG,CAAC,UAAU;IACvF,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACvH,OAAO,4BAA4B,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,UAAmB;IACvE,OAAO,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAAmB;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC9G,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAmB;IACpD,OAAO,uBAAuB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAC7D,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,CAAC,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,qBAAqB,GAAG,OAAO,EAAE,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,WAA4B,OAAO,CAAC,QAAQ;IACpE,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAA4B,OAAO,CAAC,QAAQ,EAAE,UAAwB,EAAE;IACtG,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,MAAM;QAAE,OAAO,UAAU,CAAC;IACtD,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC;QACpD,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,+HAA+H;KAC7I,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAA4B,OAAO,CAAC,QAAQ,EAAE,OAAe,EAAE,UAAwB,EAAE;IAIpH,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AACrE,CAAC"}
package/dist/ui/tui.d.ts CHANGED
@@ -18,6 +18,12 @@ export declare function contextUsageLabel(inputTokens: number, contextWindow: nu
18
18
  export declare function sessionMetadataLine(session: SessionRecord, approval: ApprovalMode, contextUsage: string, width?: number): string;
19
19
  export declare function activityLine(active: boolean, status: string, frame: number, scrollOffset: number): string;
20
20
  export declare function selectedScreenText(lines: string[], anchor: ScreenPoint, focus: ScreenPoint): string;
21
+ export interface CommandApprovalDisplay {
22
+ label: string;
23
+ description: string;
24
+ }
25
+ /** Render persisted approval signatures without exposing their JSON encoding in the TUI. */
26
+ export declare function formatCommandApproval(signature: string, approvedAt: number): CommandApprovalDisplay;
21
27
  declare class AlternateScreenTerminal extends ProcessTerminal {
22
28
  private active;
23
29
  private alternate;
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/ui/tui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/ui/tui.ts"],"names":[],"mappings":"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"}
package/dist/ui/tui.js CHANGED
@@ -6,6 +6,7 @@ import { CombinedAutocompleteProvider, Container, Editor, Input, Key, Markdown,
6
6
  import { projectContext } from "../engine/context.js";
7
7
  import { initialDue } from "../scheduler/schedule.js";
8
8
  import { isWithin } from "../tools/paths.js";
9
+ import { windowsSystemExecutable } from "../tools/shell.js";
9
10
  const MIN_COLUMNS = 32;
10
11
  const MIN_ROWS = 12;
11
12
  const STREAM_RENDER_MS = 40;
@@ -163,6 +164,45 @@ function jsonPreview(value) {
163
164
  return oneLine(String(value));
164
165
  }
165
166
  }
167
+ function approvalShellName(value) {
168
+ if (value === "bash")
169
+ return "Bash";
170
+ if (value === "powershell")
171
+ return "PowerShell";
172
+ return null;
173
+ }
174
+ /** Render persisted approval signatures without exposing their JSON encoding in the TUI. */
175
+ export function formatCommandApproval(signature, approvedAt) {
176
+ let label = signature;
177
+ let description = new Date(approvedAt).toISOString();
178
+ try {
179
+ const parsed = JSON.parse(signature);
180
+ if (Array.isArray(parsed) && parsed[0] === "shell-executable" && typeof parsed[3] === "string") {
181
+ const shell = approvalShellName(parsed[2]);
182
+ if (shell)
183
+ label = `All ${shell} commands starting with '${parsed[3]}'`;
184
+ }
185
+ else if (Array.isArray(parsed) && parsed[0] === "shell-exec" && typeof parsed[3] === "string") {
186
+ label = parsed[3];
187
+ description = `${String(parsed[4])} | ${String(parsed[5])}ms | ${description}`;
188
+ }
189
+ else if (Array.isArray(parsed) && parsed[0] === "bash-exec" && typeof parsed[2] === "string") {
190
+ // Keep the legacy Bash signature display stable while supporting the new encoding above.
191
+ label = parsed[2];
192
+ description = `${String(parsed[3])} | ${String(parsed[4])}ms | ${description}`;
193
+ }
194
+ else if (Array.isArray(parsed) && parsed[0] === "tool-action" && typeof parsed[2] === "string") {
195
+ const args = parsed[3];
196
+ label = parsed[2] === "bash" && typeof args?.command === "string"
197
+ ? args.command
198
+ : `${parsed[2]}: ${JSON.stringify(args ?? {})}`;
199
+ }
200
+ }
201
+ catch {
202
+ // Retain the raw signature for forward-compatible records.
203
+ }
204
+ return { label, description };
205
+ }
166
206
  function fit(line, width) {
167
207
  return truncateToWidth(line, Math.max(1, width), "");
168
208
  }
@@ -208,7 +248,7 @@ class AlternateScreenTerminal extends ProcessTerminal {
208
248
  if (platform() === "darwin")
209
249
  command = "pbcopy";
210
250
  else if (platform() === "win32")
211
- command = "clip.exe";
251
+ command = windowsSystemExecutable("clip.exe");
212
252
  else if (process.env.WAYLAND_DISPLAY)
213
253
  command = "wl-copy";
214
254
  else if (process.env.DISPLAY) {
@@ -1568,28 +1608,11 @@ export async function runTui(app, initialSessionId) {
1568
1608
  return;
1569
1609
  }
1570
1610
  const selected = await selectValue("Always-approved actions", approvals.map((approval) => {
1571
- let command = approval.signature;
1572
- let detail = new Date(approval.approvedAt).toISOString();
1573
- try {
1574
- const parsed = JSON.parse(approval.signature);
1575
- if (Array.isArray(parsed) && parsed[0] === "bash-exec" && typeof parsed[2] === "string") {
1576
- command = parsed[2];
1577
- detail = `${String(parsed[3])} | ${String(parsed[4])}ms | ${detail}`;
1578
- }
1579
- else if (Array.isArray(parsed) && parsed[0] === "tool-action" && typeof parsed[2] === "string") {
1580
- const args = parsed[3];
1581
- command = parsed[2] === "bash" && typeof args?.command === "string"
1582
- ? args.command
1583
- : `${parsed[2]}: ${JSON.stringify(args ?? {})}`;
1584
- }
1585
- }
1586
- catch {
1587
- // Retain the raw signature for forward-compatible records.
1588
- }
1611
+ const display = formatCommandApproval(approval.signature, approval.approvedAt);
1589
1612
  return {
1590
1613
  value: approval.signature,
1591
- label: oneLine(command, 240),
1592
- description: detail,
1614
+ label: oneLine(display.label, 240),
1615
+ description: display.description,
1593
1616
  };
1594
1617
  }), "Delete/Supr revokes the highlighted action approval.", { deletable: true });
1595
1618
  if (!selected || stopping)