@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.
- package/dist/agents/core/session/SessionStore.d.ts +4 -0
- package/dist/agents/core/session/SessionStore.d.ts.map +1 -1
- package/dist/agents/core/session/SessionStore.js +16 -4
- package/dist/agents/core/session/SessionStore.js.map +1 -1
- package/dist/agents/core/session/session-config.js.map +1 -1
- package/dist/agents/plugins/claude/claude-message-types.d.ts +8 -1
- package/dist/agents/plugins/claude/claude-message-types.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.js +3 -3
- package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/references/best-practices.md +1 -1
- package/dist/agents/plugins/claude/plugin/skills/msgraph/SKILL.md +34 -0
- package/dist/agents/plugins/claude/plugin/skills/msgraph/scripts/msgraph.js +191 -19
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +2 -2
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
- package/dist/agents/plugins/codemie-code.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/codemie-code.plugin.js +45 -7
- package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts +34 -0
- package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts.map +1 -0
- package/dist/agents/plugins/opencode/opencode-dynamic-models.js +182 -0
- package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -0
- package/dist/agents/plugins/opencode/opencode-model-configs.d.ts +21 -2
- package/dist/agents/plugins/opencode/opencode-model-configs.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode-model-configs.js +105 -8
- package/dist/agents/plugins/opencode/opencode-model-configs.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode.plugin.js +36 -6
- package/dist/agents/plugins/opencode/opencode.plugin.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode.sqlite-reader.d.ts +10 -5
- package/dist/agents/plugins/opencode/opencode.sqlite-reader.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode.sqlite-reader.js +49 -5
- package/dist/agents/plugins/opencode/opencode.sqlite-reader.js.map +1 -1
- package/dist/cli/commands/assistants/chat/claudeUploadsDetector.d.ts +23 -0
- package/dist/cli/commands/assistants/chat/claudeUploadsDetector.d.ts.map +1 -0
- package/dist/cli/commands/assistants/chat/claudeUploadsDetector.js +340 -0
- package/dist/cli/commands/assistants/chat/claudeUploadsDetector.js.map +1 -0
- package/dist/cli/commands/assistants/chat/index.d.ts.map +1 -1
- package/dist/cli/commands/assistants/chat/index.js +79 -11
- package/dist/cli/commands/assistants/chat/index.js.map +1 -1
- package/dist/cli/commands/assistants/chat/types.d.ts +1 -0
- package/dist/cli/commands/assistants/chat/types.d.ts.map +1 -1
- package/dist/cli/commands/assistants/constants.d.ts +5 -0
- package/dist/cli/commands/assistants/constants.d.ts.map +1 -1
- package/dist/cli/commands/assistants/constants.js +6 -1
- package/dist/cli/commands/assistants/constants.js.map +1 -1
- package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.js +23 -13
- package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.js.map +1 -1
- package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.js +29 -4
- package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.js.map +1 -1
- package/dist/cli/commands/assistants/setup/index.js +107 -3
- package/dist/cli/commands/assistants/setup/index.js.map +1 -1
- package/dist/cli/commands/assistants/setup/selection/interactive-prompt.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/selection/interactive-prompt.js +6 -1
- package/dist/cli/commands/assistants/setup/selection/interactive-prompt.js.map +1 -1
- package/dist/cli/commands/assistants/setup/summary/index.d.ts +1 -1
- package/dist/cli/commands/assistants/setup/summary/index.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/summary/index.js +4 -1
- package/dist/cli/commands/assistants/setup/summary/index.js.map +1 -1
- package/dist/cli/commands/hook.d.ts.map +1 -1
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/providers/plugins/sso/sso.http-client.d.ts +40 -0
- package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.http-client.js +21 -0
- package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
- package/dist/utils/config.d.ts +7 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +36 -0
- package/dist/utils/config.js.map +1 -1
- 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
|
|
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
|
-
|
|
44
|
+
let sessionPath = getSessionPath(sessionId);
|
|
41
45
|
if (!existsSync(sessionPath)) {
|
|
42
|
-
|
|
43
|
-
|
|
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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/
|
|
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,
|
|
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;
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
@@ -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 = '
|
|
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
|
-
'
|
|
29
|
-
'
|
|
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
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
260
|
+
.replace(/<[^>]*>/g, '')
|
|
261
|
+
.replace(/ /g, ' ')
|
|
262
|
+
.replace(/&/g, '&')
|
|
263
|
+
.replace(/</g, '<')
|
|
264
|
+
.replace(/>/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
|
-
|
|
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
|
-
|
|
482
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
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]
|
|
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 '
|
|
15
|
-
import type { ParsedSession } from '
|
|
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;
|
package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map
CHANGED
|
@@ -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,
|
|
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 '
|
|
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)
|