mirror of
https://github.com/openclaw/openclaw.git
synced 2026-10-26 10:13:27 +08:00
improve: simplify repository tooling, contribution templates, and packaged skill docs (#168708)
This commit is contained in:
1 parent
610633211e
commit
c57f3559f3
16 files changed
+20
-22
No files matched your search
@@ -49,7 +49,7 @@ body:
|
||||
id: repro
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: Provide the shortest deterministic repro path supported by direct observation. If the repro path cannot be grounded from the evidence, respond with exactly `NOT_ENOUGH_INFO`.
|
||||
description: Provide the shortest repeatable reproduction steps supported by direct observation. If the steps cannot be grounded from the evidence, respond with exactly `NOT_ENOUGH_INFO`.
|
||||
placeholder: |
|
||||
1. Start OpenClaw 2026.2.17 with the attached config.
|
||||
2. Send a Telegram thread reply in the affected chat.
|
||||
|
||||
@@ -3,7 +3,7 @@ summary: "Generated inventory of OpenClaw plugins shipped in core, published ext
|
||||
read_when:
|
||||
- You are deciding whether a plugin ships in the core npm package or installs separately
|
||||
- You are updating bundled plugin package metadata or release automation
|
||||
- You need the canonical internal vs external plugin list
|
||||
- You need the current internal vs external plugin list
|
||||
title: "Plugin inventory"
|
||||
---
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ imports, and removes its fixture tree afterward. It accepts 1–1000 agents.
|
||||
|
||||
## What it measures
|
||||
|
||||
Each agent gets a real canonical SQLite database with four persisted sessions
|
||||
Each agent gets a real SQLite database with four persisted sessions
|
||||
and 512 KiB of synthetic padding in the existing cache table. The harness calls
|
||||
the production `sweepCronRunSessions` sequentially, matching the scheduler's
|
||||
per-agent await ordering without adding yields, accessor spies, or mocks.
|
||||
|
||||
@@ -395,7 +395,7 @@ export function renderDependencyVulnerabilityGateMarkdownReport(
|
||||
`- Coverage issues: ${report.coverage.upstream.issues.length}`,
|
||||
`- GitHub-reviewed range reconciliations: ${report.coverage.upstream.reconciliations.length} (raw ranges retained in JSON coverage evidence)`,
|
||||
"",
|
||||
"An empty source response is not comprehensive vulnerability clearance. Unsupported or incomplete upstream checks are not evidence that a package is unaffected.",
|
||||
"An empty source response is not a full vulnerability assessment. Unsupported or incomplete upstream checks are not evidence that a package is unaffected.",
|
||||
"",
|
||||
...report.graphs.flatMap((graph) => [
|
||||
`### ${graph.lockfile}`,
|
||||
@@ -511,7 +511,7 @@ export async function main(
|
||||
`PASS dependency vulnerability gate: checked ${packageVersions} resolved ` +
|
||||
`package versions across ${report.graphs.length} separate lockfile graphs; 0 known malware, ` +
|
||||
`${advisories.length} non-blocking advisories recorded as release evidence; ${coverage}. ` +
|
||||
"This is not comprehensive vulnerability clearance.\n",
|
||||
"This is not a full vulnerability assessment.\n",
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -623,7 +623,7 @@ summary: "Generated inventory of OpenClaw plugins shipped in core, published ext
|
||||
read_when:
|
||||
- You are deciding whether a plugin ships in the core npm package or installs separately
|
||||
- You are updating bundled plugin package metadata or release automation
|
||||
- You need the canonical internal vs external plugin list
|
||||
- You need the current internal vs external plugin list
|
||||
title: "Plugin inventory"
|
||||
---
|
||||
|
||||
|
||||
@@ -224,7 +224,7 @@ const candidateActionRules = Object.entries({
|
||||
[candidateLabels.dirtyCandidate]: noisyPrMessage,
|
||||
[candidateLabels.externalPluginCandidate]: thirdPartyExtensionMessage,
|
||||
[candidateLabels.riskyInfra]:
|
||||
"Closing this PR because it changes infra/CI/release/ops plumbing without maintainer context and validation. That surface is high-blast-radius; open an issue/RFC or get owner approval before sending a patch.",
|
||||
"Closing this PR because it changes infra/CI/release/ops plumbing without maintainer context and validation. These changes can affect many development and release workflows; open an issue/RFC or get owner approval before sending a patch.",
|
||||
[candidateLabels.docsDiscoverability]:
|
||||
"Closing this PR because docs discoverability and community-plugin listing changes should go through ClawHub or a maintainer-owned docs plan, not drive-by core churn.",
|
||||
[candidateLabels.lowSignalDocs]:
|
||||
|
||||
+1
-1
@@ -1922,7 +1922,7 @@ ensure_default_node_active_shell() {
|
||||
ui_error "Active Node.js must be ${NODE_SUPPORTED_VERSION_LABEL} but this shell is using ${active_version} (${active_path})"
|
||||
print_active_node_paths || true
|
||||
|
||||
echo "Install/select Node.js ${NODE_DEFAULT_MAJOR} and ensure it is first on PATH, then rerun installer."
|
||||
echo "Install/select Node.js ${NODE_DEFAULT_MAJOR} and check that it is first on PATH, then rerun installer."
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ detect_provider() {
|
||||
if command -v "$candidate" &>/dev/null; then
|
||||
case "$candidate" in
|
||||
podman)
|
||||
fail "Podman is installed but not responding, and no responsive Docker daemon was found. Ensure the podman machine is running (podman machine start) or start Docker."
|
||||
fail "Podman is installed but not responding, and no responsive Docker daemon was found. Start the podman machine (podman machine start) or start Docker."
|
||||
;;
|
||||
docker)
|
||||
fail "Docker is installed but not running, and no responsive Podman machine was found. Start Docker or start Podman."
|
||||
@@ -102,7 +102,7 @@ if ! "$CONTAINER_CMD" info &>/dev/null; then
|
||||
if [[ "$CONTAINER_CMD" == "docker" ]]; then
|
||||
fail "Docker daemon is not running. Start it and try again."
|
||||
elif [[ "$CONTAINER_CMD" == "podman" ]]; then
|
||||
fail "Podman is not responding. Ensure the podman machine is running (podman machine start)."
|
||||
fail "Podman is not responding. Start the podman machine (podman machine start)."
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -409,7 +409,7 @@ export function collectControlUiPackErrors(paths: Iterable<string>): string[] {
|
||||
for (const requiredPath of REQUIRED_PACKED_PATHS) {
|
||||
if (!packedPaths.has(requiredPath)) {
|
||||
errors.push(
|
||||
`npm package is missing required path "${requiredPath}". Ensure UI assets are built and included before publish.`,
|
||||
`npm package is missing required path "${requiredPath}". Build and include UI assets before publishing.`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -583,7 +583,7 @@ export async function runPnpmAuditProd({
|
||||
reason: `No matching ${normalizedMinSeverity} or higher advisories returned by npm bulk for production dependencies.`,
|
||||
};
|
||||
stdout.write(
|
||||
`${result.reason} Upstream repository advisories were not checked; this is not comprehensive vulnerability clearance.\n`,
|
||||
`${result.reason} Upstream repository advisories were not checked; this is not a full vulnerability assessment.\n`,
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -996,7 +996,7 @@ function evidenceScorecardWarnings(
|
||||
.filter((item) => (item.profile === "all" || item.profile === "release") && !item.scorecard)
|
||||
.map(
|
||||
(item) =>
|
||||
`${item.path}: ${item.profile} profile qa-evidence.json does not include a scorecard field; run pnpm openclaw qa run --qa-profile ${item.profile} to produce deterministic scorecard rows`,
|
||||
`${item.path}: ${item.profile} profile qa-evidence.json does not include a scorecard field; run pnpm openclaw qa run --qa-profile ${item.profile} to produce repeatable scorecard rows`,
|
||||
),
|
||||
...coverage.warnings,
|
||||
];
|
||||
|
||||
@@ -50,7 +50,7 @@ explanations, and dashboard content. Keep session and board organization here.
|
||||
|
||||
## Navigate and arrange the UI
|
||||
|
||||
Use `screen` for deterministic client commands:
|
||||
Use `screen` for direct client commands:
|
||||
|
||||
- `navigate` to open a session by `sessionKey`;
|
||||
- `sidebar_show` / `sidebar_hide` for the session sidebar;
|
||||
@@ -59,8 +59,8 @@ Use `screen` for deterministic client commands:
|
||||
docked panels.
|
||||
|
||||
`screen` broadcasts to every connected Control UI that advertises UI commands;
|
||||
it cannot select one browser tab. Confirm the blast radius when several clients
|
||||
may be open. If it reports no capable client, ask the user to open the Control
|
||||
it cannot select one browser tab. Check which clients are connected before sending
|
||||
a command. If it reports no capable client, ask the user to open the Control
|
||||
UI and retry.
|
||||
|
||||
Use the in-app browser or an available browser-control tool when the task needs
|
||||
|
||||
@@ -41,7 +41,7 @@ Use when:
|
||||
Do not use when:
|
||||
|
||||
- Non-Hue smart devices (other brands) -> not supported
|
||||
- HomeKit scenes or Shortcuts -> use Apple's ecosystem
|
||||
- HomeKit scenes or Shortcuts -> use Apple's Home app or Shortcuts
|
||||
- TV or entertainment system control
|
||||
- Thermostat or HVAC
|
||||
- Smart plugs (unless Hue smart plugs)
|
||||
|
||||
@@ -21,7 +21,7 @@ description: "Author or review AgentSkills: create, repair, validate, or restruc
|
||||
3. Structure the skill.
|
||||
- Map shared ordered procedure to `SKILL.md`; end every step with a checkable completion criterion and finish with verification.
|
||||
- Keep routing conditions in `description`; start the body with execution.
|
||||
- Map branch-only detail to `references/`, deterministic helpers to `scripts/`, output resources to `assets/`, and optional UI metadata to `agents/`.
|
||||
- Map branch-only detail to `references/`, repeatable helpers to `scripts/`, output resources to `assets/`, and optional UI metadata to `agents/`.
|
||||
- **Done when:** every planned resource has one purpose and a direct pointer from `SKILL.md`.
|
||||
|
||||
4. Draft and persist.
|
||||
|
||||
@@ -304,9 +304,7 @@ describe("dependency-vulnerability-gate", () => {
|
||||
});
|
||||
expect(report.coverage.upstream.issues).toHaveLength(4);
|
||||
expect(stdout.mock.calls.flat().join("")).toContain("public upstream partial");
|
||||
expect(stdout.mock.calls.flat().join("")).toContain(
|
||||
"not comprehensive vulnerability clearance",
|
||||
);
|
||||
expect(stdout.mock.calls.flat().join("")).toContain("not a full vulnerability assessment");
|
||||
expect(stderr.mock.calls.flat().join("")).toContain(
|
||||
"WARN incomplete upstream advisory coverage",
|
||||
);
|
||||
|
||||
@@ -779,7 +779,7 @@ ${packageNames.map((name) => ` ${name}@1.0.0: {}`).join("\n")}
|
||||
expect(stdoutChunks.join("")).toContain(
|
||||
"Upstream repository advisories were not checked",
|
||||
);
|
||||
expect(stdoutChunks.join("")).toContain("not comprehensive vulnerability clearance");
|
||||
expect(stdoutChunks.join("")).toContain("not a full vulnerability assessment");
|
||||
}
|
||||
} finally {
|
||||
vi.unstubAllEnvs();
|
||||
|
||||
Reference in new issue
Block a user