226 Commits

Author SHA1 Message Date
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
6b3ee82489 docs(plan): google-calendar implementation plan 2026-09-26 19:59:30 +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
651924544a docs(plan): telegram-message-context implementation plan 2026-09-26 19:49:01 +02:00
EugeneTes
29a41e8882 Merge branch 'feat/process-environment-hook' 2026-09-26 19:33:54 +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
5f33d139b3 docs(processes): process spawn policy, hardening and redaction
extensions.md: api.Processes and api.Redactor, ExecAsync on the policy,
ProcessSpawnEvent, ctx.TimeZone and PrepareProcessAsync, and a Spawning
processes section. architecture.md: Processes slice, the Abstractions
contract, a Processes and secrets section, and where the loop redacts.
CLAUDE.md: Processes slice and bullet.

Spec: status implemented (scheduler and MCP spawners come with their specs);
a hook returning null fails the spawn; test projects consume the one-shot
hardening from a module initializer; the Hardener seam; 'allow: none' in the
Telegram log line.
2026-09-26 19:23:09 +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
f3590cecd2 docs(plan): process-environment-hook implementation plan 2026-09-26 19:03:38 +02:00
EugeneTes
e169124de1 Merge branch 'main' of https://gitea.tes.gd/admin/VolcanicAgenticCore 2026-09-26 18:42:12 +02:00
EugeneTes
0922a4abb0 chore: decline release notes for this project 2026-09-26 16:32:23 +00:00
EugeneTes
fe692844a1 docs(spec): designs for VolcanicSecretary feature parity
Seven draft specs: scheduler (reminders, scheduled prompts, watcher
scripts, per-chat time zones), Telegram attachments (files, voice
transcription, send tool, IChatChannel), Telegram message context
(reply/forward headers, 600 ms grouping, timestamps, reactions, online
notice), MCP client with a Playwright preset, per-chat Google Calendar,
process environment hook (secret scrubbing, redaction, non-dumpable
host) and Docker/Coolify deployment.
2026-09-26 16:03:47 +00:00
EugeneTes
13b0965d63 docs: CLAUDE.md with project overview, commands and architecture 2026-09-26 08:33:46 +00:00
EugeneTes
ddbed79e45 Merge branch 'main' of https://gitea.tes.gd/admin/VolcanicAgenticCore 2026-09-25 20:27:52 +02:00
EugeneTes
6e89acf348 docs(spec): match the re-login spec to the implementation 2026-09-25 17:58:27 +00:00
EugeneTes
d20385153b docs: the owner's pending login prompt, one-message link, joined logins and stale expiries 2026-09-25 17:57:58 +00: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
c7edc1d802 docs(spec): login timeouts and owner-unreachable wording 2026-09-25 17:28:38 +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
61743d8e3a docs(plan): Claude Code re-login implementation plan 2026-09-25 16:51:28 +00:00
EugeneTes
ec97f50fdd docs(spec): Claude Code re-login through the host UI 2026-09-25 16:48:33 +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
16a5b83076 Merge branch 'main' of https://gitea.tes.gd/admin/VolcanicAgenticCore 2026-09-25 18:15:54 +02:00
EugeneTes
b85b61677e fix(telegram): send answers complete instead of streaming; working message no longer lingers 2026-09-25 16:08:34 +00:00