CalendarWatch, the client resolution, and the slot policy were all feed domain living in the claw's config and source tree; only the extension adapter was the claw's. The reminder source now ships in the integration as the default answer to "what does a start time mean": one slot per lead time, calendar:<name> keys, fed to the consumer's dispatcher. The crate doc drops its no-policy claim to match, and the claw's resident prefixes take the calendar prefix from the integration so the spelling cannot drift.
44 lines
1.7 KiB
TOML
44 lines
1.7 KiB
TOML
[package]
|
|
name = "rhema-calendar-integration"
|
|
description = "The calendar integration: ICS/webcal feeds, CalDAV collections, and the Google Calendar API normalized into one occurrence vocabulary for reminder-style dispatch"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
repository.workspace = true
|
|
authors.workspace = true
|
|
# The resident tier is still indev: `cargo publish --workspace` skips
|
|
# it until the claw ships.
|
|
publish = false
|
|
|
|
[dependencies]
|
|
# The reminder source: one `Source` over the feeds, detect-pass shaped
|
|
# like the task scheduler's
|
|
rhema-autonomous-agent = { path = "../../crates/rhema-autonomous-agent", version = "0.1.0" }
|
|
# The reminder source ingests its slots into a `Dispatcher`; the event
|
|
# and key-function shapes are the dispatcher's
|
|
rhema-rsd = { path = "../../crates/rhema-rsd", version = "0.1.0" }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
async-trait = { workspace = true }
|
|
# HTTP against the three feed kinds: one bounded request per poll, no
|
|
# streaming
|
|
reqwest = { version = "0.12", features = ["json"] }
|
|
# The CalDAV adapter reads 207 multistatus bodies; the element set it
|
|
# cares about is small enough that a pull parser beats a DOM
|
|
quick-xml = "0.41"
|
|
# Every wire time (RFC 3339, iCalendar's compact `YYYYMMDDTHHMMSS[Z]`,
|
|
# `VALUE=DATE` all-days) normalizes to an OffsetDateTime, and the
|
|
# vocabulary's instants round-trip as RFC 3339.
|
|
time = { version = "0.3", default-features = false, features = [
|
|
"parsing",
|
|
"formatting",
|
|
"serde-well-known",
|
|
] }
|
|
|
|
[dev-dependencies]
|
|
tokio = { workspace = true, features = ["rt-multi-thread", "macros", "sync", "time"] }
|
|
# In-process HTTP mocks for offline tests
|
|
wiremock = "0.6"
|