claude-scope 0.8.3 → 0.8.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 (2) hide show
  1. package/dist/claude-scope.cjs +199 -101
  2. package/package.json +1 -1
@@ -1355,107 +1355,104 @@ var init_widget_registry = __esm({
1355
1355
  }
1356
1356
  });
1357
1357
 
1358
- // src/providers/transcript-provider.ts
1359
- var import_node_fs, import_node_readline, TranscriptProvider;
1360
- var init_transcript_provider = __esm({
1361
- "src/providers/transcript-provider.ts"() {
1358
+ // src/providers/mock-git.ts
1359
+ var MockGit;
1360
+ var init_mock_git = __esm({
1361
+ "src/providers/mock-git.ts"() {
1362
1362
  "use strict";
1363
- import_node_fs = require("node:fs");
1364
- import_node_readline = require("node:readline");
1365
- TranscriptProvider = class {
1366
- MAX_TOOLS = 20;
1367
- /**
1368
- * Parse tools from a JSONL transcript file
1369
- * @param transcriptPath Path to the transcript file
1370
- * @returns Array of tool entries, limited to last 20
1371
- */
1372
- async parseTools(transcriptPath) {
1373
- if (!(0, import_node_fs.existsSync)(transcriptPath)) {
1374
- return [];
1375
- }
1376
- const toolMap = /* @__PURE__ */ new Map();
1377
- try {
1378
- const fileStream = (0, import_node_fs.createReadStream)(transcriptPath, { encoding: "utf-8" });
1379
- const rl = (0, import_node_readline.createInterface)({
1380
- input: fileStream,
1381
- crlfDelay: Infinity
1382
- });
1383
- for await (const line of rl) {
1384
- if (!line.trim()) continue;
1385
- try {
1386
- const entry = JSON.parse(line);
1387
- this.processLine(entry, toolMap);
1388
- } catch {
1389
- }
1390
- }
1391
- const tools = Array.from(toolMap.values());
1392
- return tools.slice(-this.MAX_TOOLS);
1393
- } catch {
1394
- return [];
1395
- }
1363
+ MockGit = class {
1364
+ // biome-ignore lint/correctness/noUnusedPrivateClassMembers: kept for API consistency with NativeGit
1365
+ cwd;
1366
+ constructor(cwd) {
1367
+ this.cwd = cwd;
1396
1368
  }
1397
1369
  /**
1398
- * Process a single transcript line and update tool map
1370
+ * Return demo git status
1371
+ * @returns Status with "main" branch
1399
1372
  */
1400
- processLine(line, toolMap) {
1401
- const blocks = line.message?.content ?? [];
1402
- const timestamp = /* @__PURE__ */ new Date();
1403
- for (const block of blocks) {
1404
- if (block.type === "tool_use" && block.id && block.name) {
1405
- const tool = {
1406
- id: block.id,
1407
- name: block.name,
1408
- target: this.extractTarget(block.name, block.input),
1409
- status: "running",
1410
- startTime: timestamp
1411
- };
1412
- toolMap.set(block.id, tool);
1413
- }
1414
- if (block.type === "tool_result" && block.tool_use_id) {
1415
- const existing = toolMap.get(block.tool_use_id);
1416
- if (existing) {
1417
- existing.status = block.is_error ? "error" : "completed";
1418
- existing.endTime = timestamp;
1419
- }
1420
- }
1421
- }
1373
+ async status() {
1374
+ return { current: "main" };
1422
1375
  }
1423
1376
  /**
1424
- * Extract target from tool input based on tool type
1377
+ * Return demo diff summary
1378
+ * @returns Diff with 3 files, 142 insertions, 27 deletions
1425
1379
  */
1426
- extractTarget(toolName, input) {
1427
- if (!input) return void 0;
1428
- switch (toolName) {
1429
- case "Read":
1430
- case "Write":
1431
- case "Edit":
1432
- return this.asString(input.file_path ?? input.path);
1433
- case "Glob":
1434
- return this.asString(input.pattern);
1435
- case "Grep":
1436
- return this.asString(input.pattern);
1437
- case "Bash": {
1438
- const cmd = this.asString(input.command);
1439
- return cmd ? this.truncateCommand(cmd) : void 0;
1440
- }
1441
- default:
1442
- return void 0;
1443
- }
1380
+ async diffSummary(_options) {
1381
+ return {
1382
+ fileCount: 3,
1383
+ files: [
1384
+ { file: "src/widget.ts", insertions: 85, deletions: 12 },
1385
+ { file: "src/config.ts", insertions: 42, deletions: 8 },
1386
+ { file: "tests/widget.test.ts", insertions: 15, deletions: 7 }
1387
+ ]
1388
+ };
1444
1389
  }
1445
1390
  /**
1446
- * Safely convert value to string
1391
+ * Return demo latest tag
1392
+ * @returns Current version tag
1447
1393
  */
1448
- asString(value) {
1449
- if (typeof value === "string") return value;
1450
- if (typeof value === "number") return String(value);
1451
- return void 0;
1394
+ async latestTag() {
1395
+ return "v0.8.3";
1452
1396
  }
1397
+ };
1398
+ }
1399
+ });
1400
+
1401
+ // src/providers/mock-transcript-provider.ts
1402
+ var MockTranscriptProvider;
1403
+ var init_mock_transcript_provider = __esm({
1404
+ "src/providers/mock-transcript-provider.ts"() {
1405
+ "use strict";
1406
+ MockTranscriptProvider = class {
1453
1407
  /**
1454
- * Truncate long commands to 30 chars
1408
+ * Return demo tool entries
1409
+ * @param path - Transcript path (ignored in mock)
1410
+ * @returns Array of demo tool entries
1455
1411
  */
1456
- truncateCommand(cmd) {
1457
- if (cmd.length <= 30) return cmd;
1458
- return `${cmd.slice(0, 30)}...`;
1412
+ async parseTools(_path) {
1413
+ const now = /* @__PURE__ */ new Date();
1414
+ const minuteAgo = new Date(now.getTime() - 60 * 1e3);
1415
+ return [
1416
+ {
1417
+ id: "tool_1",
1418
+ name: "Read",
1419
+ target: "src/config.ts",
1420
+ status: "completed",
1421
+ startTime: minuteAgo,
1422
+ endTime: minuteAgo
1423
+ },
1424
+ {
1425
+ id: "tool_2",
1426
+ name: "Edit",
1427
+ target: "src/config.ts",
1428
+ status: "completed",
1429
+ startTime: minuteAgo,
1430
+ endTime: minuteAgo
1431
+ },
1432
+ {
1433
+ id: "tool_3",
1434
+ name: "Read",
1435
+ target: "src/widget.ts",
1436
+ status: "completed",
1437
+ startTime: minuteAgo,
1438
+ endTime: minuteAgo
1439
+ },
1440
+ {
1441
+ id: "tool_4",
1442
+ name: "Bash",
1443
+ target: "npm test",
1444
+ status: "running",
1445
+ startTime: now
1446
+ },
1447
+ {
1448
+ id: "tool_5",
1449
+ name: "Edit",
1450
+ target: "src/styles.ts",
1451
+ status: "completed",
1452
+ startTime: minuteAgo,
1453
+ endTime: minuteAgo
1454
+ }
1455
+ ];
1459
1456
  }
1460
1457
  };
1461
1458
  }
@@ -1917,11 +1914,11 @@ var init_widget_types = __esm({
1917
1914
  });
1918
1915
 
1919
1916
  // src/storage/cache-manager.ts
1920
- var import_node_fs2, import_node_os2, import_node_path2, DEFAULT_CACHE_PATH, DEFAULT_EXPIRY_MS, CacheManager;
1917
+ var import_node_fs, import_node_os2, import_node_path2, DEFAULT_CACHE_PATH, DEFAULT_EXPIRY_MS, CacheManager;
1921
1918
  var init_cache_manager = __esm({
1922
1919
  "src/storage/cache-manager.ts"() {
1923
1920
  "use strict";
1924
- import_node_fs2 = require("node:fs");
1921
+ import_node_fs = require("node:fs");
1925
1922
  import_node_os2 = require("node:os");
1926
1923
  import_node_path2 = require("node:path");
1927
1924
  DEFAULT_CACHE_PATH = `${(0, import_node_os2.homedir)()}/.config/claude-scope/cache.json`;
@@ -1994,11 +1991,11 @@ var init_cache_manager = __esm({
1994
1991
  * Load cache from file
1995
1992
  */
1996
1993
  loadCache() {
1997
- if (!(0, import_node_fs2.existsSync)(this.cachePath)) {
1994
+ if (!(0, import_node_fs.existsSync)(this.cachePath)) {
1998
1995
  return { sessions: {}, version: 1 };
1999
1996
  }
2000
1997
  try {
2001
- const content = (0, import_node_fs2.readFileSync)(this.cachePath, "utf-8");
1998
+ const content = (0, import_node_fs.readFileSync)(this.cachePath, "utf-8");
2002
1999
  return JSON.parse(content);
2003
2000
  } catch {
2004
2001
  return { sessions: {}, version: 1 };
@@ -2009,7 +2006,7 @@ var init_cache_manager = __esm({
2009
2006
  */
2010
2007
  saveCache(cache) {
2011
2008
  try {
2012
- (0, import_node_fs2.writeFileSync)(this.cachePath, JSON.stringify(cache, null, 2), "utf-8");
2009
+ (0, import_node_fs.writeFileSync)(this.cachePath, JSON.stringify(cache, null, 2), "utf-8");
2013
2010
  } catch {
2014
2011
  }
2015
2012
  }
@@ -2019,8 +2016,8 @@ var init_cache_manager = __esm({
2019
2016
  ensureCacheDir() {
2020
2017
  try {
2021
2018
  const dir = (0, import_node_path2.dirname)(this.cachePath);
2022
- if (!(0, import_node_fs2.existsSync)(dir)) {
2023
- (0, import_node_fs2.mkdirSync)(dir, { recursive: true });
2019
+ if (!(0, import_node_fs.existsSync)(dir)) {
2020
+ (0, import_node_fs.mkdirSync)(dir, { recursive: true });
2024
2021
  }
2025
2022
  } catch {
2026
2023
  }
@@ -3596,7 +3593,7 @@ var init_demo_data = __esm({
3596
3593
  // src/cli/commands/quick-config/layout-preview.ts
3597
3594
  async function registerWidgetsFromConfig(registry, config, style, themeName) {
3598
3595
  const themeColors = getThemeByName(themeName).colors;
3599
- const transcriptProvider = new TranscriptProvider();
3596
+ const transcriptProvider = new MockTranscriptProvider();
3600
3597
  const widgetFactory = {
3601
3598
  model: (s) => {
3602
3599
  const w = new ModelWidget(themeColors);
@@ -3624,12 +3621,12 @@ async function registerWidgetsFromConfig(registry, config, style, themeName) {
3624
3621
  return w;
3625
3622
  },
3626
3623
  git: (s) => {
3627
- const w = new GitWidget(void 0, themeColors);
3624
+ const w = new GitWidget((cwd) => new MockGit(cwd), themeColors);
3628
3625
  w.setStyle(s);
3629
3626
  return w;
3630
3627
  },
3631
3628
  "git-tag": (s) => {
3632
- const w = new GitTagWidget(void 0, themeColors);
3629
+ const w = new GitTagWidget((cwd) => new MockGit(cwd), themeColors);
3633
3630
  w.setStyle(s);
3634
3631
  return w;
3635
3632
  },
@@ -3685,7 +3682,8 @@ var init_layout_preview = __esm({
3685
3682
  "use strict";
3686
3683
  init_renderer();
3687
3684
  init_widget_registry();
3688
- init_transcript_provider();
3685
+ init_mock_git();
3686
+ init_mock_transcript_provider();
3689
3687
  init_theme();
3690
3688
  init_active_tools();
3691
3689
  init_cache_metrics();
@@ -6992,7 +6990,108 @@ async function runQuickConfigMenu() {
6992
6990
  // src/cli/commands/quick-config/preview.ts
6993
6991
  init_renderer();
6994
6992
  init_widget_registry();
6995
- init_transcript_provider();
6993
+
6994
+ // src/providers/transcript-provider.ts
6995
+ var import_node_fs2 = require("node:fs");
6996
+ var import_node_readline = require("node:readline");
6997
+ var TranscriptProvider = class {
6998
+ MAX_TOOLS = 20;
6999
+ /**
7000
+ * Parse tools from a JSONL transcript file
7001
+ * @param transcriptPath Path to the transcript file
7002
+ * @returns Array of tool entries, limited to last 20
7003
+ */
7004
+ async parseTools(transcriptPath) {
7005
+ if (!(0, import_node_fs2.existsSync)(transcriptPath)) {
7006
+ return [];
7007
+ }
7008
+ const toolMap = /* @__PURE__ */ new Map();
7009
+ try {
7010
+ const fileStream = (0, import_node_fs2.createReadStream)(transcriptPath, { encoding: "utf-8" });
7011
+ const rl = (0, import_node_readline.createInterface)({
7012
+ input: fileStream,
7013
+ crlfDelay: Infinity
7014
+ });
7015
+ for await (const line of rl) {
7016
+ if (!line.trim()) continue;
7017
+ try {
7018
+ const entry = JSON.parse(line);
7019
+ this.processLine(entry, toolMap);
7020
+ } catch {
7021
+ }
7022
+ }
7023
+ const tools = Array.from(toolMap.values());
7024
+ return tools.slice(-this.MAX_TOOLS);
7025
+ } catch {
7026
+ return [];
7027
+ }
7028
+ }
7029
+ /**
7030
+ * Process a single transcript line and update tool map
7031
+ */
7032
+ processLine(line, toolMap) {
7033
+ const blocks = line.message?.content ?? [];
7034
+ const timestamp = /* @__PURE__ */ new Date();
7035
+ for (const block of blocks) {
7036
+ if (block.type === "tool_use" && block.id && block.name) {
7037
+ const tool = {
7038
+ id: block.id,
7039
+ name: block.name,
7040
+ target: this.extractTarget(block.name, block.input),
7041
+ status: "running",
7042
+ startTime: timestamp
7043
+ };
7044
+ toolMap.set(block.id, tool);
7045
+ }
7046
+ if (block.type === "tool_result" && block.tool_use_id) {
7047
+ const existing = toolMap.get(block.tool_use_id);
7048
+ if (existing) {
7049
+ existing.status = block.is_error ? "error" : "completed";
7050
+ existing.endTime = timestamp;
7051
+ }
7052
+ }
7053
+ }
7054
+ }
7055
+ /**
7056
+ * Extract target from tool input based on tool type
7057
+ */
7058
+ extractTarget(toolName, input) {
7059
+ if (!input) return void 0;
7060
+ switch (toolName) {
7061
+ case "Read":
7062
+ case "Write":
7063
+ case "Edit":
7064
+ return this.asString(input.file_path ?? input.path);
7065
+ case "Glob":
7066
+ return this.asString(input.pattern);
7067
+ case "Grep":
7068
+ return this.asString(input.pattern);
7069
+ case "Bash": {
7070
+ const cmd = this.asString(input.command);
7071
+ return cmd ? this.truncateCommand(cmd) : void 0;
7072
+ }
7073
+ default:
7074
+ return void 0;
7075
+ }
7076
+ }
7077
+ /**
7078
+ * Safely convert value to string
7079
+ */
7080
+ asString(value) {
7081
+ if (typeof value === "string") return value;
7082
+ if (typeof value === "number") return String(value);
7083
+ return void 0;
7084
+ }
7085
+ /**
7086
+ * Truncate long commands to 30 chars
7087
+ */
7088
+ truncateCommand(cmd) {
7089
+ if (cmd.length <= 30) return cmd;
7090
+ return `${cmd.slice(0, 30)}...`;
7091
+ }
7092
+ };
7093
+
7094
+ // src/cli/commands/quick-config/preview.ts
6996
7095
  init_theme();
6997
7096
  init_active_tools();
6998
7097
  init_cache_metrics();
@@ -7253,7 +7352,6 @@ var StdinProvider = class {
7253
7352
  };
7254
7353
 
7255
7354
  // src/index.ts
7256
- init_transcript_provider();
7257
7355
  init_theme();
7258
7356
  init_active_tools();
7259
7357
  init_cache_metrics();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-scope",
3
- "version": "0.8.3",
3
+ "version": "0.8.4",
4
4
  "description": "Claude Code plugin for session status and analytics",
5
5
  "license": "MIT",
6
6
  "type": "module",