Files
clawsec/skills/clawsec-suite/hooks/clawsec-advisory-guardian/lib/advisory_scope.mjs
T
Aldo Delgado 7cdb4ab7e2 fix(portability): harden cross-platform path handling and install workflows (#62)
* docs: add agent collaboration and git safety rules to AGENTS.md

* fix(portability): harden cross-platform path handling and install workflows

- add shared path resolution utility for advisory guardian components
- expand and normalize home-path tokens: ~, $HOME, ${HOME}, %USERPROFILE%, $env:USERPROFILE
- reject unresolved/escaped home tokens to prevent literal "$HOME" directory creation
- fix install/runtime path handling in:
  - openclaw-audit-watchdog setup_cron and suppression config loader
  - clawsec-suite advisory hook handler, suppression loader, and guarded installer
- remove hardcoded Homebrew binary assumptions in watchdog scripts/tests
- add LF enforcement via .gitattributes to reduce CRLF script breakage
- expand CI Node checks to linux/macos/windows matrix
- add cross-platform test coverage for path expansion and token rejection
- update README and SKILL docs with bash/zsh/PowerShell-safe path guidance
- add compatibility deliverables:
  - docs/COMPATIBILITY_REPORT.md
  - docs/REMEDIATION_PLAN.md
  - docs/PLATFORM_VERIFICATION.md

Validation:
- node skills/clawsec-suite/test/path_resolution.test.mjs
- node skills/clawsec-suite/test/guarded_install.test.mjs
- node skills/clawsec-suite/test/advisory_suppression.test.mjs
- node skills/openclaw-audit-watchdog/test/suppression_config.test.mjs
- node skills/openclaw-audit-watchdog/test/render_report_suppression.test.mjs

* fix(advisory): avoid fail-open on invalid path vars and cover watchdog tests

* docs: move signing runbooks into docs folder

* docs: remove root-level signing runbooks after move

* chore(clawsec-suite): bump version to 0.1.3

* chore(openclaw-audit-watchdog): bump version to 0.1.1

* docs(changelog): add entries for clawsec-suite 0.1.3 and watchdog 0.1.1

* docs(changelog): credit @aldodelgado for PR #62 contributions

* feat(clawsec-suite): scope advisories to openclaw application

* fix(ci): run advisory scope tests without TypeScript loader

---------

Co-authored-by: David Abutbul <David.a@prompt.security>
2026-02-25 13:24:31 +02:00

49 lines
1.2 KiB
JavaScript

const ADVISORY_APPLICATION_OPENCLAW = "openclaw";
const ADVISORY_APPLICATION_ALL = "all";
/**
* @param {unknown} value
* @returns {string[]}
*/
function normalizeApplicationValue(value) {
if (typeof value === "string") {
const normalized = value.trim().toLowerCase();
return normalized ? [normalized] : [];
}
if (Array.isArray(value)) {
return value
.filter((entry) => typeof entry === "string")
.map((entry) => entry.trim().toLowerCase())
.filter(Boolean);
}
return [];
}
/**
* Decide whether an advisory should be considered by OpenClaw-facing flows.
*
* Backward compatibility rule:
* - Advisories without `application` remain eligible.
*
* @param {{ application?: unknown }} advisory
* @returns {boolean}
*/
export function advisoryAppliesToOpenclaw(advisory) {
const application = advisory?.application;
if (application === undefined || application === null) {
return true;
}
const applications = normalizeApplicationValue(application);
if (applications.length === 0) {
return true;
}
return (
applications.includes(ADVISORY_APPLICATION_OPENCLAW) ||
applications.includes(ADVISORY_APPLICATION_ALL)
);
}