@copado/agentia-cli 0.113.0-alpha.0 → 0.114.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +271 -262
  2. package/dist/commands/ai/agent/ask.d.ts +3 -0
  3. package/dist/commands/ai/agent/ask.js +14 -0
  4. package/dist/commands/ai/agent/ask.js.map +1 -1
  5. package/dist/commands/ai/agent/chat.d.ts +3 -0
  6. package/dist/commands/ai/agent/chat.js +14 -0
  7. package/dist/commands/ai/agent/chat.js.map +1 -1
  8. package/dist/commands/cicd/work/set.js +22 -14
  9. package/dist/commands/cicd/work/set.js.map +1 -1
  10. package/dist/lib/ai-chat-session.d.ts +2 -1
  11. package/dist/lib/ai-chat-session.js +8 -0
  12. package/dist/lib/ai-chat-session.js.map +1 -1
  13. package/dist/lib/ai-gateway.d.ts +5 -2
  14. package/dist/lib/ai-gateway.js +44 -5
  15. package/dist/lib/ai-gateway.js.map +1 -1
  16. package/dist/lib/ai-operations.d.ts +4 -2
  17. package/dist/lib/ai-operations.js +29 -3
  18. package/dist/lib/ai-operations.js.map +1 -1
  19. package/dist/lib/ai-types.d.ts +29 -0
  20. package/dist/lib/ai-types.js +25 -0
  21. package/dist/lib/ai-types.js.map +1 -1
  22. package/dist/lib/cicd-gateway.d.ts +6 -0
  23. package/dist/lib/cicd-gateway.js +13 -2
  24. package/dist/lib/cicd-gateway.js.map +1 -1
  25. package/dist/lib/credential-sync.d.ts +35 -0
  26. package/dist/lib/credential-sync.js +249 -0
  27. package/dist/lib/credential-sync.js.map +1 -0
  28. package/dist/lib/debug.js +3 -1
  29. package/dist/lib/debug.js.map +1 -1
  30. package/dist/lib/defaults-store.d.ts +18 -0
  31. package/dist/lib/defaults-store.js +182 -89
  32. package/dist/lib/defaults-store.js.map +1 -1
  33. package/dist/lib/environment-types.js +1 -1
  34. package/dist/lib/mcp/ai-tools.d.ts +3 -0
  35. package/dist/lib/mcp/ai-tools.js +6 -0
  36. package/dist/lib/mcp/ai-tools.js.map +1 -1
  37. package/dist/lib/mcp/redaction.d.ts +1 -2
  38. package/dist/lib/mcp/redaction.js +1 -23
  39. package/dist/lib/mcp/redaction.js.map +1 -1
  40. package/dist/lib/mcp/tools.d.ts +3 -0
  41. package/dist/lib/mcp/work-tools.js +7 -4
  42. package/dist/lib/mcp/work-tools.js.map +1 -1
  43. package/dist/lib/secret-redaction.d.ts +2 -0
  44. package/dist/lib/secret-redaction.js +24 -0
  45. package/dist/lib/secret-redaction.js.map +1 -0
  46. package/dist/lib/work-types.d.ts +1 -0
  47. package/dist/lib/work-types.js.map +1 -1
  48. package/oclif.manifest.json +3869 -3831
  49. package/package.json +1 -1
@@ -0,0 +1,249 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { resolveAiCredentials } from './ai-config.js';
3
+ import { AiGateway } from './ai-gateway.js';
4
+ import { agentUsesCicdIntegration } from './ai-types.js';
5
+ import { CicdGateway, tryResolveCicdCredentials, } from './cicd-gateway.js';
6
+ import { readCredentialSyncReceipt, readDefaults, resolveDefaults, writeCredentialSyncReceipt, } from './defaults-store.js';
7
+ import { salesforceIdsEqual } from './salesforce-id.js';
8
+ import { workEndpoint } from './work-types.js';
9
+ const CREDENTIAL_SYNC_SCHEMA_VERSION = 2;
10
+ const AI_INTEGRATION_NAME = 'Agentia CLI Copado CICD';
11
+ const activeSyncs = new Map();
12
+ function fingerprint(value) {
13
+ return createHash('sha256').update(value).digest('hex');
14
+ }
15
+ function trimOptional(value) {
16
+ const trimmed = value?.trim();
17
+ return trimmed === undefined || trimmed.length === 0 ? undefined : trimmed;
18
+ }
19
+ export function missingProjectDefaultCredentialWarning() {
20
+ return [
21
+ 'No CICD project default credential is configured.',
22
+ 'Run `agentia cicd project default set --credential <credential-id>` to set one.',
23
+ ].join(' ');
24
+ }
25
+ export function missingProjectDefaultWorkSetWarning() {
26
+ return [
27
+ missingProjectDefaultCredentialWarning(),
28
+ 'Then run `agentia cicd work update --source-credential <credential-id>` if the User Story should use it.',
29
+ ].join(' ');
30
+ }
31
+ export function missingStoryCredentialWarning(credentialId, workItemId) {
32
+ const updateTarget = workItemId === undefined ? '' : ` ${workItemId}`;
33
+ return [
34
+ 'The User Story has no source credential in Copado CICD.',
35
+ `Run \`agentia cicd work update${updateTarget} --source-credential ${credentialId}\` to bind the project default credential.`,
36
+ ].join(' ');
37
+ }
38
+ export function differingStoryCredentialWarning(storyCredentialId, projectDefaultCredentialId) {
39
+ return [
40
+ `The User Story source credential (${storyCredentialId}) differs from the project default credential (${projectDefaultCredentialId}).`,
41
+ 'Updating the User Story to use the project default credential.',
42
+ ].join(' ');
43
+ }
44
+ export async function readProjectDefaultCredentialContext() {
45
+ const [localDefaults, globalDefaults] = await Promise.all([readDefaults('local'), readDefaults('global')]);
46
+ const resolved = resolveDefaults(localDefaults, globalDefaults, ['credential', 'environment']);
47
+ const credential = resolved.find((entry) => entry.key === 'credential')?.value;
48
+ const environment = resolved.find((entry) => entry.key === 'environment')?.value;
49
+ return {
50
+ ...(typeof credential === 'string' && credential.trim().length > 0
51
+ ? { credentialId: credential.trim() }
52
+ : {}),
53
+ ...(typeof environment === 'string' && environment.trim().length > 0
54
+ ? { environmentId: environment.trim() }
55
+ : {}),
56
+ };
57
+ }
58
+ export function sanitizeWorkSetUserStory(userStory) {
59
+ const safeUserStory = { ...userStory };
60
+ delete safeUserStory.oauthSignature;
61
+ return safeUserStory;
62
+ }
63
+ export async function reconcileWorkSetCredential(workItem) {
64
+ const projectDefault = await readProjectDefaultCredentialContext();
65
+ const storyCredential = trimOptional(workItem.sourceCredential);
66
+ const sanitized = sanitizeWorkSetUserStory(workItem);
67
+ if (projectDefault.credentialId === undefined) {
68
+ return {
69
+ updated: false,
70
+ warnings: [missingProjectDefaultWorkSetWarning()],
71
+ workItem: sanitized,
72
+ };
73
+ }
74
+ if (storyCredential === undefined) {
75
+ return {
76
+ updated: false,
77
+ warnings: [missingStoryCredentialWarning(projectDefault.credentialId, workItem.id)],
78
+ workItem: sanitized,
79
+ };
80
+ }
81
+ if (salesforceIdsEqual(storyCredential, projectDefault.credentialId)) {
82
+ return {
83
+ updated: false,
84
+ warnings: [],
85
+ workItem: sanitized,
86
+ };
87
+ }
88
+ const warning = differingStoryCredentialWarning(storyCredential, projectDefault.credentialId);
89
+ const updated = await CicdGateway.call({
90
+ body: {
91
+ sourceCredential: projectDefault.credentialId,
92
+ },
93
+ endpoint: workEndpoint(workItem.id),
94
+ headers: { 'Content-Type': 'application/json' },
95
+ method: 'PATCH',
96
+ });
97
+ return {
98
+ updated: true,
99
+ warnings: [warning],
100
+ workItem: sanitizeWorkSetUserStory(updated),
101
+ };
102
+ }
103
+ function localReceiptMatches(receipt, context) {
104
+ return (receipt?.schemaVersion === context.schemaVersion &&
105
+ receipt.cicdBaseUrl === context.cicdBaseUrl &&
106
+ receipt.cicdKeyFingerprint === context.cicdKeyFingerprint &&
107
+ salesforceIdsEqual(receipt.credentialId, context.credentialId) &&
108
+ (receipt.environmentId ?? '') === (context.environmentId ?? '') &&
109
+ (receipt.orgId ?? '') === (context.orgId ?? ''));
110
+ }
111
+ function integrationWorkspace(integration) {
112
+ return integration.workspaceId ?? integration.workspace_id ?? undefined;
113
+ }
114
+ function matchingWorkspaceIntegrations(integrations, workspaceId) {
115
+ return integrations.filter((integration) => integration.type === 'copado_cicd' &&
116
+ integration.level === 'MEMBER' &&
117
+ integrationWorkspace(integration) === workspaceId);
118
+ }
119
+ function aiReceiptMatches(receipt, baseUrl, organizationId, workspaceId) {
120
+ return (receipt.ai?.baseUrl === baseUrl &&
121
+ receipt.ai.organizationId === organizationId &&
122
+ receipt.ai.workspaceId === workspaceId);
123
+ }
124
+ async function replaceAiIntegration(context, cicdCredentials, workspaceId, options) {
125
+ const integrations = await AiGateway.listIntegrations(options);
126
+ const matches = matchingWorkspaceIntegrations(integrations, workspaceId);
127
+ for (const integration of matches) {
128
+ // Replacement follows the established UI sequence because CICD credentials cannot be updated.
129
+ // eslint-disable-next-line no-await-in-loop
130
+ await AiGateway.deleteIntegration(integration.id, options);
131
+ }
132
+ const created = await AiGateway.createIntegration({
133
+ category: 'GENERAL',
134
+ config: { credentialId: context.credentialId },
135
+ credential: { apiKey: cicdCredentials.apiKey },
136
+ level: 'MEMBER',
137
+ name: AI_INTEGRATION_NAME,
138
+ type: 'copado_cicd',
139
+ workspaceId,
140
+ }, options);
141
+ const createdWorkspace = integrationWorkspace(created);
142
+ const createdCredentialId = created.config?.credentialId;
143
+ if ((created.type !== undefined && created.type !== 'copado_cicd') ||
144
+ (created.level !== undefined && created.level !== 'MEMBER') ||
145
+ (createdWorkspace !== undefined && createdWorkspace !== workspaceId) ||
146
+ (typeof createdCredentialId === 'string' &&
147
+ !salesforceIdsEqual(createdCredentialId, context.credentialId))) {
148
+ throw new Error('AI Gateway returned a Copado CICD integration that does not match the requested workspace context.');
149
+ }
150
+ return created.id;
151
+ }
152
+ function buildLocalContext(cicdCredentials, credentialId, environmentId, orgId) {
153
+ return {
154
+ cicdBaseUrl: cicdCredentials.baseUrl,
155
+ cicdKeyFingerprint: fingerprint(cicdCredentials.apiKey),
156
+ credentialId,
157
+ schemaVersion: CREDENTIAL_SYNC_SCHEMA_VERSION,
158
+ ...(environmentId === undefined ? {} : { environmentId }),
159
+ ...(orgId === undefined ? {} : { orgId }),
160
+ };
161
+ }
162
+ async function ensureAiIntegrationWithContext(input) {
163
+ const { aiOptions, cicdCredentials, context, force, workspaceId } = input;
164
+ const aiCredentials = resolveAiCredentials({ ...aiOptions, workspace: workspaceId });
165
+ const cached = await readCredentialSyncReceipt();
166
+ if (!force &&
167
+ localReceiptMatches(cached, context) &&
168
+ aiReceiptMatches(cached, aiCredentials.baseUrl, aiCredentials.orgId, workspaceId)) {
169
+ return {
170
+ credentialId: context.credentialId,
171
+ ...(context.environmentId === undefined ? {} : { environmentId: context.environmentId }),
172
+ integrationId: cached.ai?.integrationId,
173
+ ...(context.orgId === undefined ? {} : { orgId: context.orgId }),
174
+ workspaceId,
175
+ };
176
+ }
177
+ const integrationId = await replaceAiIntegration(context, cicdCredentials, workspaceId, aiOptions);
178
+ await writeCredentialSyncReceipt({
179
+ ...context,
180
+ ai: {
181
+ baseUrl: aiCredentials.baseUrl,
182
+ integrationId,
183
+ ...(aiCredentials.orgId === undefined ? {} : { organizationId: aiCredentials.orgId }),
184
+ workspaceId,
185
+ },
186
+ });
187
+ return {
188
+ credentialId: context.credentialId,
189
+ ...(context.environmentId === undefined ? {} : { environmentId: context.environmentId }),
190
+ integrationId,
191
+ ...(context.orgId === undefined ? {} : { orgId: context.orgId }),
192
+ workspaceId,
193
+ };
194
+ }
195
+ export async function ensureAgentCicdIntegration(agent, workspaceId, options = {}) {
196
+ if (!agentUsesCicdIntegration(agent) || options.noCredentialSync === true)
197
+ return undefined;
198
+ const cicdCredentials = tryResolveCicdCredentials({ forceRemote: true });
199
+ if (cicdCredentials === undefined)
200
+ return undefined;
201
+ if (workspaceId === undefined) {
202
+ throw new Error('AI dialogue did not identify its workspace. Pass --workspace or start a new dialogue before credential synchronization.');
203
+ }
204
+ const projectDefault = await readProjectDefaultCredentialContext();
205
+ const credentialId = trimOptional(options.credentialId) ?? projectDefault.credentialId;
206
+ if (credentialId === undefined) {
207
+ throw new Error(missingProjectDefaultCredentialWarning());
208
+ }
209
+ const aiCredentials = resolveAiCredentials({ ...options, workspace: workspaceId });
210
+ const orgId = aiCredentials.orgId === undefined ? undefined : String(aiCredentials.orgId);
211
+ const context = buildLocalContext(cicdCredentials, credentialId, projectDefault.environmentId, orgId);
212
+ const cached = await readCredentialSyncReceipt();
213
+ const cacheKey = [
214
+ aiCredentials.baseUrl,
215
+ orgId ?? '',
216
+ workspaceId,
217
+ cicdCredentials.baseUrl,
218
+ fingerprint(cicdCredentials.apiKey),
219
+ credentialId,
220
+ projectDefault.environmentId ?? '',
221
+ ].join('|');
222
+ if (options.forceCredentialSync !== true &&
223
+ localReceiptMatches(cached, context) &&
224
+ aiReceiptMatches(cached, aiCredentials.baseUrl, aiCredentials.orgId, workspaceId)) {
225
+ return {
226
+ credentialId: cached.credentialId,
227
+ ...(cached.environmentId === undefined ? {} : { environmentId: cached.environmentId }),
228
+ integrationId: cached.ai?.integrationId,
229
+ ...(cached.orgId === undefined ? {} : { orgId: cached.orgId }),
230
+ workspaceId,
231
+ };
232
+ }
233
+ const active = activeSyncs.get(cacheKey);
234
+ if (active !== undefined)
235
+ return active;
236
+ const sync = ensureAiIntegrationWithContext({
237
+ aiOptions: options,
238
+ cicdCredentials,
239
+ context,
240
+ force: options.forceCredentialSync === true,
241
+ workspaceId,
242
+ }).finally(() => activeSyncs.delete(cacheKey));
243
+ activeSyncs.set(cacheKey, sync);
244
+ return sync;
245
+ }
246
+ export function clearCredentialSyncsForTests() {
247
+ activeSyncs.clear();
248
+ }
249
+ //# sourceMappingURL=credential-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-sync.js","sourceRoot":"","sources":["../../src/lib/credential-sync.ts"],"names":[],"mappings":"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"}
package/dist/lib/debug.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { redactSecrets } from './secret-redaction.js';
1
2
  export function isVerboseDebug(env = process.env) {
2
3
  return env.DEBUG?.trim().toLowerCase() === 'verbose';
3
4
  }
@@ -17,7 +18,8 @@ export function logVerboseDebug(section, payload) {
17
18
  if (!isVerboseDebug()) {
18
19
  return;
19
20
  }
20
- const serialized = typeof payload === 'string' ? payload : JSON.stringify(payload, null, 2);
21
+ const redacted = redactSecrets(payload);
22
+ const serialized = typeof redacted === 'string' ? redacted : JSON.stringify(redacted, null, 2);
21
23
  process.stderr.write(`[DEBUG] ${section}\n${serialized}\n`);
22
24
  }
23
25
  //# sourceMappingURL=debug.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/lib/debug.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,MAAyB,OAAO,CAAC,GAAG;IACjE,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,SAAS,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAA;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,OAAgB;IAC/D,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,OAAM;IACR,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC3F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,KAAK,UAAU,IAAI,CAAC,CAAA;AAC7D,CAAC"}
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/lib/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAA;AAEnD,MAAM,UAAU,cAAc,CAAC,MAAyB,OAAO,CAAC,GAAG;IACjE,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,SAAS,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAA;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,OAAgB;IAC/D,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,OAAM;IACR,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACvC,MAAM,UAAU,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC9F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,KAAK,UAAU,IAAI,CAAC,CAAA;AAC7D,CAAC"}
@@ -1,6 +1,21 @@
1
1
  import { type ProjectDefaultKey, type ProjectDefaults, type ProjectDefaultScope, type ResolvedProjectDefault } from './project-defaults.js';
2
2
  import { type CachedUserContext, type StoredUserContext } from './user-context-types.js';
3
3
  export declare const DEFAULT_WORK_PUSH_RETRY_TIMEOUT_SECONDS = 300;
4
+ export type CredentialSyncAiReceipt = {
5
+ baseUrl: string;
6
+ integrationId: string;
7
+ organizationId?: number;
8
+ workspaceId: string;
9
+ };
10
+ export type CredentialSyncReceipt = {
11
+ ai?: CredentialSyncAiReceipt;
12
+ cicdBaseUrl: string;
13
+ cicdKeyFingerprint: string;
14
+ credentialId: string;
15
+ environmentId?: string;
16
+ orgId?: string;
17
+ schemaVersion: 2;
18
+ };
4
19
  export type DefaultsStorePaths = {
5
20
  /** Home-directory config (`~/.config/agentia-cli/config.json`). */
6
21
  globalPath: string;
@@ -23,6 +38,9 @@ export declare function readDefaults(scope: ProjectDefaultScope): Promise<Projec
23
38
  export declare function readUserContext(): Promise<CachedUserContext | undefined>;
24
39
  export declare function writeUserContext(cached: CachedUserContext): Promise<CachedUserContext>;
25
40
  export declare function clearUserContext(): Promise<void>;
41
+ export declare function readCredentialSyncReceipt(): Promise<CredentialSyncReceipt | undefined>;
42
+ export declare function writeCredentialSyncReceipt(receipt: CredentialSyncReceipt): Promise<CredentialSyncReceipt>;
43
+ export declare function clearCredentialSyncReceipt(): Promise<void>;
26
44
  export declare function readLastWorkItem(): Promise<string | undefined>;
27
45
  export declare function readLastWorkItemId(): Promise<string | undefined>;
28
46
  export declare function readLastWorkItemTitle(): Promise<string | undefined>;