@lannguyensi/harness 0.63.0 → 0.64.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/CHANGELOG.md +26 -0
- package/README.md +2 -2
- package/dist/cli/delegate/index.js +2 -1
- package/dist/cli/delegate/index.js.map +1 -1
- package/dist/cli/delegate/register.d.ts +5 -0
- package/dist/cli/delegate/register.js +90 -0
- package/dist/cli/delegate/register.js.map +1 -0
- package/dist/cli/doctor/expire-on-tool-match.d.ts +15 -0
- package/dist/cli/doctor/expire-on-tool-match.js +58 -0
- package/dist/cli/doctor/expire-on-tool-match.js.map +1 -0
- package/dist/cli/doctor/format.js +7 -0
- package/dist/cli/doctor/format.js.map +1 -1
- package/dist/cli/doctor/index.js +8 -0
- package/dist/cli/doctor/index.js.map +1 -1
- package/dist/cli/doctor/types.d.ts +9 -0
- package/dist/cli/doctor/types.js.map +1 -1
- package/dist/cli/dry-run.d.ts +12 -0
- package/dist/cli/dry-run.js +60 -27
- package/dist/cli/dry-run.js.map +1 -1
- package/dist/cli/enriched-event.d.ts +35 -0
- package/dist/cli/enriched-event.js +60 -0
- package/dist/cli/enriched-event.js.map +1 -0
- package/dist/cli/explain-action.d.ts +6 -1
- package/dist/cli/explain-action.js +31 -1
- package/dist/cli/explain-action.js.map +1 -1
- package/dist/cli/explain-policy.d.ts +12 -0
- package/dist/cli/explain-policy.js +20 -38
- package/dist/cli/explain-policy.js.map +1 -1
- package/dist/cli/index.js +14 -484
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/profiles.js +9 -7
- package/dist/cli/init/profiles.js.map +1 -1
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js +102 -1
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js.map +1 -1
- package/dist/cli/policy/intercept.js +4 -2
- package/dist/cli/policy/intercept.js.map +1 -1
- package/dist/cli/policy/risk-envelope-enrichment.js +4 -2
- package/dist/cli/policy/risk-envelope-enrichment.js.map +1 -1
- package/dist/cli/register-audit-group.d.ts +5 -0
- package/dist/cli/register-audit-group.js +91 -0
- package/dist/cli/register-audit-group.js.map +1 -0
- package/dist/cli/register-operator-lifecycle.d.ts +5 -0
- package/dist/cli/register-operator-lifecycle.js +117 -0
- package/dist/cli/register-operator-lifecycle.js.map +1 -0
- package/dist/cli/remove/register.d.ts +5 -0
- package/dist/cli/remove/register.js +42 -0
- package/dist/cli/remove/register.js.map +1 -0
- package/dist/cli/resolve-env.js +12 -13
- package/dist/cli/resolve-env.js.map +1 -1
- package/dist/cli/test-risk.d.ts +2 -1
- package/dist/cli/test-risk.js +5 -1
- package/dist/cli/test-risk.js.map +1 -1
- package/dist/cli/uninstall/register.d.ts +5 -0
- package/dist/cli/uninstall/register.js +169 -0
- package/dist/cli/uninstall/register.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js +38 -13
- package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js.map +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.d.ts +2 -2
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js +26 -13
- package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js.map +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +15 -10
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +51 -22
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution.js +7 -3
- package/dist/policy-packs/builtin/understanding-before-execution.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/intercept.d.ts +130 -1
- package/dist/runtime/intercept.js +85 -14
- package/dist/runtime/intercept.js.map +1 -1
- package/dist/runtime/task-providers/agent-tasks.d.ts +11 -9
- package/dist/runtime/task-providers/agent-tasks.js +11 -9
- package/dist/runtime/task-providers/agent-tasks.js.map +1 -1
- package/package.json +1 -1
|
@@ -75,6 +75,18 @@ interface ExplainPolicyProjection {
|
|
|
75
75
|
parity: {
|
|
76
76
|
envelope_enrichment: string[];
|
|
77
77
|
not_evaluated: string[];
|
|
78
|
+
/**
|
|
79
|
+
* Per-event (task 8b891e83): true when the Bash prefix remainder
|
|
80
|
+
* (what follows a leading `cd`/`VAR=value`/`git switch` prefix) is a
|
|
81
|
+
* `kubectl` command carrying an explicit `--context`/`--namespace`/
|
|
82
|
+
* `-n`. The hook merges that target into its environment resolution
|
|
83
|
+
* upgrade-only; this verb never does (`not_evaluated` lists
|
|
84
|
+
* `kubectl_target` statically), so `true` tells the operator the
|
|
85
|
+
* `applies` verdict below was computed WITHOUT a merge the hook
|
|
86
|
+
* would perform for this very event. `false` means no such target
|
|
87
|
+
* was found, i.e. the skipped merge would have been a no-op.
|
|
88
|
+
*/
|
|
89
|
+
kubectl_target_present: boolean;
|
|
78
90
|
};
|
|
79
91
|
/** Static deletion-target verdict (task d03af8f6); null when the
|
|
80
92
|
* event's command is not a recognized deletion verb. */
|
|
@@ -14,10 +14,11 @@
|
|
|
14
14
|
// evaluates a hypothetical event live and reads nothing from the ledger.
|
|
15
15
|
import * as fs from "node:fs";
|
|
16
16
|
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
17
|
-
import {
|
|
17
|
+
import { classifyRisk, deriveProjectName, evaluateWhen, policyMatchesEvent, resolveDeletionTarget, resolveEnvironment, } from "../runtime/index.js";
|
|
18
|
+
import { parseKubectlTarget } from "../runtime/kubectl-target-parse.js";
|
|
18
19
|
import { extractShellCommand } from "../runtime/tool-name-aliases.js";
|
|
19
20
|
import { DEFAULT_SAFE_DELETION_ROOTS } from "../schema/risk.js";
|
|
20
|
-
import {
|
|
21
|
+
import { enrichLoadedEvent } from "./enriched-event.js";
|
|
21
22
|
import { loadEventEnvelope } from "./event-input.js";
|
|
22
23
|
import { EX_USAGE, HarnessExitError } from "./exit-codes.js";
|
|
23
24
|
import { loadManifest } from "./loader.js";
|
|
@@ -165,45 +166,18 @@ export function explainPolicy(policyName, opts) {
|
|
|
165
166
|
}
|
|
166
167
|
}
|
|
167
168
|
}
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
// `~/.kube/config` read entirely — same contract as `resolve-env`.
|
|
171
|
-
const kube = opts.kubeContext !== undefined || opts.kubeNamespace !== undefined
|
|
172
|
-
? { context: opts.kubeContext ?? "", namespace: opts.kubeNamespace ?? "" }
|
|
173
|
-
: resolveKubeContext();
|
|
169
|
+
const loaded = loadEventEnvelope(opts.eventPath, opts, "explain-policy");
|
|
170
|
+
const { event } = loaded;
|
|
174
171
|
// Envelope enrichment shared with `harness policy intercept` (task
|
|
175
172
|
// 7c3919a2): the leading Bash prefix (inline `VAR=value`, `cd <path>
|
|
176
173
|
// &&`, `git switch|checkout <branch> &&`) is parsed and merged into
|
|
177
|
-
// the resolver inputs by the SAME helper the hook uses
|
|
178
|
-
//
|
|
179
|
-
// `
|
|
180
|
-
//
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
cwd: baseEnvelope.runtime.cwd,
|
|
185
|
-
cwdGitContext: {
|
|
186
|
-
repo: baseEnvelope.session.repo,
|
|
187
|
-
branch: baseEnvelope.session.branch,
|
|
188
|
-
sha: "",
|
|
189
|
-
},
|
|
190
|
-
env: opts.env ?? process.env,
|
|
191
|
-
kubeContext: kube.context,
|
|
192
|
-
kubeNamespace: kube.namespace,
|
|
193
|
-
user: baseEnvelope.runtime.user,
|
|
194
|
-
host: baseEnvelope.runtime.host,
|
|
195
|
-
now: new Date(baseEnvelope.timestamp),
|
|
196
|
-
});
|
|
197
|
-
const envelope = enrichment.git.repo === baseEnvelope.session.repo &&
|
|
198
|
-
enrichment.git.branch === baseEnvelope.session.branch
|
|
199
|
-
? baseEnvelope
|
|
200
|
-
: buildActionEnvelope(event, {
|
|
201
|
-
cwd: baseEnvelope.runtime.cwd,
|
|
202
|
-
git: enrichment.git,
|
|
203
|
-
user: baseEnvelope.runtime.user,
|
|
204
|
-
host: baseEnvelope.runtime.host,
|
|
205
|
-
now: new Date(baseEnvelope.timestamp),
|
|
206
|
-
});
|
|
174
|
+
// the resolver inputs by the SAME helper the hook uses (through
|
|
175
|
+
// `enrichLoadedEvent`, shared with `resolve-env`, `test-risk` and
|
|
176
|
+
// `explain-action`, task 8b891e83), so this verb cannot report
|
|
177
|
+
// `unknown` for a command the hook resolves to `production`. Only the
|
|
178
|
+
// envelope enrichment is shared; this verb still reads no ledger or
|
|
179
|
+
// evidence.
|
|
180
|
+
const { envelope, enrichment, kube } = enrichLoadedEvent(loaded, manifest, opts);
|
|
207
181
|
const classifier = classifyRisk(envelope, manifest.risk.classifiers);
|
|
208
182
|
const environment = resolveEnvironment(envelope, manifest.environments.resolvers, {
|
|
209
183
|
env: enrichment.env,
|
|
@@ -221,6 +195,13 @@ export function explainPolicy(policyName, opts) {
|
|
|
221
195
|
const whenEval = policy.when !== undefined
|
|
222
196
|
? evaluateWhen(policy.when, { risk: classifier, environment, deletionTarget })
|
|
223
197
|
: undefined;
|
|
198
|
+
// Same remainder the hook feeds `parseKubectlTarget` (after the
|
|
199
|
+
// prefix consumed `cd`/`VAR=value`/`git switch`); flag only, no merge.
|
|
200
|
+
const kubectlSubject = enrichment.riskBashCommand === null
|
|
201
|
+
? null
|
|
202
|
+
: enrichment.riskBashCommand.slice(enrichment.bashPrefix?.remainderStart ?? 0);
|
|
203
|
+
const kubectlTarget = kubectlSubject === null ? null : parseKubectlTarget(kubectlSubject);
|
|
204
|
+
const kubectlTargetPresent = kubectlTarget !== null && (kubectlTarget.context !== null || kubectlTarget.namespace !== null);
|
|
224
205
|
const projection = {
|
|
225
206
|
policy: policy.name,
|
|
226
207
|
description: policy.description,
|
|
@@ -240,6 +221,7 @@ export function explainPolicy(policyName, opts) {
|
|
|
240
221
|
parity: {
|
|
241
222
|
envelope_enrichment: ["inline_env", "cd_git_context", "branch_switch_upgrade"],
|
|
242
223
|
not_evaluated: ["ledger_requires", "kubectl_target"],
|
|
224
|
+
kubectl_target_present: kubectlTargetPresent,
|
|
243
225
|
},
|
|
244
226
|
deletion_target: deletionTarget,
|
|
245
227
|
...(policy.name.startsWith("preflight-before-") && {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain-policy.js","sourceRoot":"","sources":["../../src/cli/explain-policy.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,wEAAwE;AACxE,mEAAmE;AACnE,wEAAwE;AACxE,wEAAwE;AACxE,qEAAqE;AACrE,yEAAyE;AACzE,uEAAuE;AACvE,6CAA6C;AAC7C,EAAE;AACF,qEAAqE;AACrE,oEAAoE;AACpE,yEAAyE;AAEzE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"explain-policy.js","sourceRoot":"","sources":["../../src/cli/explain-policy.ts"],"names":[],"mappings":"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"}
|