@channelfactory/cliend 0.7.4 → 0.7.6

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 (49) hide show
  1. package/dist/src/config/config-manager.d.ts.map +1 -1
  2. package/dist/src/config/config-manager.js +2 -1
  3. package/dist/src/config/config-manager.js.map +1 -1
  4. package/dist/src/core/orchestrator.d.ts +1 -0
  5. package/dist/src/core/orchestrator.d.ts.map +1 -1
  6. package/dist/src/core/orchestrator.js +12 -3
  7. package/dist/src/core/orchestrator.js.map +1 -1
  8. package/dist/src/repl/commands/help.d.ts.map +1 -1
  9. package/dist/src/repl/commands/help.js +39 -22
  10. package/dist/src/repl/commands/help.js.map +1 -1
  11. package/dist/src/repl/commands/sessions.d.ts.map +1 -1
  12. package/dist/src/repl/commands/sessions.js +11 -4
  13. package/dist/src/repl/commands/sessions.js.map +1 -1
  14. package/dist/src/repl/file-mentions.d.ts +18 -0
  15. package/dist/src/repl/file-mentions.d.ts.map +1 -0
  16. package/dist/src/repl/file-mentions.js +52 -0
  17. package/dist/src/repl/file-mentions.js.map +1 -0
  18. package/dist/src/repl/mention-dropdown.d.ts +34 -0
  19. package/dist/src/repl/mention-dropdown.d.ts.map +1 -0
  20. package/dist/src/repl/mention-dropdown.js +226 -0
  21. package/dist/src/repl/mention-dropdown.js.map +1 -0
  22. package/dist/src/repl/repl.d.ts +4 -0
  23. package/dist/src/repl/repl.d.ts.map +1 -1
  24. package/dist/src/repl/repl.js +91 -5
  25. package/dist/src/repl/repl.js.map +1 -1
  26. package/dist/src/session/memory-manager.d.ts.map +1 -1
  27. package/dist/src/session/memory-manager.js +2 -1
  28. package/dist/src/session/memory-manager.js.map +1 -1
  29. package/dist/src/session/session-manager.d.ts.map +1 -1
  30. package/dist/src/session/session-manager.js +2 -1
  31. package/dist/src/session/session-manager.js.map +1 -1
  32. package/dist/src/tools/sensitive-patterns.d.ts +2 -0
  33. package/dist/src/tools/sensitive-patterns.d.ts.map +1 -0
  34. package/dist/src/tools/sensitive-patterns.js +18 -0
  35. package/dist/src/tools/sensitive-patterns.js.map +1 -0
  36. package/dist/src/tools/tool-executor.d.ts.map +1 -1
  37. package/dist/src/tools/tool-executor.js +1 -17
  38. package/dist/src/tools/tool-executor.js.map +1 -1
  39. package/dist/src/ui/output-formatter.d.ts +2 -2
  40. package/dist/src/ui/output-formatter.d.ts.map +1 -1
  41. package/dist/src/ui/output-formatter.js +19 -4
  42. package/dist/src/ui/output-formatter.js.map +1 -1
  43. package/dist/src/ui/welcome.js +3 -3
  44. package/dist/src/ui/welcome.js.map +1 -1
  45. package/dist/src/utils/paths.d.ts +9 -0
  46. package/dist/src/utils/paths.d.ts.map +1 -0
  47. package/dist/src/utils/paths.js +14 -0
  48. package/dist/src/utils/paths.js.map +1 -0
  49. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAE/B,UAAU,CAAC,EAAE,MAAM;IAKzB,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;YAuBlB,WAAW;IAyCzB,OAAO,CAAC,OAAO;YAgDD,YAAY;IAU1B,OAAO,CAAC,SAAS;CAuBlB"}
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAIpD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAE/B,UAAU,CAAC,EAAE,MAAM;IAKzB,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;YAuBlB,WAAW;IAyCzB,OAAO,CAAC,OAAO;YAgDD,YAAY;IAU1B,OAAO,CAAC,SAAS;CAuBlB"}
@@ -5,12 +5,13 @@ import { homedir } from 'node:os';
5
5
  import { appConfigSchema } from './config.schema.js';
6
6
  import { DEFAULT_CONFIG } from './defaults.js';
7
7
  import { SecretsStore } from '../auth/secrets-store.js';
8
+ import { projectStorageDir } from '../utils/paths.js';
8
9
  export class ConfigManager {
9
10
  globalConfigPath;
10
11
  projectConfigPath;
11
12
  constructor(projectDir) {
12
13
  this.globalConfigPath = join(homedir(), '.cliend', 'config.json');
13
- this.projectConfigPath = join(projectDir ?? process.cwd(), '.cliend', 'config.json');
14
+ this.projectConfigPath = join(projectStorageDir(projectDir ?? process.cwd()), 'config.json');
14
15
  }
15
16
  async load() {
16
17
  const globalOverrides = await this.readJsonFile(this.globalConfigPath);
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ export declare class Orchestrator {
16
16
  private readonly complexityRouter;
17
17
  private activeLoop;
18
18
  constructor(config: AppConfig, logger: Logger);
19
+ abort(): void;
19
20
  process(session: SessionInstance, userMessage: string): Promise<OrchestratorResult>;
20
21
  }
21
22
  //# sourceMappingURL=orchestrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/core/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAS3D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,qBAAa,YAAY;IASrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,UAAU,CAA4B;gBAG3B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM;IAS3B,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA8H1F"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/core/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAS3D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,qBAAa,YAAY;IASrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,UAAU,CAA4B;gBAG3B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM;IASjC,KAAK,IAAI,IAAI;IAIP,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAsI1F"}
@@ -24,6 +24,9 @@ export class Orchestrator {
24
24
  this.registry = new ProviderRegistry(config.providers);
25
25
  this.complexityRouter = new ComplexityRouter(config.providers.claude.apiKey);
26
26
  }
27
+ abort() {
28
+ this.activeLoop?.abort();
29
+ }
27
30
  async process(session, userMessage) {
28
31
  const providers = await this.registry.getAvailable();
29
32
  if (providers.length === 0) {
@@ -39,9 +42,11 @@ export class Orchestrator {
39
42
  const claude = this.registry.getByName('Claude');
40
43
  if (claude) {
41
44
  console.log(chalk.dim(' Thinking...\n'));
45
+ const start = Date.now();
42
46
  const response = await claude.execute(context, session.history);
47
+ const elapsed = Date.now() - start;
43
48
  if (response.success && response.output) {
44
- renderResponse(response.output);
49
+ renderResponse(response.output, elapsed);
45
50
  return {
46
51
  content: response.output.code,
47
52
  };
@@ -65,8 +70,10 @@ export class Orchestrator {
65
70
  },
66
71
  });
67
72
  try {
73
+ const start = Date.now();
68
74
  const result = await this.activeLoop.run(agenticContext.prompt, session.history, userMessage);
69
- renderAgenticResponse(result.content, result.toolCalls, result.totalTokens);
75
+ const elapsed = Date.now() - start;
76
+ renderAgenticResponse(result.content, result.toolCalls, result.totalTokens, elapsed);
70
77
  return {
71
78
  content: result.content,
72
79
  metadata: {
@@ -86,6 +93,7 @@ export class Orchestrator {
86
93
  }
87
94
  const context = this.contextBuilder.build(session, userMessage);
88
95
  console.log(chalk.dim(' Thinking...\n'));
96
+ const start = Date.now();
89
97
  // Fan-out to all providers
90
98
  const responses = await this.fanOut.execute(providers, context, session.history);
91
99
  const successful = responses.filter((r) => r.success);
@@ -119,9 +127,10 @@ export class Orchestrator {
119
127
  console.log(chalk.dim(` ${f.providerName} failed: ${f.error}`));
120
128
  }
121
129
  }
130
+ const elapsed = Date.now() - start;
122
131
  // Compact scores + response
123
132
  renderCompactScores(result.scores);
124
- renderResponse(result.winningOutput);
133
+ renderResponse(result.winningOutput, elapsed);
125
134
  return {
126
135
  content: result.winningOutput.code,
127
136
  metadata: {
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../../src/repl/commands/help.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAE3E,eAAO,MAAM,WAAW,EAAE,YAiCzB,CAAC"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../../src/repl/commands/help.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAE3E,eAAO,MAAM,WAAW,EAAE,YAoDzB,CAAC"}
@@ -4,31 +4,48 @@ export const helpCommand = {
4
4
  aliases: ['h', '?'],
5
5
  description: 'Show available commands',
6
6
  async execute(_args, _ctx) {
7
- const commands = [
8
- { cmd: '/help', desc: 'Show this help message' },
9
- { cmd: '/ticket <ID>', desc: 'Fetch/switch Jira ticket context' },
10
- { cmd: '/obsidian', desc: 'Refresh Obsidian docs from Bitbucket' },
11
- { cmd: '/sessions', desc: 'List all chat sessions' },
12
- { cmd: '/resume <N>', desc: 'Resume a previous session' },
13
- { cmd: '/new [name]', desc: 'Start a new session' },
14
- { cmd: '/memory', desc: 'Show session memory' },
15
- { cmd: '/status', desc: 'Check auth and service connectivity' },
16
- { cmd: '/config', desc: 'View configuration' },
17
- { cmd: '/config setup', desc: 'Re-run the setup wizard' },
18
- { cmd: '/breakdown <ID>', desc: 'Break down a ticket into subtasks (via AI + Rovo)' },
19
- { cmd: '/search <query>', desc: 'Search Jira & Confluence via Rovo AI' },
20
- { cmd: '/auth', desc: 'Authenticate with Atlassian' },
21
- { cmd: '/clear', desc: 'Clear the screen' },
22
- { cmd: '/exit', desc: 'End the session' },
23
- ];
24
7
  console.log('');
25
- console.log(chalk.bold(' Available commands:'));
8
+ console.log(chalk.bold(' Commands'));
26
9
  console.log('');
27
- for (const { cmd, desc } of commands) {
28
- console.log(` ${chalk.cyan(cmd.padEnd(20))} ${chalk.dim(desc)}`);
10
+ const sections = [
11
+ {
12
+ title: 'AI & Tools',
13
+ commands: [
14
+ { cmd: '@file.ts', desc: 'Attach a file to your message (with autocomplete)' },
15
+ { cmd: '/ticket <ID>', desc: 'Fetch Jira ticket as context' },
16
+ { cmd: '/breakdown <ID>', desc: 'Break down a ticket into subtasks' },
17
+ { cmd: '/search <query>', desc: 'Search Jira & Confluence' },
18
+ ],
19
+ },
20
+ {
21
+ title: 'Sessions',
22
+ commands: [
23
+ { cmd: '/sessions', desc: 'List all sessions' },
24
+ { cmd: '/resume [N]', desc: 'Resume session (last used if no N)' },
25
+ { cmd: '/new [name]', desc: 'Start a new session' },
26
+ { cmd: '/memory', desc: 'Show session memory' },
27
+ ],
28
+ },
29
+ {
30
+ title: 'Admin',
31
+ commands: [
32
+ { cmd: '/obsidian', desc: 'Refresh Obsidian docs from Bitbucket' },
33
+ { cmd: '/status', desc: 'Check auth and connectivity' },
34
+ { cmd: '/config', desc: 'View config | /config setup to re-run wizard' },
35
+ { cmd: '/auth', desc: 'Authenticate with Atlassian' },
36
+ { cmd: '/clear', desc: 'Clear screen' },
37
+ { cmd: '/exit', desc: 'End session' },
38
+ ],
39
+ },
40
+ ];
41
+ for (const section of sections) {
42
+ console.log(chalk.dim(` ${section.title}`));
43
+ for (const { cmd, desc } of section.commands) {
44
+ console.log(` ${chalk.cyan(cmd.padEnd(20))} ${chalk.dim(desc)}`);
45
+ }
46
+ console.log('');
29
47
  }
30
- console.log('');
31
- console.log(chalk.dim(' Or just type a message to start working with AI.'));
48
+ console.log(chalk.dim(' Shortcuts: Ctrl+C interrupt | Up/Down history | @file Tab to autocomplete'));
32
49
  console.log('');
33
50
  },
34
51
  };
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../../src/repl/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,yBAAyB;IACtC,KAAK,CAAC,OAAO,CAAC,KAAyB,EAAE,IAAoB;QAC3D,MAAM,QAAQ,GAAG;YACf,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE;YAChD,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,kCAAkC,EAAE;YACjE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,sCAAsC,EAAE;YAClE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE;YACpD,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,2BAA2B,EAAE;YACzD,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,qBAAqB,EAAE;YACnD,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE;YAC/C,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,qCAAqC,EAAE;YAC/D,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE;YAC9C,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,yBAAyB,EAAE;YACzD,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,mDAAmD,EAAE;YACrF,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,sCAAsC,EAAE;YACxE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,6BAA6B,EAAE;YACrD,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAC3C,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE;SAC1C,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../../src/repl/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,yBAAyB;IACtC,KAAK,CAAC,OAAO,CAAC,KAAyB,EAAE,IAAoB;QAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,QAAQ,GAAmE;YAC/E;gBACE,KAAK,EAAE,YAAY;gBACnB,QAAQ,EAAE;oBACR,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,mDAAmD,EAAE;oBAC9E,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,8BAA8B,EAAE;oBAC7D,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,mCAAmC,EAAE;oBACrE,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,0BAA0B,EAAE;iBAC7D;aACF;YACD;gBACE,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE;oBACR,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE;oBAC/C,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,oCAAoC,EAAE;oBAClE,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,qBAAqB,EAAE;oBACnD,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE;iBAChD;aACF;YACD;gBACE,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE;oBACR,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,sCAAsC,EAAE;oBAClE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,6BAA6B,EAAE;oBACvD,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,gDAAgD,EAAE;oBAC1E,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,6BAA6B,EAAE;oBACrD,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE;oBACvC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;iBACtC;aACF;SACF,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7C,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC,CAAC;QACtG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../../src/repl/commands/sessions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAE3E,eAAO,MAAM,eAAe,EAAE,YAqB7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,YAiC3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,YAS/B,CAAC"}
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../../src/repl/commands/sessions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AAE3E,eAAO,MAAM,eAAe,EAAE,YAqB7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,YAwC3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,YAS/B,CAAC"}
@@ -24,12 +24,19 @@ export const resumeCommand = {
24
24
  aliases: ['r'],
25
25
  description: 'Resume a previous session',
26
26
  async execute(args, ctx) {
27
- if (!args) {
28
- console.log(chalk.yellow('\n Usage: /resume <N> (use /sessions to see the list)\n'));
27
+ const sessions = await ctx.sessionManager.list();
28
+ if (sessions.length === 0) {
29
+ console.log(chalk.dim('\n No previous sessions to resume.\n'));
29
30
  return;
30
31
  }
31
- const index = parseInt(args.trim(), 10);
32
- const sessions = await ctx.sessionManager.list();
32
+ // No args → resume the most recent session
33
+ let index;
34
+ if (!args) {
35
+ index = 1;
36
+ }
37
+ else {
38
+ index = parseInt(args.trim(), 10);
39
+ }
33
40
  if (isNaN(index) || index < 1 || index > sessions.length) {
34
41
  console.log(chalk.red(`\n Invalid session number. Choose 1-${sessions.length}.\n`));
35
42
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../../src/repl/commands/sessions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../../src/repl/commands/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface MentionExpansion {
2
+ expandedMessage: string;
3
+ attachments: {
4
+ path: string;
5
+ lines: number;
6
+ }[];
7
+ }
8
+ /**
9
+ * Extract @file mentions from text.
10
+ * Requires a file extension to avoid matching emails or @usernames.
11
+ */
12
+ export declare function extractMentions(text: string): string[];
13
+ /**
14
+ * Expand @file mentions by reading file contents inline.
15
+ * Sensitive files and paths outside cwd are silently skipped.
16
+ */
17
+ export declare function expandMentions(text: string, cwd: string): Promise<MentionExpansion>;
18
+ //# sourceMappingURL=file-mentions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-mentions.d.ts","sourceRoot":"","sources":["../../../src/repl/file-mentions.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChD;AAKD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGtD;AAOD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqCzF"}
@@ -0,0 +1,52 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { resolve, basename } from 'node:path';
3
+ import { SENSITIVE_FILE_PATTERNS } from '../tools/sensitive-patterns.js';
4
+ const MENTION_PATTERN = /@([\w./-]+\.\w+)/g;
5
+ const MAX_FILE_SIZE = 100 * 1024; // 100KB
6
+ /**
7
+ * Extract @file mentions from text.
8
+ * Requires a file extension to avoid matching emails or @usernames.
9
+ */
10
+ export function extractMentions(text) {
11
+ const matches = [...text.matchAll(MENTION_PATTERN)];
12
+ return matches.map((m) => m[1]);
13
+ }
14
+ function isSensitivePath(filePath) {
15
+ const name = basename(filePath);
16
+ return SENSITIVE_FILE_PATTERNS.some((p) => p.test(name) || p.test(filePath));
17
+ }
18
+ /**
19
+ * Expand @file mentions by reading file contents inline.
20
+ * Sensitive files and paths outside cwd are silently skipped.
21
+ */
22
+ export async function expandMentions(text, cwd) {
23
+ const mentions = extractMentions(text);
24
+ if (mentions.length === 0) {
25
+ return { expandedMessage: text, attachments: [] };
26
+ }
27
+ let expandedMessage = text;
28
+ const attachments = [];
29
+ for (const mention of mentions) {
30
+ // Security: skip sensitive files
31
+ if (isSensitivePath(mention))
32
+ continue;
33
+ // Security: reject path traversal
34
+ const resolved = resolve(cwd, mention);
35
+ if (!resolved.startsWith(cwd))
36
+ continue;
37
+ try {
38
+ let content = await readFile(resolved, 'utf-8');
39
+ if (content.length > MAX_FILE_SIZE) {
40
+ content = content.slice(0, MAX_FILE_SIZE) + '\n\n... (truncated at 100KB)';
41
+ }
42
+ const lines = content.split('\n').length;
43
+ attachments.push({ path: mention, lines });
44
+ expandedMessage = expandedMessage.replace(`@${mention}`, `@${mention}\n\n<file path="${mention}">\n${content}\n</file>`);
45
+ }
46
+ catch {
47
+ // File doesn't exist or unreadable — leave mention as-is
48
+ }
49
+ }
50
+ return { expandedMessage, attachments };
51
+ }
52
+ //# sourceMappingURL=file-mentions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-mentions.js","sourceRoot":"","sources":["../../../src/repl/file-mentions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAOzE,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAC5C,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ;AAE1C;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,GAAW;IAC5D,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,eAAe,GAAG,IAAI,CAAC;IAC3B,MAAM,WAAW,GAAsC,EAAE,CAAC;IAE1D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,iCAAiC;QACjC,IAAI,eAAe,CAAC,OAAO,CAAC;YAAE,SAAS;QAEvC,kCAAkC;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAExC,IAAI,CAAC;YACH,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAEhD,IAAI,OAAO,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;gBACnC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,8BAA8B,CAAC;YAC7E,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YACzC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAE3C,eAAe,GAAG,eAAe,CAAC,OAAO,CACvC,IAAI,OAAO,EAAE,EACb,IAAI,OAAO,mBAAmB,OAAO,OAAO,OAAO,WAAW,CAC/D,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,34 @@
1
+ import * as readline from 'node:readline';
2
+ /**
3
+ * Interactive file-mention dropdown that hooks into readline.
4
+ * Activates when the user types `@`, shows matching files below the cursor,
5
+ * and allows arrow-key navigation + Tab/Enter to select.
6
+ */
7
+ export declare class MentionDropdown {
8
+ private readonly rl;
9
+ private readonly getCwd;
10
+ private state;
11
+ constructor(rl: readline.Interface, getCwd: () => string);
12
+ get active(): boolean;
13
+ /** Hook into readline's internal _ttyWrite to intercept keystrokes. */
14
+ private hookTtyWrite;
15
+ /** Check if the current line has an @ mention that should trigger the dropdown. */
16
+ private checkActivation;
17
+ /** Re-evaluate the dropdown after the user types/deletes a character. */
18
+ private updateFromLine;
19
+ /** List matching files/dirs and render the dropdown. */
20
+ private fetchAndRender;
21
+ /** Draw the dropdown below the current cursor position. */
22
+ private render;
23
+ /** Erase previously rendered dropdown lines. */
24
+ private clearRendered;
25
+ /** Move selection up or down. */
26
+ private navigate;
27
+ /** Insert the selected match into the readline buffer and close dropdown. */
28
+ private select;
29
+ /** Close the dropdown without selecting. */
30
+ private dismiss;
31
+ /** Clean up on REPL exit. */
32
+ destroy(): void;
33
+ }
34
+ //# sourceMappingURL=mention-dropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mention-dropdown.d.ts","sourceRoot":"","sources":["../../../src/repl/mention-dropdown.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAa1C;;;;GAIG;AACH,qBAAa,eAAe;IAUxB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,KAAK,CAMX;gBAGiB,EAAE,EAAE,QAAQ,CAAC,SAAS,EACtB,MAAM,EAAE,MAAM,MAAM;IAKvC,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,uEAAuE;IACvE,OAAO,CAAC,YAAY;IAsCpB,mFAAmF;IACnF,OAAO,CAAC,eAAe;IAkBvB,yEAAyE;IACzE,OAAO,CAAC,cAAc;IAkBtB,wDAAwD;IACxD,OAAO,CAAC,cAAc;IAuCtB,2DAA2D;IAC3D,OAAO,CAAC,MAAM;IAkCd,gDAAgD;IAChD,OAAO,CAAC,aAAa;IAiBrB,iCAAiC;IACjC,OAAO,CAAC,QAAQ;IAMhB,6EAA6E;IAC7E,OAAO,CAAC,MAAM;IAuCd,4CAA4C;IAC5C,OAAO,CAAC,OAAO;IAOf,6BAA6B;IAC7B,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,226 @@
1
+ import { readdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import * as readline from 'node:readline';
4
+ import chalk from 'chalk';
5
+ const MAX_VISIBLE = 8;
6
+ /**
7
+ * Interactive file-mention dropdown that hooks into readline.
8
+ * Activates when the user types `@`, shows matching files below the cursor,
9
+ * and allows arrow-key navigation + Tab/Enter to select.
10
+ */
11
+ export class MentionDropdown {
12
+ rl;
13
+ getCwd;
14
+ state = {
15
+ active: false,
16
+ matches: [],
17
+ selectedIndex: 0,
18
+ mentionStart: -1,
19
+ renderedLines: 0,
20
+ };
21
+ constructor(rl, getCwd) {
22
+ this.rl = rl;
23
+ this.getCwd = getCwd;
24
+ this.hookTtyWrite();
25
+ }
26
+ get active() {
27
+ return this.state.active;
28
+ }
29
+ /** Hook into readline's internal _ttyWrite to intercept keystrokes. */
30
+ hookTtyWrite() {
31
+ const rlAny = this.rl;
32
+ const origTtyWrite = rlAny._ttyWrite.bind(rlAny);
33
+ rlAny._ttyWrite = (s, key) => {
34
+ if (this.state.active) {
35
+ if (key.name === 'up') {
36
+ this.navigate(-1);
37
+ return;
38
+ }
39
+ if (key.name === 'down') {
40
+ this.navigate(1);
41
+ return;
42
+ }
43
+ if (key.name === 'tab' || key.name === 'return') {
44
+ this.select();
45
+ return;
46
+ }
47
+ if (key.name === 'escape') {
48
+ this.dismiss();
49
+ return;
50
+ }
51
+ // Pass other keys to readline, then update dropdown
52
+ origTtyWrite(s, key);
53
+ this.updateFromLine();
54
+ return;
55
+ }
56
+ // Not in dropdown mode — pass through normally
57
+ origTtyWrite(s, key);
58
+ // Check if we should activate (user just typed @ or is typing after @)
59
+ this.checkActivation();
60
+ };
61
+ }
62
+ /** Check if the current line has an @ mention that should trigger the dropdown. */
63
+ checkActivation() {
64
+ const rlAny = this.rl;
65
+ const line = rlAny.line;
66
+ const cursor = rlAny.cursor;
67
+ const beforeCursor = line.slice(0, cursor);
68
+ const atIndex = beforeCursor.lastIndexOf('@');
69
+ if (atIndex === -1)
70
+ return;
71
+ const partial = beforeCursor.slice(atIndex + 1);
72
+ // Don't activate if there's a space after @ (it's prose, not a file path)
73
+ if (partial.includes(' '))
74
+ return;
75
+ this.state.mentionStart = atIndex;
76
+ this.fetchAndRender(partial);
77
+ }
78
+ /** Re-evaluate the dropdown after the user types/deletes a character. */
79
+ updateFromLine() {
80
+ const rlAny = this.rl;
81
+ const line = rlAny.line;
82
+ const cursor = rlAny.cursor;
83
+ const beforeCursor = line.slice(0, cursor);
84
+ const atIndex = beforeCursor.lastIndexOf('@');
85
+ if (atIndex === -1 || beforeCursor.slice(atIndex + 1).includes(' ')) {
86
+ this.dismiss();
87
+ return;
88
+ }
89
+ const partial = beforeCursor.slice(atIndex + 1);
90
+ this.state.mentionStart = atIndex;
91
+ this.fetchAndRender(partial);
92
+ }
93
+ /** List matching files/dirs and render the dropdown. */
94
+ fetchAndRender(partial) {
95
+ const cwd = this.getCwd();
96
+ const lastSlash = partial.lastIndexOf('/');
97
+ const dirPart = lastSlash >= 0 ? partial.slice(0, lastSlash + 1) : '';
98
+ const prefix = lastSlash >= 0 ? partial.slice(lastSlash + 1) : partial;
99
+ try {
100
+ const dirPath = join(cwd, dirPart);
101
+ const entries = readdirSync(dirPath, { withFileTypes: true });
102
+ const matches = entries
103
+ .filter((e) => {
104
+ if (e.name.startsWith('.'))
105
+ return false;
106
+ if (e.name === 'node_modules')
107
+ return false;
108
+ return e.name.toLowerCase().startsWith(prefix.toLowerCase());
109
+ })
110
+ .map((e) => {
111
+ const name = e.isDirectory() ? `${e.name}/` : e.name;
112
+ return `${dirPart}${name}`;
113
+ })
114
+ .slice(0, MAX_VISIBLE);
115
+ if (matches.length === 0) {
116
+ this.dismiss();
117
+ return;
118
+ }
119
+ this.state.active = true;
120
+ this.state.matches = matches;
121
+ // Keep selection in bounds
122
+ if (this.state.selectedIndex >= matches.length) {
123
+ this.state.selectedIndex = 0;
124
+ }
125
+ this.render();
126
+ }
127
+ catch {
128
+ this.dismiss();
129
+ }
130
+ }
131
+ /** Draw the dropdown below the current cursor position. */
132
+ render() {
133
+ const { matches, selectedIndex } = this.state;
134
+ if (matches.length === 0)
135
+ return;
136
+ // Clear any previous dropdown
137
+ this.clearRendered();
138
+ // Save cursor position
139
+ process.stdout.write('\x1b7');
140
+ // Move to next line and render each entry
141
+ for (let i = 0; i < matches.length; i++) {
142
+ process.stdout.write('\n');
143
+ readline.clearLine(process.stdout, 0);
144
+ readline.cursorTo(process.stdout, 2);
145
+ const match = matches[i];
146
+ const isDir = match.endsWith('/');
147
+ if (i === selectedIndex) {
148
+ process.stdout.write(chalk.bgCyan.black(` ${match} `));
149
+ }
150
+ else if (isDir) {
151
+ process.stdout.write(chalk.blue(` ${match} `));
152
+ }
153
+ else {
154
+ process.stdout.write(chalk.dim(` ${match} `));
155
+ }
156
+ }
157
+ this.state.renderedLines = matches.length;
158
+ // Restore cursor position
159
+ process.stdout.write('\x1b8');
160
+ }
161
+ /** Erase previously rendered dropdown lines. */
162
+ clearRendered() {
163
+ if (this.state.renderedLines === 0)
164
+ return;
165
+ // Save cursor
166
+ process.stdout.write('\x1b7');
167
+ // Move down and clear each line
168
+ for (let i = 0; i < this.state.renderedLines; i++) {
169
+ process.stdout.write('\n');
170
+ readline.clearLine(process.stdout, 0);
171
+ }
172
+ // Restore cursor
173
+ process.stdout.write('\x1b8');
174
+ this.state.renderedLines = 0;
175
+ }
176
+ /** Move selection up or down. */
177
+ navigate(direction) {
178
+ const len = this.state.matches.length;
179
+ this.state.selectedIndex = (this.state.selectedIndex + direction + len) % len;
180
+ this.render();
181
+ }
182
+ /** Insert the selected match into the readline buffer and close dropdown. */
183
+ select() {
184
+ const { matches, selectedIndex, mentionStart } = this.state;
185
+ const selected = matches[selectedIndex];
186
+ this.clearRendered();
187
+ this.state.active = false;
188
+ this.state.matches = [];
189
+ this.state.selectedIndex = 0;
190
+ const rlAny = this.rl;
191
+ const line = rlAny.line;
192
+ const cursor = rlAny.cursor;
193
+ // Build new line: everything before @, then @selected, then everything after cursor
194
+ const before = line.slice(0, mentionStart + 1); // includes @
195
+ const after = line.slice(cursor);
196
+ const newLine = `${before}${selected}${after}`;
197
+ const newCursor = mentionStart + 1 + selected.length;
198
+ // Rewrite the readline buffer
199
+ rlAny.line = newLine;
200
+ rlAny.cursor = newCursor;
201
+ // Redraw the prompt line
202
+ readline.clearLine(process.stdout, 0);
203
+ readline.cursorTo(process.stdout, 0);
204
+ process.stdout.write(rlAny._prompt + newLine);
205
+ // Position cursor correctly if there's text after
206
+ if (after.length > 0) {
207
+ readline.moveCursor(process.stdout, -after.length, 0);
208
+ }
209
+ // If the selected item is a directory, immediately show its contents
210
+ if (selected.endsWith('/')) {
211
+ this.checkActivation();
212
+ }
213
+ }
214
+ /** Close the dropdown without selecting. */
215
+ dismiss() {
216
+ this.clearRendered();
217
+ this.state.active = false;
218
+ this.state.matches = [];
219
+ this.state.selectedIndex = 0;
220
+ }
221
+ /** Clean up on REPL exit. */
222
+ destroy() {
223
+ this.clearRendered();
224
+ }
225
+ }
226
+ //# sourceMappingURL=mention-dropdown.js.map