ultimate-pi 0.19.0 → 0.19.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/.agents/skills/web-retrieval/SKILL.md +163 -0
- package/.agents/skills/wiki-autoresearch/SKILL.md +6 -6
- package/.pi/SYSTEM.md +30 -12
- package/.pi/agents/harness/planning/implementation-researcher.md +1 -1
- package/.pi/agents/harness/planning/stack-researcher.md +5 -1
- package/.pi/agents/harness/web-retrieval/web-answerer.md +35 -0
- package/.pi/agents/harness/web-retrieval/web-criteria-verifier.md +28 -0
- package/.pi/agents/harness/web-retrieval/web-gap-analyzer.md +31 -0
- package/.pi/agents/harness/web-retrieval/web-query-expander-fast.md +34 -0
- package/.pi/agents/harness/web-retrieval/web-query-expander.md +60 -0
- package/.pi/agents/harness/web-retrieval/web-summarizer.md +18 -0
- package/.pi/extensions/harness-web-guard.ts +2 -1
- package/.pi/extensions/harness-web-tools.ts +689 -51
- package/.pi/harness/agents.manifest.json +29 -5
- package/.pi/harness/agents.policy.yaml +34 -0
- package/.pi/harness/docs/adrs/0050-agentic-web-retrieval-stack.md +46 -0
- package/.pi/harness/docs/harness-web-search.md +97 -0
- package/.pi/harness/env.harness.template +9 -1
- package/.pi/harness/examples/web-heuristic-angles.project.yaml +22 -0
- package/.pi/harness/web-heuristic-angles.json +278 -0
- package/.pi/harness/web-heuristic-angles.yaml +182 -0
- package/.pi/lib/agents-policy.mjs +6 -0
- package/.pi/lib/harness-subagent-auth.ts +39 -9
- package/.pi/lib/harness-subagents-bridge.ts +21 -0
- package/.pi/lib/harness-web/artifacts.ts +200 -0
- package/.pi/lib/harness-web/cache.ts +369 -0
- package/.pi/lib/harness-web/run-cli.ts +42 -2
- package/.pi/prompts/harness-plan.md +1 -0
- package/.pi/prompts/harness-setup.md +3 -1
- package/.pi/scripts/gen-web-heuristic-angles-json.mjs +24 -0
- package/.pi/scripts/harness-cli-verify.sh +5 -0
- package/.pi/scripts/harness-verify.mjs +78 -0
- package/.pi/scripts/harness-web-policy-guard.mjs +1 -1
- package/.pi/scripts/harness-web.py +218 -15
- package/.pi/scripts/harness_web/deep_search.py +55 -0
- package/.pi/scripts/harness_web/evidence_bundle.py +47 -0
- package/.pi/scripts/harness_web/find_similar.py +88 -0
- package/.pi/scripts/harness_web/heuristic_angles_shipped.py +85 -0
- package/.pi/scripts/harness_web/heuristic_config.py +251 -0
- package/.pi/scripts/harness_web/highlights.py +47 -0
- package/.pi/scripts/harness_web/multi_search.py +59 -0
- package/.pi/scripts/harness_web/output.py +24 -0
- package/.pi/scripts/harness_web/query_angles.py +116 -0
- package/.pi/scripts/harness_web/rank.py +163 -0
- package/.pi/scripts/harness_web/scrape.py +30 -0
- package/.pi/scripts/tests/test_harness_web_heuristic_config.py +132 -0
- package/.pi/scripts/tests/test_harness_web_query_angles.py +45 -0
- package/.pi/scripts/tests/test_harness_web_rank.py +56 -0
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +6 -0
- package/package.json +5 -3
- package/.agents/skills/scrapling-web/SKILL.md +0 -98
- package/.pi/extensions/00-posthog-network-bootstrap.ts +0 -11
- package/.pi/scripts/harness_web/__pycache__/__init__.cpython-314.pyc +0 -0
- package/.pi/scripts/harness_web/__pycache__/config.cpython-314.pyc +0 -0
- package/.pi/scripts/harness_web/__pycache__/output.cpython-314.pyc +0 -0
- package/.pi/scripts/harness_web/__pycache__/scrape.cpython-314.pyc +0 -0
- package/.pi/scripts/harness_web/__pycache__/search.cpython-314.pyc +0 -0
- package/.pi/scripts/harness_web/__pycache__/search_ddg.cpython-314.pyc +0 -0
- package/.pi/scripts/harness_web/__pycache__/search_searxng.cpython-314.pyc +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.0.0",
|
|
3
3
|
"package": "ultimate-pi",
|
|
4
|
-
"package_version": "0.
|
|
5
|
-
"generated_at": "2026-05-
|
|
6
|
-
"policy_sha256": "
|
|
4
|
+
"package_version": "0.19.0",
|
|
5
|
+
"generated_at": "2026-05-26T06:39:19.250Z",
|
|
6
|
+
"policy_sha256": "f0eb41bc6a877a237087e87762ce11908e93755a42d58f19d6573665b198665f",
|
|
7
7
|
"agents": {
|
|
8
8
|
"pi-pi/agent-expert": {
|
|
9
9
|
"path": ".pi/agents/pi-pi/agent-expert.md",
|
|
@@ -61,6 +61,30 @@
|
|
|
61
61
|
"path": ".pi/agents/harness/trace-librarian.md",
|
|
62
62
|
"sha256": "083ce6a3508bab2f5bc57e8ab13256c55fff58e0eac95cb6542bdd47fd02de65"
|
|
63
63
|
},
|
|
64
|
+
"harness/web-retrieval/web-answerer": {
|
|
65
|
+
"path": ".pi/agents/harness/web-retrieval/web-answerer.md",
|
|
66
|
+
"sha256": "c9876fb34aa6704c1a8eb9f4db4ada71c5a762790db411a1b01104a81745215d"
|
|
67
|
+
},
|
|
68
|
+
"harness/web-retrieval/web-criteria-verifier": {
|
|
69
|
+
"path": ".pi/agents/harness/web-retrieval/web-criteria-verifier.md",
|
|
70
|
+
"sha256": "bb0a9b514964f6f64ef539c1d766ff28ee23c4d9199dc4cae0f41b0fe7fdc860"
|
|
71
|
+
},
|
|
72
|
+
"harness/web-retrieval/web-gap-analyzer": {
|
|
73
|
+
"path": ".pi/agents/harness/web-retrieval/web-gap-analyzer.md",
|
|
74
|
+
"sha256": "f4487993f561c7141b22c79f9afff52986466c5b3af4f3ffb0e75e30a6da025a"
|
|
75
|
+
},
|
|
76
|
+
"harness/web-retrieval/web-query-expander-fast": {
|
|
77
|
+
"path": ".pi/agents/harness/web-retrieval/web-query-expander-fast.md",
|
|
78
|
+
"sha256": "161c5ce82e013af7aaec219b4ccb6b8c557bf5768f8e0c85b1d8f243056b015c"
|
|
79
|
+
},
|
|
80
|
+
"harness/web-retrieval/web-query-expander": {
|
|
81
|
+
"path": ".pi/agents/harness/web-retrieval/web-query-expander.md",
|
|
82
|
+
"sha256": "b522532e15759c747ff92198aa6db2624accd0998a4e0af4cb086617734f5ce7"
|
|
83
|
+
},
|
|
84
|
+
"harness/web-retrieval/web-summarizer": {
|
|
85
|
+
"path": ".pi/agents/harness/web-retrieval/web-summarizer.md",
|
|
86
|
+
"sha256": "0c25f814ded534f6d190cc50ff141306d26dba98eff2ad6d51b56e42c143861d"
|
|
87
|
+
},
|
|
64
88
|
"harness/running/executor": {
|
|
65
89
|
"path": ".pi/agents/harness/running/executor.md",
|
|
66
90
|
"sha256": "219c9307567acc95a9c1b1340f899fac860406fb2c2e84f51b4a8c3ba3a0e2ec"
|
|
@@ -95,7 +119,7 @@
|
|
|
95
119
|
},
|
|
96
120
|
"harness/planning/implementation-researcher": {
|
|
97
121
|
"path": ".pi/agents/harness/planning/implementation-researcher.md",
|
|
98
|
-
"sha256": "
|
|
122
|
+
"sha256": "4559fc93ccf867ee199821a781cfd1b4a863e1f35ea8520d15ff389e61e17fd2"
|
|
99
123
|
},
|
|
100
124
|
"harness/planning/plan-adversary": {
|
|
101
125
|
"path": ".pi/agents/harness/planning/plan-adversary.md",
|
|
@@ -123,7 +147,7 @@
|
|
|
123
147
|
},
|
|
124
148
|
"harness/planning/stack-researcher": {
|
|
125
149
|
"path": ".pi/agents/harness/planning/stack-researcher.md",
|
|
126
|
-
"sha256": "
|
|
150
|
+
"sha256": "0f19febc96bc65fd22b2d3f1c3bbed02e021f7c8129a7bb21423ea29d8429d67"
|
|
127
151
|
}
|
|
128
152
|
}
|
|
129
153
|
}
|
|
@@ -203,12 +203,44 @@ agents:
|
|
|
203
203
|
max_turns: 14
|
|
204
204
|
thinking: medium
|
|
205
205
|
submit_tool: submit_hypothesis_brief
|
|
206
|
+
harness/web-retrieval/web-query-expander:
|
|
207
|
+
kind: other
|
|
208
|
+
extensions: false
|
|
209
|
+
max_turns: 8
|
|
210
|
+
thinking: low
|
|
211
|
+
harness/web-retrieval/web-query-expander-fast:
|
|
212
|
+
kind: other
|
|
213
|
+
extensions: false
|
|
214
|
+
max_turns: 5
|
|
215
|
+
thinking: off
|
|
216
|
+
harness/web-retrieval/web-gap-analyzer:
|
|
217
|
+
kind: other
|
|
218
|
+
extensions: false
|
|
219
|
+
max_turns: 8
|
|
220
|
+
thinking: low
|
|
221
|
+
harness/web-retrieval/web-answerer:
|
|
222
|
+
kind: other
|
|
223
|
+
extensions: false
|
|
224
|
+
max_turns: 12
|
|
225
|
+
thinking: medium
|
|
226
|
+
harness/web-retrieval/web-summarizer:
|
|
227
|
+
kind: other
|
|
228
|
+
extensions: false
|
|
229
|
+
max_turns: 6
|
|
230
|
+
thinking: low
|
|
231
|
+
harness/web-retrieval/web-criteria-verifier:
|
|
232
|
+
kind: other
|
|
233
|
+
extensions: false
|
|
234
|
+
max_turns: 14
|
|
235
|
+
thinking: medium
|
|
206
236
|
harness/planning/implementation-researcher:
|
|
207
237
|
kind: planner
|
|
208
238
|
tools_add:
|
|
209
239
|
- bash
|
|
210
240
|
- web_search
|
|
211
241
|
- web_fetch
|
|
242
|
+
- web_find_similar
|
|
243
|
+
- web_contents
|
|
212
244
|
- submit_implementation_research
|
|
213
245
|
extensions: false
|
|
214
246
|
max_turns: 14
|
|
@@ -268,6 +300,8 @@ agents:
|
|
|
268
300
|
- bash
|
|
269
301
|
- web_search
|
|
270
302
|
- web_fetch
|
|
303
|
+
- web_find_similar
|
|
304
|
+
- web_contents
|
|
271
305
|
- submit_stack_brief
|
|
272
306
|
extensions: false
|
|
273
307
|
max_turns: 16
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# ADR 0050: Agentic Web Retrieval Stack (WRS)
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted
|
|
4
|
+
- **Date:** 2026-05-26
|
|
5
|
+
- **Deciders:** ultimate-pi harness team
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
Harness agents treated `web_search` as single-query SERP, yielding poor recall on ambiguous research questions. Exa-style outcomes (multi-angle discovery, fusion, evidence, synthesis) are needed without Exa API, MCP, or a neural index at Exa scale.
|
|
10
|
+
|
|
11
|
+
## Decision
|
|
12
|
+
|
|
13
|
+
Introduce **WRS** as the default non-API web layer:
|
|
14
|
+
|
|
15
|
+
1. **Tiers** on `web_search`: `instant`, `standard`, **`deep`** (default for research), `research`.
|
|
16
|
+
2. **Planning subagents** under `.pi/agents/harness/web-retrieval/` — e.g. `harness/web-retrieval/web-query-expander` produces `.web/angles.yaml`; parent runs `web_search(tier=deep, anglesFile=…)`.
|
|
17
|
+
3. **Python fusion**: parallel metasearch per angle (DDG HTML or SearXNG) + RRF (`k=60`) + optional lexical rerank.
|
|
18
|
+
4. **Extension tools**: `web_find_similar`, `web_contents`, `web_fetch` highlights.
|
|
19
|
+
5. **Synthesis subagents** (same directory): `web-answerer`, `web-gap-analyzer`, `web-criteria-verifier`, `web-summarizer`, `web-query-expander-fast`.
|
|
20
|
+
6. **web-retrieval** skill as canonical workflow; **SYSTEM.md** mandates deep default and anti-patterns.
|
|
21
|
+
7. **context7** remains sole path for library API documentation.
|
|
22
|
+
8. **User model routing:** env vars `HARNESS_WEB_FAST_MODEL`, `HARNESS_WEB_EXPANDER_MODEL`, `HARNESS_WEB_QUALITY_MODEL` (any Pi `provider/model-id`); else parent session or agent `model:` override.
|
|
23
|
+
9. **Pooled local cache:** `.web/cache/` keyed by search/fetch context with TTL (`HARNESS_WEB_CACHE_TTL_SEC`); workspace aliases under `.web/`. Optional `HARNESS_WEB_ISOLATE=1` for per-run/session dirs.
|
|
24
|
+
|
|
25
|
+
Subagents are **not** spawned inside tool `execute()`; parent orchestrates expander → deep → fetch.
|
|
26
|
+
|
|
27
|
+
## Consequences
|
|
28
|
+
|
|
29
|
+
### Positive
|
|
30
|
+
|
|
31
|
+
- Higher recall on landscape / prior-art questions without paid search APIs.
|
|
32
|
+
- Path-first `.web/` artifacts for harness-plan debate.
|
|
33
|
+
- Contract checks in `harness-verify.mjs` keep guidance aligned with tools.
|
|
34
|
+
|
|
35
|
+
### Negative / trade-offs
|
|
36
|
+
|
|
37
|
+
- Deep search is slower (N parallel SERP calls).
|
|
38
|
+
- Heuristic `--expand-heuristic` is weaker than expander subagent (templates from mergeable `.pi/harness/web-heuristic-angles.yaml`; projects extend via same path under their repo).
|
|
39
|
+
- No embedding index; O3 precision is approximate vs Exa neural search.
|
|
40
|
+
|
|
41
|
+
## References
|
|
42
|
+
|
|
43
|
+
- `.pi/harness/docs/harness-web-search.md`
|
|
44
|
+
- `.agents/skills/web-retrieval/SKILL.md`
|
|
45
|
+
- `.pi/extensions/harness-web-tools.ts`
|
|
46
|
+
- Plan: `.cursor/plans/exa-style_harness_web_fd231183.plan.md`
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Harness Web Retrieval Stack (WRS)
|
|
2
|
+
|
|
3
|
+
Internal reference for multi-angle search, fusion, and agent workflows. User-facing procedures: **web-retrieval** skill (install + env).
|
|
4
|
+
|
|
5
|
+
## Outcomes (Exa analog)
|
|
6
|
+
|
|
7
|
+
| Outcome | Primitive |
|
|
8
|
+
|---------|-----------|
|
|
9
|
+
| Discovery / recall | `search-deep` + RRF |
|
|
10
|
+
| Precision | Multi-angle + optional `HARNESS_WEB_RERANK=lexical` |
|
|
11
|
+
| Evidence / highlights | `web_fetch(highlights)` |
|
|
12
|
+
| Similar pages | `find-similar` CLI / `web_find_similar` |
|
|
13
|
+
| Synthesis | `evidence-bundle` + `web-answerer` |
|
|
14
|
+
|
|
15
|
+
## CLI
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
python3 .pi/scripts/harness-web.py search-deep "query" \
|
|
19
|
+
--angles-file .web/angles.yaml -o .web/search-deep.json
|
|
20
|
+
python3 .pi/scripts/harness-web.py search-deep "query" --expand-heuristic -o .web/search-deep.json
|
|
21
|
+
python3 .pi/scripts/harness-web.py find-similar "https://example.com" -o .web/search-deep.json
|
|
22
|
+
python3 .pi/scripts/harness-web.py contents-batch --from-search .web/search-deep.json -o .web/contents/
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Python modules
|
|
26
|
+
|
|
27
|
+
- `harness_web/query_angles.py` — parse expander YAML
|
|
28
|
+
- `harness_web/multi_search.py` — parallel per-angle SERP
|
|
29
|
+
- `harness_web/rank.py` — normalize URL, RRF, lexical rerank
|
|
30
|
+
- `harness_web/deep_search.py` — orchestration
|
|
31
|
+
- `harness_web/highlights.py` — excerpt scoring
|
|
32
|
+
- `harness_web/evidence_bundle.py` — merge for answerer
|
|
33
|
+
|
|
34
|
+
## Artifacts
|
|
35
|
+
|
|
36
|
+
**Cache** (pooled): `.web/cache/<kind>/<cacheKey>/` with `meta.json` (search context, `createdAt`, `expiresAt`, `hitCount`).
|
|
37
|
+
|
|
38
|
+
**Workspace** (default `.web/`): tool aliases agents read. `web_search` / `web_fetch` set `cacheHit`, `cacheKey`, `cachePath` in details.
|
|
39
|
+
|
|
40
|
+
| Env / param | Effect |
|
|
41
|
+
|-------------|--------|
|
|
42
|
+
| `HARNESS_WEB_CACHE_TTL_SEC` | Default TTL (86400) |
|
|
43
|
+
| `HARNESS_WEB_CACHE=0` | Disable cache |
|
|
44
|
+
| `refreshCache: true` | Bypass cache |
|
|
45
|
+
| `cacheMaxAge` | Max reuse age (seconds) |
|
|
46
|
+
| `HARNESS_WEB_ISOLATE=1` | Per-run/session dirs (legacy) |
|
|
47
|
+
|
|
48
|
+
| File | Content |
|
|
49
|
+
|------|---------|
|
|
50
|
+
| `angles.yaml` | Expander output |
|
|
51
|
+
| `search-deep.json` | Fused SERP + scores + `angle_ids` |
|
|
52
|
+
| `evidence-bundle.json` | URLs + snippets + highlights |
|
|
53
|
+
| `answer.md` | Cited synthesis |
|
|
54
|
+
|
|
55
|
+
## Subagents (`.pi/agents/harness/web-retrieval/`)
|
|
56
|
+
|
|
57
|
+
| Spawn id | Role |
|
|
58
|
+
|----------|------|
|
|
59
|
+
| `harness/web-retrieval/web-query-expander` | Angles YAML (default research) |
|
|
60
|
+
| `harness/web-retrieval/web-query-expander-fast` | 2–3 angles (latency) |
|
|
61
|
+
| `harness/web-retrieval/web-gap-analyzer` | Follow-up angles |
|
|
62
|
+
| `harness/web-retrieval/web-answerer` | Cited answer |
|
|
63
|
+
| `harness/web-retrieval/web-summarizer` | Single-page digest |
|
|
64
|
+
| `harness/web-retrieval/web-criteria-verifier` | Criteria scoring |
|
|
65
|
+
|
|
66
|
+
## Heuristic angles config (user-extensible)
|
|
67
|
+
|
|
68
|
+
Emergency templates for `expandHeuristic:true` / `--expand-heuristic` load from YAML:
|
|
69
|
+
|
|
70
|
+
| File | Role |
|
|
71
|
+
|------|------|
|
|
72
|
+
| `<package>/.pi/harness/web-heuristic-angles.yaml` | Built-in defaults (code → github, stackoverflow, …) |
|
|
73
|
+
| `<project>/.pi/harness/web-heuristic-angles.yaml` | **Your** extensions (merged on top) |
|
|
74
|
+
|
|
75
|
+
Copy [examples/web-heuristic-angles.project.yaml](../examples/web-heuristic-angles.project.yaml) into an external project’s `.pi/harness/` to add sites per category or define new categories (use `category` on `web_search`).
|
|
76
|
+
|
|
77
|
+
Query templates use `{query}` as the user search string. Same `id` in a category replaces the package angle.
|
|
78
|
+
|
|
79
|
+
Optional: `HARNESS_WEB_HEURISTIC_ANGLES_FILE=/path/to/custom.yaml` (merged last).
|
|
80
|
+
|
|
81
|
+
## Environment
|
|
82
|
+
|
|
83
|
+
| Variable | Default |
|
|
84
|
+
|----------|---------|
|
|
85
|
+
| `HARNESS_WEB_SEARCH_ENGINE` | `ddg_html` |
|
|
86
|
+
| `HARNESS_WEB_DEEP_CONCURRENCY` | `4` |
|
|
87
|
+
| `HARNESS_WEB_RERANK` | `off` |
|
|
88
|
+
| `HARNESS_WEB_FAST_MODEL` | expander-fast, summarizer, gap-analyzer |
|
|
89
|
+
| `HARNESS_WEB_EXPANDER_MODEL` | full query expander |
|
|
90
|
+
| `HARNESS_WEB_QUALITY_MODEL` | answerer, criteria-verifier |
|
|
91
|
+
| `HARNESS_WEB_HEURISTIC_ANGLES_FILE` | Extra heuristic angles YAML (merged last) |
|
|
92
|
+
| `HARNESS_PROJECT_ROOT` | Project root for `.pi/harness/web-heuristic-angles.yaml` |
|
|
93
|
+
| `HARNESS_PKG_ROOT` | Package root for default heuristic YAML |
|
|
94
|
+
|
|
95
|
+
Values use Pi `provider/model-id` format (any provider your install supports). Unset → subagent inherits parent session model. See **web-retrieval** skill.
|
|
96
|
+
|
|
97
|
+
ADR: [0050-web-retrieval-retrieval-stack.md](adrs/0050-web-retrieval-retrieval-stack.md)
|
|
@@ -13,6 +13,15 @@ HARNESS_WEB_SEARCH_ENGINE=ddg_html
|
|
|
13
13
|
# HARNESS_WEB_PROXY=
|
|
14
14
|
# HARNESS_WEB_RATE_LIMIT_MS=2000
|
|
15
15
|
# HARNESS_WEB_TIMEOUT_MS=30000
|
|
16
|
+
# Heuristic angles (--expand-heuristic): edit <project>/.pi/harness/web-heuristic-angles.yaml
|
|
17
|
+
# Optional override path (merged after package + project):
|
|
18
|
+
# HARNESS_WEB_HEURISTIC_ANGLES_FILE=
|
|
19
|
+
# Pooled WRS cache (Firecrawl-style freshness); workspace aliases under .web/
|
|
20
|
+
# HARNESS_WEB_CACHE_TTL_SEC=86400
|
|
21
|
+
# HARNESS_WEB_CACHE=0
|
|
22
|
+
# HARNESS_WEB_ISOLATE=1
|
|
23
|
+
# HARNESS_PROJECT_ROOT=
|
|
24
|
+
# HARNESS_PKG_ROOT=
|
|
16
25
|
|
|
17
26
|
# --- VCC compaction (env-only; no JSON config files) ---
|
|
18
27
|
# Default: VCC handles /compact and auto-compaction. Set false for Pi LLM compaction:
|
|
@@ -21,7 +30,6 @@ HARNESS_WEB_SEARCH_ENGINE=ddg_html
|
|
|
21
30
|
|
|
22
31
|
# --- PostHog (optional) ---
|
|
23
32
|
# Project key — required for harness_* telemetry when HARNESS_TELEMETRY_ENABLED=true
|
|
24
|
-
# WSL2: ultimate-pi loads 00-posthog-network-bootstrap.ts (IPv4 fetch for *.posthog.com).
|
|
25
33
|
# If flush still fails, set POSTHOG_ENABLED=false or fix outbound HTTPS to PostHog.
|
|
26
34
|
# POSTHOG_API_KEY=
|
|
27
35
|
# POSTHOG_HOST=https://us.i.posthog.com
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Example project extension — copy to:
|
|
2
|
+
# <your-project>/.pi/harness/web-heuristic-angles.yaml
|
|
3
|
+
#
|
|
4
|
+
# Merges on top of package .pi/harness/web-heuristic-angles.yaml.
|
|
5
|
+
# Same angle id in a category replaces the package entry; new ids append.
|
|
6
|
+
|
|
7
|
+
version: 1
|
|
8
|
+
|
|
9
|
+
categories:
|
|
10
|
+
code:
|
|
11
|
+
# Add Rust-specific angles (keeps github + stackoverflow from package defaults)
|
|
12
|
+
- id: docs_rs
|
|
13
|
+
query: "{query} site:docs.rs"
|
|
14
|
+
rationale: Official Rust API docs
|
|
15
|
+
- id: crates_io
|
|
16
|
+
query: "{query} site:crates.io"
|
|
17
|
+
rationale: Crate ecosystem
|
|
18
|
+
# Package already ships category=security; extend or override ids here:
|
|
19
|
+
# security:
|
|
20
|
+
# - id: cisa_kev
|
|
21
|
+
# query: "{query} site:cisa.gov/known-exploited-vulnerabilities"
|
|
22
|
+
# rationale: CISA KEV catalog
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"max_angles": 8,
|
|
4
|
+
"base": [
|
|
5
|
+
{
|
|
6
|
+
"id": "definitional",
|
|
7
|
+
"query": "{query}",
|
|
8
|
+
"rationale": "Core intent phrasing"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": "authoritative",
|
|
12
|
+
"query": "{query} official documentation OR specification OR RFC",
|
|
13
|
+
"rationale": "Primary specs and vendor docs"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"categories": {
|
|
17
|
+
"code": [
|
|
18
|
+
{
|
|
19
|
+
"id": "github",
|
|
20
|
+
"query": "{query} site:github.com",
|
|
21
|
+
"rationale": "Source, issues, discussions"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "stackoverflow",
|
|
25
|
+
"query": "{query} site:stackoverflow.com",
|
|
26
|
+
"rationale": "Debugging and API usage Q&A"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "stackexchange",
|
|
30
|
+
"query": "{query} site:stackexchange.com",
|
|
31
|
+
"rationale": "Broader SE network (Super User, Server Fault, etc.)"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "readthedocs",
|
|
35
|
+
"query": "{query} site:readthedocs.io",
|
|
36
|
+
"rationale": "OSS library documentation"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "mdn",
|
|
40
|
+
"query": "{query} site:developer.mozilla.org",
|
|
41
|
+
"rationale": "Web platform and browser APIs"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "package_registries",
|
|
45
|
+
"query": "{query} site:npmjs.com OR site:pypi.org OR site:pkg.go.dev OR site:crates.io",
|
|
46
|
+
"rationale": "Package metadata across major ecosystems"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "microsoft_learn",
|
|
50
|
+
"query": "{query} site:learn.microsoft.com",
|
|
51
|
+
"rationale": ".NET, Azure, Windows, and enterprise stacks"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "hacker_news",
|
|
55
|
+
"query": "{query} site:news.ycombinator.com",
|
|
56
|
+
"rationale": "High-signal practitioner discussion"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "gitlab",
|
|
60
|
+
"query": "{query} site:gitlab.com",
|
|
61
|
+
"rationale": "Alternate host and CI-visible code"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "devto",
|
|
65
|
+
"query": "{query} site:dev.to OR site:medium.com",
|
|
66
|
+
"rationale": "Tutorials and implementation writeups"
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"paper": [
|
|
70
|
+
{
|
|
71
|
+
"id": "arxiv",
|
|
72
|
+
"query": "{query} site:arxiv.org",
|
|
73
|
+
"rationale": "Preprints and latest ML/CS uploads"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "semantic_scholar",
|
|
77
|
+
"query": "{query} site:semanticscholar.org",
|
|
78
|
+
"rationale": "Citations, influences, and PDF links"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "google_scholar",
|
|
82
|
+
"query": "{query} site:scholar.google.com",
|
|
83
|
+
"rationale": "Broad academic discovery"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "papers_with_code",
|
|
87
|
+
"query": "{query} site:paperswithcode.com",
|
|
88
|
+
"rationale": "Benchmarks tied to implementations"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "openreview",
|
|
92
|
+
"query": "{query} site:openreview.net",
|
|
93
|
+
"rationale": "Peer reviews and ML conference submissions"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "acl_anthology",
|
|
97
|
+
"query": "{query} site:aclanthology.org",
|
|
98
|
+
"rationale": "NLP and computational linguistics"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"id": "acm_dl",
|
|
102
|
+
"query": "{query} site:dl.acm.org",
|
|
103
|
+
"rationale": "ACM proceedings and journals"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "pubmed",
|
|
107
|
+
"query": "{query} site:pubmed.ncbi.nlm.nih.gov",
|
|
108
|
+
"rationale": "Biomedical and life-sciences literature"
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"news": [
|
|
112
|
+
{
|
|
113
|
+
"id": "recent",
|
|
114
|
+
"query": "{query} news 2025 2026",
|
|
115
|
+
"rationale": "Recency-biased open web"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": "wire_reuters",
|
|
119
|
+
"query": "{query} site:reuters.com",
|
|
120
|
+
"rationale": "Wire-service reporting"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "wire_ap",
|
|
124
|
+
"query": "{query} site:apnews.com",
|
|
125
|
+
"rationale": "Associated Press coverage"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"id": "tech_press",
|
|
129
|
+
"query": "{query} site:techcrunch.com OR site:theverge.com OR site:arstechnica.com",
|
|
130
|
+
"rationale": "Technology industry news"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "business_press",
|
|
134
|
+
"query": "{query} site:bloomberg.com OR site:ft.com OR site:wsj.com",
|
|
135
|
+
"rationale": "Markets and business context"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"id": "analysis",
|
|
139
|
+
"query": "{query} in-depth analysis explainer",
|
|
140
|
+
"rationale": "Long-form journalism and explainers"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "bbc",
|
|
144
|
+
"query": "{query} site:bbc.com/news",
|
|
145
|
+
"rationale": "International general news desk"
|
|
146
|
+
}
|
|
147
|
+
],
|
|
148
|
+
"company": [
|
|
149
|
+
{
|
|
150
|
+
"id": "official_site",
|
|
151
|
+
"query": "{query} official website",
|
|
152
|
+
"rationale": "Company-controlled messaging"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"id": "crunchbase",
|
|
156
|
+
"query": "{query} site:crunchbase.com",
|
|
157
|
+
"rationale": "Funding, investors, and competitors"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"id": "linkedin_company",
|
|
161
|
+
"query": "{query} site:linkedin.com/company",
|
|
162
|
+
"rationale": "Headcount, hiring, and positioning"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"id": "sec_filings",
|
|
166
|
+
"query": "{query} site:sec.gov 10-K OR 10-Q OR S-1",
|
|
167
|
+
"rationale": "US public-company disclosures"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"id": "g2_reviews",
|
|
171
|
+
"query": "{query} site:g2.com OR site:capterra.com",
|
|
172
|
+
"rationale": "B2B software reviews and comparisons"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"id": "company_news",
|
|
176
|
+
"query": "{query} company announcement press release",
|
|
177
|
+
"rationale": "Launches, partnerships, and earnings"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"id": "glassdoor",
|
|
181
|
+
"query": "{query} site:glassdoor.com",
|
|
182
|
+
"rationale": "Employee sentiment and culture signals"
|
|
183
|
+
}
|
|
184
|
+
],
|
|
185
|
+
"people": [
|
|
186
|
+
{
|
|
187
|
+
"id": "linkedin",
|
|
188
|
+
"query": "{query} site:linkedin.com/in",
|
|
189
|
+
"rationale": "Professional profiles"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"id": "github_person",
|
|
193
|
+
"query": "{query} site:github.com",
|
|
194
|
+
"rationale": "Open-source footprint for builders"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"id": "wikipedia",
|
|
198
|
+
"query": "{query} site:en.wikipedia.org",
|
|
199
|
+
"rationale": "Neutral biographical baseline"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"id": "scholar_person",
|
|
203
|
+
"query": "{query} site:scholar.google.com",
|
|
204
|
+
"rationale": "Publication record for researchers"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"id": "interviews",
|
|
208
|
+
"query": "{query} interview podcast keynote",
|
|
209
|
+
"rationale": "First-person statements and talks"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"id": "twitter_x",
|
|
213
|
+
"query": "{query} site:x.com OR site:twitter.com",
|
|
214
|
+
"rationale": "Public statements and discourse"
|
|
215
|
+
}
|
|
216
|
+
],
|
|
217
|
+
"security": [
|
|
218
|
+
{
|
|
219
|
+
"id": "cve_nvd",
|
|
220
|
+
"query": "{query} CVE site:nvd.nist.gov",
|
|
221
|
+
"rationale": "National Vulnerability Database"
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"id": "owasp",
|
|
225
|
+
"query": "{query} site:owasp.org",
|
|
226
|
+
"rationale": "AppSec standards and cheat sheets"
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"id": "cwe",
|
|
230
|
+
"query": "{query} site:cwe.mitre.org",
|
|
231
|
+
"rationale": "Weakness taxonomy"
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"id": "github_advisories",
|
|
235
|
+
"query": "{query} site:github.com/advisories OR dependabot",
|
|
236
|
+
"rationale": "Ecosystem security advisories"
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"id": "snyk_blog",
|
|
240
|
+
"query": "{query} site:snyk.io/blog OR vulnerability",
|
|
241
|
+
"rationale": "Practitioner security writeups"
|
|
242
|
+
}
|
|
243
|
+
],
|
|
244
|
+
"default": [
|
|
245
|
+
{
|
|
246
|
+
"id": "technical",
|
|
247
|
+
"query": "{query} how it works architecture internals",
|
|
248
|
+
"rationale": "Mechanism and design"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"id": "criticism",
|
|
252
|
+
"query": "{query} limitations criticism drawbacks",
|
|
253
|
+
"rationale": "Counterpoints and failure modes"
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"id": "wikipedia",
|
|
257
|
+
"query": "{query} site:en.wikipedia.org",
|
|
258
|
+
"rationale": "Structured overview"
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
"id": "comparison",
|
|
262
|
+
"query": "{query} vs alternatives comparison benchmark",
|
|
263
|
+
"rationale": "Competitive landscape"
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"id": "reddit",
|
|
267
|
+
"query": "{query} site:reddit.com",
|
|
268
|
+
"rationale": "Community experience reports"
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"id": "hn_default",
|
|
272
|
+
"query": "{query} site:news.ycombinator.com",
|
|
273
|
+
"rationale": "Practitioner threads when category unknown"
|
|
274
|
+
}
|
|
275
|
+
]
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|