@codemieai/code 0.0.50 → 0.0.52

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 (73) hide show
  1. package/dist/agents/core/session/SessionStore.d.ts +4 -0
  2. package/dist/agents/core/session/SessionStore.d.ts.map +1 -1
  3. package/dist/agents/core/session/SessionStore.js +16 -4
  4. package/dist/agents/core/session/SessionStore.js.map +1 -1
  5. package/dist/agents/core/session/session-config.js.map +1 -1
  6. package/dist/agents/plugins/claude/claude-message-types.d.ts +8 -1
  7. package/dist/agents/plugins/claude/claude-message-types.d.ts.map +1 -1
  8. package/dist/agents/plugins/claude/claude.plugin.js +3 -3
  9. package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
  10. package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/references/best-practices.md +1 -1
  11. package/dist/agents/plugins/claude/plugin/skills/msgraph/SKILL.md +34 -0
  12. package/dist/agents/plugins/claude/plugin/skills/msgraph/scripts/msgraph.js +191 -19
  13. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +2 -2
  14. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
  15. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +1 -1
  16. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
  17. package/dist/agents/plugins/codemie-code.plugin.d.ts.map +1 -1
  18. package/dist/agents/plugins/codemie-code.plugin.js +45 -7
  19. package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
  20. package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts +34 -0
  21. package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts.map +1 -0
  22. package/dist/agents/plugins/opencode/opencode-dynamic-models.js +182 -0
  23. package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -0
  24. package/dist/agents/plugins/opencode/opencode-model-configs.d.ts +21 -2
  25. package/dist/agents/plugins/opencode/opencode-model-configs.d.ts.map +1 -1
  26. package/dist/agents/plugins/opencode/opencode-model-configs.js +105 -8
  27. package/dist/agents/plugins/opencode/opencode-model-configs.js.map +1 -1
  28. package/dist/agents/plugins/opencode/opencode.plugin.d.ts.map +1 -1
  29. package/dist/agents/plugins/opencode/opencode.plugin.js +36 -6
  30. package/dist/agents/plugins/opencode/opencode.plugin.js.map +1 -1
  31. package/dist/agents/plugins/opencode/opencode.sqlite-reader.d.ts +10 -5
  32. package/dist/agents/plugins/opencode/opencode.sqlite-reader.d.ts.map +1 -1
  33. package/dist/agents/plugins/opencode/opencode.sqlite-reader.js +49 -5
  34. package/dist/agents/plugins/opencode/opencode.sqlite-reader.js.map +1 -1
  35. package/dist/cli/commands/assistants/chat/claudeUploadsDetector.d.ts +23 -0
  36. package/dist/cli/commands/assistants/chat/claudeUploadsDetector.d.ts.map +1 -0
  37. package/dist/cli/commands/assistants/chat/claudeUploadsDetector.js +340 -0
  38. package/dist/cli/commands/assistants/chat/claudeUploadsDetector.js.map +1 -0
  39. package/dist/cli/commands/assistants/chat/index.d.ts.map +1 -1
  40. package/dist/cli/commands/assistants/chat/index.js +79 -11
  41. package/dist/cli/commands/assistants/chat/index.js.map +1 -1
  42. package/dist/cli/commands/assistants/chat/types.d.ts +1 -0
  43. package/dist/cli/commands/assistants/chat/types.d.ts.map +1 -1
  44. package/dist/cli/commands/assistants/constants.d.ts +5 -0
  45. package/dist/cli/commands/assistants/constants.d.ts.map +1 -1
  46. package/dist/cli/commands/assistants/constants.js +6 -1
  47. package/dist/cli/commands/assistants/constants.js.map +1 -1
  48. package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.d.ts.map +1 -1
  49. package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.js +23 -13
  50. package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.js.map +1 -1
  51. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.d.ts.map +1 -1
  52. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.js +29 -4
  53. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.js.map +1 -1
  54. package/dist/cli/commands/assistants/setup/index.js +107 -3
  55. package/dist/cli/commands/assistants/setup/index.js.map +1 -1
  56. package/dist/cli/commands/assistants/setup/selection/interactive-prompt.d.ts.map +1 -1
  57. package/dist/cli/commands/assistants/setup/selection/interactive-prompt.js +6 -1
  58. package/dist/cli/commands/assistants/setup/selection/interactive-prompt.js.map +1 -1
  59. package/dist/cli/commands/assistants/setup/summary/index.d.ts +1 -1
  60. package/dist/cli/commands/assistants/setup/summary/index.d.ts.map +1 -1
  61. package/dist/cli/commands/assistants/setup/summary/index.js +4 -1
  62. package/dist/cli/commands/assistants/setup/summary/index.js.map +1 -1
  63. package/dist/cli/commands/hook.d.ts.map +1 -1
  64. package/dist/cli/commands/hook.js.map +1 -1
  65. package/dist/providers/plugins/sso/sso.http-client.d.ts +40 -0
  66. package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
  67. package/dist/providers/plugins/sso/sso.http-client.js +21 -0
  68. package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
  69. package/dist/utils/config.d.ts +7 -0
  70. package/dist/utils/config.d.ts.map +1 -1
  71. package/dist/utils/config.js +36 -0
  72. package/dist/utils/config.js.map +1 -1
  73. package/package.json +3 -1
@@ -13,6 +13,10 @@ export declare class SessionStore {
13
13
  saveSession(session: Session): Promise<void>;
14
14
  /**
15
15
  * Load session from disk
16
+ *
17
+ * Falls back to the 'completed_' prefixed filename when the primary path is
18
+ * not found. This handles the race where handleSessionEnd renames
19
+ * {sessionId}.json → completed_{sessionId}.json before the final SSO sync runs.
16
20
  */
17
21
  loadSession(sessionId: string): Promise<Session | null>;
18
22
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"SessionStore.d.ts","sourceRoot":"","sources":["../../../../src/agents/core/session/SessionStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAK1C,qBAAa,YAAY;IACvB;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlD;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAsB7D;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvG;;;;;OAKG;IACG,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7D;;;;;;OAMG;IACG,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAwBnE"}
1
+ {"version":3,"file":"SessionStore.d.ts","sourceRoot":"","sources":["../../../../src/agents/core/session/SessionStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAK1C,qBAAa,YAAY;IACvB;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlD;;;;;;OAMG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IA6B7D;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvG;;;;;OAKG;IACG,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7D;;;;;;OAMG;IACG,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAwBnE"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { readFile, writeFile, mkdir } from 'fs/promises';
8
8
  import { existsSync } from 'fs';
9
- import { dirname } from 'path';
9
+ import { dirname, basename, join } from 'path';
10
10
  import { getSessionPath } from './session-config.js';
11
11
  import { logger } from '../../../utils/logger.js';
12
12
  import { createErrorContext, formatErrorForLog } from '../../../utils/errors.js';
@@ -35,12 +35,24 @@ export class SessionStore {
35
35
  }
36
36
  /**
37
37
  * Load session from disk
38
+ *
39
+ * Falls back to the 'completed_' prefixed filename when the primary path is
40
+ * not found. This handles the race where handleSessionEnd renames
41
+ * {sessionId}.json → completed_{sessionId}.json before the final SSO sync runs.
38
42
  */
39
43
  async loadSession(sessionId) {
40
- const sessionPath = getSessionPath(sessionId);
44
+ let sessionPath = getSessionPath(sessionId);
41
45
  if (!existsSync(sessionPath)) {
42
- logger.debug(`[SessionStore] Session file not found: ${sessionId}`);
43
- return null;
46
+ // Fallback: session may have been renamed with 'completed_' prefix by handleSessionEnd
47
+ const completedPath = join(dirname(sessionPath), `completed_${basename(sessionPath)}`);
48
+ if (existsSync(completedPath)) {
49
+ sessionPath = completedPath;
50
+ logger.debug(`[SessionStore] Using completed session file: ${sessionId}`);
51
+ }
52
+ else {
53
+ logger.debug(`[SessionStore] Session file not found: ${sessionId}`);
54
+ return null;
55
+ }
44
56
  }
45
57
  try {
46
58
  const content = await readFile(sessionPath, 'utf-8');
@@ -1 +1 @@
1
- {"version":3,"file":"SessionStore.js","sourceRoot":"","sources":["../../../../src/agents/core/session/SessionStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionStore.js","sourceRoot":"","sources":["../../../../src/agents/core/session/SessionStore.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-config.js","sourceRoot":"","sources":["../../../../src/agents/core/session/session-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C;;;OAGG;IACH,OAAO,EAAE,CAAC,QAAgB,EAAE,EAAE;QAC5B,2CAA2C;QAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,GAAG,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,QAAQ,KAAK,YAAY,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,KAAK,EAAE;QACL,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,oCAAoC;KAChG;IAED;;;;OAIG;IACH,sBAAsB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;CACrD,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAiB;IACrD,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,GAAG,SAAS,gBAAgB,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,SAAiB;IAC1D,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,GAAG,SAAS,qBAAqB,CAAC,CAAC;AAC/E,CAAC"}
1
+ {"version":3,"file":"session-config.js","sourceRoot":"","sources":["../../../../src/agents/core/session/session-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C;;;OAGG;IACH,OAAO,EAAE,CAAC,QAAgB,EAAE,EAAE;QAC5B,2CAA2C;QAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,GAAG,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,QAAQ,KAAK,YAAY,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,KAAK,EAAE;QACL,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,oCAAoC;KAChG;IAED;;;;OAIG;IACH,sBAAsB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;CACrD,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAiB;IACrD,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,GAAG,SAAS,gBAAgB,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,SAAiB;IAC1D,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,GAAG,SAAS,qBAAqB,CAAC,CAAC;AAC/E,CAAC"}
@@ -15,6 +15,7 @@ export interface ClaudeMessage {
15
15
  sessionId: string;
16
16
  timestamp: string;
17
17
  cwd?: string;
18
+ isMeta?: boolean;
18
19
  message?: {
19
20
  id?: string;
20
21
  role: 'user' | 'assistant';
@@ -53,7 +54,7 @@ export interface ClaudeMessage {
53
54
  * Content item in Claude message
54
55
  */
55
56
  export interface ContentItem {
56
- type: 'text' | 'tool_use' | 'tool_result' | 'thinking';
57
+ type: 'text' | 'tool_use' | 'tool_result' | 'thinking' | 'image' | 'document';
57
58
  text?: string;
58
59
  thinking?: string;
59
60
  id?: string;
@@ -62,6 +63,12 @@ export interface ContentItem {
62
63
  tool_use_id?: string;
63
64
  content?: string;
64
65
  isError?: boolean;
66
+ source?: {
67
+ type: 'base64' | 'url';
68
+ media_type?: string;
69
+ data?: string;
70
+ url?: string;
71
+ };
65
72
  }
66
73
  /**
67
74
  * Tool use block in Claude message
@@ -1 +1 @@
1
- {"version":3,"file":"claude-message-types.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/claude/claude-message-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACR,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;QAChC,KAAK,CAAC,EAAE;YACN,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,2BAA2B,CAAC,EAAE,MAAM,CAAC;YACrC,uBAAuB,CAAC,EAAE,MAAM,CAAC;SAClC,CAAC;QACF,MAAM,CAAC,EAAE;YACP,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,KAAK,CAAC,EAAE;YACN,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE;YACN,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IACF,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC"}
1
+ {"version":3,"file":"claude-message-types.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/claude/claude-message-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE;QACR,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;QAChC,KAAK,CAAC,EAAE;YACN,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,2BAA2B,CAAC,EAAE,MAAM,CAAC;YACrC,uBAAuB,CAAC,EAAE,MAAM,CAAC;SAClC,CAAC;QACF,MAAM,CAAC,EAAE;YACP,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,KAAK,CAAC,EAAE;YACN,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE;YACN,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IACF,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC"}
@@ -18,16 +18,16 @@ let statuslineManagedThisSession = false;
18
18
  *
19
19
  * **UPDATE THIS WHEN BUMPING CLAUDE VERSION**
20
20
  */
21
- const CLAUDE_SUPPORTED_VERSION = '2.1.63';
21
+ const CLAUDE_SUPPORTED_VERSION = '2.1.78';
22
22
  /**
23
23
  * Minimum supported Claude Code version
24
24
  * Versions below this are known to be incompatible and will be blocked from starting
25
25
  * Rule: always 10 patch versions below CLAUDE_SUPPORTED_VERSION
26
- * e.g. supported = 2.1.63 → minimum = 2.1.53
26
+ * e.g. supported = 2.1.78 → minimum = 2.1.60
27
27
  *
28
28
  * **UPDATE THIS WHEN BUMPING CLAUDE VERSION**
29
29
  */
30
- const CLAUDE_MINIMUM_SUPPORTED_VERSION = '2.1.53';
30
+ const CLAUDE_MINIMUM_SUPPORTED_VERSION = '2.1.60';
31
31
  /**
32
32
  * Claude Code installer URLs
33
33
  * Official Anthropic installer scripts for native installation
@@ -5,5 +5,5 @@
5
5
  "name": "AI/Run CodeMie",
6
6
  "email": "support@codemieai.com"
7
7
  },
8
- "version": "1.0.16"
8
+ "version": "1.0.18"
9
9
  }
@@ -452,7 +452,7 @@ curl https://api.example.com/log -d "$CLAUDE_TOOL_INPUT"
452
452
 
453
453
  // ❌ Bad
454
454
  "env": {
455
- "API_KEY": "sk-prod-abc123",
455
+ "API_KEY": "YOUR_API_KEY_HERE",
456
456
  "DATABASE_URL": "postgres://user:pass@prod-host/db"
457
457
  }
458
458
  ```
@@ -196,6 +196,31 @@ node ${CLAUDE_PLUGIN_ROOT}/skills/msgraph/scripts/msgraph.js onenote --create "M
196
196
  node ${CLAUDE_PLUGIN_ROOT}/skills/msgraph/scripts/msgraph.js onenote --notebooks --json
197
197
  ```
198
198
 
199
+ ### Transcripts
200
+
201
+ ```bash
202
+ # List online meetings in a date range (defaults to last 7 days)
203
+ node ${CLAUDE_PLUGIN_ROOT}/skills/msgraph/scripts/msgraph.js transcripts --start 2026-03-06
204
+
205
+ # List online meetings in a specific date range
206
+ node ${CLAUDE_PLUGIN_ROOT}/skills/msgraph/scripts/msgraph.js transcripts --start 2026-03-06 --end 2026-03-07
207
+
208
+ # Find meetings by subject keyword and show their transcripts
209
+ node ${CLAUDE_PLUGIN_ROOT}/skills/msgraph/scripts/msgraph.js transcripts --start 2026-03-06 --subject "standup"
210
+
211
+ # List transcripts for a known meeting ID
212
+ node ${CLAUDE_PLUGIN_ROOT}/skills/msgraph/scripts/msgraph.js transcripts --meeting MEETING_ID
213
+
214
+ # Read transcript content (plain text, printed to stdout)
215
+ node ${CLAUDE_PLUGIN_ROOT}/skills/msgraph/scripts/msgraph.js transcripts --meeting MEETING_ID --transcript TRANSCRIPT_ID
216
+
217
+ # Save transcript to a file
218
+ node ${CLAUDE_PLUGIN_ROOT}/skills/msgraph/scripts/msgraph.js transcripts --meeting MEETING_ID --transcript TRANSCRIPT_ID --output meeting.txt
219
+
220
+ # Download as VTT (timestamped captions format)
221
+ node ${CLAUDE_PLUGIN_ROOT}/skills/msgraph/scripts/msgraph.js transcripts --meeting MEETING_ID --transcript TRANSCRIPT_ID --vtt --output meeting.vtt
222
+ ```
223
+
199
224
  ### People & Contacts
200
225
 
201
226
  ```bash
@@ -238,6 +263,15 @@ node ${CLAUDE_PLUGIN_ROOT}/skills/msgraph/scripts/msgraph.js people --contacts
238
263
  3. Run `onenote --pages SECTION_ID` → list pages, or use `onenote --search "keyword"` to search directly
239
264
  4. Run `onenote --read PAGE_ID` → display page content
240
265
 
266
+ ### "Show me the transcript from yesterday's standup"
267
+ 1. Run `transcripts --start YYYY-MM-DD --subject "standup"` → finds the meeting and lists transcript IDs
268
+ 2. Run `transcripts --meeting MEETING_ID --transcript TRANSCRIPT_ID` → reads full transcript text
269
+
270
+ ### "Get all meeting transcripts for today"
271
+ 1. Run `transcripts --start YYYY-MM-DD` → lists all online meetings for the day
272
+ 2. Run `transcripts --meeting MEETING_ID` → lists available transcripts per meeting
273
+ 3. Run `transcripts --meeting MEETING_ID --transcript TRANSCRIPT_ID --output meeting.txt` → saves each transcript
274
+
241
275
  ### "Who's my manager?" / "Who reports to me?"
242
276
  - Run `org --manager` or `org --reports`
243
277
 
@@ -17,7 +17,7 @@ const path = require('node:path');
17
17
  const os = require('node:os');
18
18
 
19
19
  // ── Config ────────────────────────────────────────────────────────────────────
20
- const CLIENT_ID = '14d82eec-204b-4c2f-b7e8-296a70dab67e';
20
+ const CLIENT_ID = '3d7688c6-f449-4d04-8b0d-57d94818e922'; // CodeMie APP
21
21
  const TOKEN_URL = 'https://login.microsoftonline.com/common/oauth2/v2.0/token';
22
22
  const DEVICE_URL = 'https://login.microsoftonline.com/common/oauth2/v2.0/devicecode';
23
23
  const SCOPES = [
@@ -25,9 +25,8 @@ const SCOPES = [
25
25
  'Calendars.Read', 'Calendars.ReadWrite',
26
26
  'Files.Read', 'Files.ReadWrite',
27
27
  'Sites.Read.All', 'Chat.Read', 'Chat.ReadWrite',
28
- 'People.Read', 'Contacts.Read',
29
- 'Notes.Read', 'Notes.ReadWrite',
30
- 'offline_access',
28
+ 'OnlineMeetingTranscript.Read.All', 'OnlineMeetings.Read',
29
+ 'People.Read', 'Contacts.Read', 'offline_access',
31
30
  ].join(' ');
32
31
  const CACHE_FILE = path.join(os.homedir(), '.ms_graph_token_cache.json');
33
32
  const GRAPH_BASE = 'https://graph.microsoft.com/v1.0';
@@ -258,13 +257,13 @@ function fmtSize(n) {
258
257
 
259
258
  function stripHtml(s) {
260
259
  return (s || '')
261
- .replace(/<[^>]*>/g, '')
262
- .replace(/&nbsp;/g, ' ')
263
- .replace(/&amp;/g, '&')
264
- .replace(/&lt;/g, '<')
265
- .replace(/&gt;/g, '>')
266
- .replace(/\r?\n\s*\r?\n/g, '\n')
267
- .trim();
260
+ .replace(/<[^>]*>/g, '')
261
+ .replace(/&nbsp;/g, ' ')
262
+ .replace(/&amp;/g, '&')
263
+ .replace(/&lt;/g, '<')
264
+ .replace(/&gt;/g, '>')
265
+ .replace(/\r?\n\s*\r?\n/g, '\n')
266
+ .trim();
268
267
  }
269
268
 
270
269
  function pad(str, len) {
@@ -315,7 +314,7 @@ async function cmdMe(args) {
315
314
  const me = await graphGet('/me', token);
316
315
  if (args.json) {
317
316
  const fields = ['displayName','userPrincipalName','id','mail','jobTitle',
318
- 'department','officeLocation','businessPhones','mobilePhone'];
317
+ 'department','officeLocation','businessPhones','mobilePhone'];
319
318
  const out = {};
320
319
  for (const k of fields) if (me[k] != null) out[k] = me[k];
321
320
  console.log(JSON.stringify(out, null, 2));
@@ -401,6 +400,12 @@ async function cmdCalendar(args) {
401
400
  };
402
401
  if (args.location) payload.location = { displayName: args.location };
403
402
  if (args.body) payload.body = { contentType: 'Text', content: args.body };
403
+ if (args.attendees) {
404
+ payload.attendees = args.attendees.split(',').map(email => ({
405
+ emailAddress: { address: email.trim() },
406
+ type: 'required',
407
+ }));
408
+ }
404
409
  const event = await graphPost('/me/events', token, payload);
405
410
  console.log(`Event created: ${event.subject}`);
406
411
  console.log(`ID: ${event.id}`);
@@ -478,8 +483,8 @@ async function cmdSharepoint(args) {
478
483
  if (args.site) {
479
484
  const p = args.path || 'root';
480
485
  const ep = p === 'root'
481
- ? `/sites/${args.site}/drive/root/children`
482
- : `/sites/${args.site}/drive/root:/${p}:/children`;
486
+ ? `/sites/${args.site}/drive/root/children`
487
+ : `/sites/${args.site}/drive/root:/${p}:/children`;
483
488
  const data = await graphGet(ep, token, { $top: limit, $select: 'id,name,size,lastModifiedDateTime,file,folder' });
484
489
  const items = data.value || [];
485
490
  if (args.json) { console.log(JSON.stringify(items, null, 2)); return; }
@@ -520,9 +525,68 @@ async function cmdTeams(args) {
520
525
  return;
521
526
  }
522
527
 
528
+ // ── NEW: resolve a person's AAD user ID from their email/UPN ──────────────
529
+ // Usage: teams --lookup-user someone@company.com
530
+ // Shows AAD ID, display name, title, and the expected oneOnOne chat ID pattern.
531
+ // Note: oneOnOne chat IDs follow the pattern 19:ID1_ID2@unq.gbl.spaces
532
+ // where the IDs appear in the order Teams assigned them (not guaranteed sort order).
533
+ // Always verify by listing --chats and matching the target user's ID fragment.
534
+ if (args.lookupUser) {
535
+ const user = await graphGet(`/users/${args.lookupUser}`, token, {
536
+ $select: 'id,displayName,userPrincipalName,jobTitle,department',
537
+ });
538
+ const me = await graphGet('/me', token, { $select: 'id' });
539
+ console.log(`Display Name : ${user.displayName}`);
540
+ console.log(`Email : ${user.userPrincipalName}`);
541
+ console.log(`AAD User ID : ${user.id}`);
542
+ console.log(`Job Title : ${user.jobTitle || 'N/A'}`);
543
+ console.log(`Department : ${user.department || 'N/A'}`);
544
+ console.log(`\nYour AAD ID : ${me.id}`);
545
+ console.log(`\nTo find the direct chat, run:`);
546
+ console.log(` teams --chats (look for a oneOnOne chat containing "${user.id.slice(0, 8)}")`);
547
+ console.log(`\nThen send with:`);
548
+ console.log(` teams --dm ${args.lookupUser} --send "your message"`);
549
+ return;
550
+ }
551
+
552
+ // ── NEW: send a DM directly by email address ──────────────────────────────
553
+ // Usage: teams --dm someone@company.com --send "hello"
554
+ // Resolves the user's AAD ID, finds their oneOnOne chat from the chat list,
555
+ // and sends the message. More reliable than guessing the chat ID.
556
+ if (args.dm && args.send) {
557
+ // 1. Resolve target user's AAD ID
558
+ const user = await graphGet(`/users/${args.dm}`, token, {
559
+ $select: 'id,displayName',
560
+ });
561
+
562
+ // 2. List chats and find the oneOnOne chat containing the target user's ID
563
+ const chatsData = await graphGet('/me/chats', token, {
564
+ $top: 50,
565
+ $select: 'id,topic,chatType',
566
+ });
567
+ const chats = chatsData.value || [];
568
+ const directChat = chats.find(c =>
569
+ c.chatType === 'oneOnOne' && c.id.includes(user.id)
570
+ );
571
+
572
+ if (!directChat) {
573
+ console.error(`No existing direct chat found with ${user.displayName} (${args.dm}).`);
574
+ console.error(`They may need to message you first, or check --chats list manually.`);
575
+ process.exit(1);
576
+ }
577
+
578
+ const res = await graphPost(`/me/chats/${directChat.id}/messages`, token, {
579
+ body: { content: args.send },
580
+ });
581
+ console.log(`DM sent to ${user.displayName}. Message ID: ${res.id}`);
582
+ return;
583
+ }
584
+
585
+ // ── FIXED: $select is NOT supported by the Teams chat messages endpoint ───
586
+ // The Graph API returns HTTP 400 if $select is used here. Pass $top only.
523
587
  if (args.messages) {
524
588
  const data = await graphGet(`/me/chats/${args.messages}/messages`, token, {
525
- $top: limit, $select: 'id,from,body,createdDateTime',
589
+ $top: limit,
526
590
  });
527
591
  const msgs = data.value || [];
528
592
  if (args.json) { console.log(JSON.stringify(msgs, null, 2)); return; }
@@ -550,7 +614,112 @@ async function cmdTeams(args) {
550
614
  return;
551
615
  }
552
616
 
553
- console.log('Teams: --chats | --messages CHAT_ID | --send MSG --chat-id ID | --teams-list');
617
+ console.log('Teams: --chats | --messages CHAT_ID | --send MSG --chat-id ID');
618
+ console.log(' --lookup-user EMAIL | --dm EMAIL --send MSG | --teams-list');
619
+ }
620
+
621
+ async function cmdTranscripts(args) {
622
+ const token = await getValidToken();
623
+
624
+ // Search calendar events by date + optional subject keyword, then resolve meeting IDs + transcripts
625
+ // Usage: transcripts --start 2026-03-06 [--end 2026-03-06] [--subject "keyword"]
626
+ if (args.list || (!args.meeting && !args.download)) {
627
+ const startDate = args.start || new Date(Date.now() - 7 * 86400 * 1000).toISOString().slice(0, 10);
628
+ const endDate = args.end || startDate;
629
+ const startDT = startDate + 'T00:00:00Z';
630
+ const endDT = endDate + 'T23:59:59Z';
631
+
632
+ const data = await graphGet('/me/calendarView', token, {
633
+ startDateTime: startDT,
634
+ endDateTime: endDT,
635
+ $select: 'id,subject,start,end,isOnlineMeeting,onlineMeeting',
636
+ $top: 50,
637
+ $orderby: 'start/dateTime',
638
+ });
639
+ const events = (data.value || []).filter(e => e.isOnlineMeeting && e.onlineMeeting?.joinUrl);
640
+ if (args.subject) {
641
+ const kw = args.subject.toLowerCase();
642
+ const filtered = events.filter(e => (e.subject || '').toLowerCase().includes(kw));
643
+ if (!filtered.length) {
644
+ console.log(`No online meetings matching "${args.subject}" on ${startDate}.`);
645
+ return;
646
+ }
647
+ for (const e of filtered) {
648
+ console.log(`\nMeeting: ${e.subject}`);
649
+ console.log(`Start : ${fmtDt(e.start?.dateTime)}`);
650
+ const joinUrl = e.onlineMeeting.joinUrl;
651
+ // Resolve to online meeting object via joinWebUrl
652
+ let meetingId = null;
653
+ try {
654
+ const om = await graphGet('/me/onlineMeetings', token, {
655
+ $filter: `joinWebUrl eq '${joinUrl}'`,
656
+ });
657
+ const meetings = om.value || [];
658
+ if (meetings.length) {
659
+ meetingId = meetings[0].id;
660
+ console.log(`Meeting ID: ${meetingId}`);
661
+ }
662
+ } catch (e2) {
663
+ console.log(`Could not resolve meeting ID: ${e2.message}`);
664
+ }
665
+ if (meetingId) {
666
+ try {
667
+ const td = await graphGet(`/me/onlineMeetings/${meetingId}/transcripts`, token);
668
+ const transcripts = td.value || [];
669
+ if (!transcripts.length) {
670
+ console.log('No transcripts available for this meeting.');
671
+ } else {
672
+ for (const t of transcripts)
673
+ console.log(`Transcript ID: ${t.id} Created: ${fmtDt(t.createdDateTime)}`);
674
+ }
675
+ } catch (e3) {
676
+ console.log(`Transcripts error: ${e3.message}`);
677
+ }
678
+ }
679
+ }
680
+ return;
681
+ }
682
+
683
+ if (!events.length) { console.log('No online meetings found in range.'); return; }
684
+ console.log(`\nOnline meetings (${startDate} – ${endDate}):`);
685
+ console.log('─'.repeat(80));
686
+ for (const e of events)
687
+ console.log(` ${fmtDt(e.start?.dateTime).padEnd(20)} ${e.subject || '(no title)'}`);
688
+ return;
689
+ }
690
+
691
+ // List transcripts for a specific meeting ID
692
+ if (args.meeting && !args.transcript) {
693
+ const data = await graphGet(`/me/onlineMeetings/${args.meeting}/transcripts`, token);
694
+ const transcripts = data.value || [];
695
+ if (!transcripts.length) { console.log('No transcripts found for this meeting.'); return; }
696
+ console.log(`\nTranscripts for meeting ${args.meeting.slice(0, 30)}...:`);
697
+ console.log('─'.repeat(60));
698
+ for (const t of transcripts)
699
+ console.log(`ID: ${t.id} Created: ${fmtDt(t.createdDateTime)}`);
700
+ return;
701
+ }
702
+
703
+ // Download transcript content
704
+ if (args.meeting && args.transcript) {
705
+ const contentType = args.vtt ? 'text/vtt' : 'text/plain';
706
+ const url = `${GRAPH_BASE}/me/onlineMeetings/${args.meeting}/transcripts/${args.transcript}/content`;
707
+ const res = await httpsRequest(url, {
708
+ headers: { Authorization: `Bearer ${token}`, Accept: contentType },
709
+ });
710
+ const text = res.body;
711
+ if (args.output) {
712
+ fs.writeFileSync(args.output, text, 'utf8');
713
+ console.log(`Transcript saved to ${args.output}`);
714
+ } else {
715
+ console.log(text);
716
+ }
717
+ return;
718
+ }
719
+
720
+ console.log('Usage: transcripts --start YYYY-MM-DD [--end YYYY-MM-DD] [--subject "keyword"]');
721
+ console.log(' transcripts --meeting MEETING_ID');
722
+ console.log(' transcripts --meeting MEETING_ID --transcript TRANSCRIPT_ID [--output FILE] [--vtt]');
554
723
  }
555
724
 
556
725
  async function cmdOnedrive(args) {
@@ -767,9 +936,8 @@ async function cmdOnenote(args) {
767
936
 
768
937
  // ── CLI Parser ────────────────────────────────────────────────────────────────
769
938
  function parseArgs(argv) {
770
- // Flags that take no value (boolean)
771
939
  const BOOL = new Set(['json','unread','sites','chats','teamsList','contacts',
772
- 'manager','reports','availability','notebooks','help']);
940
+ 'manager','reports','availability','notebooks','list','vtt','help']);
773
941
  const args = { _: [] };
774
942
  let i = 0;
775
943
  while (i < argv.length) {
@@ -808,7 +976,8 @@ Data:
808
976
  [--create TITLE --start DT --end DT [--location L] [--timezone TZ]]
809
977
  [--availability --start DT --end DT]
810
978
  sharepoint [--sites] [--site ID [--path P]] [--download ID [--output FILE]] [--json]
811
- teams [--chats] [--messages CHAT_ID] [--send MSG --chat-id ID] [--teams-list] [--json]
979
+ teams [--chats] [--messages CHAT_ID] [--send MSG --chat-id ID] [--teams-list]
980
+ [--lookup-user EMAIL] [--dm EMAIL --send MSG] [--json]
812
981
  onedrive [--path P] [--upload FILE [--dest PATH]] [--download ID [--output FILE]]
813
982
  [--info ID] [--json]
814
983
  people [--contacts] [--search NAME] [--limit N] [--json]
@@ -825,6 +994,8 @@ Examples:
825
994
  node ${name} emails --send user@corp.com --subject "Hi" --body "Hello"
826
995
  node ${name} calendar --create "Standup" --start 2024-03-15T09:00 --end 2024-03-15T09:30
827
996
  node ${name} teams --chats
997
+ node ${name} teams --lookup-user alice@corp.com
998
+ node ${name} teams --dm alice@corp.com --send "Hello from the avatar!"
828
999
  node ${name} onedrive --upload report.pdf --dest "Documents/report.pdf"
829
1000
  node ${name} onenote --notebooks
830
1001
  node ${name} onenote --sections NOTEBOOK_ID
@@ -856,6 +1027,7 @@ async function main() {
856
1027
  people: () => cmdPeople(args),
857
1028
  org: () => cmdOrg(args),
858
1029
  onenote: () => cmdOnenote(args),
1030
+ transcripts: () => cmdTranscripts(args),
859
1031
  help: () => { printHelp(); process.exit(0); },
860
1032
  };
861
1033
 
@@ -11,8 +11,8 @@
11
11
  *
12
12
  * Note: API sync is handled separately by SSO provider's ConversationSyncProcessor
13
13
  */
14
- import type { SessionProcessor, ProcessingContext, ProcessingResult } from '../../../../core/session/BaseProcessor.js';
15
- import type { ParsedSession } from '../../../../core/session/BaseSessionAdapter.js';
14
+ import type { SessionProcessor, ProcessingContext, ProcessingResult } from '../../../../../agents/core/session/BaseProcessor.js';
15
+ import type { ParsedSession } from '../../../../../agents/core/session/BaseSessionAdapter.js';
16
16
  export declare class ConversationsProcessor implements SessionProcessor {
17
17
  readonly name = "conversations";
18
18
  readonly priority = 2;
@@ -1 +1 @@
1
- {"version":3,"file":"claude.conversations-processor.d.ts","sourceRoot":"","sources":["../../../../../../src/agents/plugins/claude/session/processors/claude.conversations-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AACvH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAKpF,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,QAAQ,KAAK;IAEtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAIxC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAa5F;;;;OAIG;YACW,eAAe;YAiGf,iBAAiB;YA0LjB,aAAa;IA6M3B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,UAAU;IA0BlB,OAAO,CAAC,mBAAmB;IAuC3B,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,oBAAoB;YA0Bd,sBAAsB;YAqCtB,cAAc;IA4I5B,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,iBAAiB;CAuB1B"}
1
+ {"version":3,"file":"claude.conversations-processor.d.ts","sourceRoot":"","sources":["../../../../../../src/agents/plugins/claude/session/processors/claude.conversations-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AACpH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAKjF,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,QAAQ,KAAK;IAEtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAIxC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAa5F;;;;OAIG;YACW,eAAe;YAiGf,iBAAiB;YA0LjB,aAAa;IA8M3B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,UAAU;IA0BlB,OAAO,CAAC,mBAAmB;IAuC3B,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,oBAAoB;YA0Bd,sBAAsB;YAqCtB,cAAc;IA4I5B,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,iBAAiB;CAuB1B"}
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import { CONVERSATION_SYNC_STATUS } from '../../../../../providers/plugins/sso/session/processors/conversations/types.js';
15
15
  import { logger } from '../../../../../utils/logger.js';
16
- import { getSessionConversationPath } from '../../../../core/session/session-config.js';
16
+ import { getSessionConversationPath } from '../../../../../agents/core/session/session-config.js';
17
17
  export class ConversationsProcessor {
18
18
  name = 'conversations';
19
19
  priority = 2; // Run after metrics (priority 1)