โ† Core
In the works

tom_core_agentic

tom_core_agentic ยท v1.4.0
Status
In the works
LOC
2.0k
Tests
337
Test LOC
3.0k

Overview

No overview yet.

What it enables

No downstream modules declared yet.

Relationships

Standalone โ€” no declared relationships.

tom_core_agentic

Generic, domain-free building blocks for agentic systems in the TOM framework. Everything here depends only on `tom_basics` (plus `yaml` / `yaml_edit` for the config read/write path and `crypto` for the content-hash convention) and is safe to reuse across the brain, the assistant, and any future agent runtime. The package is deliberately **`dart:io`-free**, so it stays usable from `dart:io`-forbidding consumers such as `tom_brain_shared`.

What lives here

Building blockPurpose
`CancellationToken` / `CancellationTokenSource` Cooperative cancellation for long-running async work.
`OperationCancelled`Public exception thrown when a cancelled token is observed.
`CloseGuard`Mixin that tracks a `isClosed` flag and throws on use-after-close.
`buildUniqueById`Build an id-keyed map from a list, rejecting duplicate ids.
`textPreview`Single-line, length-bounded preview of arbitrary text.
`HttpDate`RFC 7231 / RFC 1123 HTTP-date parsing and formatting.
`CategoryLog` Category-tag facade over the global `tomLog` (prepends `[category]`, forwards every level).
`systemClock` The `DateTime.now` default for injectable `DateTime Function()` clock seams.
`AsyncShutdownCoordinator<S>` Signal โ†’ awaited async teardown โ†’ terminate; `dart:io`-free, generic over the trigger type.
`loadYamlAsMap` / `expandEnvVars` YAML โ†’ plain `Map<String, Object?>` parse boundary, plus `${ENV}` expansion.
`YamlConfigReader` / `MapFieldReader` Typed, dotted-path reads over **plain** config maps (no `YamlMap` in the read path).
`YamlConfigWriter` The sanctioned AST-preserving config writer (surgical `set`/`remove` over `yaml_edit`; keeps comments, order, formatting).
`percentileDuration` / `LatencySummary` Nearest-rank percentile maths and a count/min/max/p50/p95 summary over `Duration` samples.

Integration with `tom_basics` / `tom_core_*` (reuse vs own)

This package sits in the **lightweight tier**: it depends only on `tom_basics` and never on `tom_core_kernel` (which pulls `dart:io`, `tom_reflection`, `http`, and a SQL client). The table below records, per audited concern, whether the primitive is **reused** from `tom_basics` or **owned** here โ€” and, where a heavier `tom_core_*` analogue exists, why it is not reused.

ConcernDispositionDetail
**Logging** **Reuse** `tom_basics` `CategoryLog` and `AsyncShutdownCoordinator` forward to the global `tomLog` (`TomLogger` / `TomLogLevel`). No second logger is implemented. `CategoryLog` is a forwarding facade, not a re-implementation.
**Clock** **Own** (no equivalent) Neither `tom_basics` nor `tom_core_kernel` ships a clock. `systemClock` is the one-line `DateTime.now` tear-off used as the default for injectable clock seams.
**Shutdown** **Own by tier-design** `tom_core_kernel` ships `TomShutdownCleanup`, but it imports `dart:io` (`ProcessSignal`) and `tom_reflection/mirrors`, so it lives in the heavy kernel tier. `AsyncShutdownCoordinator` is the `dart:io`-free, async-await-correct, trigger-generic coordinator the lightweight tier needs. Depending on the kernel to share it would drag `dart:io` + reflection into `tom_brain_shared`; the bounded duplication is intentional.
**Config read/write** **Own** (no equivalent) No YAML config loader/reader/writer exists in `tom_basics` or `tom_core_kernel`. `loadYamlAsMap` + `YamlConfigReader`/`MapFieldReader` own the read path (plain maps, no `YamlMap` leak); `YamlConfigWriter` owns the AST-preserving write path.

**Audit result (prototype-plan-2 item 7):** no divergent re-implementation of a `tom_core_kernel`-owned primitive was found. Logging is reused; clock and config helpers have no `tom_core_*` equivalent; the shutdown coordinator is a deliberate lightweight-tier alternative to the kernel's `dart:io`-coupled `TomShutdownCleanup`. The audited helpers (`CategoryLog`, `systemClock`, `AsyncShutdownCoordinator`, `YamlConfigReader`/`MapFieldReader`/`YamlConfigWriter`) keep their existing unit tests.

What does NOT live here

Anything brain- or domain-specific. The `sha256:<hex>` prompt-hash convention and the `BrainEventBus<E>` live in `tom_brain_shared`; retry / circuit-breaker transport policy lives in `tom_core_kernel`.