89 Commits

Author SHA1 Message Date
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
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
f39b8a84c1 docs(plan): mcp-client-playwright implementation plan 2026-09-26 20:10:36 +02:00
EugeneTes
0c1778e741 docs(telegram): message context, grouping and presence
InputDebounce config row, the Using it section (replies, quotes, forwards, local-time header, grouping window, eyes reaction, online message, forwards never count as the login code), the Inbound paragraph in CLAUDE.md, and spec status set to implemented.
2026-09-26 20:09:20 +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
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
6b3ee82489 docs(plan): google-calendar implementation plan 2026-09-26 19:59:30 +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
651924544a docs(plan): telegram-message-context implementation plan 2026-09-26 19:49:01 +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
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
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
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
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
df0a518b97 feat(telegram): send Claude Code login links to the bot owner 2026-09-25 17:45:11 +00:00
EugeneTes
c7edc1d802 docs(spec): login timeouts and owner-unreachable wording 2026-09-25 17:28:38 +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
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
EugeneTes
8a97a9890f docs: telegram host design 2026-09-25 14:29:32 +00:00
VolcanicAgenticCore
b66dd52cfc feat(anthropic): current model catalogue with adaptive thinking and summarized display 2026-09-25 12:49:35 +00:00
VolcanicAgenticCore
424027cf86 test: end-to-end bash round trip; docs: record spec deviations 2026-09-25 12:37:06 +00:00
VolcanicAgenticCore
018c92af49 docs: user documentation and headless sample host 2026-09-25 12:36:24 +00:00
VolcanicAgenticCore
0a5a492f73 docs: add implementation plan 2026-09-25 11:55:12 +00:00
VolcanicAgenticCore
992f12326e docs: add VolcanicAgenticCore design spec 2026-09-25 11:53:08 +00:00