@intutic/cli 2.3.0 → 2.4.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.
- package/dist/cli.js +101 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/budgetLimits.d.ts +70 -0
- package/dist/commands/budgetLimits.d.ts.map +1 -0
- package/dist/commands/budgetLimits.js +223 -0
- package/dist/commands/budgetLimits.js.map +1 -0
- package/dist/commands/credentials.d.ts +5 -1
- package/dist/commands/credentials.d.ts.map +1 -1
- package/dist/commands/credentials.js +98 -9
- package/dist/commands/credentials.js.map +1 -1
- package/dist/commands/incidents.d.ts +32 -0
- package/dist/commands/incidents.d.ts.map +1 -0
- package/dist/commands/incidents.js +94 -0
- package/dist/commands/incidents.js.map +1 -0
- package/dist/commands/settings.d.ts +5 -4
- package/dist/commands/settings.d.ts.map +1 -1
- package/dist/commands/settings.js +8 -6
- package/dist/commands/settings.js.map +1 -1
- package/dist/lib/providerProbe.d.ts +1 -1
- package/dist/lib/providerProbe.d.ts.map +1 -1
- package/dist/lib/providerProbe.js +13 -5
- package/dist/lib/providerProbe.js.map +1 -1
- package/package.json +5 -5
|
@@ -12,17 +12,18 @@
|
|
|
12
12
|
* value with a 400 naming it, so the CLI stays correct as settings are added.
|
|
13
13
|
* The MCP policy (`mcpDefaultPolicy`, `mcpHighRiskToolChange`, `mcpBudgets`,
|
|
14
14
|
* `mcpInjectionAction`, `mcpAnomalyMode`, …), the group policy
|
|
15
|
-
* (`sso_group_policy`), the PII detector actions (`piiDetectors`)
|
|
16
|
-
* `configBodyUpload` are all set
|
|
15
|
+
* (`sso_group_policy`), the PII detector actions (`piiDetectors`), upstream
|
|
16
|
+
* retries and fallbacks (`upstreamRetry`) and `configBodyUpload` are all set
|
|
17
|
+
* this way.
|
|
17
18
|
*
|
|
18
19
|
* The structured settings with a schema in `@intutic/shared-types` are
|
|
19
|
-
* checked here first, so a mistake in a budgets, group-policy or
|
|
20
|
-
* file is reported with the path of the field at fault rather than only the
|
|
20
|
+
* checked here first, so a mistake in a budgets, group-policy, detector or
|
|
21
|
+
* retry file is reported with the path of the field at fault rather than only the
|
|
21
22
|
* top-level key the server's 400 names.
|
|
22
23
|
*
|
|
23
24
|
* @module
|
|
24
25
|
*/
|
|
25
|
-
import { McpBudgetSettingsSchema, PiiDetectorSettingsSchema, SsoGroupPolicySchema } from '@intutic/shared-types';
|
|
26
|
+
import { McpBudgetSettingsSchema, PiiDetectorSettingsSchema, SsoGroupPolicySchema, UpstreamRetrySettingsSchema, } from '@intutic/shared-types';
|
|
26
27
|
import { log } from '../lib/logger.js';
|
|
27
28
|
import { fail, readJsonFile, runApiCommand } from './apiCommand.js';
|
|
28
29
|
/**
|
|
@@ -35,7 +36,8 @@ export function localProblems(key, value) {
|
|
|
35
36
|
// `null` clears the policy.
|
|
36
37
|
: key === 'sso_group_policy' ? SsoGroupPolicySchema.nullable()
|
|
37
38
|
: key === 'piiDetectors' ? PiiDetectorSettingsSchema.nullable()
|
|
38
|
-
:
|
|
39
|
+
: key === 'upstreamRetry' ? UpstreamRetrySettingsSchema.nullable()
|
|
40
|
+
: null;
|
|
39
41
|
if (!schema)
|
|
40
42
|
return [];
|
|
41
43
|
const checked = schema.safeParse(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/commands/settings.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/commands/settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ export interface ProviderProbeOutcome {
|
|
|
21
21
|
/**
|
|
22
22
|
* Verify a credential the caller holds locally (not yet, or not necessarily,
|
|
23
23
|
* saved anywhere). `fields` matches the provider's registry field shape,
|
|
24
|
-
* e.g. `{apiKey: '...'}` for Anthropic, `{apiKey, endpoint
|
|
24
|
+
* e.g. `{apiKey: '...'}` for Anthropic, `{apiKey, endpoint}`
|
|
25
25
|
* for Azure OpenAI.
|
|
26
26
|
*/
|
|
27
27
|
export declare function probeProviderCredential(providerId: string, fields: Record<string, string>, timeoutMs?: number): Promise<ProviderProbeOutcome>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerProbe.d.ts","sourceRoot":"","sources":["../../src/lib/providerProbe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"providerProbe.d.ts","sourceRoot":"","sources":["../../src/lib/providerProbe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAqE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAE5H,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,GAAG,aAAa,CAAA;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,SAAS,SAAS,GACjB,OAAO,CAAC,oBAAoB,CAAC,CA6C/B"}
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @module
|
|
14
14
|
*/
|
|
15
|
-
import {
|
|
15
|
+
import { buildVerificationProbeAsync, classifyProbe, getProviderDefinition } from '@intutic/shared-types';
|
|
16
16
|
/**
|
|
17
17
|
* Verify a credential the caller holds locally (not yet, or not necessarily,
|
|
18
18
|
* saved anywhere). `fields` matches the provider's registry field shape,
|
|
19
|
-
* e.g. `{apiKey: '...'}` for Anthropic, `{apiKey, endpoint
|
|
19
|
+
* e.g. `{apiKey: '...'}` for Anthropic, `{apiKey, endpoint}`
|
|
20
20
|
* for Azure OpenAI.
|
|
21
21
|
*/
|
|
22
22
|
export async function probeProviderCredential(providerId, fields, timeoutMs = 10_000) {
|
|
@@ -24,13 +24,19 @@ export async function probeProviderCredential(providerId, fields, timeoutMs = 10
|
|
|
24
24
|
if (!def) {
|
|
25
25
|
return { status: 'unsupported', detail: `Unknown provider '${providerId}'` };
|
|
26
26
|
}
|
|
27
|
-
const probe =
|
|
27
|
+
const probe = await buildVerificationProbeAsync(providerId, fields);
|
|
28
28
|
if (!probe) {
|
|
29
29
|
return {
|
|
30
30
|
status: 'unsupported',
|
|
31
31
|
detail: `${def.displayName} cannot be verified automatically yet — double-check the credential by hand`,
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
|
+
if (probe.localVerdict) {
|
|
35
|
+
return {
|
|
36
|
+
status: probe.localVerdict,
|
|
37
|
+
detail: `${def.displayName}: ${probe.validDetail ?? 'the credential cannot be used'}`,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
34
40
|
try {
|
|
35
41
|
const res = await fetch(probe.url, {
|
|
36
42
|
method: probe.method,
|
|
@@ -38,12 +44,14 @@ export async function probeProviderCredential(providerId, fields, timeoutMs = 10
|
|
|
38
44
|
...(probe.body ? { body: probe.body } : {}),
|
|
39
45
|
signal: AbortSignal.timeout(timeoutMs),
|
|
40
46
|
});
|
|
41
|
-
const verdict =
|
|
47
|
+
const verdict = classifyProbe(probe, res.status, res.headers);
|
|
42
48
|
return {
|
|
43
49
|
status: verdict,
|
|
44
50
|
httpStatus: res.status,
|
|
45
51
|
detail: verdict === 'valid'
|
|
46
|
-
?
|
|
52
|
+
? probe.validDetail
|
|
53
|
+
? `${def.displayName}: ${probe.validDetail}`
|
|
54
|
+
: `${def.displayName} credential looks valid`
|
|
47
55
|
: verdict === 'invalid'
|
|
48
56
|
? `${def.displayName} rejected the credential (HTTP ${res.status})`
|
|
49
57
|
: `${def.displayName} returned HTTP ${res.status} — could not confirm either way`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerProbe.js","sourceRoot":"","sources":["../../src/lib/providerProbe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"providerProbe.js","sourceRoot":"","sources":["../../src/lib/providerProbe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,2BAA2B,EAAE,aAAa,EAAE,qBAAqB,EAAqB,MAAM,uBAAuB,CAAA;AAQ5H;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,MAA8B,EAC9B,SAAS,GAAG,MAAM;IAElB,MAAM,GAAG,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAA;IAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,qBAAqB,UAAU,GAAG,EAAE,CAAA;IAC9E,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,2BAA2B,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IACnE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,6EAA6E;SACxG,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,YAAY;YAC1B,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,IAAI,+BAA+B,EAAE;SACtF,CAAA;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;YACjC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;SACvC,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;QAC7D,OAAO;YACL,MAAM,EAAE,OAAO;YACf,UAAU,EAAE,GAAG,CAAC,MAAM;YACtB,MAAM,EACJ,OAAO,KAAK,OAAO;gBACjB,CAAC,CAAC,KAAK,CAAC,WAAW;oBACjB,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,EAAE;oBAC5C,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,yBAAyB;gBAC/C,CAAC,CAAC,OAAO,KAAK,SAAS;oBACrB,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,kCAAkC,GAAG,CAAC,MAAM,GAAG;oBACnE,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,kBAAkB,GAAG,CAAC,MAAM,iCAAiC;SACxF,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,GAAG,CAAC,WAAW,eAAe,OAAO,EAAE,EAAE,CAAA;IAClG,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intutic/cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Intutic CLI — sync daemon, harness detection, and workspace management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -39,10 +39,10 @@
|
|
|
39
39
|
"ioredis": "^5.11.1",
|
|
40
40
|
"picocolors": "^1",
|
|
41
41
|
"yaml": "^2.9.0",
|
|
42
|
-
"@intutic/shared-types": "2.
|
|
43
|
-
"@intutic/id": "2.
|
|
44
|
-
"@intutic/logger": "2.
|
|
45
|
-
"@intutic/sync-daemon": "2.
|
|
42
|
+
"@intutic/shared-types": "2.4.0",
|
|
43
|
+
"@intutic/id": "2.4.0",
|
|
44
|
+
"@intutic/logger": "2.4.0",
|
|
45
|
+
"@intutic/sync-daemon": "2.4.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"typescript": "^5.5",
|