@intutic/cli 1.10.0 → 2.0.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/README.md +1 -0
- package/dist/cli.js +868 -30
- package/dist/cli.js.map +1 -1
- package/dist/commands/attenuate.d.ts +39 -0
- package/dist/commands/attenuate.d.ts.map +1 -0
- package/dist/commands/attenuate.js +98 -0
- package/dist/commands/attenuate.js.map +1 -0
- package/dist/commands/budget.d.ts +80 -0
- package/dist/commands/budget.d.ts.map +1 -1
- package/dist/commands/budget.js +119 -3
- package/dist/commands/budget.js.map +1 -1
- package/dist/commands/connect.d.ts +10 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +358 -48
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/credentials.d.ts +31 -0
- package/dist/commands/credentials.d.ts.map +1 -0
- package/dist/commands/credentials.js +134 -0
- package/dist/commands/credentials.js.map +1 -0
- package/dist/commands/decision.d.ts +37 -0
- package/dist/commands/decision.d.ts.map +1 -0
- package/dist/commands/decision.js +56 -0
- package/dist/commands/decision.js.map +1 -0
- package/dist/commands/doctor.d.ts +38 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +228 -18
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/enforce.d.ts +33 -0
- package/dist/commands/enforce.d.ts.map +1 -0
- package/dist/commands/enforce.js +150 -0
- package/dist/commands/enforce.js.map +1 -0
- package/dist/commands/enterprise.d.ts +29 -0
- package/dist/commands/enterprise.d.ts.map +1 -0
- package/dist/commands/enterprise.js +141 -0
- package/dist/commands/enterprise.js.map +1 -0
- package/dist/commands/env.d.ts +7 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +55 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/exec.d.ts +38 -2
- package/dist/commands/exec.d.ts.map +1 -1
- package/dist/commands/exec.js +247 -10
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/findings.d.ts +84 -0
- package/dist/commands/findings.d.ts.map +1 -0
- package/dist/commands/findings.js +329 -0
- package/dist/commands/findings.js.map +1 -0
- package/dist/commands/gateway.d.ts +62 -0
- package/dist/commands/gateway.d.ts.map +1 -0
- package/dist/commands/gateway.js +298 -0
- package/dist/commands/gateway.js.map +1 -0
- package/dist/commands/guardrails.d.ts +81 -0
- package/dist/commands/guardrails.d.ts.map +1 -0
- package/dist/commands/guardrails.js +735 -0
- package/dist/commands/guardrails.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +14 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install-daemon.d.ts +70 -3
- package/dist/commands/install-daemon.d.ts.map +1 -1
- package/dist/commands/install-daemon.js +482 -47
- package/dist/commands/install-daemon.js.map +1 -1
- package/dist/commands/integrity.d.ts +205 -0
- package/dist/commands/integrity.d.ts.map +1 -0
- package/dist/commands/integrity.js +620 -0
- package/dist/commands/integrity.js.map +1 -0
- package/dist/commands/judge.d.ts +31 -0
- package/dist/commands/judge.d.ts.map +1 -0
- package/dist/commands/judge.js +118 -0
- package/dist/commands/judge.js.map +1 -0
- package/dist/commands/org.d.ts +31 -0
- package/dist/commands/org.d.ts.map +1 -0
- package/dist/commands/org.js +159 -0
- package/dist/commands/org.js.map +1 -0
- package/dist/commands/policy.d.ts +138 -4
- package/dist/commands/policy.d.ts.map +1 -1
- package/dist/commands/policy.js +538 -97
- package/dist/commands/policy.js.map +1 -1
- package/dist/commands/predict-cost.d.ts +45 -0
- package/dist/commands/predict-cost.d.ts.map +1 -0
- package/dist/commands/predict-cost.js +123 -0
- package/dist/commands/predict-cost.js.map +1 -0
- package/dist/commands/rollback.d.ts +5 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +142 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/routing.d.ts +62 -0
- package/dist/commands/routing.d.ts.map +1 -0
- package/dist/commands/routing.js +121 -0
- package/dist/commands/routing.js.map +1 -0
- package/dist/commands/setup.d.ts +62 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +238 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skill.d.ts +268 -1
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +744 -39
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/sops.d.ts +95 -0
- package/dist/commands/sops.d.ts.map +1 -1
- package/dist/commands/sops.js +334 -34
- package/dist/commands/sops.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +1 -18
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +44 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/team.d.ts +38 -0
- package/dist/commands/team.d.ts.map +1 -0
- package/dist/commands/team.js +140 -0
- package/dist/commands/team.js.map +1 -0
- package/dist/commands/traces.d.ts +8 -1
- package/dist/commands/traces.d.ts.map +1 -1
- package/dist/commands/traces.js +114 -15
- package/dist/commands/traces.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +2 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config/keychain.d.ts +10 -2
- package/dist/config/keychain.d.ts.map +1 -1
- package/dist/config/keychain.js +83 -14
- package/dist/config/keychain.js.map +1 -1
- package/dist/config/paths.d.ts +27 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +37 -6
- package/dist/config/paths.js.map +1 -1
- package/dist/config/store.d.ts.map +1 -1
- package/dist/config/store.js +19 -3
- package/dist/config/store.js.map +1 -1
- package/dist/harness/ag2.d.ts +22 -0
- package/dist/harness/ag2.d.ts.map +1 -0
- package/dist/harness/ag2.js +34 -0
- package/dist/harness/ag2.js.map +1 -0
- package/dist/harness/agentcore.d.ts +55 -0
- package/dist/harness/agentcore.d.ts.map +1 -0
- package/dist/harness/agentcore.js +119 -0
- package/dist/harness/agentcore.js.map +1 -0
- package/dist/harness/agenticOrchestrator.d.ts +52 -0
- package/dist/harness/agenticOrchestrator.d.ts.map +1 -0
- package/dist/harness/agenticOrchestrator.js +115 -0
- package/dist/harness/agenticOrchestrator.js.map +1 -0
- package/dist/harness/aiSdkHarness.d.ts +30 -0
- package/dist/harness/aiSdkHarness.d.ts.map +1 -0
- package/dist/harness/aiSdkHarness.js +51 -0
- package/dist/harness/aiSdkHarness.js.map +1 -0
- package/dist/harness/aiSdkWorkflow.d.ts +26 -0
- package/dist/harness/aiSdkWorkflow.d.ts.map +1 -0
- package/dist/harness/aiSdkWorkflow.js +39 -0
- package/dist/harness/aiSdkWorkflow.js.map +1 -0
- package/dist/harness/autogen.d.ts +24 -0
- package/dist/harness/autogen.d.ts.map +1 -0
- package/dist/harness/autogen.js +36 -0
- package/dist/harness/autogen.js.map +1 -0
- package/dist/harness/base.js.map +1 -1
- package/dist/harness/continue.d.ts.map +1 -1
- package/dist/harness/continue.js +2 -1
- package/dist/harness/continue.js.map +1 -1
- package/dist/harness/crewai.d.ts +15 -0
- package/dist/harness/crewai.d.ts.map +1 -0
- package/dist/harness/crewai.js +26 -0
- package/dist/harness/crewai.js.map +1 -0
- package/dist/harness/detector.d.ts +1 -1
- package/dist/harness/detector.d.ts.map +1 -1
- package/dist/harness/detector.js +47 -1
- package/dist/harness/detector.js.map +1 -1
- package/dist/harness/dsh.d.ts +19 -0
- package/dist/harness/dsh.d.ts.map +1 -0
- package/dist/harness/dsh.js +93 -0
- package/dist/harness/dsh.js.map +1 -0
- package/dist/harness/eve.d.ts +40 -0
- package/dist/harness/eve.d.ts.map +1 -0
- package/dist/harness/eve.js +67 -0
- package/dist/harness/eve.js.map +1 -0
- package/dist/harness/googleAdk.d.ts +18 -0
- package/dist/harness/googleAdk.d.ts.map +1 -0
- package/dist/harness/googleAdk.js +29 -0
- package/dist/harness/googleAdk.js.map +1 -0
- package/dist/harness/goose.d.ts.map +1 -1
- package/dist/harness/goose.js +5 -1
- package/dist/harness/goose.js.map +1 -1
- package/dist/harness/grok.d.ts +16 -0
- package/dist/harness/grok.d.ts.map +1 -0
- package/dist/harness/grok.js +78 -0
- package/dist/harness/grok.js.map +1 -0
- package/dist/harness/jsSdkGatedAdapter.d.ts +102 -0
- package/dist/harness/jsSdkGatedAdapter.d.ts.map +1 -0
- package/dist/harness/jsSdkGatedAdapter.js +139 -0
- package/dist/harness/jsSdkGatedAdapter.js.map +1 -0
- package/dist/harness/langchain.d.ts +22 -0
- package/dist/harness/langchain.d.ts.map +1 -0
- package/dist/harness/langchain.js +33 -0
- package/dist/harness/langchain.js.map +1 -0
- package/dist/harness/langgraph.d.ts +22 -0
- package/dist/harness/langgraph.d.ts.map +1 -0
- package/dist/harness/langgraph.js +80 -0
- package/dist/harness/langgraph.js.map +1 -0
- package/dist/harness/mastra.d.ts +21 -0
- package/dist/harness/mastra.d.ts.map +1 -0
- package/dist/harness/mastra.js +33 -0
- package/dist/harness/mastra.js.map +1 -0
- package/dist/harness/muse.d.ts +22 -0
- package/dist/harness/muse.d.ts.map +1 -0
- package/dist/harness/muse.js +92 -0
- package/dist/harness/muse.js.map +1 -0
- package/dist/harness/n8n.d.ts.map +1 -1
- package/dist/harness/n8n.js +36 -11
- package/dist/harness/n8n.js.map +1 -1
- package/dist/harness/openaiAgents.d.ts +40 -0
- package/dist/harness/openaiAgents.d.ts.map +1 -0
- package/dist/harness/openaiAgents.js +107 -0
- package/dist/harness/openaiAgents.js.map +1 -0
- package/dist/harness/opencode.d.ts +24 -0
- package/dist/harness/opencode.d.ts.map +1 -0
- package/dist/harness/opencode.js +97 -0
- package/dist/harness/opencode.js.map +1 -0
- package/dist/harness/pydanticAi.d.ts +19 -0
- package/dist/harness/pydanticAi.d.ts.map +1 -0
- package/dist/harness/pydanticAi.js +30 -0
- package/dist/harness/pydanticAi.js.map +1 -0
- package/dist/harness/sdkGatedAdapter.d.ts +55 -0
- package/dist/harness/sdkGatedAdapter.d.ts.map +1 -0
- package/dist/harness/sdkGatedAdapter.js +85 -0
- package/dist/harness/sdkGatedAdapter.js.map +1 -0
- package/dist/harness/smolagents.d.ts +22 -0
- package/dist/harness/smolagents.d.ts.map +1 -0
- package/dist/harness/smolagents.js +33 -0
- package/dist/harness/smolagents.js.map +1 -0
- package/dist/harness/strands.d.ts +22 -0
- package/dist/harness/strands.d.ts.map +1 -0
- package/dist/harness/strands.js +35 -0
- package/dist/harness/strands.js.map +1 -0
- package/dist/harness/trueforge.d.ts +25 -0
- package/dist/harness/trueforge.d.ts.map +1 -0
- package/dist/harness/trueforge.js +40 -0
- package/dist/harness/trueforge.js.map +1 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js +70 -0
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/vercelAiSdk.d.ts +31 -0
- package/dist/harness/vercelAiSdk.d.ts.map +1 -0
- package/dist/harness/vercelAiSdk.js +44 -0
- package/dist/harness/vercelAiSdk.js.map +1 -0
- package/dist/harness/xirp.d.ts +43 -0
- package/dist/harness/xirp.d.ts.map +1 -0
- package/dist/harness/xirp.js +95 -0
- package/dist/harness/xirp.js.map +1 -0
- package/dist/lib/api.d.ts +68 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +108 -67
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/authMessages.d.ts +19 -0
- package/dist/lib/authMessages.d.ts.map +1 -0
- package/dist/lib/authMessages.js +20 -0
- package/dist/lib/authMessages.js.map +1 -0
- package/dist/lib/binaryChecksum.d.ts +12 -0
- package/dist/lib/binaryChecksum.d.ts.map +1 -0
- package/dist/lib/binaryChecksum.js +45 -0
- package/dist/lib/binaryChecksum.js.map +1 -0
- package/dist/lib/binaryOnPath.d.ts +24 -0
- package/dist/lib/binaryOnPath.d.ts.map +1 -0
- package/dist/lib/binaryOnPath.js +31 -0
- package/dist/lib/binaryOnPath.js.map +1 -0
- package/dist/lib/caTrust.d.ts +69 -0
- package/dist/lib/caTrust.d.ts.map +1 -0
- package/dist/lib/caTrust.js +169 -0
- package/dist/lib/caTrust.js.map +1 -0
- package/dist/lib/ciscoScanner.d.ts +178 -0
- package/dist/lib/ciscoScanner.d.ts.map +1 -0
- package/dist/lib/ciscoScanner.js +292 -0
- package/dist/lib/ciscoScanner.js.map +1 -0
- package/dist/lib/decisionsLogRefresh.d.ts +28 -0
- package/dist/lib/decisionsLogRefresh.d.ts.map +1 -0
- package/dist/lib/decisionsLogRefresh.js +54 -0
- package/dist/lib/decisionsLogRefresh.js.map +1 -0
- package/dist/lib/deviceReport.d.ts +26 -0
- package/dist/lib/deviceReport.d.ts.map +1 -0
- package/dist/lib/deviceReport.js +55 -0
- package/dist/lib/deviceReport.js.map +1 -0
- package/dist/lib/elevation.d.ts +58 -0
- package/dist/lib/elevation.d.ts.map +1 -0
- package/dist/lib/elevation.js +83 -0
- package/dist/lib/elevation.js.map +1 -0
- package/dist/lib/enforcementState.d.ts +69 -0
- package/dist/lib/enforcementState.d.ts.map +1 -0
- package/dist/lib/enforcementState.js +113 -0
- package/dist/lib/enforcementState.js.map +1 -0
- package/dist/lib/ensureValkey.d.ts.map +1 -1
- package/dist/lib/ensureValkey.js +2 -2
- package/dist/lib/ensureValkey.js.map +1 -1
- package/dist/lib/envInjector.d.ts.map +1 -1
- package/dist/lib/envInjector.js +22 -4
- package/dist/lib/envInjector.js.map +1 -1
- package/dist/lib/gitHooks.d.ts +7 -2
- package/dist/lib/gitHooks.d.ts.map +1 -1
- package/dist/lib/gitHooks.js +180 -13
- package/dist/lib/gitHooks.js.map +1 -1
- package/dist/lib/gracefulShutdown.d.ts +37 -0
- package/dist/lib/gracefulShutdown.d.ts.map +1 -0
- package/dist/lib/gracefulShutdown.js +57 -0
- package/dist/lib/gracefulShutdown.js.map +1 -0
- package/dist/lib/graphIdentity.d.ts +80 -0
- package/dist/lib/graphIdentity.d.ts.map +1 -0
- package/dist/lib/graphIdentity.js +120 -0
- package/dist/lib/graphIdentity.js.map +1 -0
- package/dist/lib/localTraces.d.ts +61 -0
- package/dist/lib/localTraces.d.ts.map +1 -0
- package/dist/lib/localTraces.js +173 -0
- package/dist/lib/localTraces.js.map +1 -0
- package/dist/lib/mdmManifest.d.ts +73 -0
- package/dist/lib/mdmManifest.d.ts.map +1 -0
- package/dist/lib/mdmManifest.js +190 -0
- package/dist/lib/mdmManifest.js.map +1 -0
- package/dist/lib/onboarding.d.ts.map +1 -1
- package/dist/lib/onboarding.js +60 -1
- package/dist/lib/onboarding.js.map +1 -1
- package/dist/lib/otelPropagation.d.ts +26 -0
- package/dist/lib/otelPropagation.d.ts.map +1 -0
- package/dist/lib/otelPropagation.js +40 -0
- package/dist/lib/otelPropagation.js.map +1 -0
- package/dist/lib/policySnapshot.d.ts +92 -0
- package/dist/lib/policySnapshot.d.ts.map +1 -0
- package/dist/lib/policySnapshot.js +173 -0
- package/dist/lib/policySnapshot.js.map +1 -0
- package/dist/lib/process.d.ts.map +1 -1
- package/dist/lib/process.js +60 -0
- package/dist/lib/process.js.map +1 -1
- package/dist/lib/providerProbe.d.ts +28 -0
- package/dist/lib/providerProbe.d.ts.map +1 -0
- package/dist/lib/providerProbe.js +57 -0
- package/dist/lib/providerProbe.js.map +1 -0
- package/dist/lib/proxyBinary.d.ts +19 -0
- package/dist/lib/proxyBinary.d.ts.map +1 -0
- package/dist/lib/proxyBinary.js +30 -0
- package/dist/lib/proxyBinary.js.map +1 -0
- package/dist/lib/sandbox/firecracker.d.ts +89 -0
- package/dist/lib/sandbox/firecracker.d.ts.map +1 -0
- package/dist/lib/sandbox/firecracker.js +135 -0
- package/dist/lib/sandbox/firecracker.js.map +1 -0
- package/dist/lib/sandbox/index.d.ts +34 -0
- package/dist/lib/sandbox/index.d.ts.map +1 -0
- package/dist/lib/sandbox/index.js +54 -0
- package/dist/lib/sandbox/index.js.map +1 -0
- package/dist/lib/sandbox/oci.d.ts +38 -0
- package/dist/lib/sandbox/oci.d.ts.map +1 -0
- package/dist/lib/sandbox/oci.js +108 -0
- package/dist/lib/sandbox/oci.js.map +1 -0
- package/dist/lib/sandbox/types.d.ts +48 -0
- package/dist/lib/sandbox/types.d.ts.map +1 -0
- package/dist/lib/sandbox/types.js +12 -0
- package/dist/lib/sandbox/types.js.map +1 -0
- package/dist/lib/sopFrontMatter.d.ts +50 -0
- package/dist/lib/sopFrontMatter.d.ts.map +1 -0
- package/dist/lib/sopFrontMatter.js +129 -0
- package/dist/lib/sopFrontMatter.js.map +1 -0
- package/package.json +11 -6
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `intutic findings` — List and adjudicate detector findings.
|
|
3
|
+
*
|
|
4
|
+
* `services/control-plane/src/routes/findings.ts` has carried a complete
|
|
5
|
+
* TP/FP adjudication API since it landed, with zero consumers: no CLI
|
|
6
|
+
* command, no dashboard page. Without a way to actually rule on a finding,
|
|
7
|
+
* `false_positive_rate` in `/stats` and the response-echo report can only
|
|
8
|
+
* ever return null — the labelling rate was structurally zero. This is that
|
|
9
|
+
* missing writer.
|
|
10
|
+
*
|
|
11
|
+
* Subcommands:
|
|
12
|
+
* - `intutic findings list [--unadjudicated] [--detector <id>] [--limit N] [--json]`
|
|
13
|
+
* - `intutic findings adjudicate <findingId> (--true-positive|--false-positive) [--note <text>]`
|
|
14
|
+
* - `intutic findings stats [--json]`
|
|
15
|
+
* - `intutic findings echo-report [--since <date>] [--until <date>] [--json]`
|
|
16
|
+
*
|
|
17
|
+
* The adjudicator identity is never a flag here — the server derives it from
|
|
18
|
+
* the authenticated session (`c.get('auth')`), the same reasoning
|
|
19
|
+
* `intutic decision approve|reject` documents: a client-supplied name makes
|
|
20
|
+
* the audit trail forgeable.
|
|
21
|
+
*
|
|
22
|
+
* @module
|
|
23
|
+
*/
|
|
24
|
+
interface FindingsCliOpts {
|
|
25
|
+
dev?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** Pad a string to a fixed VISIBLE width (right-pad with spaces). */
|
|
28
|
+
export declare function pad(str: string, width: number): string;
|
|
29
|
+
/**
|
|
30
|
+
* `intutic findings list` — List detector findings for the workspace.
|
|
31
|
+
*
|
|
32
|
+
* `--unadjudicated` matches the route's own default behaviour: omitted, the
|
|
33
|
+
* route returns every finding (adjudicated or not); passed, it adds
|
|
34
|
+
* `unadjudicated=true` and returns only the working queue. The CLI does not
|
|
35
|
+
* invent a different default than the route it calls.
|
|
36
|
+
*/
|
|
37
|
+
export declare function runFindingsList(opts: FindingsCliOpts & {
|
|
38
|
+
unadjudicated?: boolean;
|
|
39
|
+
detector?: string;
|
|
40
|
+
limit?: string;
|
|
41
|
+
json?: boolean;
|
|
42
|
+
}): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* `intutic findings adjudicate <findingId>` — Record a human ruling on one finding.
|
|
45
|
+
*
|
|
46
|
+
* Exactly one of `--true-positive` / `--false-positive` is required, checked
|
|
47
|
+
* client-side before any request is made — the same discipline
|
|
48
|
+
* `runGatewayAssign`'s `--gateway`/`--clear` pair and `runGatewayConfigSet`
|
|
49
|
+
* use for their own mutually-exclusive flags.
|
|
50
|
+
*/
|
|
51
|
+
export declare function runFindingsAdjudicate(findingId: string, opts: FindingsCliOpts & {
|
|
52
|
+
truePositive?: boolean;
|
|
53
|
+
falsePositive?: boolean;
|
|
54
|
+
note?: string;
|
|
55
|
+
json?: boolean;
|
|
56
|
+
}): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* `intutic findings stats` — Per-detector false-positive rate, over
|
|
59
|
+
* adjudicated findings only.
|
|
60
|
+
*
|
|
61
|
+
* The `caveats` array exists specifically to be read alongside the numbers
|
|
62
|
+
* it qualifies — this prints it verbatim, never summarized or suppressed.
|
|
63
|
+
*/
|
|
64
|
+
export declare function runFindingsStats(opts: FindingsCliOpts & {
|
|
65
|
+
json?: boolean;
|
|
66
|
+
}): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* `intutic findings echo-report` — The response-injection echo measurement
|
|
69
|
+
* report: precision per pattern, over the `response_injection:*` rows
|
|
70
|
+
* `persistFindings` synthesizes from a trace's echo scan.
|
|
71
|
+
*
|
|
72
|
+
* `tracesIngested` is the anti-vacuity denominator and is always printed
|
|
73
|
+
* prominently, even when zero. A top-level `refusal` (zero traffic in the
|
|
74
|
+
* window) is printed as a warning, never suppressed — same for a
|
|
75
|
+
* per-pattern `refusal` (below the adjudicated-count threshold), which
|
|
76
|
+
* replaces that row's rate cell instead of a null percentage.
|
|
77
|
+
*/
|
|
78
|
+
export declare function runFindingsEchoReport(opts: FindingsCliOpts & {
|
|
79
|
+
since?: string;
|
|
80
|
+
until?: string;
|
|
81
|
+
json?: boolean;
|
|
82
|
+
}): Promise<void>;
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=findings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../src/commands/findings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AA+EH,UAAU,eAAe;IACvB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAuFD,qEAAqE;AACrE,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAItD;AAqBD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,eAAe,GAAG;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GACrG,OAAO,CAAC,IAAI,CAAC,CAwEf;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,eAAe,GAAG;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GACzG,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuChG;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,eAAe,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GACzE,OAAO,CAAC,IAAI,CAAC,CAsDf"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `intutic findings` — List and adjudicate detector findings.
|
|
3
|
+
*
|
|
4
|
+
* `services/control-plane/src/routes/findings.ts` has carried a complete
|
|
5
|
+
* TP/FP adjudication API since it landed, with zero consumers: no CLI
|
|
6
|
+
* command, no dashboard page. Without a way to actually rule on a finding,
|
|
7
|
+
* `false_positive_rate` in `/stats` and the response-echo report can only
|
|
8
|
+
* ever return null — the labelling rate was structurally zero. This is that
|
|
9
|
+
* missing writer.
|
|
10
|
+
*
|
|
11
|
+
* Subcommands:
|
|
12
|
+
* - `intutic findings list [--unadjudicated] [--detector <id>] [--limit N] [--json]`
|
|
13
|
+
* - `intutic findings adjudicate <findingId> (--true-positive|--false-positive) [--note <text>]`
|
|
14
|
+
* - `intutic findings stats [--json]`
|
|
15
|
+
* - `intutic findings echo-report [--since <date>] [--until <date>] [--json]`
|
|
16
|
+
*
|
|
17
|
+
* The adjudicator identity is never a flag here — the server derives it from
|
|
18
|
+
* the authenticated session (`c.get('auth')`), the same reasoning
|
|
19
|
+
* `intutic decision approve|reject` documents: a client-supplied name makes
|
|
20
|
+
* the audit trail forgeable.
|
|
21
|
+
*
|
|
22
|
+
* @module
|
|
23
|
+
*/
|
|
24
|
+
import { log } from '../lib/logger.js';
|
|
25
|
+
import { NOT_AUTHENTICATED } from '../lib/authMessages.js';
|
|
26
|
+
import { loadCredentials } from '../config/store.js';
|
|
27
|
+
import { resolveControlPlaneUrl } from '../config/paths.js';
|
|
28
|
+
import { createApiClient } from '../lib/api.js';
|
|
29
|
+
import pc from 'picocolors';
|
|
30
|
+
async function getClient(opts) {
|
|
31
|
+
const creds = await loadCredentials();
|
|
32
|
+
if (!creds) {
|
|
33
|
+
log.error(NOT_AUTHENTICATED);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
const controlPlaneUrl = resolveControlPlaneUrl(opts.dev);
|
|
37
|
+
return createApiClient(controlPlaneUrl, creds.apiKey);
|
|
38
|
+
}
|
|
39
|
+
// ─── Formatting helpers (mirroring traces.ts's conventions) ───────────
|
|
40
|
+
/** Truncate a finding ID for table display. */
|
|
41
|
+
function truncateId(id) {
|
|
42
|
+
if (id.length <= 14)
|
|
43
|
+
return id;
|
|
44
|
+
return id.slice(0, 11) + '...';
|
|
45
|
+
}
|
|
46
|
+
/** Format ISO timestamp for compact table display. */
|
|
47
|
+
function formatTimestamp(iso) {
|
|
48
|
+
const d = new Date(iso);
|
|
49
|
+
const pad2 = (n) => String(n).padStart(2, '0');
|
|
50
|
+
return `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())} ${pad2(d.getHours())}:${pad2(d.getMinutes())}:${pad2(d.getSeconds())}`;
|
|
51
|
+
}
|
|
52
|
+
function truncateText(text, width) {
|
|
53
|
+
return text.length > width ? text.slice(0, width - 1) + '…' : text;
|
|
54
|
+
}
|
|
55
|
+
/** Color (or dim) a finding's outcome. `null` is rendered as "unruled", dimmed. */
|
|
56
|
+
function colorOutcome(outcome) {
|
|
57
|
+
if (outcome === null)
|
|
58
|
+
return pc.dim('unruled');
|
|
59
|
+
if (outcome === 'TRUE_POSITIVE')
|
|
60
|
+
return pc.green(outcome);
|
|
61
|
+
return pc.yellow(outcome);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* A null rate is rendered as "no measured rate" — NEVER as "0" or "0%". A
|
|
65
|
+
* detector or pattern nobody has adjudicated has no measured rate; printing
|
|
66
|
+
* a number there would be an invention the route itself explicitly refuses
|
|
67
|
+
* to make (see `false_positive_rate`'s doc comment in routes/findings.ts).
|
|
68
|
+
*/
|
|
69
|
+
function formatRate(rate) {
|
|
70
|
+
if (rate === null)
|
|
71
|
+
return pc.dim('no measured rate');
|
|
72
|
+
return `${(rate * 100).toFixed(1)}%`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* ANSI escapes are zero-width. Measuring and slicing raw string length counts
|
|
76
|
+
* them, so a coloured cell is both mis-padded and cut mid-escape — e.g.
|
|
77
|
+
* `pc.dim('no measured rate')` is more characters than its 17 visible ones,
|
|
78
|
+
* and a naive `str.slice(0, width)` against a narrower column truncates
|
|
79
|
+
* inside the escape sequence, corrupting the visible text (see the same
|
|
80
|
+
* fix and its full writeup in `integrity.ts`'s `padCell`).
|
|
81
|
+
*/
|
|
82
|
+
// eslint-disable-next-line no-control-regex -- ESC () opens every SGR colour sequence; matching it is this pattern's whole purpose.
|
|
83
|
+
const ANSI = /\[[0-9;]*m/g;
|
|
84
|
+
function visibleLength(str) {
|
|
85
|
+
return str.replace(ANSI, '').length;
|
|
86
|
+
}
|
|
87
|
+
/** Cut to `width` VISIBLE characters, keeping escapes and closing any left open. */
|
|
88
|
+
function truncateVisible(str, width) {
|
|
89
|
+
let out = '';
|
|
90
|
+
let seen = 0;
|
|
91
|
+
let i = 0;
|
|
92
|
+
let coloured = false;
|
|
93
|
+
while (i < str.length && seen < width) {
|
|
94
|
+
ANSI.lastIndex = i;
|
|
95
|
+
const m = ANSI.exec(str);
|
|
96
|
+
if (m && m.index === i) {
|
|
97
|
+
out += m[0];
|
|
98
|
+
coloured = m[0] !== '[39m' && m[0] !== '[0m';
|
|
99
|
+
i += m[0].length;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
out += str[i];
|
|
103
|
+
seen += 1;
|
|
104
|
+
i += 1;
|
|
105
|
+
}
|
|
106
|
+
// Never leave a colour open — it would tint the border and every later row.
|
|
107
|
+
return coloured ? out + '[0m' : out;
|
|
108
|
+
}
|
|
109
|
+
/** Pad a string to a fixed VISIBLE width (right-pad with spaces). */
|
|
110
|
+
export function pad(str, width) {
|
|
111
|
+
const visible = visibleLength(str);
|
|
112
|
+
if (visible >= width)
|
|
113
|
+
return truncateVisible(str, width);
|
|
114
|
+
return str + ' '.repeat(width - visible);
|
|
115
|
+
}
|
|
116
|
+
/** Render a simple table with borders. */
|
|
117
|
+
function renderTable(headers, widths, rows) {
|
|
118
|
+
const top = '┌' + widths.map((w) => '─'.repeat(w + 2)).join('┬') + '┐';
|
|
119
|
+
const mid = '├' + widths.map((w) => '─'.repeat(w + 2)).join('┼') + '┤';
|
|
120
|
+
const bot = '└' + widths.map((w) => '─'.repeat(w + 2)).join('┴') + '┘';
|
|
121
|
+
const fmtRow = (cells) => '│ ' + cells.map((c, i) => pad(c, widths[i])).join(' │ ') + ' │';
|
|
122
|
+
console.log(top);
|
|
123
|
+
console.log(fmtRow(headers));
|
|
124
|
+
console.log(mid);
|
|
125
|
+
for (const row of rows) {
|
|
126
|
+
console.log(fmtRow(row));
|
|
127
|
+
}
|
|
128
|
+
console.log(bot);
|
|
129
|
+
}
|
|
130
|
+
// ─── Commands ───────────────────────────────────────────────────────
|
|
131
|
+
/**
|
|
132
|
+
* `intutic findings list` — List detector findings for the workspace.
|
|
133
|
+
*
|
|
134
|
+
* `--unadjudicated` matches the route's own default behaviour: omitted, the
|
|
135
|
+
* route returns every finding (adjudicated or not); passed, it adds
|
|
136
|
+
* `unadjudicated=true` and returns only the working queue. The CLI does not
|
|
137
|
+
* invent a different default than the route it calls.
|
|
138
|
+
*/
|
|
139
|
+
export async function runFindingsList(opts) {
|
|
140
|
+
const client = await getClient(opts);
|
|
141
|
+
const params = new URLSearchParams();
|
|
142
|
+
if (opts.unadjudicated)
|
|
143
|
+
params.set('unadjudicated', 'true');
|
|
144
|
+
if (opts.detector)
|
|
145
|
+
params.set('detector_id', opts.detector);
|
|
146
|
+
if (opts.limit)
|
|
147
|
+
params.set('limit', opts.limit);
|
|
148
|
+
try {
|
|
149
|
+
const data = await client.get(`/api/v1/findings?${params.toString()}`);
|
|
150
|
+
if (opts.json) {
|
|
151
|
+
console.log(JSON.stringify(data, null, 2));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
log.header('Intutic — Detector Findings');
|
|
155
|
+
if (data.findings.length === 0) {
|
|
156
|
+
log.dim(' No findings match your filters.');
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
// `reason` is what makes a request-path finding triageable from the
|
|
160
|
+
// terminal at all (e.g. "Runaway recursion: graph depth 12 exceeds the
|
|
161
|
+
// maximum of 8") — Detector is trimmed from 28 to 20 (still enough for
|
|
162
|
+
// the longest `response_injection:*` id once truncated) to make room for
|
|
163
|
+
// it without the table ballooning further.
|
|
164
|
+
const headers = ['Finding ID', 'Created', 'Detector', 'Reason', 'Disposition', 'Outcome'];
|
|
165
|
+
const widths = [14, 19, 20, 26, 12, 14];
|
|
166
|
+
const rows = data.findings.map((f) => [
|
|
167
|
+
truncateId(f.finding_id),
|
|
168
|
+
formatTimestamp(f.created_at),
|
|
169
|
+
truncateText(f.detector_id, 20),
|
|
170
|
+
truncateText(f.reason ?? '—', 26),
|
|
171
|
+
f.disposition ?? '—',
|
|
172
|
+
colorOutcome(f.outcome),
|
|
173
|
+
]);
|
|
174
|
+
renderTable(headers, widths, rows);
|
|
175
|
+
console.log(pc.dim(`Showing ${data.findings.length} finding(s)${opts.unadjudicated ? ' (unadjudicated only)' : ''}${opts.detector ? ` for detector ${opts.detector}` : ''}`));
|
|
176
|
+
// Keyed off `detector_id` prefix — already visible in the table above,
|
|
177
|
+
// zero new API surface needed — rather than a precise "has a live
|
|
178
|
+
// snippet" boolean, which the list route deliberately doesn't carry (see
|
|
179
|
+
// routes/findings.ts's own comment on why). "May have" is honest given
|
|
180
|
+
// retention (14 days, independent of adjudication) could already have
|
|
181
|
+
// expired it by the time anyone reads this. The dashboard, not this CLI,
|
|
182
|
+
// is the only surface that ever displays the excerpt content itself —
|
|
183
|
+
// a terminal has no way to "hide again" once printed (scrollback, shell
|
|
184
|
+
// history, and terminal recordings all retain it indefinitely), so this
|
|
185
|
+
// deliberately stops at a pointer.
|
|
186
|
+
const withSnippetCandidate = data.findings.filter((f) => f.detector_id.startsWith('response_injection:')).length;
|
|
187
|
+
if (withSnippetCandidate > 0) {
|
|
188
|
+
console.log(pc.dim(`${withSnippetCandidate} finding(s) may have a scrubbed response snippet available — view in the dashboard (Findings queue) to review it before adjudicating.`));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
log.error(`Failed to list findings: ${err instanceof Error ? err.message : String(err)}`);
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* `intutic findings adjudicate <findingId>` — Record a human ruling on one finding.
|
|
198
|
+
*
|
|
199
|
+
* Exactly one of `--true-positive` / `--false-positive` is required, checked
|
|
200
|
+
* client-side before any request is made — the same discipline
|
|
201
|
+
* `runGatewayAssign`'s `--gateway`/`--clear` pair and `runGatewayConfigSet`
|
|
202
|
+
* use for their own mutually-exclusive flags.
|
|
203
|
+
*/
|
|
204
|
+
export async function runFindingsAdjudicate(findingId, opts) {
|
|
205
|
+
if (opts.truePositive && opts.falsePositive) {
|
|
206
|
+
log.error('Specify exactly one of --true-positive or --false-positive, not both.');
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
if (!opts.truePositive && !opts.falsePositive) {
|
|
210
|
+
log.error('Specify exactly one of --true-positive or --false-positive.');
|
|
211
|
+
process.exit(1);
|
|
212
|
+
}
|
|
213
|
+
const outcome = opts.truePositive ? 'TRUE_POSITIVE' : 'FALSE_POSITIVE';
|
|
214
|
+
const client = await getClient(opts);
|
|
215
|
+
try {
|
|
216
|
+
const res = await client.post(`/api/v1/findings/${encodeURIComponent(findingId)}/adjudicate`, { outcome, note: opts.note });
|
|
217
|
+
if (opts.json) {
|
|
218
|
+
console.log(JSON.stringify(res, null, 2));
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
log.success(`Finding ${res.finding_id} adjudicated as ${res.outcome}.`);
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
log.error(`Failed to adjudicate finding: ${err instanceof Error ? err.message : String(err)}`);
|
|
225
|
+
process.exit(1);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* `intutic findings stats` — Per-detector false-positive rate, over
|
|
230
|
+
* adjudicated findings only.
|
|
231
|
+
*
|
|
232
|
+
* The `caveats` array exists specifically to be read alongside the numbers
|
|
233
|
+
* it qualifies — this prints it verbatim, never summarized or suppressed.
|
|
234
|
+
*/
|
|
235
|
+
export async function runFindingsStats(opts) {
|
|
236
|
+
const client = await getClient(opts);
|
|
237
|
+
try {
|
|
238
|
+
const data = await client.get('/api/v1/findings/stats');
|
|
239
|
+
if (opts.json) {
|
|
240
|
+
console.log(JSON.stringify(data, null, 2));
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
log.header('Intutic — Findings Stats (per detector)');
|
|
244
|
+
if (data.detectors.length === 0) {
|
|
245
|
+
log.dim(' No findings recorded yet.');
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
const headers = ['Detector', 'Shadowed', 'Total', 'Adjudicated', 'FP Rate'];
|
|
249
|
+
const widths = [28, 9, 7, 12, 18];
|
|
250
|
+
const rows = data.detectors.map((d) => [
|
|
251
|
+
truncateText(d.detector_id, 28),
|
|
252
|
+
d.shadowed ? 'yes' : 'no',
|
|
253
|
+
String(d.total_findings),
|
|
254
|
+
String(d.adjudicated),
|
|
255
|
+
formatRate(d.false_positive_rate),
|
|
256
|
+
]);
|
|
257
|
+
renderTable(headers, widths, rows);
|
|
258
|
+
}
|
|
259
|
+
console.log('');
|
|
260
|
+
log.header('Caveats');
|
|
261
|
+
for (const caveat of data.caveats) {
|
|
262
|
+
log.dim(` - ${caveat}`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
log.error(`Failed to fetch findings stats: ${err instanceof Error ? err.message : String(err)}`);
|
|
267
|
+
process.exit(1);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* `intutic findings echo-report` — The response-injection echo measurement
|
|
272
|
+
* report: precision per pattern, over the `response_injection:*` rows
|
|
273
|
+
* `persistFindings` synthesizes from a trace's echo scan.
|
|
274
|
+
*
|
|
275
|
+
* `tracesIngested` is the anti-vacuity denominator and is always printed
|
|
276
|
+
* prominently, even when zero. A top-level `refusal` (zero traffic in the
|
|
277
|
+
* window) is printed as a warning, never suppressed — same for a
|
|
278
|
+
* per-pattern `refusal` (below the adjudicated-count threshold), which
|
|
279
|
+
* replaces that row's rate cell instead of a null percentage.
|
|
280
|
+
*/
|
|
281
|
+
export async function runFindingsEchoReport(opts) {
|
|
282
|
+
const client = await getClient(opts);
|
|
283
|
+
const params = new URLSearchParams();
|
|
284
|
+
if (opts.since)
|
|
285
|
+
params.set('since', opts.since);
|
|
286
|
+
if (opts.until)
|
|
287
|
+
params.set('until', opts.until);
|
|
288
|
+
try {
|
|
289
|
+
const data = await client.get(`/api/v1/findings/response-echo/report?${params.toString()}`);
|
|
290
|
+
if (opts.json) {
|
|
291
|
+
console.log(JSON.stringify(data, null, 2));
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
log.header('Intutic — Response-Echo Report');
|
|
295
|
+
log.field('Window', `${data.window.since} → ${data.window.until}`);
|
|
296
|
+
log.field('Traces ingested', String(data.tracesIngested));
|
|
297
|
+
if (data.refusal) {
|
|
298
|
+
console.log('');
|
|
299
|
+
log.warn(data.refusal);
|
|
300
|
+
}
|
|
301
|
+
console.log('');
|
|
302
|
+
// The table column is deliberately short ("withheld — see below") rather
|
|
303
|
+
// than the refusal text itself: renderTable's fixed-width cells truncate
|
|
304
|
+
// anything longer than the column, and a truncated refusal is a
|
|
305
|
+
// suppressed refusal wearing an ellipsis. The full text always follows,
|
|
306
|
+
// in full, below the table.
|
|
307
|
+
const headers = ['Pattern', 'Findings', 'Adjudicated', 'FP Rate'];
|
|
308
|
+
const widths = [28, 9, 12, 20];
|
|
309
|
+
const rows = data.patterns.map((p) => [
|
|
310
|
+
p.pattern,
|
|
311
|
+
String(p.findings),
|
|
312
|
+
String(p.adjudicated),
|
|
313
|
+
p.refusal ? 'withheld — see below' : formatRate(p.falsePositiveRate),
|
|
314
|
+
]);
|
|
315
|
+
renderTable(headers, widths, rows);
|
|
316
|
+
const patternRefusals = data.patterns.filter((p) => p.refusal);
|
|
317
|
+
if (patternRefusals.length > 0) {
|
|
318
|
+
console.log('');
|
|
319
|
+
for (const p of patternRefusals) {
|
|
320
|
+
log.dim(` ${p.pattern}: ${p.refusal}`);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
catch (err) {
|
|
325
|
+
log.error(`Failed to fetch response-echo report: ${err instanceof Error ? err.message : String(err)}`);
|
|
326
|
+
process.exit(1);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=findings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/commands/findings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `intutic gateway` — manage self-hosted gateway registrations (LLD #66)
|
|
3
|
+
* and routing assignment (LLD #68 §2).
|
|
4
|
+
*
|
|
5
|
+
* Subcommands:
|
|
6
|
+
* - `intutic gateway register --name <name> --target <docker|kubernetes|bare_metal>`
|
|
7
|
+
* - `intutic gateway list [--json]`
|
|
8
|
+
* - `intutic gateway status <gateway_id> [--json]`
|
|
9
|
+
* - `intutic gateway rotate <gateway_id>`
|
|
10
|
+
* - `intutic gateway revoke <gateway_id> [--reason <text>]`
|
|
11
|
+
* - `intutic gateway config set <gateway_id> [--require-vk <bool>] [--require-provisioned-key <bool>]`
|
|
12
|
+
* - `intutic gateway assign --gateway <gateway_id>|--clear [--org <org_id>]`
|
|
13
|
+
* - `intutic gateway resolve [--json]`
|
|
14
|
+
*
|
|
15
|
+
* Server side: services/control-plane/src/routes/gateways.ts,
|
|
16
|
+
* routes/gatewayHeartbeat.ts, routes/orgs.ts (`PATCH .../gateway`). A
|
|
17
|
+
* gateway token (`gwk_...`) is a distinct credential from the `vk_`/JWT
|
|
18
|
+
* this command authenticates with — it is printed exactly once, on
|
|
19
|
+
* `register` and `rotate`, and never retrievable again, matching the
|
|
20
|
+
* server's own one-shot design.
|
|
21
|
+
*
|
|
22
|
+
* `assign`/`resolve` are client-side discovery, not traffic routing:
|
|
23
|
+
* there is no proxy-in-front-of-proxies in this architecture, so
|
|
24
|
+
* `resolve` tells you which gateway a client SHOULD point at; actually
|
|
25
|
+
* pointing one there (`CONTROL_PLANE_URL=...`) is still a manual step.
|
|
26
|
+
*
|
|
27
|
+
* @module
|
|
28
|
+
*/
|
|
29
|
+
interface GatewayCliOpts {
|
|
30
|
+
json?: boolean;
|
|
31
|
+
dev?: boolean;
|
|
32
|
+
}
|
|
33
|
+
/** `intutic gateway register` */
|
|
34
|
+
export declare function runGatewayRegister(opts: GatewayCliOpts & {
|
|
35
|
+
name?: string;
|
|
36
|
+
target?: string;
|
|
37
|
+
}): Promise<void>;
|
|
38
|
+
/** `intutic gateway list` */
|
|
39
|
+
export declare function runGatewayList(opts: GatewayCliOpts): Promise<void>;
|
|
40
|
+
/** `intutic gateway status <gateway_id>` */
|
|
41
|
+
export declare function runGatewayStatus(gatewayId: string, opts: GatewayCliOpts): Promise<void>;
|
|
42
|
+
/** `intutic gateway rotate <gateway_id>` */
|
|
43
|
+
export declare function runGatewayRotate(gatewayId: string, opts: GatewayCliOpts): Promise<void>;
|
|
44
|
+
/** `intutic gateway revoke <gateway_id>` */
|
|
45
|
+
export declare function runGatewayRevoke(gatewayId: string, opts: GatewayCliOpts & {
|
|
46
|
+
reason?: string;
|
|
47
|
+
}): Promise<void>;
|
|
48
|
+
/** `intutic gateway config set <gateway_id>` */
|
|
49
|
+
export declare function runGatewayConfigSet(gatewayId: string, opts: GatewayCliOpts & {
|
|
50
|
+
requireVk?: string;
|
|
51
|
+
requireProvisionedKey?: string;
|
|
52
|
+
}): Promise<void>;
|
|
53
|
+
/** `intutic gateway assign` — LLD #68 §2. */
|
|
54
|
+
export declare function runGatewayAssign(opts: GatewayCliOpts & {
|
|
55
|
+
gateway?: string;
|
|
56
|
+
clear?: boolean;
|
|
57
|
+
org?: string;
|
|
58
|
+
}): Promise<void>;
|
|
59
|
+
/** `intutic gateway resolve` — LLD #68 §2. */
|
|
60
|
+
export declare function runGatewayResolve(opts: GatewayCliOpts): Promise<void>;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=gateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/commands/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAaH,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAgED,iCAAiC;AACjC,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED,6BAA6B;AAC7B,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCxE;AAED,4CAA4C;AAC5C,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B7F;AAED,4CAA4C;AAC5C,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB7F;AAED,4CAA4C;AAC5C,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,cAAc,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,IAAI,CAAC,CAef;AAED,gDAAgD;AAChD,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,cAAc,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED,6CAA6C;AAC7C,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC,IAAI,CAAC,CAoCf;AAcD,8CAA8C;AAC9C,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD3E"}
|