Compare commits

...

2 commits

Author SHA1 Message Date
Breadway
9c6fc61f53 Track AGENTS.md
All checks were successful
check / check (push) Successful in 2m37s
2026-08-15 22:03:30 +08:00
Breadway
d1dd98a889 docs: describe the shipped bakery product and single-trunk releases
All checks were successful
check / check (push) Successful in 1m12s
README still called the GTK picker and mirroring pipeline stubs. Both
are built: breadcastd discovers Cast and DLNA devices and owns the
session; breadcast is the GTK picker. Install is bakery; this is not
on the BOS ISO.

CONTRIBUTING now follows the ecosystem single-trunk main + RC-tag
model. Leftover dev/beta CI workflows are documented, not rewritten.
bread-theme and bread-utils already pin bread-ecosystem v0.7.1.
2026-08-15 21:38:38 +08:00
13 changed files with 178 additions and 106 deletions

1
.gitignore vendored
View file

@ -31,4 +31,3 @@ logs/
*.pid
# Local hygiene notes (not for commit)
CLAUDE.md

50
AGENTS.md Normal file
View file

@ -0,0 +1,50 @@
# AGENTS.md — Repo hygiene
Scope: this file covers *repo hygiene* — branching, remotes, CI, cleanup. It is not project documentation.
This repo follows the branch/release workflow documented in `CONTRIBUTING.md`
— read and follow it for any git, branch, or release work here (the
single-trunk model, `feature/x`/`fix/x` branch naming, how RC tags work,
etc). Don't improvise a different workflow. The short version: there is one
long-lived branch, `main` — no `dev` or `beta` branch should be used.
`main` is supposed to auto-publish a dev-track build on every push. "Beta"
and "stable" are both just tags, not branches: push a `vX.Y.Z-rc.N` tag to
publish a beta-track build, push a plain `vX.Y.Z` tag to cut the signed
stable release. "Freezing" for stabilization means pausing pushes to
`main`, not moving a branch. This replaced an earlier three-branch
(`dev`/`beta`/`main`) model after `main` was found to have silently rotted
out of sync with `dev`/`beta` across most repos in this ecosystem.
## Remotes
- `origin` — Forgejo (`git.breadway.dev` via Hestia, SSH) — authoritative.
- `github` — GitHub mirror. Push both when publishing.
## CI
- `release.yml` triggers on `push: tags: ['v*']` — tag a release to cut
the signed stable build.
- Leftover: `dev-release.yml` still triggers on `push: branches: ['dev']`
and `beta-release.yml` still triggers on `push: branches: ['beta']`.
Those files are leftover from the three-branch model. Do **not** rewrite
them unless you are deliberately migrating CI; document and follow
single-trunk `main` + RC tags instead.
- `check.yml` runs clippy + test on `feature/**` and `fix/**`.
- No separate lint/PR-check pipeline on ordinary commits to `main`.
## Product cut
breadcast is a **bakery product**, not shipped on the BOS ISO, and not part
of the default desktop. Do not add BOS skel/keybinds. `bread` (breadd) is
optional event integration — see `EVENTS.md` — not a bakery `bread_deps`
entry.
## Status
The daemon + GTK picker + Cast Streaming / DLNA pipelines are built and
validated against real hardware. `EVENTS.md` is the bus contract.
## Pins
`bread-theme` and `bread-utils` pin
`git.breadway.dev/Breadway/bread-ecosystem` tag `v0.7.1`. Do not switch
those to github.com or `branch = "main"`.
## Don't
- Don't embed credentials in remote URLs — SSH or a credential helper only.
- Don't claim breadcast is on the BOS ISO or the default desktop.

View file

@ -1,23 +1,18 @@
# Contributing
`breadcast` — cast your screen to any Chromecast/Google TV, for Hyprland
`breadcast` — cast your screen to a Chromecast/Google TV or DLNA renderer
(daemon + GTK4 popup).
Part of the bread ecosystem; this repo follows the same branch/release
workflow as every other ecosystem product.
A bakery product in the bread ecosystem — **not** shipped on the BOS ISO
and not part of the default desktop. This repo follows the same
branch/release workflow as every other ecosystem product.
## Branches
- **`main`** — release branch, always tag-ready. Nothing is committed to it
directly; it only moves forward via a `beta` merge (see below).
- **`dev`** — integration branch. All day-to-day work lands here first.
Every push to `dev` automatically builds and publishes a **dev-track**
build (see Tracks below) — use this to test your change in a real install
before it goes any further.
- **`beta`** — a frozen stabilization branch, cut from `dev` periodically.
Every push to `beta` automatically builds and publishes a **beta-track**
build. While a freeze is active, only fixes for issues found *in that
freeze* should land on `beta`.
There is one long-lived branch: **`main`**. All day-to-day work lands here.
Every push to `main` is supposed to publish a **dev-track** build (see
Tracks below) — a real install you can test before cutting anything more
formal.
New work — features and bug fixes alike — goes on a short-lived branch:
@ -26,28 +21,29 @@ feature/<short-name>
fix/<issue-number-or-short-name>
```
Branch off `dev`, open a PR/push back into `dev` when ready. If you're fixing
something reported against an active `beta` freeze, branch off `beta`
instead, merge the fix there to unblock testers, and also forward the same
fix into `dev` so it doesn't quietly reappear next cycle.
Branch off `main`, open a PR/push back into `main` when ready. Short-lived
branches get deleted on merge — they never accumulate the kind of drift a
second long-lived branch does.
## The release cycle
1. Work accumulates on `dev` via `feature/x` / `fix/x` branches. Each push
auto-publishes a dev build — install it with `bakery track set dev` and
`bakery update --all`, then report or fix anything broken with another
push to `dev`.
2. Once `dev` has gone roughly **a week** without new issues, `beta` is cut
fresh from `dev`'s current tip. This freezes it as the stabilization
target — `dev` keeps moving independently starting the next cycle.
3. `beta` is open for anyone to test: `bakery track set beta` and
`bakery update --all`. **File issues against anything you find on this
repo's Forgejo issue tracker.** Fixes land via `fix/<issue>` branches
merged into `beta`.
4. Once `beta` has gone roughly **a month** without new issues, it's merged
into `main` and tagged `vX.Y.Z` — that tag is what actually triggers the
stable release build. `beta` is then reset from `dev` to start the next
cycle.
There's no separate `beta` or release branch — "stable" and "beta" are both
just **tags** on `main`, not branches that need to be kept in sync:
1. Work accumulates on `main` via `feature/x` / `fix/x` branches. Each push
is meant to auto-publish a dev build — install it with
`bakery track set dev` and `bakery update --all`, then fix anything
broken with another push.
2. When you want to stabilize before a real release, tag a release
candidate: `git tag vX.Y.Z-rc.1 && git push origin vX.Y.Z-rc.1` (push to
both remotes). That tag alone should trigger a beta-track build —
"freezing" is just pausing pushes to `main` while you test it, not a
branch operation. Cut `-rc.2`, `-rc.3`, etc. for further fixes.
3. Once an RC has gone without issues, tag the real release:
`git tag vX.Y.Z && git push origin vX.Y.Z` — that's what triggers the
signed stable release build.
Do **not** use leftover `dev` / `beta` branches as integration trunks.
## Tracks, from a user's perspective
@ -59,14 +55,15 @@ bakery update --all # pull the latest build on your current track
| Track | What it is | Published from |
|--------|-----------|-----------------|
| `stable` | The last tagged release | `main`, on a `vX.Y.Z` tag push |
| `beta` | Current stabilization freeze | `beta`, on every push |
| `dev` | Bleeding edge | `dev`, on every push |
| `stable` | The last tagged release | a `vX.Y.Z` tag |
| `beta` | Latest release candidate | a `vX.Y.Z-rc.N` tag |
| `dev` | Bleeding edge | `main`, on every push |
Dev/beta versions are auto-computed (`X.Y.Z-dev.<timestamp>+<sha>` /
`-beta.…`) from the latest published stable tag, so they always sort as
newer than what you have installed — no manual version bumping needed when
pushing to `dev` or `beta`.
Dev versions are auto-computed (`X.Y.Z-dev.<timestamp>+<sha>`) from the
latest published stable tag, so they always sort as newer than what you
have installed — no manual version bumping needed. Beta versions are just
the RC tag itself (already valid semver, already sorts below the real
release it's a candidate for).
## Local development
@ -77,14 +74,22 @@ cargo test --release --workspace
## CI
- `dev-release.yml` — triggered on push to `dev`.
- `beta-release.yml` — triggered on push to `beta`.
- `release.yml` — triggered on a `v*` tag push, cuts the actual stable release.
Intended single-trunk wiring (see
[bread-ecosystem's docs/release-channels.md](https://git.breadway.dev/Breadway/bread-ecosystem/src/branch/main/docs/release-channels.md)):
All CI runs on a self-hosted runner; nothing runs automatically on plain
commits or PRs beyond the track builds above. See
[bread-ecosystem's docs/release-channels.md](https://git.breadway.dev/Breadway/bread-ecosystem/src/branch/main/docs/release-channels.md)
for the full policy, including how a new product gets wired onto these tracks.
- push to `main` → dev-track build
- `vX.Y.Z-rc.N` tag → beta-track build
- `vX.Y.Z` tag → signed stable release
`release.yml` already fires on a `v*` tag push. `dev-release.yml` and
`beta-release.yml` are leftover from the old three-branch model and still
trigger on the `dev` / `beta` branch names — they have not been rewritten.
Follow the cycle above; do not treat those branches as current, and do not
rewrite the leftover workflows unless you are deliberately migrating CI.
`check.yml` runs clippy + test on `feature/**` and `fix/**` branches.
All CI runs on a self-hosted runner.
## Questions

125
README.md
View file

@ -1,75 +1,88 @@
# breadcast
Cast your screen to any Chromecast/Google TV, for Hyprland. It consists of
two binaries:
Cast your screen to a Chromecast, Google TV, or DLNA renderer on the LAN.
Two binaries:
- **`breadcastd`** — a background daemon that discovers Cast devices on the
LAN and (once built — see Status) owns the screen-capture/encode/serve
pipeline and the live Cast V2 session.
- **`breadcast`** — a GTK4 Layer Shell popup for picking a device and
starting/stopping a cast.
- **`breadcastd`** — background daemon. Discovers Cast (mDNS) and DLNA/UPnP
(SSDP) devices, owns the portal screen-capture / encode pipeline, and
runs the live session: Cast Streaming (vendored openscreen) or
DLNA/AVTransport. One active session at a time.
- **`breadcast`** — GTK4 Layer Shell popup. Thin IPC client of
`breadcastd`: pick a device, start or stop a cast. Closing the popup
does not interrupt an active session.
## Status
This is a **bakery product**. It is **not** shipped on the BOS ISO and is
**not** part of the default desktop — install it yourself if you want it.
This is early: device discovery (mDNS) and the Cast V2 sender (real device
control — connect, launch the receiver, load media) are built and validated
against real Chromecast/Google TV hardware. The actual screen-mirroring
pipeline (portal-based screen capture → GPU-accelerated encode → HLS →
local HTTP server) and the GTK4 device-picker UI are not built yet.
`breadcastd` today only does discovery and optional breadd event
publishing; `breadcast` is a stub binary. See `CLAUDE.md`'s Status section
for more detail.
## Install
```sh
bakery install breadcast
```
That puts `breadcast` and `breadcastd` on `$PATH` (usually `~/.local/bin`),
installs `contrib/breadcastd.service` as a systemd user unit, enables it,
and starts the daemon. `bakery doctor breadcast` checks the system
packages listed in `bakery.toml` first.
## Requirements
- Rust toolchain (edition 2021)
- GTK 4.12+ and `gtk4-layer-shell` (once the UI lands)
- GStreamer + `gst-plugin-pipewire`, `gst-plugins-bad` (VA-API `va` plugin),
`gst-plugin-hlssink3` (once the capture pipeline lands)
- Hyprland (or any Wayland compositor with Layer Shell and the
`xdg-desktop-portal` ScreenCast interface)
- A Wayland compositor with Layer Shell and `xdg-desktop-portal`
ScreenCast (Hyprland is the primary target)
- GTK 4.12+ and `gtk4-layer-shell`
- GStreamer plus `gst-plugin-pipewire`, `gst-plugins-bad`,
`gst-plugin-va` (`vah264enc`), and `gst-plugin-hlssink3`
- `jsoncpp` and `openssl` (runtime deps of the vendored Cast Streaming
code)
## Build
From source you also need a Rust toolchain (edition 2021).
## Build from source
```sh
git clone https://git.breadway.dev/breadway/breadcast
git clone https://git.breadway.dev/Breadway/breadcast
cd breadcast
cargo build --release
```
The compiled binaries are at `target/release/breadcast` and
`target/release/breadcastd`.
## Try device discovery today
```sh
cargo run -p breadcast-core --example discover
```
Prints Chromecast/Google TV devices as they appear/disappear on the LAN.
## Install
Copy the binaries to somewhere on your `$PATH`, e.g.:
Binaries land at `target/release/breadcast` and `target/release/breadcastd`.
```sh
cp target/release/breadcast target/release/breadcastd ~/.local/bin/
```
### systemd user service
A unit file is provided in `contrib/`:
```sh
cp contrib/breadcastd.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now breadcastd
```
## Usage
Start the daemon (or let the systemd unit handle it):
```sh
breadcastd
```
Open the device picker:
```sh
breadcast
```
Running `breadcast` again while it is open closes it (toggle). Click a
device to start mirroring — the portal picker asks which screen to share.
**Stop mirroring** ends the session. Status is Idle or Casting.
Discovery examples (optional, for debugging the LAN):
```sh
cargo run -p breadcast-core --example discover
cargo run -p breadcast-core --example dlna_discover
```
### Hyprland keybind
For stock Hyprland, add the contents of `contrib/hyprland.conf` to your
`hyprland.conf`:
On stock Hyprland, add the contents of `contrib/hyprland.conf` to your
`hyprland.conf` if you want Super+C and the frosted-glass blur:
```
layerrule = blur, breadcast
@ -78,20 +91,16 @@ layerrule = ignorezero, breadcast
bind = $mainMod, C, exec, breadcast
```
On BOS, Hyprland config is Lua+JSON-driven instead — see
`contrib/binds.json` for the equivalent keybind entry to merge into your
`binds.json` by hand (there's no per-app self-registration mechanism yet).
There is currently no BOS-native equivalent for the `layerrule` blur lines.
BOS does not ship this app or a default keybind for it. Add one yourself
if you install breadcast on a BOS machine.
## bread event integration
`breadcastd` optionally publishes into the shared bread automation fabric
(`bread.cast.*`) when `breadd` is running, and works identically without
it. See `EVENTS.md` for the full, honest-about-scope contract — most of the
eventually-planned events (mirroring start/stop) aren't implemented yet,
since the mirroring pipeline itself isn't built yet.
`breadcastd` works the same with or without `breadd`. When `breadd` is
running, it publishes `bread.cast.*` and honors `bread.command.cast.*`.
See [EVENTS.md](EVENTS.md) for the bus contract. `bread` is not a bakery
dependency.
## Theming
`breadcast` will inherit its colour palette from `bread-theme`, matching
the rest of the ecosystem, once its GTK4 UI is built.
`breadcast` inherits its colour palette from `bread-theme`.

View file

@ -22,6 +22,8 @@ system_deps = [
"openssl",
]
optional_system_deps = ["hyprland", "xdg-desktop-portal-hyprland"]
# breadd is optional: breadcastd publishes bread.cast.* when it is running
# and works the same without it. See EVENTS.md. Not a bakery bread dep.
bread_deps = []
[[service]]

View file

@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_readme_md", "label": "README.md", "file_type": "document", "source_file": "README.md", "source_location": "L1"}, {"id": "$graphify-root$_readme_breadcast", "label": "breadcast", "file_type": "document", "source_file": "README.md", "source_location": "L1"}, {"id": "$graphify-root$_readme_install", "label": "Install", "file_type": "document", "source_file": "README.md", "source_location": "L17"}, {"id": "$graphify-root$_readme_requirements", "label": "Requirements", "file_type": "document", "source_file": "README.md", "source_location": "L28"}, {"id": "$graphify-root$_readme_build_from_source", "label": "Build from source", "file_type": "document", "source_file": "README.md", "source_location": "L40"}, {"id": "$graphify-root$_readme_usage", "label": "Usage", "file_type": "document", "source_file": "README.md", "source_location": "L57"}, {"id": "$graphify-root$_readme_hyprland_keybind", "label": "Hyprland keybind", "file_type": "document", "source_file": "README.md", "source_location": "L82"}, {"id": "$graphify-root$_readme_bread_event_integration", "label": "bread event integration", "file_type": "document", "source_file": "README.md", "source_location": "L97"}, {"id": "$graphify-root$_readme_theming", "label": "Theming", "file_type": "document", "source_file": "README.md", "source_location": "L104"}], "edges": [{"source": "$graphify-root$_readme_md", "target": "$graphify-root$_readme_breadcast", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_readme_breadcast", "target": "$graphify-root$_readme_install", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_readme_breadcast", "target": "$graphify-root$_readme_requirements", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L28", "weight": 1.0}, {"source": "$graphify-root$_readme_breadcast", "target": "$graphify-root$_readme_build_from_source", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L40", "weight": 1.0}, {"source": "$graphify-root$_readme_breadcast", "target": "$graphify-root$_readme_usage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L57", "weight": 1.0}, {"source": "$graphify-root$_readme_usage", "target": "$graphify-root$_readme_hyprland_keybind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L82", "weight": 1.0}, {"source": "$graphify-root$_readme_breadcast", "target": "$graphify-root$_readme_bread_event_integration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L97", "weight": 1.0}, {"source": "$graphify-root$_readme_md", "target": "$graphify-root$_events_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L101", "weight": 1.0, "target_file": "$graphify-root$/EVENTS.md"}, {"source": "$graphify-root$_readme_breadcast", "target": "$graphify-root$_readme_theming", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L104", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}

View file

@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_events_md", "label": "EVENTS.md", "file_type": "document", "source_file": "EVENTS.md", "source_location": "L1"}, {"id": "$graphify-root$_events_breadcast_bread_event_integration", "label": "breadcast \u2014 bread event integration", "file_type": "document", "source_file": "EVENTS.md", "source_location": "L1"}, {"id": "$graphify-root$_events_events_published_bread_cast", "label": "Events published (`bread.cast.*`)", "file_type": "document", "source_file": "EVENTS.md", "source_location": "L15"}, {"id": "$graphify-root$_events_commands_honored_bread_command_cast", "label": "Commands honored (`bread.command.cast.*`)", "file_type": "document", "source_file": "EVENTS.md", "source_location": "L24"}, {"id": "$graphify-root$_events_fail_safe_behavior", "label": "Fail-safe behavior", "file_type": "document", "source_file": "EVENTS.md", "source_location": "L36"}], "edges": [{"source": "$graphify-root$_events_md", "target": "$graphify-root$_events_breadcast_bread_event_integration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "EVENTS.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_events_breadcast_bread_event_integration", "target": "$graphify-root$_events_events_published_bread_cast", "relation": "contains", "confidence": "EXTRACTED", "source_file": "EVENTS.md", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_events_breadcast_bread_event_integration", "target": "$graphify-root$_events_commands_honored_bread_command_cast", "relation": "contains", "confidence": "EXTRACTED", "source_file": "EVENTS.md", "source_location": "L24", "weight": 1.0}, {"source": "$graphify-root$_events_breadcast_bread_event_integration", "target": "$graphify-root$_events_fail_safe_behavior", "relation": "contains", "confidence": "EXTRACTED", "source_file": "EVENTS.md", "source_location": "L36", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}

View file

@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_vendor_rust_cast_0_21_0_readme_md", "label": "README.md", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L1"}, {"id": "$graphify-root$_vendor_rust_cast_0_21_0_readme_usage", "label": "Usage", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L4"}, {"id": "$graphify-root$_vendor_rust_cast_0_21_0_readme_build", "label": "Build", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L8"}, {"id": "$graphify-root$_vendor_rust_cast_0_21_0_readme_run_example", "label": "Run example", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L19"}, {"id": "$graphify-root$_vendor_rust_cast_0_21_0_readme_generic_features", "label": "Generic features", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L21"}, {"id": "$graphify-root$_vendor_rust_cast_0_21_0_readme_media_features", "label": "Media features", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L49"}, {"id": "$graphify-root$_vendor_rust_cast_0_21_0_readme_dns_txt_record_description", "label": "DNS TXT Record description", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L81"}, {"id": "$graphify-root$_vendor_rust_cast_0_21_0_readme_model_names", "label": "Model names", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L93"}, {"id": "$graphify-root$_vendor_rust_cast_0_21_0_readme_useful_links_and_sources_of_inspiration", "label": "Useful links and sources of inspiration", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L98"}], "edges": [{"source": "$graphify-root$_vendor_rust_cast_0_21_0_readme_md", "target": "$graphify-root$_vendor_rust_cast_0_21_0_readme_usage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L4", "weight": 1.0}, {"source": "$graphify-root$_vendor_rust_cast_0_21_0_readme_md", "target": "$graphify-root$_vendor_rust_cast_0_21_0_readme_build", "relation": "contains", "confidence": "EXTRACTED", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_vendor_rust_cast_0_21_0_readme_md", "target": "$graphify-root$_vendor_rust_cast_0_21_0_readme_run_example", "relation": "contains", "confidence": "EXTRACTED", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_vendor_rust_cast_0_21_0_readme_run_example", "target": "$graphify-root$_vendor_rust_cast_0_21_0_readme_generic_features", "relation": "contains", "confidence": "EXTRACTED", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_vendor_rust_cast_0_21_0_readme_run_example", "target": "$graphify-root$_vendor_rust_cast_0_21_0_readme_media_features", "relation": "contains", "confidence": "EXTRACTED", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L49", "weight": 1.0}, {"source": "$graphify-root$_vendor_rust_cast_0_21_0_readme_md", "target": "$graphify-root$_vendor_rust_cast_0_21_0_readme_dns_txt_record_description", "relation": "contains", "confidence": "EXTRACTED", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L81", "weight": 1.0}, {"source": "$graphify-root$_vendor_rust_cast_0_21_0_readme_md", "target": "$graphify-root$_vendor_rust_cast_0_21_0_readme_model_names", "relation": "contains", "confidence": "EXTRACTED", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L93", "weight": 1.0}, {"source": "$graphify-root$_vendor_rust_cast_0_21_0_readme_md", "target": "$graphify-root$_vendor_rust_cast_0_21_0_readme_useful_links_and_sources_of_inspiration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "vendor/rust_cast-0.21.0/README.md", "source_location": "L98", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}

View file

@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_ci_build_sh", "label": "build.sh", "file_type": "code", "source_file": "ci/build.sh", "source_location": "L1", "metadata": {"language": "bash", "kind": "file"}}, {"id": "$graphify-root$_ci_build_sh__entry", "label": "build.sh script", "file_type": "code", "source_file": "ci/build.sh", "source_location": "L1", "metadata": {"language": "bash", "kind": "bash_entrypoint"}}], "edges": [{"source": "$graphify-root$_ci_build_sh", "target": "$graphify-root$_ci_build_sh__entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ci/build.sh", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"language": "bash", "callee": "set", "caller_nid": "$graphify-root$_ci_build_sh__entry", "source_file": "ci/build.sh", "source_location": "L9"}, {"language": "bash", "callee": "rm", "caller_nid": "$graphify-root$_ci_build_sh__entry", "source_file": "ci/build.sh", "source_location": "L16"}, {"language": "bash", "callee": "git", "caller_nid": "$graphify-root$_ci_build_sh__entry", "source_file": "ci/build.sh", "source_location": "L17"}], "bash_sources": []}

View file

@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_vendor_rust_cast_0_21_0_patches_md", "label": "PATCHES.md", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/PATCHES.md", "source_location": "L1"}, {"id": "$graphify-root$_vendor_rust_cast_0_21_0_patches_vendoring_notes", "label": "Vendoring notes", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/PATCHES.md", "source_location": "L1"}, {"id": "$graphify-root$_vendor_rust_cast_0_21_0_patches_why", "label": "Why", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/PATCHES.md", "source_location": "L8"}, {"id": "$graphify-root$_vendor_rust_cast_0_21_0_patches_the_patch", "label": "The patch", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/PATCHES.md", "source_location": "L23"}, {"id": "$graphify-root$_vendor_rust_cast_0_21_0_patches_rolling_the_pin", "label": "Rolling the pin", "file_type": "document", "source_file": "vendor/rust_cast-0.21.0/PATCHES.md", "source_location": "L31"}], "edges": [{"source": "$graphify-root$_vendor_rust_cast_0_21_0_patches_md", "target": "$graphify-root$_vendor_rust_cast_0_21_0_patches_vendoring_notes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "vendor/rust_cast-0.21.0/PATCHES.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_vendor_rust_cast_0_21_0_patches_vendoring_notes", "target": "$graphify-root$_vendor_rust_cast_0_21_0_patches_why", "relation": "contains", "confidence": "EXTRACTED", "source_file": "vendor/rust_cast-0.21.0/PATCHES.md", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_vendor_rust_cast_0_21_0_patches_vendoring_notes", "target": "$graphify-root$_vendor_rust_cast_0_21_0_patches_the_patch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "vendor/rust_cast-0.21.0/PATCHES.md", "source_location": "L23", "weight": 1.0}, {"source": "$graphify-root$_vendor_rust_cast_0_21_0_patches_vendoring_notes", "target": "$graphify-root$_vendor_rust_cast_0_21_0_patches_rolling_the_pin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "vendor/rust_cast-0.21.0/PATCHES.md", "source_location": "L31", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}

View file

@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_contributing_md", "label": "CONTRIBUTING.md", "file_type": "document", "source_file": "CONTRIBUTING.md", "source_location": "L1"}, {"id": "$graphify-root$_contributing_contributing", "label": "Contributing", "file_type": "document", "source_file": "CONTRIBUTING.md", "source_location": "L1"}, {"id": "$graphify-root$_contributing_branches", "label": "Branches", "file_type": "document", "source_file": "CONTRIBUTING.md", "source_location": "L10"}, {"id": "$graphify-root$_contributing_the_release_cycle", "label": "The release cycle", "file_type": "document", "source_file": "CONTRIBUTING.md", "source_location": "L28"}, {"id": "$graphify-root$_contributing_tracks_from_a_user_s_perspective", "label": "Tracks, from a user's perspective", "file_type": "document", "source_file": "CONTRIBUTING.md", "source_location": "L48"}, {"id": "$graphify-root$_contributing_local_development", "label": "Local development", "file_type": "document", "source_file": "CONTRIBUTING.md", "source_location": "L68"}, {"id": "$graphify-root$_contributing_ci", "label": "CI", "file_type": "document", "source_file": "CONTRIBUTING.md", "source_location": "L75"}, {"id": "$graphify-root$_contributing_questions", "label": "Questions", "file_type": "document", "source_file": "CONTRIBUTING.md", "source_location": "L94"}], "edges": [{"source": "$graphify-root$_contributing_md", "target": "$graphify-root$_contributing_contributing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CONTRIBUTING.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_contributing_contributing", "target": "$graphify-root$_contributing_branches", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CONTRIBUTING.md", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_contributing_contributing", "target": "$graphify-root$_contributing_the_release_cycle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CONTRIBUTING.md", "source_location": "L28", "weight": 1.0}, {"source": "$graphify-root$_contributing_contributing", "target": "$graphify-root$_contributing_tracks_from_a_user_s_perspective", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CONTRIBUTING.md", "source_location": "L48", "weight": 1.0}, {"source": "$graphify-root$_contributing_contributing", "target": "$graphify-root$_contributing_local_development", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CONTRIBUTING.md", "source_location": "L68", "weight": 1.0}, {"source": "$graphify-root$_contributing_contributing", "target": "$graphify-root$_contributing_ci", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CONTRIBUTING.md", "source_location": "L75", "weight": 1.0}, {"source": "$graphify-root$_contributing_contributing", "target": "$graphify-root$_contributing_questions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CONTRIBUTING.md", "source_location": "L94", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}

View file

@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_md", "label": "PATCHES.md", "file_type": "document", "source_file": "breadcast-caststream-sys/vendor/openscreen/PATCHES.md", "source_location": "L1"}, {"id": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_vendoring_notes", "label": "Vendoring notes", "file_type": "document", "source_file": "breadcast-caststream-sys/vendor/openscreen/PATCHES.md", "source_location": "L1"}, {"id": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_rolling_the_pin", "label": "Rolling the pin", "file_type": "document", "source_file": "breadcast-caststream-sys/vendor/openscreen/PATCHES.md", "source_location": "L16"}, {"id": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_what_s_excluded_and_why", "label": "What's excluded and why", "file_type": "document", "source_file": "breadcast-caststream-sys/vendor/openscreen/PATCHES.md", "source_location": "L27"}, {"id": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_local_patches_not_upstream", "label": "Local patches (not upstream)", "file_type": "document", "source_file": "breadcast-caststream-sys/vendor/openscreen/PATCHES.md", "source_location": "L45"}], "edges": [{"source": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_md", "target": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_vendoring_notes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "breadcast-caststream-sys/vendor/openscreen/PATCHES.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_vendoring_notes", "target": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_rolling_the_pin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "breadcast-caststream-sys/vendor/openscreen/PATCHES.md", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_vendoring_notes", "target": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_what_s_excluded_and_why", "relation": "contains", "confidence": "EXTRACTED", "source_file": "breadcast-caststream-sys/vendor/openscreen/PATCHES.md", "source_location": "L27", "weight": 1.0}, {"source": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_vendoring_notes", "target": "$graphify-root$_breadcast_caststream_sys_vendor_openscreen_patches_local_patches_not_upstream", "relation": "contains", "confidence": "EXTRACTED", "source_file": "breadcast-caststream-sys/vendor/openscreen/PATCHES.md", "source_location": "L45", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}

File diff suppressed because one or more lines are too long