traverse-framework / traverse-framework/registry
Publish small capability: text.extract-urls (first-contributor friendly)
- Dominant language
- Rust
- Stars
- 1
- Forks
- 1
- Avg merge
- 1h 17m
- Merged PRs (30d)
- 217
Description
## Why
Agents and workflows often need a boring, deterministic “pull the http(s) URLs out of this blob” step before anything smarter runs. The registry has entity/language helpers but no tiny **extract-urls**. Sized for a first publish: contract + wasm + tests, no product design.
## One-PR ask
Publish **`text.extract-urls@1.0.0`**:
- Input: `{ "text": string, "schemes"?: string[] }`
- default `schemes` = `["http", "https"]` (case-insensitive match on the scheme)
- Output: `{ "urls": string[], "count": integer }`
- `urls` is the list of matched URL substrings in **left-to-right appearance order**
- de-dupe exact string matches while preserving first-seen order (document that)
- `count` == `urls.length`
- Matching rule: keep it simple and documented — a conservative regex / scanner for `scheme://` followed by a non-whitespace run, trimming a small set of trailing punctuation (`.,;:!?)]}'\"`). Do **not** pull in a full WHATWG URL parser crate unless you keep the binary tiny and the tests lock behavior.
- Include `capability-src/` with real Rust tests meeting registry coverage gates (`functions` 100%, lines/regions ≥ 95%)
- Use `traverse-cli capability publish` (or the documented scaffold) so `artifact.digest` / `artifact.url` survive
- Run `bash scripts/ci/pre_pr_check.sh ` before opening
Follow [`CONTRIBUTING.md`](https://github.com/traverse-framework/registry/blob/main/CONTRIBUTING.md) and existing `text.*` contracts for shape. Keep this **separate** from #485 / #486 / normalize-whitespace — one capability per PR.
## Out of scope
- Full WHATWG / browser-parity URL parsing and normalization
- Extracting emails, markdown links-only, or HTML `href` attributes
- Fetching / validating that URLs resolve
- Changing registry CI gates
## Done when
- CI green on the publish PR
- Capability appears in the next index release after merge
- Contract `use_cases` follow the current persona/user-story format if required
## Labels
`help wanted` · `good first issue` · `enhancement` · `no-spec-needed`
Contributor guide
Research direction
Start with CONTRIBUTING.md and the existing text.* contracts, then use the documented scaffold or traverse-cli capability publish to create capability-src/ for text.extract-urls@1.0.0. Add Rust tests for ordering, de-duplication, schemes, and punctuation trimming, and run bash scripts/ci/pre_pr_check.sh against the draft PR body. Done means coverage gates pass, artifact.digest and artifact.url survive, and CI is green.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- bash, rust, wasm
- Domain
- backend-api-design, release, testing
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 78/100