feat(cron): per-agent cron + session messaging + tool consolidation #111

Merged
jasoncouture merged 20 commits from feat/cron into main 2026-05-25 00:57:22 -04:00
jasoncouture commented 2026-05-25 00:05:19 -04:00 (Migrated from github.com)

Summary

  • Per-agent cron: storage, scheduler, and service partitioned by agent id; cron fires by spawning a transient CRON.md sub-agent via the shared IPromptedAgentSpawner; supports one-shot jobs.
  • Session messaging: new session_list / session_send MCP tools so transient sub-agents (heartbeat, cron) can deliver a message back to their parent session over the same path as a user-typed chat input.
  • Prompt templates: CRON.md and HEARTBEAT.md now reference llamashears__session_send with {{ session_path.parent }}, and stop pointing sub-agents at the removed message_send tool.
  • UI dedupe: tool-result bubbles deduped by call id across history-load and live apply.
  • Tool consolidation: cron, memory, and filesystem (read/list/write/append/delete/move/regex_replace/grep) MCP tools collapsed into single CronTools, MemoryTools, and FileTools partial classes; DI registrations collapsed to one WithTools<…>() each.
  • Transient auto-forward suppression now keys off session_send (the actual tool name), not the removed message_send.

Test plan

  • dotnet build clean
  • dotnet test — 572 passing
  • Manual smoke: schedule a one-shot cron, confirm sub-agent fires, calls session_send, parent session receives the message, job auto-disables
  • Manual smoke: heartbeat tick emits session_send only when there is real signal
  • Manual smoke: read/write/append/delete/move/regex_replace/grep through MCP still behave
## Summary - Per-agent cron: storage, scheduler, and service partitioned by agent id; cron fires by spawning a transient `CRON.md` sub-agent via the shared `IPromptedAgentSpawner`; supports one-shot jobs. - Session messaging: new `session_list` / `session_send` MCP tools so transient sub-agents (heartbeat, cron) can deliver a message back to their parent session over the same path as a user-typed chat input. - Prompt templates: `CRON.md` and `HEARTBEAT.md` now reference `llamashears__session_send` with `{{ session_path.parent }}`, and stop pointing sub-agents at the removed `message_send` tool. - UI dedupe: tool-result bubbles deduped by call id across history-load and live apply. - Tool consolidation: cron, memory, and filesystem (read/list/write/append/delete/move/regex_replace/grep) MCP tools collapsed into single `CronTools`, `MemoryTools`, and `FileTools` partial classes; DI registrations collapsed to one `WithTools<…>()` each. - Transient auto-forward suppression now keys off `session_send` (the actual tool name), not the removed `message_send`. ## Test plan - [x] `dotnet build` clean - [x] `dotnet test` — 572 passing - [ ] Manual smoke: schedule a one-shot cron, confirm sub-agent fires, calls `session_send`, parent session receives the message, job auto-disables - [ ] Manual smoke: heartbeat tick emits `session_send` only when there is real signal - [ ] Manual smoke: read/write/append/delete/move/regex_replace/grep through MCP still behave
copilot-pull-request-reviewer[bot] (Migrated from github.com) reviewed 2026-05-25 00:09:15 -04:00
copilot-pull-request-reviewer[bot] (Migrated from github.com) left a comment

Pull request overview

This PR adds per-agent cron execution via transient sub-agents, introduces session messaging tools for parent/child session communication, and consolidates MCP tool implementations for cron, memory, and filesystem operations.

Changes:

  • Cron jobs are now stored per agent, run via CRON.md transient sub-agents, and support one-shot scheduling.
  • New session_list / session_send tools allow transient agents to message live sessions.
  • MCP filesystem, memory, and cron tools are consolidated into shared tool classes, with tests updated accordingly.

Reviewed changes

Copilot reviewed 61 out of 61 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
tests/LlamaShears.UnitTests/Cron/JsonCronStoreTests.cs Updates cron store tests for per-agent storage and isolation.
tests/LlamaShears.UnitTests/Cron/CronSchedulerTests.cs Updates scheduler tests for ambient agent scope, sub-agent spawning, and one-shot behavior.
tests/LlamaShears.UnitTests/Api/Tools/ModelContextProtocol/Filesystem/WriteFileToolTests.cs Retargets write tests to consolidated FileTools.
tests/LlamaShears.UnitTests/Api/Tools/ModelContextProtocol/Filesystem/RegexReplaceFileToolTests.cs Retargets regex replace tests to consolidated FileTools.
tests/LlamaShears.UnitTests/Api/Tools/ModelContextProtocol/Filesystem/ReadFileToolTests.cs Retargets read tests to consolidated FileTools.
tests/LlamaShears.UnitTests/Api/Tools/ModelContextProtocol/Filesystem/GrepToolTests.cs Retargets grep tests to consolidated FileTools.
tests/LlamaShears.UnitTests/Api/Tools/ModelContextProtocol/Filesystem/DeleteFileToolTests.cs Retargets delete tests to consolidated FileTools.
tests/LlamaShears.UnitTests/Api/Tools/ModelContextProtocol/Filesystem/AppendFileToolTests.cs Retargets append tests to consolidated FileTools.
tests/LlamaShears.UnitTests/Agent/Core/TransientAgentTests.cs Updates auto-forward suppression tests from message_send to session_send.
tests/LlamaShears.UnitTests/Agent/Core/AgentHeartbeatServiceTests.cs Updates heartbeat tests to use prompted sub-agent spawning.
src/public/LlamaShears.Core.Abstractions/Agent/Sessions/SessionId.cs Adds helper for creating default or named session IDs.
src/public/LlamaShears.Core.Abstractions/Agent/PromptedAgentStartInformation.cs Adds shared start-information record for prompted transient agents.
src/public/LlamaShears.Core.Abstractions/Agent/ITransientAgentSpawner.cs Adds transient spawner abstraction.
src/public/LlamaShears.Core.Abstractions/Agent/IPromptedAgentSpawner.cs Adds prompted sub-agent spawner abstraction.
src/LlamaShears/content/templates/workspace/system/HEARTBEAT.md Updates heartbeat prompt to use session_send.
src/LlamaShears/content/templates/workspace/system/CRON.md Adds cron transient-agent system prompt.
src/LlamaShears/content/templates/workspace/system/context/CRON.md Adds cron runtime context template.
src/LlamaShears.Core/TransientAgent.cs Updates auto-forward suppression trigger to session_send.
src/LlamaShears.Core/PromptedAgentSpawner.cs Adds implementation for creating and optionally starting prompted sub-agents.
src/LlamaShears.Core/Cron/JsonCronStore.cs Changes cron persistence to per-agent JSON files.
src/LlamaShears.Core/Cron/ICronStore.cs Updates store interface for per-agent access.
src/LlamaShears.Core/Cron/ICronScheduler.cs Updates scheduler API to use ambient agent scope and one-shot scheduling.
src/LlamaShears.Core/Cron/CronServiceCollectionExtensions.cs Registers scoped scheduler and per-agent cron service.
src/LlamaShears.Core/Cron/CronScheduler.cs Implements ambient agent scoping, transient cron spawning, and one-shot disabling.
src/LlamaShears.Core/Cron/CronJobEdit.cs Adds editable one-shot field.
src/LlamaShears.Core/Cron/CronJob.cs Adds persisted one-shot flag.
src/LlamaShears.Core/Cron/CronExecutor.cs Removes global cron executor.
src/LlamaShears.Core/Cron/AgentCronService.cs Adds per-agent cron tick service.
src/LlamaShears.Core/CoreServiceCollectionExtensions.cs Registers prompted agent spawner.
src/LlamaShears.Core/AgentHeartbeatService.cs Refactors heartbeat spawning through prompted spawner.
src/LlamaShears.Api/Tools/ModelContextProtocol/Session/SessionTools.cs Adds session listing and session message sending tools.
src/LlamaShears.Api/Tools/ModelContextProtocol/Session/SessionSendResult.cs Adds session send result payload.
src/LlamaShears.Api/Tools/ModelContextProtocol/Session/SessionListResult.cs Adds session list result payload.
src/LlamaShears.Api/Tools/ModelContextProtocol/Session/SessionEntry.cs Adds session list entry payload.
src/LlamaShears.Api/Tools/ModelContextProtocol/ModelContextProtocolServiceCollectionExtensions.cs Consolidates MCP tool registrations and adds session tools.
src/LlamaShears.Api/Tools/ModelContextProtocol/Memory/StoreMemoryTool.cs Removes standalone memory store tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Memory/SearchMemoryTool.cs Removes standalone memory search tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Memory/MemoryTools.cs Adds consolidated memory MCP tools.
src/LlamaShears.Api/Tools/ModelContextProtocol/Memory/IndexMemoryTool.cs Removes standalone memory index tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/WriteFileTool.cs Removes standalone write tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/RegexReplaceFileTool.cs Removes standalone regex replace tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/ReadFileTool.cs Removes standalone read tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/MoveFileTool.cs Removes standalone move tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/ListFilesTool.cs Removes standalone list tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/GrepTool.cs Removes standalone grep tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/FileTools.cs Adds consolidated filesystem MCP tools.
src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/DeleteFileTool.cs Removes standalone delete tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/AppendFileTool.cs Removes standalone append tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Cron/TriggerCronTool.cs Removes standalone cron trigger tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Cron/ScheduleCronTool.cs Removes standalone cron schedule tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Cron/ListCronTool.cs Removes standalone cron list tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Cron/EditCronTool.cs Removes standalone cron edit tool.
src/LlamaShears.Api/Tools/ModelContextProtocol/Cron/CronTools.cs Adds consolidated cron MCP tools.
src/LlamaShears.Api/Tools/ModelContextProtocol/Cron/CancelCronTool.cs Removes standalone cron cancel tool.
src/LlamaShears.Api.Web/Services/ChatSession.cs Deduplicates rendered tool result bubbles by call ID.
docs/api/LlamaShears.Core.Abstractions/LlamaShears/Core/Abstractions/Agent/Sessions/SessionId.md Updates generated API docs for SessionId.
docs/api/LlamaShears.Core.Abstractions/LlamaShears/Core/Abstractions/Agent/PromptedAgentStartInformation.md Adds generated API docs for prompted start information.
docs/api/LlamaShears.Core.Abstractions/LlamaShears/Core/Abstractions/Agent/ITransientAgentSpawner.md Adds generated API docs for transient spawner abstraction.
docs/api/LlamaShears.Core.Abstractions/LlamaShears/Core/Abstractions/Agent/IPromptedAgentSpawner.md Adds generated API docs for prompted spawner abstraction.
docs/api/LlamaShears.Core.Abstractions/LlamaShears/Core/Abstractions/Agent/index.md Adds new public agent abstractions to API index.
docs/api/LlamaShears.Core.Abstractions/index.md Adds new public abstractions to package API index.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

## Pull request overview This PR adds per-agent cron execution via transient sub-agents, introduces session messaging tools for parent/child session communication, and consolidates MCP tool implementations for cron, memory, and filesystem operations. **Changes:** - Cron jobs are now stored per agent, run via `CRON.md` transient sub-agents, and support one-shot scheduling. - New `session_list` / `session_send` tools allow transient agents to message live sessions. - MCP filesystem, memory, and cron tools are consolidated into shared tool classes, with tests updated accordingly. ### Reviewed changes Copilot reviewed 61 out of 61 changed files in this pull request and generated 7 comments. <details> <summary>Show a summary per file</summary> | File | Description | | ---- | ----------- | | `tests/LlamaShears.UnitTests/Cron/JsonCronStoreTests.cs` | Updates cron store tests for per-agent storage and isolation. | | `tests/LlamaShears.UnitTests/Cron/CronSchedulerTests.cs` | Updates scheduler tests for ambient agent scope, sub-agent spawning, and one-shot behavior. | | `tests/LlamaShears.UnitTests/Api/Tools/ModelContextProtocol/Filesystem/WriteFileToolTests.cs` | Retargets write tests to consolidated `FileTools`. | | `tests/LlamaShears.UnitTests/Api/Tools/ModelContextProtocol/Filesystem/RegexReplaceFileToolTests.cs` | Retargets regex replace tests to consolidated `FileTools`. | | `tests/LlamaShears.UnitTests/Api/Tools/ModelContextProtocol/Filesystem/ReadFileToolTests.cs` | Retargets read tests to consolidated `FileTools`. | | `tests/LlamaShears.UnitTests/Api/Tools/ModelContextProtocol/Filesystem/GrepToolTests.cs` | Retargets grep tests to consolidated `FileTools`. | | `tests/LlamaShears.UnitTests/Api/Tools/ModelContextProtocol/Filesystem/DeleteFileToolTests.cs` | Retargets delete tests to consolidated `FileTools`. | | `tests/LlamaShears.UnitTests/Api/Tools/ModelContextProtocol/Filesystem/AppendFileToolTests.cs` | Retargets append tests to consolidated `FileTools`. | | `tests/LlamaShears.UnitTests/Agent/Core/TransientAgentTests.cs` | Updates auto-forward suppression tests from `message_send` to `session_send`. | | `tests/LlamaShears.UnitTests/Agent/Core/AgentHeartbeatServiceTests.cs` | Updates heartbeat tests to use prompted sub-agent spawning. | | `src/public/LlamaShears.Core.Abstractions/Agent/Sessions/SessionId.cs` | Adds helper for creating default or named session IDs. | | `src/public/LlamaShears.Core.Abstractions/Agent/PromptedAgentStartInformation.cs` | Adds shared start-information record for prompted transient agents. | | `src/public/LlamaShears.Core.Abstractions/Agent/ITransientAgentSpawner.cs` | Adds transient spawner abstraction. | | `src/public/LlamaShears.Core.Abstractions/Agent/IPromptedAgentSpawner.cs` | Adds prompted sub-agent spawner abstraction. | | `src/LlamaShears/content/templates/workspace/system/HEARTBEAT.md` | Updates heartbeat prompt to use `session_send`. | | `src/LlamaShears/content/templates/workspace/system/CRON.md` | Adds cron transient-agent system prompt. | | `src/LlamaShears/content/templates/workspace/system/context/CRON.md` | Adds cron runtime context template. | | `src/LlamaShears.Core/TransientAgent.cs` | Updates auto-forward suppression trigger to `session_send`. | | `src/LlamaShears.Core/PromptedAgentSpawner.cs` | Adds implementation for creating and optionally starting prompted sub-agents. | | `src/LlamaShears.Core/Cron/JsonCronStore.cs` | Changes cron persistence to per-agent JSON files. | | `src/LlamaShears.Core/Cron/ICronStore.cs` | Updates store interface for per-agent access. | | `src/LlamaShears.Core/Cron/ICronScheduler.cs` | Updates scheduler API to use ambient agent scope and one-shot scheduling. | | `src/LlamaShears.Core/Cron/CronServiceCollectionExtensions.cs` | Registers scoped scheduler and per-agent cron service. | | `src/LlamaShears.Core/Cron/CronScheduler.cs` | Implements ambient agent scoping, transient cron spawning, and one-shot disabling. | | `src/LlamaShears.Core/Cron/CronJobEdit.cs` | Adds editable one-shot field. | | `src/LlamaShears.Core/Cron/CronJob.cs` | Adds persisted one-shot flag. | | `src/LlamaShears.Core/Cron/CronExecutor.cs` | Removes global cron executor. | | `src/LlamaShears.Core/Cron/AgentCronService.cs` | Adds per-agent cron tick service. | | `src/LlamaShears.Core/CoreServiceCollectionExtensions.cs` | Registers prompted agent spawner. | | `src/LlamaShears.Core/AgentHeartbeatService.cs` | Refactors heartbeat spawning through prompted spawner. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Session/SessionTools.cs` | Adds session listing and session message sending tools. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Session/SessionSendResult.cs` | Adds session send result payload. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Session/SessionListResult.cs` | Adds session list result payload. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Session/SessionEntry.cs` | Adds session list entry payload. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/ModelContextProtocolServiceCollectionExtensions.cs` | Consolidates MCP tool registrations and adds session tools. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Memory/StoreMemoryTool.cs` | Removes standalone memory store tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Memory/SearchMemoryTool.cs` | Removes standalone memory search tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Memory/MemoryTools.cs` | Adds consolidated memory MCP tools. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Memory/IndexMemoryTool.cs` | Removes standalone memory index tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/WriteFileTool.cs` | Removes standalone write tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/RegexReplaceFileTool.cs` | Removes standalone regex replace tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/ReadFileTool.cs` | Removes standalone read tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/MoveFileTool.cs` | Removes standalone move tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/ListFilesTool.cs` | Removes standalone list tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/GrepTool.cs` | Removes standalone grep tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/FileTools.cs` | Adds consolidated filesystem MCP tools. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/DeleteFileTool.cs` | Removes standalone delete tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Filesystem/AppendFileTool.cs` | Removes standalone append tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Cron/TriggerCronTool.cs` | Removes standalone cron trigger tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Cron/ScheduleCronTool.cs` | Removes standalone cron schedule tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Cron/ListCronTool.cs` | Removes standalone cron list tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Cron/EditCronTool.cs` | Removes standalone cron edit tool. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Cron/CronTools.cs` | Adds consolidated cron MCP tools. | | `src/LlamaShears.Api/Tools/ModelContextProtocol/Cron/CancelCronTool.cs` | Removes standalone cron cancel tool. | | `src/LlamaShears.Api.Web/Services/ChatSession.cs` | Deduplicates rendered tool result bubbles by call ID. | | `docs/api/LlamaShears.Core.Abstractions/LlamaShears/Core/Abstractions/Agent/Sessions/SessionId.md` | Updates generated API docs for `SessionId`. | | `docs/api/LlamaShears.Core.Abstractions/LlamaShears/Core/Abstractions/Agent/PromptedAgentStartInformation.md` | Adds generated API docs for prompted start information. | | `docs/api/LlamaShears.Core.Abstractions/LlamaShears/Core/Abstractions/Agent/ITransientAgentSpawner.md` | Adds generated API docs for transient spawner abstraction. | | `docs/api/LlamaShears.Core.Abstractions/LlamaShears/Core/Abstractions/Agent/IPromptedAgentSpawner.md` | Adds generated API docs for prompted spawner abstraction. | | `docs/api/LlamaShears.Core.Abstractions/LlamaShears/Core/Abstractions/Agent/index.md` | Adds new public agent abstractions to API index. | | `docs/api/LlamaShears.Core.Abstractions/index.md` | Adds new public abstractions to package API index. | </details> --- 💡 <a href="/jasoncouture/llama-shears/new/main?filename=.github/instructions/*.instructions.md" class="Link--inTextBlock" target="_blank" rel="noopener noreferrer">Add Copilot custom instructions</a> for smarter, more guided reviews. <a href="https://docs.github.com/en/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot" class="Link--inTextBlock" target="_blank" rel="noopener noreferrer">Learn how to get started</a>.
@ -0,0 +26,4 @@
public async Task<CronScheduleResult> ScheduleCron(
[Description("Human-readable handle for this job. Used in list output and log messages.")] string name,
[Description("Cron expression in 5-field form (e.g. '0 9 * * 1-5' for 09:00 UTC weekdays).")] string cronExpression,
[Description("Instructions you (the scheduling agent) are giving to the future cron sub-agent. Write it as a directive, not as the literal output you want produced. Example: when the user says \"have it say hello in chat every minute\", the prompt is \"Send the message 'hello' to the user's chat channel via the message_send tool.\" — NOT just \"hello\". The sub-agent will read this string as its initial user-role turn and must figure out what tools to call to satisfy it.")] string prompt,
copilot-pull-request-reviewer[bot] (Migrated from github.com) commented 2026-05-25 00:09:13 -04:00

The prompt guidance still tells callers to use the removed message_send tool. This contradicts the new session_send flow and will cause cron prompts generated from this description to ask sub-agents for a tool that is no longer registered; update the example to use session_send/session_list.

The prompt guidance still tells callers to use the removed `message_send` tool. This contradicts the new `session_send` flow and will cause cron prompts generated from this description to ask sub-agents for a tool that is no longer registered; update the example to use `session_send`/`session_list`.
@ -0,0 +41,4 @@
var job = await _scheduler.ScheduleAsync(name, cronExpression, prompt, oneShot, cancellationToken);
return new CronScheduleResult(
Scheduled: true,
Job: new CronJobSummary(
copilot-pull-request-reviewer[bot] (Migrated from github.com) commented 2026-05-25 00:09:14 -04:00

The new oneShot flag is accepted when scheduling, but the returned job summary omits it (and the list/edit summaries do the same). Callers cannot verify whether a job is one-shot after scheduling or listing it; include OneShot in the cron summary payloads and populate it from CronJob.OneShot.

The new `oneShot` flag is accepted when scheduling, but the returned job summary omits it (and the list/edit summaries do the same). Callers cannot verify whether a job is one-shot after scheduling or listing it; include `OneShot` in the cron summary payloads and populate it from `CronJob.OneShot`.
@ -0,0 +111,4 @@
[Description("Cron job id (GUID, format-D).")] string id,
[Description("New human-readable name. Leave null to keep current.")] string? name = null,
[Description("New 5-field cron expression. Leave null to keep current.")] string? cronExpression = null,
[Description("New instruction text the future cron sub-agent will execute. Write it as a directive FROM YOU TO THE SUB-AGENT — describe what action to take and which tools to use, not the literal output you want. Example: \"Send 'hello' to the user's chat via message_send\" — NOT just \"hello\". Leave null to keep current.")] string? prompt = null,
copilot-pull-request-reviewer[bot] (Migrated from github.com) commented 2026-05-25 00:09:13 -04:00

This edit-tool description still points cron sub-agents at message_send, but that tool was removed and the transient auto-forward suppression now keys off session_send. Update the example so edited cron prompts don't preserve instructions for a nonexistent tool.

This edit-tool description still points cron sub-agents at `message_send`, but that tool was removed and the transient auto-forward suppression now keys off `session_send`. Update the example so edited cron prompts don't preserve instructions for a nonexistent tool.
@ -0,0 +125,4 @@
return new CronEditResult(JobId: null, Edited: false, Job: null, Error: $"Refused: '{id}' is not a valid GUID.");
}
var edit = new CronJobEdit(name, cronExpression, prompt, enabled);
copilot-pull-request-reviewer[bot] (Migrated from github.com) commented 2026-05-25 00:09:14 -04:00

CronJobEdit now supports OneShot, but this tool constructs the edit without ever accepting or forwarding that field, so users cannot toggle a job between recurring and one-shot after creation. Add a nullable oneShot parameter and pass it into CronJobEdit.

`CronJobEdit` now supports `OneShot`, but this tool constructs the edit without ever accepting or forwarding that field, so users cannot toggle a job between recurring and one-shot after creation. Add a nullable `oneShot` parameter and pass it into `CronJobEdit`.
@ -63,2 +47,4 @@
.WithTools<MemoryTools>()
.WithTools<CronTools>()
.WithTools<TodoTools>()
.WithTools<ShellTools>()
copilot-pull-request-reviewer[bot] (Migrated from github.com) commented 2026-05-25 00:09:13 -04:00

This policy block drops the previous write protection for AGENTS.md and removes the root TOOLS.md/TODO.md protections while consolidating tools. That makes the generic file write/append/regex-replace tools able to modify host-owned guidance and todo files that were previously protected; restore the removed ProtectionMode.Write/read/write/delete rules unless this security boundary is intentionally being redesigned with replacement safeguards.

This policy block drops the previous write protection for `AGENTS.md` and removes the root `TOOLS.md`/`TODO.md` protections while consolidating tools. That makes the generic file write/append/regex-replace tools able to modify host-owned guidance and todo files that were previously protected; restore the removed `ProtectionMode.Write`/read/write/delete rules unless this security boundary is intentionally being redesigned with replacement safeguards.
@ -0,0 +82,4 @@
Event.WellKnown.Channel.Message with { Id = target },
payload,
cancellationToken);
return new SessionSendResult(SessionId: target.ToString(), Sent: true);
copilot-pull-request-reviewer[bot] (Migrated from github.com) commented 2026-05-25 00:09:14 -04:00

session_send returns Sent = true for any parseable same-agent session id, even if that session is not currently registered in _instances. Because publishing to an unhandled event has no receiver, callers can get a success response while the message is dropped; check _instances.GetAllAgents() for the target session before publishing and return an error when it is not live.

`session_send` returns `Sent = true` for any parseable same-agent session id, even if that session is not currently registered in `_instances`. Because publishing to an unhandled event has no receiver, callers can get a success response while the message is dropped; check `_instances.GetAllAgents()` for the target session before publishing and return an error when it is not live.
@ -40,3 +41,4 @@
return [.. bucket.Values];
}
finally
{
copilot-pull-request-reviewer[bot] (Migrated from github.com) commented 2026-05-25 00:09:14 -04:00

Changing the store path from the existing Data/cron.json file to per-agent files under Data/cron/ makes previously scheduled jobs invisible after upgrade. Add a one-time migration that reads the old global file, partitions jobs by AgentId, persists them to the new per-agent files, and removes/archives the legacy file after success.

Changing the store path from the existing `Data/cron.json` file to per-agent files under `Data/cron/` makes previously scheduled jobs invisible after upgrade. Add a one-time migration that reads the old global file, partitions jobs by `AgentId`, persists them to the new per-agent files, and removes/archives the legacy file after success.
github-actions[bot] commented 2026-05-25 00:17:35 -04:00 (Migrated from github.com)
Package Line Rate Branch Rate Complexity Health
LlamaShears.Core.Eventing 91% 71% 90
LlamaShears.Core.Abstractions 57% 36% 492
LlamaShears.Api 28% 28% 501
LlamaShears.Provider.Ollama 44% 28% 188
LlamaShears.Core.Eventing.Extensions 100% 100% 1
LlamaShears.Core 46% 42% 1907
LlamaShears.Provider.Onnx.Embeddings 37% 38% 72
LlamaShears.Provider.OpenAI 66% 65% 229
LlamaShears.Api.Web 1% 1% 511
LlamaShears.Hosting 33% 21% 27
LlamaShears.Plugins 0% 100% 1
LlamaShears.Core.Eventing 85% 61% 90
LlamaShears 63% 47% 79
LlamaShears.Plugins.Host 34% 24% 36
LlamaShears.Core.Abstractions 45% 24% 492
LlamaShears.Api 6% 2% 501
LlamaShears.Provider.Ollama 3% 1% 188
LlamaShears.IntegrationTests.Fixtures 73% 57% 64
LlamaShears.Core.Eventing.Extensions 100% 100% 1
StrangeSoft.Plugins.Host 20% 21% 87
LlamaShears.Core 41% 26% 1907
LlamaShears.Provider.Onnx.Embeddings 3% 0% 72
LlamaShears.Provider.OpenAI 2% 0% 229
LlamaShears.Api.Web 18% 7% 511
LlamaShears.Hosting 26% 8% 27
LlamaShears.Plugins 0% 100% 1
LlamaShears.Core.Eventing 85% 61% 90
LlamaShears 63% 47% 79
LlamaShears.Plugins.Host 34% 24% 36
LlamaShears.Core.Abstractions 36% 22% 492
LlamaShears.Api 6% 3% 501
LlamaShears.Provider.Ollama 3% 1% 188
LlamaShears.IntegrationTests.Fixtures 70% 52% 64
LlamaShears.Core.Eventing.Extensions 100% 100% 1
StrangeSoft.Plugins.Host 20% 21% 87
LlamaShears.Core 30% 18% 1907
LlamaShears.Provider.Onnx.Embeddings 3% 0% 72
LlamaShears.Provider.OpenAI 2% 0% 229
LlamaShears.Api.Web 16% 6% 511
LlamaShears.Hosting 26% 8% 27
LlamaShears.Analyzers.CodeFixes 85% 69% 60
LlamaShears.Analyzers 88% 76% 199
Summary 46% (12685 / 38139) 36% (2848 / 11862) 12847
Package | Line Rate | Branch Rate | Complexity | Health -------- | --------- | ----------- | ---------- | ------ LlamaShears.Core.Eventing | 91% | 71% | 90 | ✔ LlamaShears.Core.Abstractions | 57% | 36% | 492 | ➖ LlamaShears.Api | 28% | 28% | 501 | ❌ LlamaShears.Provider.Ollama | 44% | 28% | 188 | ❌ LlamaShears.Core.Eventing.Extensions | 100% | 100% | 1 | ✔ LlamaShears.Core | 46% | 42% | 1907 | ❌ LlamaShears.Provider.Onnx.Embeddings | 37% | 38% | 72 | ❌ LlamaShears.Provider.OpenAI | 66% | 65% | 229 | ➖ LlamaShears.Api.Web | 1% | 1% | 511 | ❌ LlamaShears.Hosting | 33% | 21% | 27 | ❌ LlamaShears.Plugins | 0% | 100% | 1 | ❌ LlamaShears.Core.Eventing | 85% | 61% | 90 | ✔ LlamaShears | 63% | 47% | 79 | ➖ LlamaShears.Plugins.Host | 34% | 24% | 36 | ❌ LlamaShears.Core.Abstractions | 45% | 24% | 492 | ❌ LlamaShears.Api | 6% | 2% | 501 | ❌ LlamaShears.Provider.Ollama | 3% | 1% | 188 | ❌ LlamaShears.IntegrationTests.Fixtures | 73% | 57% | 64 | ➖ LlamaShears.Core.Eventing.Extensions | 100% | 100% | 1 | ✔ StrangeSoft.Plugins.Host | 20% | 21% | 87 | ❌ LlamaShears.Core | 41% | 26% | 1907 | ❌ LlamaShears.Provider.Onnx.Embeddings | 3% | 0% | 72 | ❌ LlamaShears.Provider.OpenAI | 2% | 0% | 229 | ❌ LlamaShears.Api.Web | 18% | 7% | 511 | ❌ LlamaShears.Hosting | 26% | 8% | 27 | ❌ LlamaShears.Plugins | 0% | 100% | 1 | ❌ LlamaShears.Core.Eventing | 85% | 61% | 90 | ✔ LlamaShears | 63% | 47% | 79 | ➖ LlamaShears.Plugins.Host | 34% | 24% | 36 | ❌ LlamaShears.Core.Abstractions | 36% | 22% | 492 | ❌ LlamaShears.Api | 6% | 3% | 501 | ❌ LlamaShears.Provider.Ollama | 3% | 1% | 188 | ❌ LlamaShears.IntegrationTests.Fixtures | 70% | 52% | 64 | ➖ LlamaShears.Core.Eventing.Extensions | 100% | 100% | 1 | ✔ StrangeSoft.Plugins.Host | 20% | 21% | 87 | ❌ LlamaShears.Core | 30% | 18% | 1907 | ❌ LlamaShears.Provider.Onnx.Embeddings | 3% | 0% | 72 | ❌ LlamaShears.Provider.OpenAI | 2% | 0% | 229 | ❌ LlamaShears.Api.Web | 16% | 6% | 511 | ❌ LlamaShears.Hosting | 26% | 8% | 27 | ❌ LlamaShears.Analyzers.CodeFixes | 85% | 69% | 60 | ✔ LlamaShears.Analyzers | 88% | 76% | 199 | ✔ **Summary** | **46%** (12685 / 38139) | **36%** (2848 / 11862) | **12847** | ❌ <!-- Sticky Pull Request Commentcoverage -->
Sign in to join this conversation.
No description provided.