@itm-platform/mcp-server 1.0.3 → 1.0.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.
- package/README.md +13 -10
- package/dist/auth/api-key-auth.d.ts.map +1 -1
- package/dist/auth/api-key-auth.js +0 -3
- package/dist/auth/api-key-auth.js.map +1 -1
- package/dist/clients/audit-client.d.ts +2 -0
- package/dist/clients/audit-client.d.ts.map +1 -1
- package/dist/clients/audit-client.js +4 -4
- package/dist/clients/audit-client.js.map +1 -1
- package/dist/clients/rest-client.js +4 -4
- package/dist/clients/rest-client.js.map +1 -1
- package/dist/instrument-server.d.ts +2 -1
- package/dist/instrument-server.d.ts.map +1 -1
- package/dist/instrument-server.js +14 -3
- package/dist/instrument-server.js.map +1 -1
- package/dist/prompts/project-status.d.ts.map +1 -1
- package/dist/prompts/project-status.js +7 -2
- package/dist/prompts/project-status.js.map +1 -1
- package/dist/prompts/risk-analysis.d.ts.map +1 -1
- package/dist/prompts/risk-analysis.js +5 -1
- package/dist/prompts/risk-analysis.js.map +1 -1
- package/dist/server.js +24 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/datamart.d.ts.map +1 -1
- package/dist/tools/datamart.js +3 -1
- package/dist/tools/datamart.js.map +1 -1
- package/dist/tools/financials.d.ts.map +1 -1
- package/dist/tools/financials.js +11 -16
- package/dist/tools/financials.js.map +1 -1
- package/dist/tools/graphql-queries.d.ts +1 -0
- package/dist/tools/graphql-queries.d.ts.map +1 -1
- package/dist/tools/graphql-queries.js +16 -0
- package/dist/tools/graphql-queries.js.map +1 -1
- package/dist/tools/projects.d.ts +22 -0
- package/dist/tools/projects.d.ts.map +1 -1
- package/dist/tools/projects.js +25 -12
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/risks-issues.d.ts.map +1 -1
- package/dist/tools/risks-issues.js +11 -17
- package/dist/tools/risks-issues.js.map +1 -1
- package/dist/tools/services.d.ts +15 -0
- package/dist/tools/services.d.ts.map +1 -1
- package/dist/tools/services.js +70 -19
- package/dist/tools/services.js.map +1 -1
- package/dist/tools/subcomponent-page.d.ts +13 -0
- package/dist/tools/subcomponent-page.d.ts.map +1 -0
- package/dist/tools/subcomponent-page.js +46 -0
- package/dist/tools/subcomponent-page.js.map +1 -0
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +6 -7
- package/dist/tools/tasks.js.map +1 -1
- package/dist/validation/query-validator.d.ts +1 -0
- package/dist/validation/query-validator.d.ts.map +1 -1
- package/dist/validation/query-validator.js +25 -0
- package/dist/validation/query-validator.js.map +1 -1
- package/dist/validation/result-size-guard.d.ts +21 -0
- package/dist/validation/result-size-guard.d.ts.map +1 -0
- package/dist/validation/result-size-guard.js +38 -0
- package/dist/validation/result-size-guard.js.map +1 -0
- package/package.json +1 -1
- package/dist/src/auth/api-key-auth.d.ts +0 -3
- package/dist/src/auth/api-key-auth.d.ts.map +0 -1
- package/dist/src/auth/api-key-auth.js +0 -53
- package/dist/src/auth/api-key-auth.js.map +0 -1
- package/dist/src/auth/effective-user-context.d.ts +0 -16
- package/dist/src/auth/effective-user-context.d.ts.map +0 -1
- package/dist/src/auth/effective-user-context.js +0 -9
- package/dist/src/auth/effective-user-context.js.map +0 -1
- package/dist/src/auth/license-resolver.d.ts +0 -6
- package/dist/src/auth/license-resolver.d.ts.map +0 -1
- package/dist/src/auth/license-resolver.js +0 -12
- package/dist/src/auth/license-resolver.js.map +0 -1
- package/dist/src/auth/oauth-auth.d.ts +0 -22
- package/dist/src/auth/oauth-auth.d.ts.map +0 -1
- package/dist/src/auth/oauth-auth.js +0 -34
- package/dist/src/auth/oauth-auth.js.map +0 -1
- package/dist/src/auth/oauth-metadata.d.ts +0 -10
- package/dist/src/auth/oauth-metadata.d.ts.map +0 -1
- package/dist/src/auth/oauth-metadata.js +0 -8
- package/dist/src/auth/oauth-metadata.js.map +0 -1
- package/dist/src/auth/token-extraction.d.ts +0 -2
- package/dist/src/auth/token-extraction.d.ts.map +0 -1
- package/dist/src/auth/token-extraction.js +0 -7
- package/dist/src/auth/token-extraction.js.map +0 -1
- package/dist/src/clients/audit-client.d.ts +0 -25
- package/dist/src/clients/audit-client.d.ts.map +0 -1
- package/dist/src/clients/audit-client.js +0 -37
- package/dist/src/clients/audit-client.js.map +0 -1
- package/dist/src/clients/datamart-client.d.ts +0 -16
- package/dist/src/clients/datamart-client.d.ts.map +0 -1
- package/dist/src/clients/datamart-client.js +0 -32
- package/dist/src/clients/datamart-client.js.map +0 -1
- package/dist/src/clients/index.d.ts +0 -18
- package/dist/src/clients/index.d.ts.map +0 -1
- package/dist/src/clients/index.js +0 -11
- package/dist/src/clients/index.js.map +0 -1
- package/dist/src/clients/rest-client.d.ts +0 -14
- package/dist/src/clients/rest-client.d.ts.map +0 -1
- package/dist/src/clients/rest-client.js +0 -29
- package/dist/src/clients/rest-client.js.map +0 -1
- package/dist/src/logger.d.ts +0 -3
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/logger.js +0 -37
- package/dist/src/logger.js.map +0 -1
- package/dist/src/prompts/portfolio-overview.d.ts +0 -3
- package/dist/src/prompts/portfolio-overview.d.ts.map +0 -1
- package/dist/src/prompts/portfolio-overview.js +0 -21
- package/dist/src/prompts/portfolio-overview.js.map +0 -1
- package/dist/src/prompts/project-status.d.ts +0 -3
- package/dist/src/prompts/project-status.d.ts.map +0 -1
- package/dist/src/prompts/project-status.js +0 -24
- package/dist/src/prompts/project-status.js.map +0 -1
- package/dist/src/prompts/risk-analysis.d.ts +0 -3
- package/dist/src/prompts/risk-analysis.d.ts.map +0 -1
- package/dist/src/prompts/risk-analysis.js +0 -23
- package/dist/src/prompts/risk-analysis.js.map +0 -1
- package/dist/src/prompts/team-workload.d.ts +0 -3
- package/dist/src/prompts/team-workload.d.ts.map +0 -1
- package/dist/src/prompts/team-workload.js +0 -29
- package/dist/src/prompts/team-workload.js.map +0 -1
- package/dist/src/resources/calendars.d.ts +0 -4
- package/dist/src/resources/calendars.d.ts.map +0 -1
- package/dist/src/resources/calendars.js +0 -18
- package/dist/src/resources/calendars.js.map +0 -1
- package/dist/src/resources/schemas.d.ts +0 -4
- package/dist/src/resources/schemas.d.ts.map +0 -1
- package/dist/src/resources/schemas.js +0 -34
- package/dist/src/resources/schemas.js.map +0 -1
- package/dist/src/server.d.ts +0 -2
- package/dist/src/server.d.ts.map +0 -1
- package/dist/src/server.js +0 -213
- package/dist/src/server.js.map +0 -1
- package/dist/src/tools/datamart.d.ts +0 -17
- package/dist/src/tools/datamart.d.ts.map +0 -1
- package/dist/src/tools/datamart.js +0 -68
- package/dist/src/tools/datamart.js.map +0 -1
- package/dist/src/tools/financials.d.ts +0 -4
- package/dist/src/tools/financials.d.ts.map +0 -1
- package/dist/src/tools/financials.js +0 -50
- package/dist/src/tools/financials.js.map +0 -1
- package/dist/src/tools/graphql-queries.d.ts +0 -22
- package/dist/src/tools/graphql-queries.d.ts.map +0 -1
- package/dist/src/tools/graphql-queries.js +0 -26
- package/dist/src/tools/graphql-queries.js.map +0 -1
- package/dist/src/tools/portfolio.d.ts +0 -10
- package/dist/src/tools/portfolio.d.ts.map +0 -1
- package/dist/src/tools/portfolio.js +0 -54
- package/dist/src/tools/portfolio.js.map +0 -1
- package/dist/src/tools/projects.d.ts +0 -42
- package/dist/src/tools/projects.d.ts.map +0 -1
- package/dist/src/tools/projects.js +0 -73
- package/dist/src/tools/projects.js.map +0 -1
- package/dist/src/tools/reference-data.d.ts +0 -4
- package/dist/src/tools/reference-data.d.ts.map +0 -1
- package/dist/src/tools/reference-data.js +0 -19
- package/dist/src/tools/reference-data.js.map +0 -1
- package/dist/src/tools/risks-issues.d.ts +0 -4
- package/dist/src/tools/risks-issues.d.ts.map +0 -1
- package/dist/src/tools/risks-issues.js +0 -33
- package/dist/src/tools/risks-issues.js.map +0 -1
- package/dist/src/tools/services.d.ts +0 -41
- package/dist/src/tools/services.d.ts.map +0 -1
- package/dist/src/tools/services.js +0 -67
- package/dist/src/tools/services.js.map +0 -1
- package/dist/src/tools/tasks.d.ts +0 -4
- package/dist/src/tools/tasks.d.ts.map +0 -1
- package/dist/src/tools/tasks.js +0 -17
- package/dist/src/tools/tasks.js.map +0 -1
- package/dist/src/tools/users.d.ts +0 -4
- package/dist/src/tools/users.d.ts.map +0 -1
- package/dist/src/tools/users.js +0 -30
- package/dist/src/tools/users.js.map +0 -1
- package/dist/src/tools/write-tools.d.ts +0 -75
- package/dist/src/tools/write-tools.d.ts.map +0 -1
- package/dist/src/tools/write-tools.js +0 -193
- package/dist/src/tools/write-tools.js.map +0 -1
- package/dist/src/validation/query-validator.d.ts +0 -15
- package/dist/src/validation/query-validator.d.ts.map +0 -1
- package/dist/src/validation/query-validator.js +0 -141
- package/dist/src/validation/query-validator.js.map +0 -1
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-auth.d.ts","sourceRoot":"","sources":["../../../src/auth/api-key-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AA0BnE,wBAAsB,eAAe,IAAI,OAAO,CAAC,oBAAoB,CAAC,CA6CrE"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { resolveLicenseAccess } from './license-resolver.js';
|
|
2
|
-
function resolveAuthHeaders() {
|
|
3
|
-
const apiKey = process.env.ITM_API_KEY;
|
|
4
|
-
const token = process.env.ITM_TOKEN;
|
|
5
|
-
if (apiKey) {
|
|
6
|
-
return { source: 'api-key', headers: { 'Authorization': `Bearer ${apiKey}` } };
|
|
7
|
-
}
|
|
8
|
-
if (token) {
|
|
9
|
-
return { source: 'token', headers: { 'Token': token } };
|
|
10
|
-
}
|
|
11
|
-
throw new Error('Missing required environment variable: ITM_API_KEY or ITM_TOKEN');
|
|
12
|
-
}
|
|
13
|
-
export async function resolveIdentity() {
|
|
14
|
-
const apiUrl = process.env.ITM_API_URL;
|
|
15
|
-
const company = process.env.ITM_COMPANY;
|
|
16
|
-
if (!apiUrl)
|
|
17
|
-
throw new Error('Missing required environment variable: ITM_API_URL');
|
|
18
|
-
if (!company)
|
|
19
|
-
throw new Error('Missing required environment variable: ITM_COMPANY');
|
|
20
|
-
const { source, headers: authHeaders } = resolveAuthHeaders();
|
|
21
|
-
const url = `${apiUrl}/v2/${company}/resolve/identity`;
|
|
22
|
-
const response = await fetch(url, {
|
|
23
|
-
method: 'POST',
|
|
24
|
-
headers: {
|
|
25
|
-
...authHeaders,
|
|
26
|
-
'Content-Type': 'application/json',
|
|
27
|
-
},
|
|
28
|
-
});
|
|
29
|
-
if (!response.ok) {
|
|
30
|
-
throw new Error(`Identity resolution failed: ${response.status} ${response.statusText}`);
|
|
31
|
-
}
|
|
32
|
-
const identity = await response.json();
|
|
33
|
-
const { dataMartAccess, pmScopeUserId } = resolveLicenseAccess(identity.licenseTypeIds, identity.userId);
|
|
34
|
-
if (dataMartAccess === 'pm-scoped') {
|
|
35
|
-
throw new Error('PM-only access is not yet available for MCP. It will arrive with hosted MCP (Phase 2) or gateway scope injection.');
|
|
36
|
-
}
|
|
37
|
-
if (dataMartAccess === 'none') {
|
|
38
|
-
throw new Error('Team Member access is not available for MCP.');
|
|
39
|
-
}
|
|
40
|
-
return {
|
|
41
|
-
source,
|
|
42
|
-
company,
|
|
43
|
-
accountId: identity.accountId,
|
|
44
|
-
userId: identity.userId,
|
|
45
|
-
languageId: identity.languageId,
|
|
46
|
-
email: identity.email,
|
|
47
|
-
licenseTypeIds: identity.licenseTypeIds,
|
|
48
|
-
dataMartAccess,
|
|
49
|
-
pmScopeUserId,
|
|
50
|
-
authHeaders,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=api-key-auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-auth.js","sourceRoot":"","sources":["../../../src/auth/api-key-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAY7D,SAAS,kBAAkB;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAEpC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,MAAM,EAAE,EAAE,EAAE,CAAC;IACjF,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;IAC1D,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACxC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACnF,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAEpF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAE9D,MAAM,GAAG,GAAG,GAAG,MAAM,OAAO,OAAO,mBAAmB,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,GAAG,WAAW;YACd,cAAc,EAAE,kBAAkB;SACnC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,QAAQ,GAAqB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,oBAAoB,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEzG,IAAI,cAAc,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;IACJ,CAAC;IACD,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,OAAO;QACL,MAAM;QACN,OAAO;QACP,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,cAAc;QACd,aAAa;QACb,WAAW;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export interface EffectiveUserContext {
|
|
2
|
-
source: 'api-key' | 'token';
|
|
3
|
-
company: string;
|
|
4
|
-
accountId: number;
|
|
5
|
-
userId: number;
|
|
6
|
-
languageId: number;
|
|
7
|
-
email: string;
|
|
8
|
-
licenseTypeIds: number[];
|
|
9
|
-
dataMartAccess: 'full' | 'pm-scoped' | 'none';
|
|
10
|
-
pmScopeUserId?: number;
|
|
11
|
-
authHeaders: Record<string, string>;
|
|
12
|
-
grantedScopes?: string[];
|
|
13
|
-
}
|
|
14
|
-
export declare const WRITE_TOOL_NAMES: Set<string>;
|
|
15
|
-
export declare function hasScope(ctx: EffectiveUserContext, scope: string): boolean;
|
|
16
|
-
//# sourceMappingURL=effective-user-context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effective-user-context.d.ts","sourceRoot":"","sources":["../../../src/auth/effective-user-context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,aAE3B,CAAC;AAEH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAG1E"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export const WRITE_TOOL_NAMES = new Set([
|
|
2
|
-
'create_task', 'update_task', 'create_risk', 'create_issue', 'update_project',
|
|
3
|
-
]);
|
|
4
|
-
export function hasScope(ctx, scope) {
|
|
5
|
-
if (!ctx.grantedScopes)
|
|
6
|
-
return true;
|
|
7
|
-
return ctx.grantedScopes.includes(scope);
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=effective-user-context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effective-user-context.js","sourceRoot":"","sources":["../../../src/auth/effective-user-context.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IACtC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB;CAC9E,CAAC,CAAC;AAEH,MAAM,UAAU,QAAQ,CAAC,GAAyB,EAAE,KAAa;IAC/D,IAAI,CAAC,GAAG,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export interface LicenseAccessResult {
|
|
2
|
-
dataMartAccess: 'full' | 'pm-scoped' | 'none';
|
|
3
|
-
pmScopeUserId?: number;
|
|
4
|
-
}
|
|
5
|
-
export declare function resolveLicenseAccess(licenseTypeIds: number[], userId: number): LicenseAccessResult;
|
|
6
|
-
//# sourceMappingURL=license-resolver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"license-resolver.d.ts","sourceRoot":"","sources":["../../../src/auth/license-resolver.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAQlG"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
const FULL_ACCESS_TYPES = new Set([0, 1]);
|
|
2
|
-
const PM_TYPE = 2;
|
|
3
|
-
export function resolveLicenseAccess(licenseTypeIds, userId) {
|
|
4
|
-
if (licenseTypeIds.some(id => FULL_ACCESS_TYPES.has(id))) {
|
|
5
|
-
return { dataMartAccess: 'full' };
|
|
6
|
-
}
|
|
7
|
-
if (licenseTypeIds.includes(PM_TYPE)) {
|
|
8
|
-
return { dataMartAccess: 'pm-scoped', pmScopeUserId: userId };
|
|
9
|
-
}
|
|
10
|
-
return { dataMartAccess: 'none' };
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=license-resolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"license-resolver.js","sourceRoot":"","sources":["../../../src/auth/license-resolver.ts"],"names":[],"mappings":"AAKA,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1C,MAAM,OAAO,GAAG,CAAC,CAAC;AAElB,MAAM,UAAU,oBAAoB,CAAC,cAAwB,EAAE,MAAc;IAC3E,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { Logger } from 'pino';
|
|
2
|
-
import type { EffectiveUserContext } from './effective-user-context.js';
|
|
3
|
-
export interface TokenExchangeResult {
|
|
4
|
-
sessionToken: string;
|
|
5
|
-
userId: number;
|
|
6
|
-
accountId: number;
|
|
7
|
-
company: string;
|
|
8
|
-
email: string;
|
|
9
|
-
languageId: number;
|
|
10
|
-
licenseTypeIds: number[];
|
|
11
|
-
dataMartAccess: 'full' | 'pm-scoped' | 'none';
|
|
12
|
-
pmScopeUserId?: number;
|
|
13
|
-
expiresAt: string;
|
|
14
|
-
scope: string;
|
|
15
|
-
}
|
|
16
|
-
export interface OAuthConfig {
|
|
17
|
-
tokenExchangeUrl: string;
|
|
18
|
-
audience: string;
|
|
19
|
-
}
|
|
20
|
-
export declare function exchangeToken(oauthToken: string, config: OAuthConfig, log?: Logger): Promise<TokenExchangeResult>;
|
|
21
|
-
export declare function buildEffectiveUserContextFromExchange(result: TokenExchangeResult): EffectiveUserContext;
|
|
22
|
-
//# sourceMappingURL=oauth-auth.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-auth.d.ts","sourceRoot":"","sources":["../../../src/auth/oauth-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,WAAW,EACnB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,mBAAmB,CAAC,CAoB9B;AAED,wBAAgB,qCAAqC,CAAC,MAAM,EAAE,mBAAmB,GAAG,oBAAoB,CAcvG"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export async function exchangeToken(oauthToken, config, log) {
|
|
2
|
-
log?.debug({ url: config.tokenExchangeUrl }, 'Token exchange request');
|
|
3
|
-
const response = await fetch(config.tokenExchangeUrl, {
|
|
4
|
-
method: 'POST',
|
|
5
|
-
headers: {
|
|
6
|
-
'Content-Type': 'application/json',
|
|
7
|
-
'Authorization': `Bearer ${oauthToken}`,
|
|
8
|
-
},
|
|
9
|
-
body: JSON.stringify({ audience: config.audience }),
|
|
10
|
-
});
|
|
11
|
-
if (!response.ok) {
|
|
12
|
-
log?.error({ status: response.status }, 'Token exchange failed');
|
|
13
|
-
throw new Error(`Token exchange failed: ${response.status} ${response.statusText}`);
|
|
14
|
-
}
|
|
15
|
-
const result = await response.json();
|
|
16
|
-
log?.info({ userId: result.userId, company: result.company }, 'Token exchange succeeded');
|
|
17
|
-
return result;
|
|
18
|
-
}
|
|
19
|
-
export function buildEffectiveUserContextFromExchange(result) {
|
|
20
|
-
return {
|
|
21
|
-
source: 'token',
|
|
22
|
-
company: result.company,
|
|
23
|
-
accountId: result.accountId,
|
|
24
|
-
userId: result.userId,
|
|
25
|
-
languageId: result.languageId,
|
|
26
|
-
email: result.email,
|
|
27
|
-
licenseTypeIds: result.licenseTypeIds,
|
|
28
|
-
dataMartAccess: result.dataMartAccess,
|
|
29
|
-
pmScopeUserId: result.pmScopeUserId,
|
|
30
|
-
grantedScopes: result.scope.split(' ').filter(Boolean),
|
|
31
|
-
authHeaders: { 'Token': result.sessionToken },
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=oauth-auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-auth.js","sourceRoot":"","sources":["../../../src/auth/oauth-auth.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,MAAmB,EACnB,GAAY;IAEZ,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,gBAAgB,EAAE,EAAE,wBAAwB,CAAC,CAAC;IAEvE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE;QACpD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,UAAU,EAAE;SACxC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;KACpD,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAyB,CAAC;IAC5D,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,0BAA0B,CAAC,CAAC;IAC1F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qCAAqC,CAAC,MAA2B;IAC/E,OAAO;QACL,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACtD,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE;KAC9C,CAAC;AACJ,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export interface ProtectedResourceMetadata {
|
|
2
|
-
resource: string;
|
|
3
|
-
authorization_servers: string[];
|
|
4
|
-
scopes_supported: string[];
|
|
5
|
-
}
|
|
6
|
-
export declare function buildProtectedResourceMetadata(config: {
|
|
7
|
-
mcpServerUrl: string;
|
|
8
|
-
authorizationServerUrl: string;
|
|
9
|
-
}): ProtectedResourceMetadata;
|
|
10
|
-
//# sourceMappingURL=oauth-metadata.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-metadata.d.ts","sourceRoot":"","sources":["../../../src/auth/oauth-metadata.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB,EAAE,MAAM,CAAC;CAChC,GAAG,yBAAyB,CAM5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-metadata.js","sourceRoot":"","sources":["../../../src/auth/oauth-metadata.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,8BAA8B,CAAC,MAG9C;IACC,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,YAAY;QAC7B,qBAAqB,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC;QACtD,gBAAgB,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC;KAC5C,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"token-extraction.d.ts","sourceRoot":"","sources":["../../../src/auth/token-extraction.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAIlG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"token-extraction.js","sourceRoot":"","sources":["../../../src/auth/token-extraction.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,OAA2C;IAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IACnC,IAAI,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { Logger } from 'pino';
|
|
2
|
-
export interface AuditClientConfig {
|
|
3
|
-
apiUrl: string;
|
|
4
|
-
company: string;
|
|
5
|
-
authHeaders: Record<string, string>;
|
|
6
|
-
log?: Logger;
|
|
7
|
-
}
|
|
8
|
-
export interface AuditEntry {
|
|
9
|
-
timestamp: string;
|
|
10
|
-
userId: number;
|
|
11
|
-
accountId: number;
|
|
12
|
-
toolName: string;
|
|
13
|
-
parametersHash: string;
|
|
14
|
-
success: boolean;
|
|
15
|
-
error?: string;
|
|
16
|
-
aiClientId: string;
|
|
17
|
-
durationMs: number;
|
|
18
|
-
}
|
|
19
|
-
export interface AuditClient {
|
|
20
|
-
log(entry: AuditEntry): Promise<void>;
|
|
21
|
-
}
|
|
22
|
-
export declare function hashParameters(params: unknown): string;
|
|
23
|
-
export declare function createAuditClient(config: AuditClientConfig): AuditClient;
|
|
24
|
-
export declare function createNoOpAuditClient(): AuditClient;
|
|
25
|
-
//# sourceMappingURL=audit-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit-client.d.ts","sourceRoot":"","sources":["../../../src/clients/audit-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CA0BxE;AAED,wBAAgB,qBAAqB,IAAI,WAAW,CAInD"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
|
-
export function hashParameters(params) {
|
|
3
|
-
return createHash('sha256').update(JSON.stringify(params)).digest('hex');
|
|
4
|
-
}
|
|
5
|
-
export function createAuditClient(config) {
|
|
6
|
-
const url = `${config.apiUrl}/v2/${config.company}/mcp/audit`;
|
|
7
|
-
const headers = {
|
|
8
|
-
...config.authHeaders,
|
|
9
|
-
'Content-Type': 'application/json',
|
|
10
|
-
};
|
|
11
|
-
const log = config.log;
|
|
12
|
-
return {
|
|
13
|
-
async log(entry) {
|
|
14
|
-
try {
|
|
15
|
-
const response = await fetch(url, {
|
|
16
|
-
method: 'POST',
|
|
17
|
-
headers,
|
|
18
|
-
body: JSON.stringify(entry),
|
|
19
|
-
});
|
|
20
|
-
if (!response.ok) {
|
|
21
|
-
log?.warn({ status: response.status, toolName: entry.toolName }, 'Audit POST failed');
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
log?.debug({ toolName: entry.toolName }, 'Audit entry logged');
|
|
25
|
-
}
|
|
26
|
-
catch (err) {
|
|
27
|
-
log?.warn({ err, toolName: entry.toolName }, 'Audit POST error');
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
export function createNoOpAuditClient() {
|
|
33
|
-
return {
|
|
34
|
-
async log() { },
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=audit-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit-client.js","sourceRoot":"","sources":["../../../src/clients/audit-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA0BzC,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,OAAO,YAAY,CAAC;IAC9D,MAAM,OAAO,GAA2B;QACtC,GAAG,MAAM,CAAC,WAAW;QACrB,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IAEvB,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,KAAiB;YACzB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAChC,MAAM,EAAE,MAAM;oBACd,OAAO;oBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;iBAC5B,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,mBAAmB,CAAC,CAAC;oBACtF,OAAO;gBACT,CAAC;gBACD,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,oBAAoB,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,KAAK,CAAC,GAAG,KAAmB,CAAC;KAC9B,CAAC;AACJ,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Logger } from 'pino';
|
|
2
|
-
export interface DataMartClientConfig {
|
|
3
|
-
apiUrl: string;
|
|
4
|
-
company: string;
|
|
5
|
-
authHeaders: Record<string, string>;
|
|
6
|
-
log?: Logger;
|
|
7
|
-
}
|
|
8
|
-
export interface DataMartQuery {
|
|
9
|
-
query: string;
|
|
10
|
-
variables: Record<string, unknown>;
|
|
11
|
-
}
|
|
12
|
-
export interface DataMartClient {
|
|
13
|
-
query(body: DataMartQuery): Promise<Record<string, unknown>>;
|
|
14
|
-
}
|
|
15
|
-
export declare function createDataMartClient(config: DataMartClientConfig): DataMartClient;
|
|
16
|
-
//# sourceMappingURL=datamart-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"datamart-client.d.ts","sourceRoot":"","sources":["../../../src/clients/datamart-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC9D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAmCjF"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
export function createDataMartClient(config) {
|
|
3
|
-
const baseUrl = `${config.apiUrl}/v2/${config.company}/datamart/graphql`;
|
|
4
|
-
const log = config.log;
|
|
5
|
-
return {
|
|
6
|
-
async query(body) {
|
|
7
|
-
const requestId = randomUUID();
|
|
8
|
-
const start = Date.now();
|
|
9
|
-
const response = await fetch(baseUrl, {
|
|
10
|
-
method: 'POST',
|
|
11
|
-
headers: {
|
|
12
|
-
...config.authHeaders,
|
|
13
|
-
'Content-Type': 'application/json',
|
|
14
|
-
'X-Request-Id': requestId,
|
|
15
|
-
},
|
|
16
|
-
body: JSON.stringify(body),
|
|
17
|
-
});
|
|
18
|
-
if (!response.ok) {
|
|
19
|
-
log?.error({ requestId, status: response.status, ms: Date.now() - start }, 'DataMart request failed');
|
|
20
|
-
throw new Error(`DataMart request failed: ${response.status} ${response.statusText}`);
|
|
21
|
-
}
|
|
22
|
-
const json = await response.json();
|
|
23
|
-
if (json.errors?.length) {
|
|
24
|
-
log?.error({ requestId, graphqlError: json.errors[0].message, ms: Date.now() - start }, 'DataMart GraphQL error');
|
|
25
|
-
throw new Error(`DataMart GraphQL error: ${json.errors[0].message}`);
|
|
26
|
-
}
|
|
27
|
-
log?.debug({ requestId, ms: Date.now() - start }, 'DataMart request OK');
|
|
28
|
-
return json.data ?? {};
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=datamart-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"datamart-client.js","sourceRoot":"","sources":["../../../src/clients/datamart-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAmBzC,MAAM,UAAU,oBAAoB,CAAC,MAA4B;IAC/D,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,OAAO,mBAAmB,CAAC;IACzE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IAEvB,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,IAAmB;YAC7B,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;gBACpC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,GAAG,MAAM,CAAC,WAAW;oBACrB,cAAc,EAAE,kBAAkB;oBAClC,cAAc,EAAE,SAAS;iBAC1B;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,yBAAyB,CAAC,CAAC;gBACtG,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACxF,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6E,CAAC;YAE9G,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACxB,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAC;gBAClH,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACvE,CAAC;YAED,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Logger } from 'pino';
|
|
2
|
-
import { type DataMartClient } from './datamart-client.js';
|
|
3
|
-
import { type RestClient } from './rest-client.js';
|
|
4
|
-
import { type AuditClient } from './audit-client.js';
|
|
5
|
-
export interface ClientConfig {
|
|
6
|
-
apiUrl: string;
|
|
7
|
-
company: string;
|
|
8
|
-
authHeaders: Record<string, string>;
|
|
9
|
-
log?: Logger;
|
|
10
|
-
}
|
|
11
|
-
export interface Clients {
|
|
12
|
-
datamart: DataMartClient;
|
|
13
|
-
rest: RestClient;
|
|
14
|
-
audit: AuditClient;
|
|
15
|
-
}
|
|
16
|
-
export declare function createClients(config: ClientConfig, audit?: AuditClient): Clients;
|
|
17
|
-
export type { DataMartClient, RestClient, AuditClient };
|
|
18
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clients/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAyB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5E,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAMhF;AAED,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { createDataMartClient } from './datamart-client.js';
|
|
2
|
-
import { createRestClient } from './rest-client.js';
|
|
3
|
-
import { createNoOpAuditClient } from './audit-client.js';
|
|
4
|
-
export function createClients(config, audit) {
|
|
5
|
-
return {
|
|
6
|
-
datamart: createDataMartClient(config),
|
|
7
|
-
rest: createRestClient(config),
|
|
8
|
-
audit: audit ?? createNoOpAuditClient(),
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clients/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAuB,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAoB,MAAM,mBAAmB,CAAC;AAe5E,MAAM,UAAU,aAAa,CAAC,MAAoB,EAAE,KAAmB;IACrE,OAAO;QACL,QAAQ,EAAE,oBAAoB,CAAC,MAAM,CAAC;QACtC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;QAC9B,KAAK,EAAE,KAAK,IAAI,qBAAqB,EAAE;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { Logger } from 'pino';
|
|
2
|
-
export interface RestClientConfig {
|
|
3
|
-
apiUrl: string;
|
|
4
|
-
company: string;
|
|
5
|
-
authHeaders: Record<string, string>;
|
|
6
|
-
log?: Logger;
|
|
7
|
-
}
|
|
8
|
-
export interface RestClient {
|
|
9
|
-
get(path: string): Promise<unknown>;
|
|
10
|
-
post(path: string, body: unknown): Promise<unknown>;
|
|
11
|
-
patch(path: string, body: unknown): Promise<unknown>;
|
|
12
|
-
}
|
|
13
|
-
export declare function createRestClient(config: RestClientConfig): RestClient;
|
|
14
|
-
//# sourceMappingURL=rest-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rest-client.d.ts","sourceRoot":"","sources":["../../../src/clients/rest-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAgCrE"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export function createRestClient(config) {
|
|
2
|
-
const baseUrl = `${config.apiUrl}/v2/${config.company}`;
|
|
3
|
-
const headers = {
|
|
4
|
-
...config.authHeaders,
|
|
5
|
-
'Content-Type': 'application/json',
|
|
6
|
-
};
|
|
7
|
-
const log = config.log;
|
|
8
|
-
async function request(method, path, body) {
|
|
9
|
-
const start = Date.now();
|
|
10
|
-
const response = await fetch(`${baseUrl}/${path}`, {
|
|
11
|
-
method,
|
|
12
|
-
headers,
|
|
13
|
-
...(body !== undefined ? { body: JSON.stringify(body) } : {}),
|
|
14
|
-
});
|
|
15
|
-
if (!response.ok) {
|
|
16
|
-
log?.error({ method, path, status: response.status, ms: Date.now() - start }, 'REST request failed');
|
|
17
|
-
throw new Error(`REST request failed: ${response.status} ${response.statusText}`);
|
|
18
|
-
}
|
|
19
|
-
const result = await response.json();
|
|
20
|
-
log?.debug({ method, path, ms: Date.now() - start }, 'REST request OK');
|
|
21
|
-
return result;
|
|
22
|
-
}
|
|
23
|
-
return {
|
|
24
|
-
get: (path) => request('GET', path),
|
|
25
|
-
post: (path, body) => request('POST', path, body),
|
|
26
|
-
patch: (path, body) => request('PATCH', path, body),
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=rest-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rest-client.js","sourceRoot":"","sources":["../../../src/clients/rest-client.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;IACxD,MAAM,OAAO,GAA2B;QACtC,GAAG,MAAM,CAAC,WAAW;QACrB,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IAEvB,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,IAAY,EAAE,IAAc;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,EAAE;YACjD,MAAM;YACN,OAAO;YACP,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,CAAC,CAAC;YACrG,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;QAC3C,IAAI,EAAE,CAAC,IAAY,EAAE,IAAa,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;QAClE,KAAK,EAAE,CAAC,IAAY,EAAE,IAAa,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;KACrE,CAAC;AACJ,CAAC"}
|
package/dist/src/logger.d.ts
DELETED
package/dist/src/logger.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAOzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAiCpD"}
|
package/dist/src/logger.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import pino from 'pino';
|
|
2
|
-
import { mkdirSync } from 'node:fs';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
const LOG_DIR = join(process.cwd(), 'logs');
|
|
5
|
-
const LOG_FILE = join(LOG_DIR, 'mcp.log');
|
|
6
|
-
export function createLogger(service) {
|
|
7
|
-
const level = process.env.LOG_LEVEL || 'info';
|
|
8
|
-
const isTest = process.env.NODE_ENV === 'test';
|
|
9
|
-
const targets = [
|
|
10
|
-
{
|
|
11
|
-
target: 'pino-pretty',
|
|
12
|
-
options: {
|
|
13
|
-
singleLine: true,
|
|
14
|
-
translateTime: 'HH:MM:ss.l',
|
|
15
|
-
ignore: 'pid,hostname',
|
|
16
|
-
colorize: true,
|
|
17
|
-
destination: 2,
|
|
18
|
-
},
|
|
19
|
-
level,
|
|
20
|
-
},
|
|
21
|
-
];
|
|
22
|
-
if (!isTest) {
|
|
23
|
-
mkdirSync(LOG_DIR, { recursive: true });
|
|
24
|
-
targets.push({
|
|
25
|
-
target: 'pino-roll',
|
|
26
|
-
options: { file: LOG_FILE, size: '10m', limit: { count: 5 } },
|
|
27
|
-
level,
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
return pino({
|
|
31
|
-
level,
|
|
32
|
-
base: { service, app: 'ITM.MCP' },
|
|
33
|
-
timestamp: pino.stdTimeFunctions.isoTime,
|
|
34
|
-
transport: { targets },
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=logger.js.map
|
package/dist/src/logger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAqB,MAAM,MAAM,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAE1C,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;IAE/C,MAAM,OAAO,GAAkC;QAC7C;YACE,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,YAAY;gBAC3B,MAAM,EAAE,cAAc;gBACtB,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,CAAC;aACf;YACD,KAAK;SACN;KACF,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7D,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;QACV,KAAK;QACL,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE;QACjC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;QACxC,SAAS,EAAE,EAAE,OAAO,EAAE;KACvB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"portfolio-overview.d.ts","sourceRoot":"","sources":["../../../src/prompts/portfolio-overview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,SAAS,QAuBhE"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export function registerPortfolioOverviewPrompt(server) {
|
|
2
|
-
server.registerPrompt('portfolio_overview', {
|
|
3
|
-
description: 'Portfolio health overview. Aggregates projects by status and methodology, summarizes budget variance.',
|
|
4
|
-
}, async () => ({
|
|
5
|
-
messages: [{
|
|
6
|
-
role: 'user',
|
|
7
|
-
content: {
|
|
8
|
-
type: 'text',
|
|
9
|
-
text: `Generate a portfolio health overview. Use these tools:
|
|
10
|
-
1. aggregate_portfolio with groupBy: "statusLabel", metrics: ["count", "avgProgress"] to see project distribution by status
|
|
11
|
-
2. aggregate_portfolio with groupBy: "methodology", metrics: ["count", "totalBudget", "totalActual"] to see methodology breakdown with financials
|
|
12
|
-
Then summarize:
|
|
13
|
-
- Total projects and status distribution
|
|
14
|
-
- Average progress by status
|
|
15
|
-
- Budget health across the portfolio (planned vs actual)
|
|
16
|
-
- Any concerning patterns (e.g., many projects behind schedule)`,
|
|
17
|
-
},
|
|
18
|
-
}],
|
|
19
|
-
}));
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=portfolio-overview.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"portfolio-overview.js","sourceRoot":"","sources":["../../../src/prompts/portfolio-overview.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC/D,MAAM,CAAC,cAAc,CACnB,oBAAoB,EACpB;QACE,WAAW,EAAE,uGAAuG;KACrH,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;;;;;;gEAOgD;iBACvD;aACF,CAAC;KACH,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-status.d.ts","sourceRoot":"","sources":["../../../src/prompts/project-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,QAyB5D"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export function registerProjectStatusPrompt(server) {
|
|
3
|
-
server.registerPrompt('project_status', {
|
|
4
|
-
description: 'Generate a status report for a project. Fetches the project with tasks, risks, issues, and budget in one call.',
|
|
5
|
-
argsSchema: {
|
|
6
|
-
projectId: z.string().describe('The project ID to report on'),
|
|
7
|
-
},
|
|
8
|
-
}, async (args) => ({
|
|
9
|
-
messages: [{
|
|
10
|
-
role: 'user',
|
|
11
|
-
content: {
|
|
12
|
-
type: 'text',
|
|
13
|
-
text: `Generate a comprehensive status report for project ${args.projectId}. Use the get_project tool with include: ["tasks", "risks", "issues", "budget"] to fetch all data in one call. Then summarize:
|
|
14
|
-
1. Overall status and progress
|
|
15
|
-
2. Key task status breakdown (not started / in progress / completed)
|
|
16
|
-
3. Active risks and their mitigation status
|
|
17
|
-
4. Open issues
|
|
18
|
-
5. Budget health (planned vs actual)
|
|
19
|
-
6. Key concerns or blockers`,
|
|
20
|
-
},
|
|
21
|
-
}],
|
|
22
|
-
}));
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=project-status.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-status.js","sourceRoot":"","sources":["../../../src/prompts/project-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,cAAc,CACnB,gBAAgB,EAChB;QACE,WAAW,EAAE,gHAAgH;QAC7H,UAAU,EAAE;YACV,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;SAC9D;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACf,QAAQ,EAAE,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,sDAAsD,IAAI,CAAC,SAAS;;;;;;4BAMxD;iBACnB;aACF,CAAC;KACH,CAAC,CACH,CAAC;AACJ,CAAC"}
|