@intutic/cli 1.9.0 → 1.10.1
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
package/dist/commands/doctor.js
CHANGED
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
* 2. Control plane auth (via stored credentials)
|
|
11
11
|
* 3. Sync daemon running (PID file or process grep)
|
|
12
12
|
* 4. Harness config files intact (SHA-256 hash check)
|
|
13
|
-
* 5. Daemon log readable (
|
|
13
|
+
* 5. Daemon log readable and non-empty (installed log path, or the legacy
|
|
14
|
+
* ~/.intutic/daemon.log)
|
|
14
15
|
* 6. Valkey connectivity (proxy /health or TCP probe port 6379)
|
|
15
16
|
* 7. CA cert trust (~/.intutic/ca.crt + OS trust store)
|
|
17
|
+
* 8. Policy snapshot present, intact, and current
|
|
16
18
|
*
|
|
17
19
|
* No subscription checks — enforcement is server-side (covenant 13).
|
|
18
20
|
*
|
|
@@ -28,11 +30,20 @@ import pc from 'picocolors';
|
|
|
28
30
|
import { log } from '../lib/logger.js';
|
|
29
31
|
import { loadCredentials, loadConfig, loadIntegrity } from '../config/store.js';
|
|
30
32
|
import { isSyncDaemonRunning } from '../lib/process.js';
|
|
33
|
+
import { caTrustCommandFor } from '../lib/caTrust.js';
|
|
34
|
+
import { getPaths } from './install-daemon.js';
|
|
35
|
+
import { readPolicySnapshot, SNAPSHOT_STALE_AFTER_DAYS, } from '../lib/policySnapshot.js';
|
|
36
|
+
import { ciscoScannerOnPath, ciscoScannerVersion } from '../lib/ciscoScanner.js';
|
|
31
37
|
// ─── Constants ───────────────────────────────────────────────────────
|
|
32
38
|
const PROXY_HEALTH_URL = 'http://127.0.0.1:4000/health';
|
|
33
39
|
const PROXY_TIMEOUT_MS = 3_000;
|
|
34
40
|
const CONTROL_PLANE_TIMEOUT_MS = 5_000;
|
|
35
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Historical location. Nothing in the CLI or the daemon has ever written here —
|
|
43
|
+
* `intutic install-daemon` points the service at getPaths().logPath — so it is
|
|
44
|
+
* kept only so an old install still gets a hit.
|
|
45
|
+
*/
|
|
46
|
+
const LEGACY_DAEMON_LOG_PATH = join(homedir(), '.intutic', 'daemon.log');
|
|
36
47
|
const DAEMON_PID_PATH = join(homedir(), '.intutic', 'daemon.pid');
|
|
37
48
|
const CA_CERT_PATH = join(homedir(), '.intutic', 'ca.crt');
|
|
38
49
|
const VALKEY_PROBE_TIMEOUT_MS = 2_000;
|
|
@@ -225,30 +236,109 @@ function checkHarnessConfigs() {
|
|
|
225
236
|
};
|
|
226
237
|
}
|
|
227
238
|
/**
|
|
228
|
-
*
|
|
239
|
+
* Every place a sync-daemon log can legitimately be, most likely first: the
|
|
240
|
+
* per-user service, the system service, then the legacy path.
|
|
241
|
+
*/
|
|
242
|
+
function daemonLogCandidates() {
|
|
243
|
+
return [
|
|
244
|
+
getPaths(false, false).logPath,
|
|
245
|
+
getPaths(true, false).logPath,
|
|
246
|
+
LEGACY_DAEMON_LOG_PATH,
|
|
247
|
+
];
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* How long ago the newest entry was written, taken from the `time` field pino
|
|
251
|
+
* puts on every line (`@intutic/logger` configures it as an ISO string; plain
|
|
252
|
+
* pino uses epoch milliseconds, so both are accepted).
|
|
253
|
+
*
|
|
254
|
+
* Returns null when the last line is not a pino record — a stack trace
|
|
255
|
+
* continuation, or plain text from the service supervisor — in which case the
|
|
256
|
+
* caller simply omits the age.
|
|
257
|
+
*
|
|
258
|
+
* The line itself is deliberately never printed. `intutic doctor` output is
|
|
259
|
+
* written to be pasted into a support thread, and daemon logs carry workspace
|
|
260
|
+
* identifiers and request metadata.
|
|
261
|
+
*/
|
|
262
|
+
function describeLastEntryAge(lastLine) {
|
|
263
|
+
let parsed;
|
|
264
|
+
try {
|
|
265
|
+
parsed = JSON.parse(lastLine);
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
271
|
+
return null;
|
|
272
|
+
const time = parsed.time;
|
|
273
|
+
if (typeof time !== 'string' && typeof time !== 'number')
|
|
274
|
+
return null;
|
|
275
|
+
const writtenAt = new Date(time).getTime();
|
|
276
|
+
if (Number.isNaN(writtenAt))
|
|
277
|
+
return null;
|
|
278
|
+
const minutes = Math.floor((Date.now() - writtenAt) / 60_000);
|
|
279
|
+
if (minutes < 0)
|
|
280
|
+
return null;
|
|
281
|
+
if (minutes < 1)
|
|
282
|
+
return 'last entry just now';
|
|
283
|
+
if (minutes < 60)
|
|
284
|
+
return `last entry ${minutes}m ago`;
|
|
285
|
+
const hours = Math.floor(minutes / 60);
|
|
286
|
+
if (hours < 24)
|
|
287
|
+
return `last entry ${hours}h ago`;
|
|
288
|
+
return `last entry ${Math.floor(hours / 24)}d ago`;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Check 5: Daemon log present, readable, and actually being written to.
|
|
229
292
|
*/
|
|
230
293
|
function checkDaemonLog() {
|
|
294
|
+
const candidates = daemonLogCandidates();
|
|
295
|
+
const logPath = candidates.find((candidate) => {
|
|
296
|
+
try {
|
|
297
|
+
accessSync(candidate, constants.R_OK);
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
if (!logPath) {
|
|
305
|
+
return {
|
|
306
|
+
name: 'Daemon Log',
|
|
307
|
+
passed: false,
|
|
308
|
+
detail: `Not found or not readable at ${candidates.join(', ')}`,
|
|
309
|
+
remediation: 'The log file is created when `intutic connect` runs. Start the daemon first.',
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
let content;
|
|
231
313
|
try {
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
const lines = content.trim().split('\n');
|
|
236
|
-
const lastLine = lines[lines.length - 1] || '';
|
|
237
|
-
const truncated = lastLine.length > 80 ? lastLine.slice(0, 80) + '…' : lastLine;
|
|
314
|
+
content = readFileSync(logPath, 'utf-8');
|
|
315
|
+
}
|
|
316
|
+
catch (err) {
|
|
238
317
|
return {
|
|
239
318
|
name: 'Daemon Log',
|
|
240
|
-
passed:
|
|
241
|
-
detail: `
|
|
319
|
+
passed: false,
|
|
320
|
+
detail: `Found ${logPath} but could not read it — ${err instanceof Error ? err.message : String(err)}`,
|
|
321
|
+
remediation: `Check the file's permissions: ls -l ${logPath}`,
|
|
242
322
|
};
|
|
243
323
|
}
|
|
244
|
-
|
|
324
|
+
// An empty log means the daemon has never logged a line — a real fault that
|
|
325
|
+
// used to be reported as a pass with a misleading "1 lines".
|
|
326
|
+
const lines = content.trim().split('\n').filter((line) => line.length > 0);
|
|
327
|
+
if (lines.length === 0) {
|
|
245
328
|
return {
|
|
246
329
|
name: 'Daemon Log',
|
|
247
330
|
passed: false,
|
|
248
|
-
detail: `
|
|
249
|
-
remediation: 'The log file
|
|
331
|
+
detail: `Empty at ${logPath} — the daemon has not written anything`,
|
|
332
|
+
remediation: 'The daemon has a log file but has never logged. Restart it with `intutic connect` and re-run doctor.',
|
|
250
333
|
};
|
|
251
334
|
}
|
|
335
|
+
const age = describeLastEntryAge(lines[lines.length - 1]);
|
|
336
|
+
const suffix = age ? `, ${age}` : '';
|
|
337
|
+
return {
|
|
338
|
+
name: 'Daemon Log',
|
|
339
|
+
passed: true,
|
|
340
|
+
detail: `Readable at ${logPath} (${lines.length} lines${suffix})`,
|
|
341
|
+
};
|
|
252
342
|
}
|
|
253
343
|
/**
|
|
254
344
|
* Check 6: Valkey connectivity.
|
|
@@ -309,6 +399,19 @@ async function checkValkey() {
|
|
|
309
399
|
remediation: 'Start Valkey: `docker compose up -d valkey` or install locally.',
|
|
310
400
|
};
|
|
311
401
|
}
|
|
402
|
+
/**
|
|
403
|
+
* Builds the system-scope CA-trust remediation string from the SAME source
|
|
404
|
+
* `caTrust.ts`'s `installCaTrust` actually runs, instead of a hand-written
|
|
405
|
+
* duplicate — the two had already drifted once (this check looks in three
|
|
406
|
+
* Linux cert-anchor directories; the old remediation only ever named one).
|
|
407
|
+
*/
|
|
408
|
+
function systemTrustRemediation(os) {
|
|
409
|
+
const cmds = caTrustCommandFor(os, 'system', CA_CERT_PATH);
|
|
410
|
+
if (!cmds)
|
|
411
|
+
return `See docs/integrations/enterprise-install.md for manual CA-trust steps on ${os}.`;
|
|
412
|
+
const quoted = (arg) => (arg.includes(' ') ? `"${arg}"` : arg);
|
|
413
|
+
return cmds.map((c) => `sudo ${c.cmd} ${c.args.map(quoted).join(' ')}`).join(' && ');
|
|
414
|
+
}
|
|
312
415
|
/**
|
|
313
416
|
* Check 7: CA certificate trust.
|
|
314
417
|
*
|
|
@@ -367,7 +470,7 @@ function checkCertTrust() {
|
|
|
367
470
|
name: 'Cert Trust',
|
|
368
471
|
passed: false,
|
|
369
472
|
detail: 'CA cert exists but is not in system trust store',
|
|
370
|
-
remediation:
|
|
473
|
+
remediation: systemTrustRemediation(os),
|
|
371
474
|
};
|
|
372
475
|
}
|
|
373
476
|
else {
|
|
@@ -384,11 +487,110 @@ function checkCertTrust() {
|
|
|
384
487
|
name: 'Cert Trust',
|
|
385
488
|
passed: false,
|
|
386
489
|
detail: 'CA cert exists but is NOT trusted by the OS',
|
|
387
|
-
remediation: os
|
|
388
|
-
|
|
389
|
-
|
|
490
|
+
remediation: systemTrustRemediation(os),
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Turns a snapshot's state into the line doctor prints.
|
|
496
|
+
*
|
|
497
|
+
* Split from the check so the mapping can be tested without a home directory:
|
|
498
|
+
* every branch here is a different thing being enforced on the machine, and
|
|
499
|
+
* getting one of them wrong is silent by construction.
|
|
500
|
+
*
|
|
501
|
+
* `passed` is false for everything except `ok`, including `stale`. A stale
|
|
502
|
+
* snapshot is still fully enforced — staleness governs alerting, not
|
|
503
|
+
* enforcement — but reaching the window means the daemon has not completed a
|
|
504
|
+
* sync in over a week, which is a fault whatever the gates are doing with the
|
|
505
|
+
* rules they still have.
|
|
506
|
+
*/
|
|
507
|
+
export function describePolicySnapshot(snap) {
|
|
508
|
+
const name = 'Policy Snapshot';
|
|
509
|
+
const dropped = snap.droppedRules > 0 ? `, ${snap.droppedRules} rule(s) dropped as uncompilable` : '';
|
|
510
|
+
switch (snap.state) {
|
|
511
|
+
case 'ok':
|
|
512
|
+
return {
|
|
513
|
+
name,
|
|
514
|
+
passed: true,
|
|
515
|
+
detail: `${snap.ruleCount} rule(s), digest ${snap.digest}, ${snap.ageDays}d old${dropped}`,
|
|
516
|
+
};
|
|
517
|
+
case 'stale':
|
|
518
|
+
return {
|
|
519
|
+
name,
|
|
520
|
+
passed: false,
|
|
521
|
+
detail: `${snap.ageDays} days old and still enforced (${snap.ruleCount} rule(s)) — ` +
|
|
522
|
+
`nothing has refreshed it in over ${SNAPSHOT_STALE_AFTER_DAYS} days${dropped}`,
|
|
523
|
+
remediation: 'The daemon has not synced. Check `intutic daemon status`, then refresh with `intutic policy snapshot`.',
|
|
524
|
+
};
|
|
525
|
+
case 'invalid':
|
|
526
|
+
return {
|
|
527
|
+
name,
|
|
528
|
+
passed: false,
|
|
529
|
+
detail: `Failed its ${snap.workspaceId ? 'digest or workspace' : 'digest'} check at ${snap.path} — ` +
|
|
530
|
+
'every gate has DROPPED the dynamic rules, so workspace policy is enforcing nothing',
|
|
531
|
+
remediation: 'The file was edited or belongs to another workspace. Overwrite it with `intutic policy snapshot`.',
|
|
532
|
+
};
|
|
533
|
+
case 'empty':
|
|
534
|
+
return {
|
|
535
|
+
name,
|
|
536
|
+
passed: false,
|
|
537
|
+
// The writer always ships the destructive tier, so zero rules is not a
|
|
538
|
+
// quiet workspace — it is a compile that produced nothing.
|
|
539
|
+
detail: `Present at ${snap.path} but contains no rules — the policy compile produced nothing${dropped}`,
|
|
540
|
+
remediation: 'Check that the workspace has active BLOCK: SOPs, then rebuild it with `intutic policy snapshot`.',
|
|
541
|
+
};
|
|
542
|
+
case 'absent':
|
|
543
|
+
return {
|
|
544
|
+
name,
|
|
545
|
+
passed: false,
|
|
546
|
+
detail: `No snapshot at ${snap.path} — built-in protections only, workspace policy enforces nothing`,
|
|
547
|
+
remediation: 'Write it with `intutic policy snapshot`, or start the daemon with `intutic connect`.',
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
/**
|
|
552
|
+
* Check 8: Policy snapshot — the dynamic tier every harness gate reads.
|
|
553
|
+
*
|
|
554
|
+
* Absent, invalid or empty all mean the same thing on the machine: the gates
|
|
555
|
+
* fall back to the compiled floor and the workspace's own rules stop applying,
|
|
556
|
+
* with no error anywhere. That is the whole reason this check exists — the
|
|
557
|
+
* failure is invisible from every other angle in this command.
|
|
558
|
+
*/
|
|
559
|
+
async function checkPolicySnapshot() {
|
|
560
|
+
// The workspace id is what makes a mismatch detectable. Without credentials
|
|
561
|
+
// the comparison is skipped rather than guessed, exactly as the gates skip it.
|
|
562
|
+
const creds = await loadCredentials();
|
|
563
|
+
return describePolicySnapshot(readPolicySnapshot({ expectedWorkspaceId: creds?.workspaceId }));
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* Check 9: Cisco `skill-scanner` integration (Phase S3) — an OPTIONAL
|
|
567
|
+
* external tool `intutic skill audit --engine cisco` (or the
|
|
568
|
+
* `ciscoSkillScannerEnabled` workspace setting's auto-run) shells out to.
|
|
569
|
+
*
|
|
570
|
+
* Unlike every other check above, absence here is NOT a failure —
|
|
571
|
+
* `passed: true` either way. This is the operator's own separate
|
|
572
|
+
* installation (`pipx install cisco-ai-skill-scanner`), and `intutic skill audit`
|
|
573
|
+
* degrades gracefully without it (see `lib/ciscoScanner.ts`'s module doc
|
|
574
|
+
* comment). The remediation string is still populated when absent, purely
|
|
575
|
+
* informational — `runDoctor`'s print loop shows it as a dimmed hint on a
|
|
576
|
+
* passing row, not an error.
|
|
577
|
+
*/
|
|
578
|
+
export async function checkCiscoScanner() {
|
|
579
|
+
const present = await ciscoScannerOnPath();
|
|
580
|
+
if (!present) {
|
|
581
|
+
return {
|
|
582
|
+
name: 'Cisco Skill Scanner',
|
|
583
|
+
passed: true,
|
|
584
|
+
detail: 'not installed (optional integration)',
|
|
585
|
+
remediation: 'pipx install cisco-ai-skill-scanner',
|
|
390
586
|
};
|
|
391
587
|
}
|
|
588
|
+
const version = await ciscoScannerVersion();
|
|
589
|
+
return {
|
|
590
|
+
name: 'Cisco Skill Scanner',
|
|
591
|
+
passed: true,
|
|
592
|
+
detail: version ? `Installed — ${version}` : 'Installed on PATH (version unavailable)',
|
|
593
|
+
};
|
|
392
594
|
}
|
|
393
595
|
// ─── Runner ──────────────────────────────────────────────────────────
|
|
394
596
|
export async function runDoctor() {
|
|
@@ -403,12 +605,20 @@ export async function runDoctor() {
|
|
|
403
605
|
results.push(checkDaemonLog());
|
|
404
606
|
results.push(await checkValkey());
|
|
405
607
|
results.push(checkCertTrust());
|
|
608
|
+
results.push(await checkPolicySnapshot());
|
|
609
|
+
results.push(await checkCiscoScanner());
|
|
406
610
|
// Print results
|
|
407
611
|
const passed = results.filter(r => r.passed).length;
|
|
408
612
|
const failed = results.filter(r => !r.passed).length;
|
|
409
613
|
for (const result of results) {
|
|
410
614
|
if (result.passed) {
|
|
411
615
|
console.log(` ${pc.green('✓')} ${pc.bold(result.name)} — ${result.detail}`);
|
|
616
|
+
// Informational only: every OTHER passing check has no remediation —
|
|
617
|
+
// this is the one exception (checkCiscoScanner, absent-but-optional),
|
|
618
|
+
// where the hint is still worth surfacing even though nothing failed.
|
|
619
|
+
if (result.remediation) {
|
|
620
|
+
console.log(` ${pc.dim('→')} ${pc.dim(result.remediation)}`);
|
|
621
|
+
}
|
|
412
622
|
}
|
|
413
623
|
else {
|
|
414
624
|
console.log(` ${pc.red('✗')} ${pc.bold(result.name)} — ${result.detail}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `intutic enforce` — the L2 mandatory-egress firewall (LLD #63 §5).
|
|
3
|
+
*
|
|
4
|
+
* The proxy governs the traffic it sees, but an agent can bypass it by simply
|
|
5
|
+
* not routing through it. This command closes that door: it default-denies host
|
|
6
|
+
* egress to everything except the proxy, DNS, and operator-declared infra, so
|
|
7
|
+
* the only path to the network is the governing proxy. That turns "please point
|
|
8
|
+
* at the proxy" into "there is no other way out".
|
|
9
|
+
*
|
|
10
|
+
* The rule generation and application live in the `intutic-proxy` binary's
|
|
11
|
+
* `enforce` subcommand (Rust, platform-aware: nftables/iptables on Linux, pf on
|
|
12
|
+
* macOS). This command is a thin, discoverable wrapper that spawns it.
|
|
13
|
+
*
|
|
14
|
+
* - `generate` / `status` need no privilege.
|
|
15
|
+
* - `apply` / `remove` change the host firewall and need root.
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
export interface EnforceOptions {
|
|
20
|
+
port?: string;
|
|
21
|
+
uid?: string;
|
|
22
|
+
allow?: string;
|
|
23
|
+
/** Commander maps `--no-dns` to `dns === false`; anything else leaves it true. */
|
|
24
|
+
dns?: boolean;
|
|
25
|
+
platform?: string;
|
|
26
|
+
}
|
|
27
|
+
/** Translate parsed options into the binary's `enforce` flags. */
|
|
28
|
+
export declare function enforceFlagArgs(opts: EnforceOptions): string[];
|
|
29
|
+
declare const VALID_ACTIONS: readonly ["generate", "apply", "remove", "status", "report"];
|
|
30
|
+
type EnforceAction = (typeof VALID_ACTIONS)[number];
|
|
31
|
+
export declare function runEnforce(action: EnforceAction, opts: EnforceOptions): Promise<void>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=enforce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enforce.d.ts","sourceRoot":"","sources":["../../src/commands/enforce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kFAAkF;IAClF,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,EAAE,CAQ9D;AAED,QAAA,MAAM,aAAa,8DAA+D,CAAA;AAClF,KAAK,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAoEnD,wBAAsB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD3F"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `intutic enforce` — the L2 mandatory-egress firewall (LLD #63 §5).
|
|
3
|
+
*
|
|
4
|
+
* The proxy governs the traffic it sees, but an agent can bypass it by simply
|
|
5
|
+
* not routing through it. This command closes that door: it default-denies host
|
|
6
|
+
* egress to everything except the proxy, DNS, and operator-declared infra, so
|
|
7
|
+
* the only path to the network is the governing proxy. That turns "please point
|
|
8
|
+
* at the proxy" into "there is no other way out".
|
|
9
|
+
*
|
|
10
|
+
* The rule generation and application live in the `intutic-proxy` binary's
|
|
11
|
+
* `enforce` subcommand (Rust, platform-aware: nftables/iptables on Linux, pf on
|
|
12
|
+
* macOS). This command is a thin, discoverable wrapper that spawns it.
|
|
13
|
+
*
|
|
14
|
+
* - `generate` / `status` need no privilege.
|
|
15
|
+
* - `apply` / `remove` change the host firewall and need root.
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
import { spawn } from 'node:child_process';
|
|
20
|
+
import { log } from '../lib/logger.js';
|
|
21
|
+
import { resolveProxyBinary } from '../lib/proxyBinary.js';
|
|
22
|
+
import { writeEnforcementState } from '../lib/enforcementState.js';
|
|
23
|
+
import { reportDeviceState } from '../lib/deviceReport.js';
|
|
24
|
+
import { createRequire } from 'node:module';
|
|
25
|
+
const { version: cliVersion } = createRequire(import.meta.url)('../../package.json');
|
|
26
|
+
/** Translate parsed options into the binary's `enforce` flags. */
|
|
27
|
+
export function enforceFlagArgs(opts) {
|
|
28
|
+
const args = [];
|
|
29
|
+
if (opts.port)
|
|
30
|
+
args.push('--port', opts.port);
|
|
31
|
+
if (opts.uid)
|
|
32
|
+
args.push('--uid', opts.uid);
|
|
33
|
+
if (opts.allow)
|
|
34
|
+
args.push('--allow', opts.allow);
|
|
35
|
+
if (opts.dns === false)
|
|
36
|
+
args.push('--no-dns');
|
|
37
|
+
if (opts.platform)
|
|
38
|
+
args.push('--platform', opts.platform);
|
|
39
|
+
return args;
|
|
40
|
+
}
|
|
41
|
+
const VALID_ACTIONS = ['generate', 'apply', 'remove', 'status', 'report'];
|
|
42
|
+
/**
|
|
43
|
+
* Re-queries `enforce status` with captured stdout — `status` always prints
|
|
44
|
+
* a single JSON line (`main.rs`'s `handle_enforce`), never a flag-gated
|
|
45
|
+
* format, so no `--json` flag is needed. Returns `null` on any failure
|
|
46
|
+
* (binary missing, unparseable output) rather than throwing — this is a
|
|
47
|
+
* best-effort truthfulness step layered on top of an apply/remove that
|
|
48
|
+
* already succeeded, not something that should fail the command.
|
|
49
|
+
*/
|
|
50
|
+
async function queryEnforceStatus(binary, flags) {
|
|
51
|
+
return new Promise((resolve) => {
|
|
52
|
+
const child = spawn(binary, ['enforce', 'status', ...flags], { stdio: ['ignore', 'pipe', 'ignore'] });
|
|
53
|
+
let out = '';
|
|
54
|
+
child.stdout.on('data', (chunk) => {
|
|
55
|
+
out += chunk.toString();
|
|
56
|
+
});
|
|
57
|
+
child.on('error', () => resolve(null));
|
|
58
|
+
child.on('exit', () => {
|
|
59
|
+
try {
|
|
60
|
+
resolve(JSON.parse(out.trim()));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
resolve(null);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* After a successful privileged apply/remove, re-query status WHILE STILL
|
|
70
|
+
* ELEVATED (this is what makes the recorded state truthful on macOS, where
|
|
71
|
+
* an unprivileged `pfctl` query can't see the real rule set — see
|
|
72
|
+
* enforcementState.ts's module doc), record it locally, then attempt a
|
|
73
|
+
* best-effort report to the control plane. Never throws: the firewall
|
|
74
|
+
* change itself already succeeded, which is what matters for this
|
|
75
|
+
* command's own exit code.
|
|
76
|
+
*/
|
|
77
|
+
async function recordAndReportFirewallState(binary, flags) {
|
|
78
|
+
const status = await queryEnforceStatus(binary, flags);
|
|
79
|
+
if (!status) {
|
|
80
|
+
log.warn('Could not re-query enforce status to record local state — the firewall change itself still applied.');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
await writeEnforcementState({
|
|
84
|
+
firewall: {
|
|
85
|
+
active: status.active,
|
|
86
|
+
backend: status.backend,
|
|
87
|
+
detail: status.detail,
|
|
88
|
+
reportedAt: new Date().toISOString(),
|
|
89
|
+
},
|
|
90
|
+
}, cliVersion);
|
|
91
|
+
const report = await reportDeviceState();
|
|
92
|
+
if (!report.reported) {
|
|
93
|
+
log.dim(` (device report not sent: ${report.reason})`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export async function runEnforce(action, opts) {
|
|
97
|
+
if (action === 'report') {
|
|
98
|
+
const result = await reportDeviceState();
|
|
99
|
+
if (result.reported) {
|
|
100
|
+
log.success('Device enforcement state reported.');
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
log.warn(`Device report not sent: ${result.reason}`);
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (!VALID_ACTIONS.includes(action)) {
|
|
108
|
+
log.error(`Unknown enforce action '${action}'. Use: ${VALID_ACTIONS.join(' | ')}`);
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
const flags = enforceFlagArgs(opts);
|
|
112
|
+
// apply/remove are privileged. Warn before spawning so a permission failure
|
|
113
|
+
// reads as expected rather than a mystery — but still attempt, because the
|
|
114
|
+
// Rust side emits the precise OS error if privilege really is missing, and
|
|
115
|
+
// because inside an already-root context (a container, a root shell) there is
|
|
116
|
+
// nothing to escalate.
|
|
117
|
+
const isPrivileged = action === 'apply' || action === 'remove';
|
|
118
|
+
if (isPrivileged && typeof process.getuid === 'function' && process.getuid() !== 0) {
|
|
119
|
+
log.warn(`'intutic enforce ${action}' changes the host firewall and needs root.`);
|
|
120
|
+
log.info(`If it fails with a permission error, re-run with sudo:`);
|
|
121
|
+
log.info(` sudo intutic enforce ${action}${flags.length ? ' ' + flags.join(' ') : ''}`);
|
|
122
|
+
}
|
|
123
|
+
const binary = resolveProxyBinary();
|
|
124
|
+
await new Promise((resolve) => {
|
|
125
|
+
const child = spawn(binary, ['enforce', action, ...flags], { stdio: 'inherit' });
|
|
126
|
+
child.on('error', (err) => {
|
|
127
|
+
if (err.code === 'ENOENT') {
|
|
128
|
+
log.error('Could not find the intutic-proxy binary.');
|
|
129
|
+
log.info('Install it with: npm install -g @intutic/proxy');
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
log.error(`enforce failed: ${err.message}`);
|
|
133
|
+
}
|
|
134
|
+
process.exit(1);
|
|
135
|
+
});
|
|
136
|
+
child.on('exit', async (code) => {
|
|
137
|
+
process.exitCode = code ?? 0;
|
|
138
|
+
// Awaited, not detached: a fully async fire-and-forget risks the
|
|
139
|
+
// process exiting before the POST lands, since nothing else keeps the
|
|
140
|
+
// event loop alive once this resolves. `recordAndReportFirewallState`
|
|
141
|
+
// never throws, so this can't turn a successful firewall change into
|
|
142
|
+
// a failed command — it can only add a brief, bounded delay.
|
|
143
|
+
if (isPrivileged && code === 0) {
|
|
144
|
+
await recordAndReportFirewallState(binary, flags);
|
|
145
|
+
}
|
|
146
|
+
resolve();
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=enforce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enforce.js","sourceRoot":"","sources":["../../src/commands/enforce.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `intutic enterprise install` — CA-trust rollout, Cursor system-level
|
|
3
|
+
* hooks, and Jamf/Intune MDM manifest generation for a managed fleet.
|
|
4
|
+
*
|
|
5
|
+
* Replaces the deleted `enterprise-install.ts` (commit `8481b5d9`). Named
|
|
6
|
+
* `enterprise install`, deliberately not the old hyphenated
|
|
7
|
+
* `enterprise-install` — `tools/scripts/intutic-enterprise-install.sh`
|
|
8
|
+
* already exists as an unrelated air-gapped docker-compose installer.
|
|
9
|
+
*
|
|
10
|
+
* The host firewall is intentionally NOT part of this command — that's
|
|
11
|
+
* `intutic enforce apply`/`generate` (TD-332's real, tested implementation).
|
|
12
|
+
* Rebuilding a `pf.conf`/`iptables.rules` template generator here, as the
|
|
13
|
+
* deleted code did, would just be a second, unmaintained copy of it. This
|
|
14
|
+
* command prints a pointer to it instead.
|
|
15
|
+
*
|
|
16
|
+
* @module
|
|
17
|
+
*/
|
|
18
|
+
export interface EnterpriseInstallOptions {
|
|
19
|
+
proxyUrl?: string;
|
|
20
|
+
generateMdmOnly?: boolean;
|
|
21
|
+
mdmOutputDir?: string;
|
|
22
|
+
skipCa?: boolean;
|
|
23
|
+
skipHooks?: boolean;
|
|
24
|
+
dev?: boolean;
|
|
25
|
+
/** Absolute path to the intutic CLI binary on the TARGET (managed) machine — not this admin machine. */
|
|
26
|
+
cliBinaryPath?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function runEnterpriseInstall(opts: EnterpriseInstallOptions): Promise<void>;
|
|
29
|
+
//# sourceMappingURL=enterprise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enterprise.d.ts","sourceRoot":"","sources":["../../src/commands/enterprise.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAuBH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,wGAAwG;IACxG,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAqBD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GxF"}
|