110 Commits

Author SHA1 Message Date
EugeneTes
b30c71d30a feat(mcp): server launch plumbing and tool naming
Spec: the complete environment goes to the SDK with InheritEnvironmentVariables=false instead of nulls; the cache key also covers cwd and prefix.
2026-09-26 20:17:37 +02:00
EugeneTes
2ec941bf2a fix(telegram): address review findings
- /resume discards the inbox once the id names one conversation, before any await
- /stop discards input still waiting in the window
- a forwarded message is never a command or a pending answer
- ChatInbox.DrainAsync is an internal test helper
- tests: /resume and /stop drop buffered text, forwarded /new is content,
  a failing flush doesn't stop later batches; no wall-clock sleep in the drain test
- spec and user docs: timestamp exception for extension commands, command
  ordering, InputDebounce=0 wording
2026-09-26 20:15:57 +02:00
EugeneTes
5b7d593427 feat(mcp): Playwright preset and server resolution
Spec: the preset defaults --browser to chromium and drops --user-data-dir with --isolated; source order and the send-less prompt line are spelled out.
2026-09-26 20:15:35 +02:00
EugeneTes
149b932ca1 feat(google-calendar): /calendar_status and /calendar_disconnect, per-chat isolation tests 2026-09-26 20:15:16 +02:00
EugeneTes
e6b09fef1e feat(mcp): extension project and configuration
McpOptions/McpServerConfig/PlaywrightOptions with ApplyEnvironment (PLAYWRIGHT_* variables, quote-aware ExtraArgs split) and Validate; ShellWords; mcpServers from the user settings.json. New project in the solution and referenced by the extension tests.
2026-09-26 20:13:50 +02:00
EugeneTes
59d404ed08 feat(google-calendar): /calendar_connect device flow with automatic polling 2026-09-26 20:13:36 +02:00
EugeneTes
aaca3ad15a refactor(tools): move ToolExecutionException to Abstractions 2026-09-26 20:12:19 +02:00
EugeneTes
c2048a822e feat(google-calendar): create, update and delete with recurring scope resolution
Spec ยง7: the reference's calendar.ts is not in this repository, so the error and reply texts are now listed in the spec.
2026-09-26 20:11:47 +02:00
EugeneTes
edcfa690bd feat(google-calendar): calendar tool read actions over Calendar v3 2026-09-26 20:09:53 +02:00
EugeneTes
a30a4e4d03 feat(google-calendar): calendar time rules and rendering
Offset date-times are normalised to full RFC 3339 (seconds, T separator)
before they are sent; the spec's time rules say so.
2026-09-26 20:08:10 +02:00
EugeneTes
98faaf3a12 feat(telegram): send ๐ŸŸข Online. to the owner once after bot setup 2026-09-26 20:07:58 +02:00
EugeneTes
c3f1bbd463 feat(telegram): react to steering messages, discard the inbox on /new and /resume
A flushed batch that joins a running request gets a ๐Ÿ‘€ reaction on each message. /new and a successful /resume drop buffered and in-flight inbox parts. A forwarded message never answers a pending TelegramUi question. /help mentions replies and quotes.
2026-09-26 20:06:43 +02:00
EugeneTes
8baa79f074 feat(google-calendar): per-chat connections with cached, single-flight token refresh
Spec ยง4: connections are keyed by the chat's token directory; For(settings, scope).
2026-09-26 20:06:00 +02:00
EugeneTes
7bd3bb340c feat(telegram): route messages through the chat inbox with context headers
Spec: unhandled /commands bypass the inbox verbatim; the header zone comes from ChatRegistry.TimeZoneFor (session zone until ChatSettingsStore); only text and photos until the attachments spec.
2026-09-26 20:04:06 +02:00
EugeneTes
ccfa3c1ade feat(google-calendar): OAuth device flow, refresh and revoke client
Spec ยง3: DeviceAuthorization/PollStatus shapes, Success carries the access token, 5xx without error is a transport error, RefreshAsync returns AccessToken, RevokeAsync returns the failure reason (null on success).
2026-09-26 20:03:09 +02:00
EugeneTes
199ad47f64 feat(google-calendar): extension project, options and per-chat token store
Adds the GoogleCalendar extension project (Abstractions only, Private=false), GoogleCalendarOptions with
env fallbacks and a secret-free ToString, GoogleCalendarException/Messages, ChatKeys (scope -> safe directory
name), StoredToken and GoogleTokenStore (atomic write, owner-only on Unix, reads never throw), and an empty
GoogleCalendarConnections stub for Task 3. The test project gains the extension reference and
Microsoft.Extensions.TimeProvider.Testing 10.9.0.
2026-09-26 20:01:18 +02:00
EugeneTes
5a8c4e6b4b feat(telegram): inbound composer with the text and photo content step 2026-09-26 20:00:23 +02:00
EugeneTes
7eb9f84faa feat(telegram): InputDebounce option and message reactions 2026-09-26 19:58:55 +02:00
EugeneTes
8e31dc61b9 feat(telegram): per-chat inbox debouncer with ordered leases
Spec: ChatInbox takes an optional ILogger (dispose count, detached leases, flush failures).
2026-09-26 19:57:23 +02:00
EugeneTes
b82dd859c6 feat(telegram): inbound parts rendered as one prompt per batch 2026-09-26 19:52:59 +02:00
EugeneTes
d8c698b326 feat(telegram): reply, forward and timestamp header text 2026-09-26 19:51:36 +02:00
EugeneTes
76bda6cf55 fix(processes): address review findings
- Fill TimeZoneId only for a configured session/host zone with a resolvable IANA id
  (IExtensionHost.TimeZoneId); otherwise children inherit the host's TZ instead of TZ=Local/UTC.
- Host hardening logs a warning instead of throwing when libc/prctl can't be resolved.
- A hook or process_spawn handler returning a null or incomplete context fails the spawn with
  InvalidOperationException, so bash reports "process environment hook failed".
- Move tool-result redaction into the Agent slice with a behavioural no-change check.
- ProcessSpawnContext.ApplyTo(psi) sets cwd and replaces the environment; used by bash and ExecAsync.
- Split the Telegram process environment types into their own files; move the Extensions.Tests
  NoHostHardening under Support/; check the Claude Code assembly never references the spawn policy.
- Spec and docs: TZ inheritance, incomplete contexts, ApplyTo, async spawn handlers, root skip.
2026-09-26 19:32:47 +02:00
EugeneTes
694ef3594e feat(telegram): process environment policy, secret values and host hardening
Spec 6 now says this spec adds only the bot token to SecretValues; the speech key and Google client secret are added by the telegram-attachments and google-calendar specs.
2026-09-26 19:20:43 +02:00
EugeneTes
c8e1e796ef test(claude-code): provider environment ignores process spawn hooks 2026-09-26 19:18:28 +02:00
EugeneTes
4f97db0643 feat(tools): bash spawns through the process spawn policy 2026-09-26 19:17:04 +02:00
EugeneTes
187414a459 feat(extensions): session-bound process preparation and ProcessSpawnEvent
IExtensionContext.PrepareProcessAsync fills scope, session id and zone, runs the host policy, then ProcessSpawnEvent handlers (a throwing handler fails the spawn). IExtensionApi.Processes/Redactor are available during activation. ExecAsync spawns through the policy. Spec section 4 notes the default interface members and the fail-closed dispatch.
2026-09-26 19:15:26 +02:00
EugeneTes
52439b0dc4 feat(processes): redact known secret values from tool output
ISecretRedactor (Abstractions) and SecretRedactor (ordinal, longest first,
values under 8 characters ignored) registered as a singleton over
ProcessEnvironment.SecretValues. AgentSession.RunOneAsync redacts progress
snapshots, every result and error path before ToolResultEvent, and again
after the handlers run.
2026-09-26 19:12:16 +02:00
EugeneTes
76e0f8c0e2 feat(processes): make the host process non-dumpable on Linux
HostProcessHardening calls prctl(PR_SET_DUMPABLE, 0) through LibraryImport, once per process, from the ProcessSpawnPolicy constructor, and warns when DOTNET_EnableDiagnostics is not 0. Test projects consume the one-shot call with the flag off in a module initializer. A HardeningProbe helper backs a Linux-only /proc integration test.
2026-09-26 19:09:45 +02:00
EugeneTes
0000266ead feat(processes): process spawn contract and default policy
Add the Abstractions spawn contract (ProcessPurpose, ProcessSpawnRequest,
ProcessSpawnContext, ProcessSpawnHook, IProcessSpawnPolicy, ProcessSpawnEvent),
ProcessEnvironmentOptions with DefaultDeny and Validate, EnvironmentFilter,
ProcessSpawnPolicy, AgenticCoreOptions.ProcessEnvironment and the
TryAddSingleton registration in AddAgenticCore.

Spec: section 2 says Deny/Allow match case-insensitively and names Validate,
DefaultDeny and MinimumSecretLength; section 3 describes the factory
registration and that the constructor throws on validation errors.
2026-09-26 19:07:33 +02:00
EugeneTes
399762669e feat(agent): session time zone contract
Adds AgentSessionOptions.TimeZone, AgenticCoreOptions.DefaultTimeZone, AgentSession.TimeZone, IExtensionHost.TimeZone, IExtensionContext.TimeZone (default member returning TimeZoneInfo.Local) and TimeZoneIds.ToIana, ahead of the rest of scheduler spec section 8. Spec sentences added to process-environment-hook section 4 and scheduler section 8.
2026-09-26 19:05:45 +02:00
EugeneTes
f2027c9fde test(telegram): an expired session in another chat is logged in from the owner chat and resumes 2026-09-25 17:57:41 +00:00
EugeneTes
bbece220c8 fix(claude-code): /claude-code-login reports the outcome of a login it joined 2026-09-25 17:54:20 +00:00
EugeneTes
f620b33771 fix(claude-code): send the login link and the code question as one message 2026-09-25 17:53:14 +00:00
EugeneTes
fb7be219e5 fix(claude-code): a late expiry after a completed login replays without a second login 2026-09-25 17:52:21 +00:00
EugeneTes
7ed521f6a6 fix(telegram): a photo never answers a pending input question 2026-09-25 17:49:55 +00:00
EugeneTes
df0a518b97 feat(telegram): send Claude Code login links to the bot owner 2026-09-25 17:45:11 +00:00
EugeneTes
1aa9197d9c feat(claude-code): /claude-code-login command 2026-09-25 17:38:39 +00:00
EugeneTes
d43fa52e4a fix(claude-code): bound the login flow and cover the held-Start path 2026-09-25 17:32:41 +00:00
EugeneTes
f90bf862f4 feat(claude-code): pause an expired request, log in through the host UI and replay it 2026-09-25 17:25:43 +00:00
EugeneTes
521d391527 feat(claude-code): single-flight login coordinator 2026-09-25 17:11:15 +00:00
EugeneTes
aa859a0dcf feat(claude-code): headless claude auth login driver 2026-09-25 17:03:42 +00:00
EugeneTes
0c972480a8 feat(claude-code): classify an expired subscription session as login-required auth failure 2026-09-25 16:55:37 +00:00
EugeneTes
17ce025c57 feat(prompt): PERSONA.md and MEMORY.md in the system prompt; AGENTS.md or CLAUDE.md, not both 2026-09-25 16:36:49 +00:00
EugeneTes
b85b61677e fix(telegram): send answers complete instead of streaming; working message no longer lingers 2026-09-25 16:08:34 +00:00
EugeneTes
bb8c3f43aa feat(telegram): working status message with the last five tool calls 2026-09-25 15:09:43 +00:00
EugeneTes
308e1fbf8e feat(telegram): telegram bot host with connection recovery 2026-09-25 14:42:12 +00:00
EugeneTes
2321906719 feat(claude-code): pinned claude-opus-5-5 model 2026-09-25 14:42:12 +00:00
VolcanicAgenticCore
692992bb35 fix(abstractions): session events serialise to JSON (Partial no longer required) 2026-09-25 13:17:11 +00:00
EugeneTes
f9403aed77 feat(claude-code): provider extension and mcp proposal bridge 2026-09-25 13:14:58 +00:00
VolcanicAgenticCore
b66dd52cfc feat(anthropic): current model catalogue with adaptive thinking and summarized display 2026-09-25 12:49:35 +00:00