wave-code 0.2.1 → 0.5.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 (156) hide show
  1. package/dist/commands/plugin/disable.d.ts +2 -1
  2. package/dist/commands/plugin/disable.d.ts.map +1 -1
  3. package/dist/commands/plugin/disable.js +3 -2
  4. package/dist/commands/plugin/enable.d.ts +2 -1
  5. package/dist/commands/plugin/enable.d.ts.map +1 -1
  6. package/dist/commands/plugin/enable.js +3 -2
  7. package/dist/commands/plugin/install.d.ts +2 -1
  8. package/dist/commands/plugin/install.d.ts.map +1 -1
  9. package/dist/commands/plugin/list.d.ts.map +1 -1
  10. package/dist/commands/plugin/list.js +15 -3
  11. package/dist/commands/plugin/marketplace.d.ts +3 -0
  12. package/dist/commands/plugin/marketplace.d.ts.map +1 -1
  13. package/dist/commands/plugin/marketplace.js +15 -1
  14. package/dist/commands/plugin/uninstall.d.ts +4 -0
  15. package/dist/commands/plugin/uninstall.d.ts.map +1 -0
  16. package/dist/commands/plugin/uninstall.js +29 -0
  17. package/dist/commands/plugin/update.d.ts +4 -0
  18. package/dist/commands/plugin/update.d.ts.map +1 -0
  19. package/dist/commands/plugin/update.js +15 -0
  20. package/dist/components/ChatInterface.d.ts.map +1 -1
  21. package/dist/components/ChatInterface.js +2 -2
  22. package/dist/components/CommandSelector.d.ts.map +1 -1
  23. package/dist/components/CommandSelector.js +9 -3
  24. package/dist/components/Confirmation.d.ts.map +1 -1
  25. package/dist/components/Confirmation.js +73 -20
  26. package/dist/components/DiffDisplay.d.ts +0 -1
  27. package/dist/components/DiffDisplay.d.ts.map +1 -1
  28. package/dist/components/DiffDisplay.js +38 -59
  29. package/dist/components/DiscoverView.d.ts +3 -0
  30. package/dist/components/DiscoverView.d.ts.map +1 -0
  31. package/dist/components/DiscoverView.js +25 -0
  32. package/dist/components/FileSelector.js +1 -1
  33. package/dist/components/HistorySearch.d.ts +8 -0
  34. package/dist/components/HistorySearch.d.ts.map +1 -0
  35. package/dist/components/HistorySearch.js +67 -0
  36. package/dist/components/InputBox.d.ts +1 -1
  37. package/dist/components/InputBox.d.ts.map +1 -1
  38. package/dist/components/InputBox.js +29 -19
  39. package/dist/components/InstalledView.d.ts +3 -0
  40. package/dist/components/InstalledView.d.ts.map +1 -0
  41. package/dist/components/InstalledView.js +30 -0
  42. package/dist/components/Markdown.d.ts.map +1 -1
  43. package/dist/components/Markdown.js +24 -10
  44. package/dist/components/MarketplaceAddForm.d.ts +3 -0
  45. package/dist/components/MarketplaceAddForm.d.ts.map +1 -0
  46. package/dist/components/MarketplaceAddForm.js +26 -0
  47. package/dist/components/MarketplaceDetail.d.ts +3 -0
  48. package/dist/components/MarketplaceDetail.d.ts.map +1 -0
  49. package/dist/components/MarketplaceDetail.js +38 -0
  50. package/dist/components/MarketplaceList.d.ts +9 -0
  51. package/dist/components/MarketplaceList.d.ts.map +1 -0
  52. package/dist/components/MarketplaceList.js +16 -0
  53. package/dist/components/MarketplaceView.d.ts +3 -0
  54. package/dist/components/MarketplaceView.d.ts.map +1 -0
  55. package/dist/components/MarketplaceView.js +28 -0
  56. package/dist/components/PlanDisplay.d.ts.map +1 -1
  57. package/dist/components/PlanDisplay.js +2 -2
  58. package/dist/components/PluginDetail.d.ts +3 -0
  59. package/dist/components/PluginDetail.d.ts.map +1 -0
  60. package/dist/components/PluginDetail.js +63 -0
  61. package/dist/components/PluginList.d.ts +14 -0
  62. package/dist/components/PluginList.d.ts.map +1 -0
  63. package/dist/components/PluginList.js +12 -0
  64. package/dist/components/PluginManagerShell.d.ts +5 -0
  65. package/dist/components/PluginManagerShell.d.ts.map +1 -0
  66. package/dist/components/PluginManagerShell.js +89 -0
  67. package/dist/components/PluginManagerTypes.d.ts +33 -0
  68. package/dist/components/PluginManagerTypes.d.ts.map +1 -0
  69. package/dist/components/PluginManagerTypes.js +1 -0
  70. package/dist/components/RewindCommand.d.ts +9 -0
  71. package/dist/components/RewindCommand.d.ts.map +1 -0
  72. package/dist/components/RewindCommand.js +42 -0
  73. package/dist/components/SessionSelector.d.ts +11 -0
  74. package/dist/components/SessionSelector.d.ts.map +1 -0
  75. package/dist/components/SessionSelector.js +38 -0
  76. package/dist/components/SubagentBlock.d.ts.map +1 -1
  77. package/dist/components/SubagentBlock.js +24 -1
  78. package/dist/components/TaskManager.d.ts +6 -0
  79. package/dist/components/TaskManager.d.ts.map +1 -0
  80. package/dist/components/TaskManager.js +114 -0
  81. package/dist/components/ToolResultDisplay.d.ts.map +1 -1
  82. package/dist/components/ToolResultDisplay.js +2 -1
  83. package/dist/contexts/PluginManagerContext.d.ts +4 -0
  84. package/dist/contexts/PluginManagerContext.d.ts.map +1 -0
  85. package/dist/contexts/PluginManagerContext.js +9 -0
  86. package/dist/contexts/useChat.d.ts +7 -4
  87. package/dist/contexts/useChat.d.ts.map +1 -1
  88. package/dist/contexts/useChat.js +37 -12
  89. package/dist/hooks/useInputManager.d.ts +8 -16
  90. package/dist/hooks/useInputManager.d.ts.map +1 -1
  91. package/dist/hooks/useInputManager.js +39 -55
  92. package/dist/hooks/usePluginManager.d.ts +3 -0
  93. package/dist/hooks/usePluginManager.d.ts.map +1 -0
  94. package/dist/hooks/usePluginManager.js +227 -0
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +150 -177
  97. package/dist/managers/InputManager.d.ts +18 -26
  98. package/dist/managers/InputManager.d.ts.map +1 -1
  99. package/dist/managers/InputManager.js +93 -119
  100. package/dist/plugin-manager-cli.d.ts +6 -0
  101. package/dist/plugin-manager-cli.d.ts.map +1 -0
  102. package/dist/plugin-manager-cli.js +12 -0
  103. package/dist/session-selector-cli.d.ts +2 -0
  104. package/dist/session-selector-cli.d.ts.map +1 -0
  105. package/dist/session-selector-cli.js +25 -0
  106. package/package.json +9 -5
  107. package/src/commands/plugin/disable.ts +7 -3
  108. package/src/commands/plugin/enable.ts +7 -3
  109. package/src/commands/plugin/install.ts +2 -1
  110. package/src/commands/plugin/list.ts +21 -3
  111. package/src/commands/plugin/marketplace.ts +17 -1
  112. package/src/commands/plugin/uninstall.ts +39 -0
  113. package/src/commands/plugin/update.ts +19 -0
  114. package/src/components/ChatInterface.tsx +2 -1
  115. package/src/components/CommandSelector.tsx +10 -3
  116. package/src/components/Confirmation.tsx +115 -25
  117. package/src/components/DiffDisplay.tsx +60 -106
  118. package/src/components/DiscoverView.tsx +31 -0
  119. package/src/components/FileSelector.tsx +1 -1
  120. package/src/components/HistorySearch.tsx +148 -0
  121. package/src/components/InputBox.tsx +51 -34
  122. package/src/components/InstalledView.tsx +61 -0
  123. package/src/components/Markdown.tsx +44 -28
  124. package/src/components/MarketplaceAddForm.tsx +39 -0
  125. package/src/components/MarketplaceDetail.tsx +79 -0
  126. package/src/components/MarketplaceList.tsx +52 -0
  127. package/src/components/MarketplaceView.tsx +43 -0
  128. package/src/components/PlanDisplay.tsx +14 -19
  129. package/src/components/PluginDetail.tsx +147 -0
  130. package/src/components/PluginList.tsx +51 -0
  131. package/src/components/PluginManagerShell.tsx +189 -0
  132. package/src/components/PluginManagerTypes.ts +47 -0
  133. package/src/components/RewindCommand.tsx +114 -0
  134. package/src/components/SessionSelector.tsx +127 -0
  135. package/src/components/SubagentBlock.tsx +34 -1
  136. package/src/components/{BashShellManager.tsx → TaskManager.tsx} +79 -75
  137. package/src/components/ToolResultDisplay.tsx +6 -2
  138. package/src/contexts/PluginManagerContext.ts +15 -0
  139. package/src/contexts/useChat.tsx +51 -20
  140. package/src/hooks/useInputManager.ts +39 -71
  141. package/src/hooks/usePluginManager.ts +302 -0
  142. package/src/index.ts +241 -280
  143. package/src/managers/InputManager.ts +113 -162
  144. package/src/plugin-manager-cli.tsx +13 -0
  145. package/src/session-selector-cli.tsx +37 -0
  146. package/dist/components/BashHistorySelector.d.ts +0 -11
  147. package/dist/components/BashHistorySelector.d.ts.map +0 -1
  148. package/dist/components/BashHistorySelector.js +0 -93
  149. package/dist/components/BashShellManager.d.ts +0 -6
  150. package/dist/components/BashShellManager.d.ts.map +0 -1
  151. package/dist/components/BashShellManager.js +0 -116
  152. package/dist/hooks/usePagination.d.ts +0 -20
  153. package/dist/hooks/usePagination.d.ts.map +0 -1
  154. package/dist/hooks/usePagination.js +0 -168
  155. package/src/components/BashHistorySelector.tsx +0 -181
  156. package/src/hooks/usePagination.ts +0 -203
@@ -1,5 +1,6 @@
1
+ import { Scope } from "wave-agent-sdk";
1
2
  export declare function disablePluginCommand(argv: {
2
3
  plugin: string;
3
- scope: "user" | "project" | "local";
4
+ scope?: Scope;
4
5
  }): Promise<void>;
5
6
  //# sourceMappingURL=disable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"disable.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/disable.ts"],"names":[],"mappings":"AAMA,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;CACrC,iBAqBA"}
1
+ {"version":3,"file":"disable.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/disable.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,EACN,MAAM,gBAAgB,CAAC;AAExB,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,iBAwBA"}
@@ -8,9 +8,10 @@ export async function disablePluginCommand(argv) {
8
8
  configurationService,
9
9
  pluginManager,
10
10
  });
11
+ const scope = argv.scope || scopeManager.findPluginScope(argv.plugin) || "user";
11
12
  try {
12
- await scopeManager.disablePlugin(argv.scope, argv.plugin);
13
- console.log(`Successfully disabled plugin: ${argv.plugin} in ${argv.scope} scope`);
13
+ await scopeManager.disablePlugin(scope, argv.plugin);
14
+ console.log(`Successfully disabled plugin: ${argv.plugin} in ${scope} scope`);
14
15
  process.exit(0);
15
16
  }
16
17
  catch (error) {
@@ -1,5 +1,6 @@
1
+ import { Scope } from "wave-agent-sdk";
1
2
  export declare function enablePluginCommand(argv: {
2
3
  plugin: string;
3
- scope: "user" | "project" | "local";
4
+ scope?: Scope;
4
5
  }): Promise<void>;
5
6
  //# sourceMappingURL=enable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"enable.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/enable.ts"],"names":[],"mappings":"AAMA,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;CACrC,iBAqBA"}
1
+ {"version":3,"file":"enable.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/enable.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,EACN,MAAM,gBAAgB,CAAC;AAExB,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,iBAwBA"}
@@ -8,9 +8,10 @@ export async function enablePluginCommand(argv) {
8
8
  configurationService,
9
9
  pluginManager,
10
10
  });
11
+ const scope = argv.scope || scopeManager.findPluginScope(argv.plugin) || "user";
11
12
  try {
12
- await scopeManager.enablePlugin(argv.scope, argv.plugin);
13
- console.log(`Successfully enabled plugin: ${argv.plugin} in ${argv.scope} scope`);
13
+ await scopeManager.enablePlugin(scope, argv.plugin);
14
+ console.log(`Successfully enabled plugin: ${argv.plugin} in ${scope} scope`);
14
15
  process.exit(0);
15
16
  }
16
17
  catch (error) {
@@ -1,5 +1,6 @@
1
+ import { Scope } from "wave-agent-sdk";
1
2
  export declare function installPluginCommand(argv: {
2
3
  plugin: string;
3
- scope?: "user" | "project" | "local";
4
+ scope?: Scope;
4
5
  }): Promise<void>;
5
6
  //# sourceMappingURL=install.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/install.ts"],"names":[],"mappings":"AAOA,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;CACtC,iBA+BA"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,EACN,MAAM,gBAAgB,CAAC;AAExB,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,iBA+BA"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/list.ts"],"names":[],"mappings":"AAEA,wBAAsB,kBAAkB,kBA6DvC"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/list.ts"],"names":[],"mappings":"AAOA,wBAAsB,kBAAkB,kBA0EvC"}
@@ -1,8 +1,17 @@
1
- import { MarketplaceService, ConfigurationService } from "wave-agent-sdk";
1
+ import { MarketplaceService, ConfigurationService, PluginScopeManager, PluginManager, } from "wave-agent-sdk";
2
2
  export async function listPluginsCommand() {
3
- const marketplaceService = new MarketplaceService();
4
3
  const configurationService = new ConfigurationService();
4
+ const marketplaceService = new MarketplaceService();
5
5
  const workdir = process.cwd();
6
+ const pluginManager = new PluginManager({
7
+ workdir,
8
+ configurationService,
9
+ });
10
+ const pluginScopeManager = new PluginScopeManager({
11
+ workdir,
12
+ configurationService,
13
+ pluginManager,
14
+ });
6
15
  try {
7
16
  const installedPlugins = await marketplaceService.getInstalledPlugins();
8
17
  const marketplaces = await marketplaceService.listMarketplaces();
@@ -13,12 +22,14 @@ export async function listPluginsCommand() {
13
22
  try {
14
23
  const manifest = await marketplaceService.loadMarketplaceManifest(marketplaceService.getMarketplacePath(m));
15
24
  manifest.plugins.forEach((p) => {
25
+ const pluginId = `${p.name}@${m.name}`;
16
26
  const installed = installedPlugins.plugins.find((ip) => ip.name === p.name && ip.marketplace === m.name);
17
27
  allMarketplacePlugins.push({
18
28
  name: p.name,
19
29
  marketplace: m.name,
20
30
  installed: !!installed,
21
31
  version: installed?.version,
32
+ scope: pluginScopeManager.findPluginScope(pluginId) || undefined,
22
33
  });
23
34
  });
24
35
  }
@@ -40,7 +51,8 @@ export async function listPluginsCommand() {
40
51
  : "disabled"
41
52
  : "not installed";
42
53
  const versionStr = p.version ? ` v${p.version}` : "";
43
- console.log(`- ${pluginId}${versionStr} [${status}]`);
54
+ const scopeStr = p.scope ? ` (${p.scope})` : "";
55
+ console.log(`- ${pluginId}${versionStr}${scopeStr} [${status}]`);
44
56
  });
45
57
  }
46
58
  process.exit(0);
@@ -2,6 +2,9 @@ export declare function addMarketplaceCommand(argv: {
2
2
  input: string;
3
3
  }): Promise<void>;
4
4
  export declare function listMarketplacesCommand(): Promise<void>;
5
+ export declare function removeMarketplaceCommand(argv: {
6
+ name: string;
7
+ }): Promise<void>;
5
8
  export declare function updateMarketplaceCommand(argv: {
6
9
  name?: string;
7
10
  }): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/marketplace.ts"],"names":[],"mappings":"AAEA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,iBAsBlE;AAED,wBAAsB,uBAAuB,kBA2B5C;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,iBAgBrE"}
1
+ {"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/marketplace.ts"],"names":[],"mappings":"AAEA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,iBAsBlE;AAED,wBAAsB,uBAAuB,kBA8B5C;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,iBAWpE;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,iBAgBrE"}
@@ -44,7 +44,8 @@ export async function listMarketplacesCommand() {
44
44
  else {
45
45
  sourceInfo = source.url + (source.ref ? `#${source.ref}` : "");
46
46
  }
47
- console.log(`- ${m.name}: ${sourceInfo} (${m.source.source})`);
47
+ const builtinLabel = m.isBuiltin ? " [builtin]" : "";
48
+ console.log(`- ${m.name}${builtinLabel}: ${sourceInfo} (${m.source.source})`);
48
49
  });
49
50
  }
50
51
  process.exit(0);
@@ -55,6 +56,19 @@ export async function listMarketplacesCommand() {
55
56
  process.exit(1);
56
57
  }
57
58
  }
59
+ export async function removeMarketplaceCommand(argv) {
60
+ const service = new MarketplaceService();
61
+ try {
62
+ await service.removeMarketplace(argv.name);
63
+ console.log(`Successfully removed marketplace: ${argv.name}`);
64
+ process.exit(0);
65
+ }
66
+ catch (error) {
67
+ const message = error instanceof Error ? error.message : String(error);
68
+ console.error(`Failed to remove marketplace: ${message}`);
69
+ process.exit(1);
70
+ }
71
+ }
58
72
  export async function updateMarketplaceCommand(argv) {
59
73
  const service = new MarketplaceService();
60
74
  try {
@@ -0,0 +1,4 @@
1
+ export declare function uninstallPluginCommand(argv: {
2
+ plugin: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/uninstall.ts"],"names":[],"mappings":"AAOA,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,iBA+BpE"}
@@ -0,0 +1,29 @@
1
+ import { MarketplaceService, ConfigurationService, PluginManager, PluginScopeManager, } from "wave-agent-sdk";
2
+ export async function uninstallPluginCommand(argv) {
3
+ const marketplaceService = new MarketplaceService();
4
+ const workdir = process.cwd();
5
+ try {
6
+ await marketplaceService.uninstallPlugin(argv.plugin, workdir);
7
+ console.log(`Successfully uninstalled plugin: ${argv.plugin}`);
8
+ const configurationService = new ConfigurationService();
9
+ const pluginManager = new PluginManager({ workdir });
10
+ const scopeManager = new PluginScopeManager({
11
+ workdir,
12
+ configurationService,
13
+ pluginManager,
14
+ });
15
+ try {
16
+ await scopeManager.removePluginFromAllScopes(argv.plugin);
17
+ console.log(`Cleaned up plugin configuration from all scopes`);
18
+ }
19
+ catch (error) {
20
+ console.warn(`Warning: Could not clean up all plugin configurations: ${error instanceof Error ? error.message : String(error)}`);
21
+ }
22
+ process.exit(0);
23
+ }
24
+ catch (error) {
25
+ const message = error instanceof Error ? error.message : String(error);
26
+ console.error(`Failed to uninstall plugin: ${message}`);
27
+ process.exit(1);
28
+ }
29
+ }
@@ -0,0 +1,4 @@
1
+ export declare function updatePluginCommand(argv: {
2
+ plugin: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/update.ts"],"names":[],"mappings":"AAEA,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,iBAgBjE"}
@@ -0,0 +1,15 @@
1
+ import { MarketplaceService } from "wave-agent-sdk";
2
+ export async function updatePluginCommand(argv) {
3
+ const marketplaceService = new MarketplaceService();
4
+ try {
5
+ const updated = await marketplaceService.updatePlugin(argv.plugin);
6
+ console.log(`Successfully updated plugin: ${updated.name} v${updated.version} from ${updated.marketplace}`);
7
+ console.log(`Cache path: ${updated.cachePath}`);
8
+ process.exit(0);
9
+ }
10
+ catch (error) {
11
+ const message = error instanceof Error ? error.message : String(error);
12
+ console.error(`Failed to update plugin: ${message}`);
13
+ process.exit(1);
14
+ }
15
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"ChatInterface.d.ts","sourceRoot":"","sources":["../../src/components/ChatInterface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAoEjC,CAAC"}
1
+ {"version":3,"file":"ChatInterface.d.ts","sourceRoot":"","sources":["../../src/components/ChatInterface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAqEjC,CAAC"}
@@ -5,8 +5,8 @@ import { InputBox } from "./InputBox.js";
5
5
  import { Confirmation } from "./Confirmation.js";
6
6
  import { useChat } from "../contexts/useChat.js";
7
7
  export const ChatInterface = () => {
8
- const { messages, isLoading, isCommandRunning, userInputHistory, isCompressing, sendMessage, abortMessage, saveMemory, mcpServers, connectMcpServer, disconnectMcpServer, isExpanded, sessionId, latestTotalTokens, slashCommands, hasSlashCommand, isConfirmationVisible, confirmingTool, handleConfirmationDecision, handleConfirmationCancel, } = useChat();
8
+ const { messages, isLoading, isCommandRunning, userInputHistory, isCompressing, sendMessage, abortMessage, saveMemory, mcpServers, connectMcpServer, disconnectMcpServer, isExpanded, sessionId, latestTotalTokens, slashCommands, hasSlashCommand, isConfirmationVisible, confirmingTool, handleConfirmationDecision, handleConfirmationCancel, rewindId, } = useChat();
9
9
  if (!sessionId)
10
10
  return null;
11
- return (_jsxs(Box, { flexDirection: "column", height: "100%", paddingY: 1, paddingRight: 1, children: [_jsx(MessageList, { messages: messages, isLoading: isLoading, isCommandRunning: isCommandRunning, isCompressing: isCompressing, latestTotalTokens: latestTotalTokens, isExpanded: isExpanded }, String(isExpanded) + sessionId), isConfirmationVisible && (_jsx(Confirmation, { toolName: confirmingTool.name, toolInput: confirmingTool.input, suggestedPrefix: confirmingTool.suggestedPrefix, hidePersistentOption: confirmingTool.hidePersistentOption, isExpanded: isExpanded, onDecision: handleConfirmationDecision, onCancel: handleConfirmationCancel, onAbort: abortMessage })), !isConfirmationVisible && !isExpanded && (_jsx(InputBox, { isLoading: isLoading, isCommandRunning: isCommandRunning, userInputHistory: userInputHistory, sendMessage: sendMessage, abortMessage: abortMessage, saveMemory: saveMemory, mcpServers: mcpServers, connectMcpServer: connectMcpServer, disconnectMcpServer: disconnectMcpServer, slashCommands: slashCommands, hasSlashCommand: hasSlashCommand }))] }));
11
+ return (_jsxs(Box, { flexDirection: "column", height: "100%", paddingY: 1, paddingRight: 1, children: [_jsx(MessageList, { messages: messages, isLoading: isLoading, isCommandRunning: isCommandRunning, isCompressing: isCompressing, latestTotalTokens: latestTotalTokens, isExpanded: isExpanded }, String(isExpanded) + sessionId + rewindId), isConfirmationVisible && (_jsx(Confirmation, { toolName: confirmingTool.name, toolInput: confirmingTool.input, suggestedPrefix: confirmingTool.suggestedPrefix, hidePersistentOption: confirmingTool.hidePersistentOption, isExpanded: isExpanded, onDecision: handleConfirmationDecision, onCancel: handleConfirmationCancel, onAbort: abortMessage })), !isConfirmationVisible && !isExpanded && (_jsx(InputBox, { isLoading: isLoading, isCommandRunning: isCommandRunning, userInputHistory: userInputHistory, sendMessage: sendMessage, abortMessage: abortMessage, saveMemory: saveMemory, mcpServers: mcpServers, connectMcpServer: connectMcpServer, disconnectMcpServer: disconnectMcpServer, slashCommands: slashCommands, hasSlashCommand: hasSlashCommand }))] }));
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CommandSelector.d.ts","sourceRoot":"","sources":["../../src/components/CommandSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAiBnD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAwH1D,CAAC"}
1
+ {"version":3,"file":"CommandSelector.d.ts","sourceRoot":"","sources":["../../src/components/CommandSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAwBnD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAwH1D,CAAC"}
@@ -3,9 +3,9 @@ import { useState } from "react";
3
3
  import { Box, Text, useInput } from "ink";
4
4
  const AVAILABLE_COMMANDS = [
5
5
  {
6
- id: "bashes",
7
- name: "bashes",
8
- description: "View and manage background bash shells",
6
+ id: "tasks",
7
+ name: "tasks",
8
+ description: "View and manage background tasks (shells and subagents)",
9
9
  handler: () => { }, // Handler here won't be used, actual processing is in the hook
10
10
  },
11
11
  {
@@ -14,6 +14,12 @@ const AVAILABLE_COMMANDS = [
14
14
  description: "View and manage MCP servers",
15
15
  handler: () => { }, // Handler here won't be used, actual processing is in the hook
16
16
  },
17
+ {
18
+ id: "rewind",
19
+ name: "rewind",
20
+ description: "Revert conversation and file changes to a previous checkpoint",
21
+ handler: () => { }, // Handler here won't be used, actual processing is in the hook
22
+ },
17
23
  ];
18
24
  export const CommandSelector = ({ searchQuery, onSelect, onInsert, onCancel, commands = [], // Default to empty array
19
25
  }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"Confirmation.d.ts","sourceRoot":"","sources":["../../src/components/Confirmation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,kBAAkB,EAAwB,MAAM,gBAAgB,CAAC;AAmD/E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAQD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAqapD,CAAC"}
1
+ {"version":3,"file":"Confirmation.d.ts","sourceRoot":"","sources":["../../src/components/Confirmation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,kBAAkB,EAAwB,MAAM,gBAAgB,CAAC;AAmD/E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AASD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA8fpD,CAAC"}
@@ -40,6 +40,7 @@ export const Confirmation = ({ toolName, toolInput, suggestedPrefix, hidePersist
40
40
  const [state, setState] = useState({
41
41
  selectedOption: "allow",
42
42
  alternativeText: "",
43
+ alternativeCursorPosition: 0,
43
44
  hasUserInput: false,
44
45
  });
45
46
  // Specialized state for AskUserQuestion
@@ -48,6 +49,7 @@ export const Confirmation = ({ toolName, toolInput, suggestedPrefix, hidePersist
48
49
  const [selectedOptionIndices, setSelectedOptionIndices] = useState(new Set());
49
50
  const [userAnswers, setUserAnswers] = useState({});
50
51
  const [otherText, setOtherText] = useState("");
52
+ const [otherCursorPosition, setOtherCursorPosition] = useState(0);
51
53
  const questions = toolInput?.questions || [];
52
54
  const currentQuestion = questions[currentQuestionIndex];
53
55
  const getAutoOptionText = () => {
@@ -107,6 +109,7 @@ export const Confirmation = ({ toolName, toolInput, suggestedPrefix, hidePersist
107
109
  setSelectedOptionIndex(0);
108
110
  setSelectedOptionIndices(new Set());
109
111
  setOtherText("");
112
+ setOtherCursorPosition(0);
110
113
  }
111
114
  else {
112
115
  // All questions answered
@@ -150,11 +153,34 @@ export const Confirmation = ({ toolName, toolInput, suggestedPrefix, hidePersist
150
153
  return;
151
154
  }
152
155
  if (isOtherFocused) {
156
+ if (key.leftArrow) {
157
+ setOtherCursorPosition((prev) => Math.max(0, prev - 1));
158
+ return;
159
+ }
160
+ if (key.rightArrow) {
161
+ setOtherCursorPosition((prev) => Math.min(otherText.length, prev + 1));
162
+ return;
163
+ }
153
164
  if (key.backspace || key.delete) {
154
- setOtherText((prev) => prev.slice(0, -1));
165
+ if (otherCursorPosition > 0) {
166
+ setOtherText((prev) => {
167
+ const next = prev.slice(0, otherCursorPosition - 1) +
168
+ prev.slice(otherCursorPosition);
169
+ return next;
170
+ });
171
+ setOtherCursorPosition((prev) => prev - 1);
172
+ }
173
+ return;
155
174
  }
156
- else if (input && !key.ctrl && !key.meta) {
157
- setOtherText((prev) => prev + input);
175
+ if (input && !key.ctrl && !key.meta) {
176
+ setOtherText((prev) => {
177
+ const next = prev.slice(0, otherCursorPosition) +
178
+ input +
179
+ prev.slice(otherCursorPosition);
180
+ return next;
181
+ });
182
+ setOtherCursorPosition((prev) => prev + input.length);
183
+ return;
158
184
  }
159
185
  return;
160
186
  }
@@ -173,7 +199,7 @@ export const Confirmation = ({ toolName, toolInput, suggestedPrefix, hidePersist
173
199
  else if (state.selectedOption === "auto") {
174
200
  if (toolName === BASH_TOOL_NAME) {
175
201
  const rule = suggestedPrefix
176
- ? `Bash(${suggestedPrefix}:*)`
202
+ ? `Bash(${suggestedPrefix}*)`
177
203
  : `Bash(${toolInput?.command})`;
178
204
  onDecision({
179
205
  behavior: "allow",
@@ -198,6 +224,22 @@ export const Confirmation = ({ toolName, toolInput, suggestedPrefix, hidePersist
198
224
  }
199
225
  return;
200
226
  }
227
+ if (state.selectedOption === "alternative") {
228
+ if (key.leftArrow) {
229
+ setState((prev) => ({
230
+ ...prev,
231
+ alternativeCursorPosition: Math.max(0, prev.alternativeCursorPosition - 1),
232
+ }));
233
+ return;
234
+ }
235
+ if (key.rightArrow) {
236
+ setState((prev) => ({
237
+ ...prev,
238
+ alternativeCursorPosition: Math.min(prev.alternativeText.length, prev.alternativeCursorPosition + 1),
239
+ }));
240
+ return;
241
+ }
242
+ }
201
243
  // Handle arrow keys for navigation
202
244
  if (key.upArrow) {
203
245
  setState((prev) => {
@@ -230,30 +272,42 @@ export const Confirmation = ({ toolName, toolInput, suggestedPrefix, hidePersist
230
272
  // Handle text input for alternative option
231
273
  if (input && !key.ctrl && !key.meta && !("alt" in key && key.alt)) {
232
274
  // Focus on alternative option when user starts typing
233
- setState((prev) => ({
234
- selectedOption: "alternative",
235
- alternativeText: prev.alternativeText + input,
236
- hasUserInput: true,
237
- }));
238
- return;
239
- }
240
- // Handle backspace and delete (same behavior - delete one character)
241
- if (key.backspace || key.delete) {
242
275
  setState((prev) => {
243
- const newText = prev.alternativeText.slice(0, -1);
276
+ const nextText = prev.alternativeText.slice(0, prev.alternativeCursorPosition) +
277
+ input +
278
+ prev.alternativeText.slice(prev.alternativeCursorPosition);
244
279
  return {
245
280
  ...prev,
246
281
  selectedOption: "alternative",
247
- alternativeText: newText,
248
- hasUserInput: newText.length > 0,
282
+ alternativeText: nextText,
283
+ alternativeCursorPosition: prev.alternativeCursorPosition + input.length,
284
+ hasUserInput: true,
249
285
  };
250
286
  });
251
287
  return;
252
288
  }
289
+ // Handle backspace and delete
290
+ if (key.backspace || key.delete) {
291
+ setState((prev) => {
292
+ if (prev.alternativeCursorPosition > 0) {
293
+ const nextText = prev.alternativeText.slice(0, prev.alternativeCursorPosition - 1) +
294
+ prev.alternativeText.slice(prev.alternativeCursorPosition);
295
+ return {
296
+ ...prev,
297
+ selectedOption: "alternative",
298
+ alternativeText: nextText,
299
+ alternativeCursorPosition: prev.alternativeCursorPosition - 1,
300
+ hasUserInput: nextText.length > 0,
301
+ };
302
+ }
303
+ return prev;
304
+ });
305
+ return;
306
+ }
253
307
  });
254
308
  const placeholderText = "Type here to tell Wave what to do differently";
255
309
  const showPlaceholder = state.selectedOption === "alternative" && !state.hasUserInput;
256
- return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "yellow", borderBottom: false, borderLeft: false, borderRight: false, paddingTop: 1, children: [_jsxs(Text, { color: "yellow", bold: true, children: ["Tool: ", toolName] }), _jsx(Text, { color: "yellow", children: getActionDescription(toolName, toolInput) }), _jsx(DiffDisplay, { toolName: toolName, parameters: JSON.stringify(toolInput), isExpanded: isExpanded }), toolName === ASK_USER_QUESTION_TOOL_NAME &&
310
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "yellow", borderBottom: false, borderLeft: false, borderRight: false, paddingTop: 1, children: [_jsxs(Text, { color: "yellow", bold: true, children: ["Tool: ", toolName] }), _jsx(Text, { color: "yellow", children: getActionDescription(toolName, toolInput) }), _jsx(DiffDisplay, { toolName: toolName, parameters: JSON.stringify(toolInput) }), toolName === ASK_USER_QUESTION_TOOL_NAME &&
257
311
  currentQuestion &&
258
312
  !isExpanded && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Box, { backgroundColor: getHeaderColor(currentQuestion.header), paddingX: 1, marginRight: 1, children: _jsx(Text, { color: "black", bold: true, children: currentQuestion.header.slice(0, 12).toUpperCase() }) }), _jsx(Text, { bold: true, children: currentQuestion.question })] }), _jsx(Box, { flexDirection: "column", children: (() => {
259
313
  const isMultiSelect = !!currentQuestion.multiSelect;
@@ -264,12 +318,11 @@ export const Confirmation = ({ toolName, toolInput, suggestedPrefix, hidePersist
264
318
  : isSelected;
265
319
  const isOther = index === currentQuestion.options.length;
266
320
  const isRecommended = !isOther && option.isRecommended;
267
- return (_jsx(Box, { children: _jsxs(Text, { color: isSelected ? "black" : "white", backgroundColor: isSelected ? "yellow" : undefined, children: [isSelected ? "> " : " ", isMultiSelect ? (isChecked ? "[x] " : "[ ] ") : "", option.label, isRecommended && (_jsxs(Text, { color: "green", bold: true, children: [" ", "(Recommended)"] })), option.description ? ` - ${option.description}` : "", isOther && isSelected && (_jsxs(Text, { children: [":", " ", otherText || (_jsx(Text, { color: "gray", dimColor: true, children: "[Type your answer...]" }))] }))] }) }, index));
321
+ return (_jsx(Box, { children: _jsxs(Text, { color: isSelected ? "black" : "white", backgroundColor: isSelected ? "yellow" : undefined, children: [isSelected ? "> " : " ", isMultiSelect ? (isChecked ? "[x] " : "[ ] ") : "", option.label, isRecommended && (_jsxs(Text, { color: "green", bold: true, children: [" ", "(Recommended)"] })), option.description ? ` - ${option.description}` : "", isOther && isSelected && (_jsxs(Text, { children: [":", " ", otherText ? (_jsxs(_Fragment, { children: [otherText.slice(0, otherCursorPosition), _jsx(Text, { backgroundColor: "white", color: "black", children: otherText[otherCursorPosition] || " " }), otherText.slice(otherCursorPosition + 1)] })) : (_jsx(Text, { color: "gray", dimColor: true, children: "[Type your answer...]" }))] }))] }) }, index));
268
322
  });
269
323
  })() }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["Question ", currentQuestionIndex + 1, " of ", questions.length, " \u2022", currentQuestion.multiSelect ? " Space to toggle •" : "", " Use \u2191\u2193 to navigate \u2022 Enter to confirm"] }) })] })), toolName !== ASK_USER_QUESTION_TOOL_NAME &&
270
324
  toolName === EXIT_PLAN_MODE_TOOL_NAME &&
271
325
  !!toolInput?.plan_content && (_jsx(PlanDisplay, { plan: toolInput.plan_content, isExpanded: isExpanded })), toolName !== ASK_USER_QUESTION_TOOL_NAME && !isExpanded && (_jsxs(_Fragment, { children: [_jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Do you want to proceed?" }) }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Box, { children: _jsxs(Text, { color: state.selectedOption === "allow" ? "black" : "white", backgroundColor: state.selectedOption === "allow" ? "yellow" : undefined, bold: state.selectedOption === "allow", children: [state.selectedOption === "allow" ? "> " : " ", toolName === EXIT_PLAN_MODE_TOOL_NAME
272
326
  ? "Yes, proceed with default mode"
273
- : "Yes"] }) }, "allow-option"), !hidePersistentOption && (_jsx(Box, { children: _jsxs(Text, { color: state.selectedOption === "auto" ? "black" : "white", backgroundColor: state.selectedOption === "auto" ? "yellow" : undefined, bold: state.selectedOption === "auto", children: [state.selectedOption === "auto" ? "> " : " ", getAutoOptionText()] }) }, "auto-option")), _jsx(Box, { children: _jsxs(Text, { color: state.selectedOption === "alternative" ? "black" : "white", backgroundColor: state.selectedOption === "alternative" ? "yellow" : undefined, bold: state.selectedOption === "alternative", children: [state.selectedOption === "alternative" ? "> " : " ", showPlaceholder ? (_jsx(Text, { color: "gray", dimColor: true, children: placeholderText })) : (_jsx(Text, { children: state.alternativeText ||
274
- "Type here to tell Wave what to do differently" }))] }) }, "alternative-option")] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Use \u2191\u2193 to navigate \u2022 ESC to cancel" }) })] }))] }));
327
+ : "Yes"] }) }, "allow-option"), !hidePersistentOption && (_jsx(Box, { children: _jsxs(Text, { color: state.selectedOption === "auto" ? "black" : "white", backgroundColor: state.selectedOption === "auto" ? "yellow" : undefined, bold: state.selectedOption === "auto", children: [state.selectedOption === "auto" ? "> " : " ", getAutoOptionText()] }) }, "auto-option")), _jsx(Box, { children: _jsxs(Text, { color: state.selectedOption === "alternative" ? "black" : "white", backgroundColor: state.selectedOption === "alternative" ? "yellow" : undefined, bold: state.selectedOption === "alternative", children: [state.selectedOption === "alternative" ? "> " : " ", showPlaceholder ? (_jsx(Text, { color: "gray", dimColor: true, children: placeholderText })) : (_jsx(Text, { children: state.alternativeText ? (_jsxs(_Fragment, { children: [state.alternativeText.slice(0, state.alternativeCursorPosition), _jsx(Text, { backgroundColor: "white", color: "black", children: state.alternativeText[state.alternativeCursorPosition] || " " }), state.alternativeText.slice(state.alternativeCursorPosition + 1)] })) : ("Type here to tell Wave what to do differently") }))] }) }, "alternative-option")] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Use \u2191\u2193 to navigate \u2022 ESC to cancel" }) })] }))] }));
275
328
  };
@@ -2,7 +2,6 @@ import React from "react";
2
2
  interface DiffDisplayProps {
3
3
  toolName?: string;
4
4
  parameters?: string;
5
- isExpanded?: boolean;
6
5
  }
7
6
  export declare const DiffDisplay: React.FC<DiffDisplayProps>;
8
7
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"DiffDisplay.d.ts","sourceRoot":"","sources":["../../src/components/DiffDisplay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAUvC,UAAU,gBAAgB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA6SlD,CAAC"}
1
+ {"version":3,"file":"DiffDisplay.d.ts","sourceRoot":"","sources":["../../src/components/DiffDisplay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAUvC,UAAU,gBAAgB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA4OlD,CAAC"}