pi-harness-runtime 1.1.436 → 1.1.438
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/package.json +2 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/agent-policy/package.json +1 -1
- package/packages/architecture-generator/package.json +1 -1
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard-plugin/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/codex-watcher/package.json +1 -1
- package/packages/config-capture/package.json +1 -1
- package/packages/connection-runtime/package.json +1 -1
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/contracts/package.json +1 -1
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/durable-review/package.json +1 -1
- package/packages/e2e-tester/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-sink/package.json +1 -1
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/file-copy-helper/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/knowledge-graph/package.json +1 -1
- package/packages/knowledge-retrieval/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/logging/package.json +1 -1
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/milestone-manager/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/observability/package.json +1 -1
- package/packages/okf-indexer/package.json +1 -1
- package/packages/paperclip-integration/package.json +1 -1
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/permission-mode/package.json +1 -1
- package/packages/privilege-broker/package.json +1 -1
- package/packages/project-analyzer/package.json +1 -1
- package/packages/project-bootstrap/package.json +1 -1
- package/packages/projection-engine/package.json +1 -1
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/qdrant-skills/package.json +1 -1
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/relay/package.json +1 -1
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler-adapter/package.json +1 -1
- package/packages/session/package.json +1 -1
- package/packages/session-api/package.json +1 -1
- package/packages/session-export/package.json +1 -1
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-mcp-client/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/skills/package.json +1 -1
- package/packages/sprint-planner/package.json +1 -1
- package/packages/subscription-engine/package.json +1 -1
- package/packages/task-compiler/package.json +1 -1
- package/packages/tencentdb-memory/package.json +1 -1
- package/packages/tencentdb-sync/package.json +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/todo-bd-sync/package.json +1 -1
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/tooling-preference/package.json +1 -1
- package/packages/trajectory/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/two-phase-review/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/voice-api/package.json +1 -1
- package/packages/webmcp-tester/package.json +1 -1
- package/packages/wiki/package.json +1 -1
- package/packages/workflow-events/package.json +1 -1
- package/packages/workspace-scanner/package.json +1 -1
- package/packages/worktree/package.json +1 -1
- package/packages/write-review/package.json +1 -1
- package/scripts/check-sensitive-terms.mjs +44 -0
- package/scripts/guard-scan.sh +102 -0
- package/scripts/release/orchestrator.ts +11 -5
- package/scripts/sensitive-terms-selftest.sh +127 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# The failing path of the sensitive-term guard, proved on demand.
|
|
4
|
+
#
|
|
5
|
+
# The guard is only worth something when it really fails. A scanner that
|
|
6
|
+
# says "no term found" for a file that holds a term is worse than no
|
|
7
|
+
# scanner at all, because it is trusted. This script puts a term in
|
|
8
|
+
# front of the scanner and checks what the scanner does:
|
|
9
|
+
#
|
|
10
|
+
# - it fails (exit 1) on a file that holds the term,
|
|
11
|
+
# - it fails (exit 1) on a tree that holds the term,
|
|
12
|
+
# - it fails (exit 1) on a commit message that holds the term,
|
|
13
|
+
# - it passes (exit 0) on a file that holds no term, so the failures
|
|
14
|
+
# above are caused by the term and not by the scanner,
|
|
15
|
+
# - it fails closed (exit 2) when there is no term list,
|
|
16
|
+
# - and it never prints the term in any of those runs.
|
|
17
|
+
#
|
|
18
|
+
# The term is built while the script runs. A term that is written in the
|
|
19
|
+
# repository would be found by the guard that scans the repository, so
|
|
20
|
+
# the literal string never enters the tree.
|
|
21
|
+
#
|
|
22
|
+
# The script needs no secret and no network. It runs the same scanner
|
|
23
|
+
# that the workflow runs.
|
|
24
|
+
|
|
25
|
+
set -uo pipefail
|
|
26
|
+
|
|
27
|
+
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
28
|
+
SCANNER="$ROOT/scripts/check-sensitive-terms.mjs"
|
|
29
|
+
|
|
30
|
+
# The test term. The parts are kept apart so that the term itself is not
|
|
31
|
+
# a string in this repository.
|
|
32
|
+
TERM="zz"
|
|
33
|
+
TERM="${TERM}placeholder"
|
|
34
|
+
TERM="${TERM}name"
|
|
35
|
+
|
|
36
|
+
# The term list of the environment must not decide the outcome of the
|
|
37
|
+
# cases below: the case that proves the fail-closed behaviour needs a
|
|
38
|
+
# run without any list.
|
|
39
|
+
unset SENSITIVE_TERMS
|
|
40
|
+
unset PI_SENSITIVE_TERMS_FILE
|
|
41
|
+
|
|
42
|
+
WORK="$(mktemp -d)"
|
|
43
|
+
trap 'rm -rf "$WORK"' EXIT
|
|
44
|
+
|
|
45
|
+
fail() {
|
|
46
|
+
echo "self test failed: $1" >&2
|
|
47
|
+
exit 1
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
# Runs the scanner and checks what it did.
|
|
51
|
+
#
|
|
52
|
+
# $1 - the name of the case
|
|
53
|
+
# $2 - the exit code the scanner has to give
|
|
54
|
+
# $3 - the text the output has to hold
|
|
55
|
+
# $4 - the directory the scanner runs in
|
|
56
|
+
# $5... - the arguments of the scanner
|
|
57
|
+
run_case() {
|
|
58
|
+
local name="$1"
|
|
59
|
+
local expect_code="$2"
|
|
60
|
+
local expect_text="$3"
|
|
61
|
+
local dir="$4"
|
|
62
|
+
shift 4
|
|
63
|
+
local output
|
|
64
|
+
local code
|
|
65
|
+
output="$(cd "$dir" && node "$SCANNER" "$@" 2>&1)"
|
|
66
|
+
code=$?
|
|
67
|
+
if [ "$code" != "$expect_code" ]; then
|
|
68
|
+
echo "$name: expected exit $expect_code, got $code" >&2
|
|
69
|
+
echo "$output" >&2
|
|
70
|
+
fail "$name"
|
|
71
|
+
fi
|
|
72
|
+
if [ -n "$expect_text" ] && ! printf '%s' "$output" | grep -qF -- "$expect_text"; then
|
|
73
|
+
echo "$name: the output does not hold the expected text" >&2
|
|
74
|
+
echo "$output" >&2
|
|
75
|
+
fail "$name"
|
|
76
|
+
fi
|
|
77
|
+
if printf '%s' "$output" | grep -qF -- "$TERM"; then
|
|
78
|
+
fail "$name printed the term"
|
|
79
|
+
fi
|
|
80
|
+
echo "ok: $name (exit $code, no term in the output)"
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if [ ! -f "$SCANNER" ]; then
|
|
84
|
+
fail "the scanner is not at $SCANNER"
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# The list of terms the cases use.
|
|
88
|
+
printf '%s\n' "$TERM" > "$WORK/terms.txt"
|
|
89
|
+
|
|
90
|
+
# A file that holds the term, and one that does not.
|
|
91
|
+
printf 'a line that holds %s\n' "$TERM" > "$WORK/sample.txt"
|
|
92
|
+
printf 'a line that holds nothing\n' > "$WORK/clean.txt"
|
|
93
|
+
|
|
94
|
+
run_case "a file that holds the term" 1 "sensitive list" "$WORK" \
|
|
95
|
+
--terms-file "$WORK/terms.txt" --file "$WORK/sample.txt"
|
|
96
|
+
|
|
97
|
+
run_case "a file that holds no term" 0 "no sensitive term was found" "$WORK" \
|
|
98
|
+
--terms-file "$WORK/terms.txt" --file "$WORK/clean.txt"
|
|
99
|
+
|
|
100
|
+
# A tree that holds the term. The push path of the workflow scans a
|
|
101
|
+
# tree, so the tree mode has to fail as well.
|
|
102
|
+
mkdir -p "$WORK/tree"
|
|
103
|
+
printf 'a line that holds %s\n' "$TERM" > "$WORK/tree/sample.txt"
|
|
104
|
+
run_case "a tree that holds the term" 1 "sensitive list" "$WORK" \
|
|
105
|
+
--terms-file "$WORK/terms.txt" --tree "$WORK/tree"
|
|
106
|
+
|
|
107
|
+
# A commit message that holds the term. The push path of the workflow
|
|
108
|
+
# scans the commit messages of the pushed commits.
|
|
109
|
+
mkdir -p "$WORK/repo"
|
|
110
|
+
git -C "$WORK/repo" init -q
|
|
111
|
+
git -C "$WORK/repo" config user.email "selftest@example.com"
|
|
112
|
+
git -C "$WORK/repo" config user.name "self test"
|
|
113
|
+
printf 'hello\n' > "$WORK/repo/file.txt"
|
|
114
|
+
git -C "$WORK/repo" add file.txt
|
|
115
|
+
git -C "$WORK/repo" commit -q -m "the first commit"
|
|
116
|
+
printf 'hello again\n' > "$WORK/repo/file.txt"
|
|
117
|
+
git -C "$WORK/repo" add file.txt
|
|
118
|
+
git -C "$WORK/repo" commit -q -m "a message that holds $TERM"
|
|
119
|
+
run_case "a commit message that holds the term" 1 "sensitive list" \
|
|
120
|
+
"$WORK/repo" --terms-file "$WORK/terms.txt" --commits "HEAD~1..HEAD"
|
|
121
|
+
|
|
122
|
+
# No term list at all. The check cannot run, so it says so instead of
|
|
123
|
+
# reporting a clean result.
|
|
124
|
+
run_case "no term list" 2 "no term list is configured" "$WORK" \
|
|
125
|
+
--file "$WORK/sample.txt"
|
|
126
|
+
|
|
127
|
+
echo "the failing path of the guard is proven"
|