Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .arc42/03-context-and-scope.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ Three cross-domain access channels plus one optional platform component are in s
|---|---|
| **Desktop App** | Local-first full client; runs all fetch workers and manages all domains. |
| **Mobile App** | Mobile-first, offline-first capture; syncs via cloud. |
| **IDE Extensions** | VS Code & Visual Studio integration for backlog/knowledge browsing and capture. |
| **IDE Extensions** | VS Code, Visual Studio & GitHub Copilot App integration for backlog/knowledge browsing and capture. |
| **Cloud Service** (optional) | Thin sync/coordination layer: device sync, webhook forwarding, push, machine registry. |


Expand Down
22 changes: 15 additions & 7 deletions .arc42/05-building-block-view.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ C4Container
System_Boundary(b0, "Prompt Backlog") {
Container(desktop, "Desktop App", "WinUI 3, Markdown + JSON", "Local-first Windows client — runs all fetch workers and manages all domains")
Container(mobile, "Mobile App", ".NET MAUI / Blazor Hybrid, JSON", "Capture-first mobile client with offline storage")
Container(ide, "IDE Extensions", "TypeScript / C#", "VS Code and Visual Studio integrations")
Container(ide, "IDE Extensions", "TypeScript / C#", "VS Code, Visual Studio, and GitHub Copilot App integrations")
Container(cloud, "Cloud Service", ".NET / ASP.NET Core", "Thin optional sync layer: device sync, webhook forwarding, push, PC registry")
ContainerDb(localStore, "Local Storage", "Markdown files, JSON", "Desktop canonical data store — markdown is source of truth")
ContainerDb(cloudDb, "Cloud Database", "Cosmos DB / PostgreSQL", "Sync state, webhook events, machine registry")
Expand All @@ -41,7 +41,7 @@ C4Container

Rel(user, desktop, "Uses — capture, backlog, knowledge, monitoring", "local")
Rel(user, mobile, "Captures on mobile", "touch / voice")
Rel(user, ide, "Browses backlog and knowledge", "IDE commands")
Rel(user, ide, "Browses backlog and knowledge; captures from IDE and Copilot sessions", "IDE commands / session prompts")

Rel(desktop, localStore, "Reads and writes", "file system")
Rel(desktop, github, "Syncs issues", "HTTPS / gh CLI")
Expand Down Expand Up @@ -274,13 +274,17 @@ graph TB

```meta
status: active
related: [".arc42/06-runtime-view.md#ide-context-aware-capture"]
related: [".arc42/06-runtime-view.md#ide-context-aware-capture", ".arc42/06-runtime-view.md#copilot-app-session-capture"]
```

Repo-aware integrations for VS Code and Visual Studio. Serve Inbox (capture intake),
Backlog Management, and Second Brain browsing. IDE packaging, extension-host APIs, and
release cadence are architecture concerns; domain lifecycle rules stay with the
owning domains.
Repo-aware integrations for VS Code and Visual Studio, plus GitHub Copilot App sessions
running one local agent process per worktree. These hosts serve Inbox (capture intake),
Backlog Management, and Second Brain browsing. Packaging and host APIs are architecture
concerns; domain lifecycle rules stay with the owning domains.

The GitHub Copilot App path is a peer IDE-class host, not a new container: it reuses
the same local capture/query services and local markdown + API paths already used by
the desktop and extension adapters.

```mermaid
graph TB
Expand Down Expand Up @@ -322,6 +326,10 @@ graph TB
Capture -->|Sync| API
```

Note: this capture-channel integration is distinct from Dev PC Management
`Copilot Session Tracking`. Tracking records active/archived session lifecycle for
compliance/monitoring; capture uses session context to create backlog/knowledge items.

## Cloud Service

```meta
Expand Down
33 changes: 33 additions & 0 deletions .arc42/06-runtime-view.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,39 @@ sequenceDiagram
IDE-->>ME: Confirmation + deep-link to item
```

## Copilot App Session Capture

```meta
status: active
related: [".arc42/05-building-block-view.md#ide-extensions", ".domain/capture/domain.md#domain-service-source-adapter", ".domain/capture/features.md#sub-feature-copilot-app-session-capture"]
```

A GitHub Copilot App session can capture a backlog follow-up or knowledge note using
local session metadata (`session_id`, `worktree_path`, `branch`) via
`.domain/capture/domain.md#domain-service-source-adapter`, reusing the same local
capture pipeline as IDE extensions and desktop workers.

```mermaid
sequenceDiagram
actor ME
participant Copilot as GitHub Copilot App Session
participant Adapter as Source Adapter
participant Capture as Capture Service
participant Store as Local Markdown
participant API as Backend API

ME->>Copilot: /capture "follow-up"
Copilot->>Adapter: Build source metadata (session_id, worktree_path, branch)
Adapter->>Capture: createItem(title, body, source=ide, metadata)
Capture->>Store: Write to local markdown cache
Capture->>API: POST /inbox/items
API-->>Capture: 201 Created (id)
Capture-->>Copilot: Item created (id, deep_link)
Copilot-->>ME: Confirmation + deep-link

Note over Copilot,API: Local-first path only; no credential forwarding through Cloud Service
```

## Repository Baseline Scan and Health Signal

```meta
Expand Down
9 changes: 8 additions & 1 deletion .arc42/08-crosscutting-concepts.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ uniformly. Shared data types define the vocabulary exchanged between them.

```meta
status: active
related: [".arc42/02-constraints.md#technical-constraints", ".arc42/06-runtime-view.md#state-sync-and-webhook-forwarding"]
related: [".arc42/02-constraints.md#technical-constraints", ".arc42/06-runtime-view.md#state-sync-and-webhook-forwarding", ".arc42/06-runtime-view.md#copilot-app-session-capture", ".domain/capture/domain.md#domain-service-source-adapter"]
```

- **Local-first, markdown canonical** — the desktop's markdown files are the single
Expand All @@ -23,6 +23,13 @@ related: [".arc42/02-constraints.md#technical-constraints", ".arc42/06-runtime-v
- **Optional cloud sync** for multi-device. Conflict resolution:
**new items always create; edits are last-write-wins**.
- **Desktop works fully standalone**; the cloud connection is purely additive.
- **Local credential handling includes Copilot sessions** — desktop workers and
GitHub Copilot App session adapters both run on the same machine and pass local
context (`session_id`, `worktree_path`, `branch`) without routing credentials
through the optional Cloud Service.
- **Copilot capture vs. Copilot session tracking** — capture uses session context to
create Inbox/Backlog/Knowledge items, while Dev PC Management tracking is a
separate compliance/monitoring concern.

## Tagging and Organization

Expand Down
9 changes: 6 additions & 3 deletions .domain/capture/dependencies.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ status: draft
| Depends on (context/module) | DDD pattern | Integration mechanism | Contract | Why |
|---|---|---|---|---|
| [Inbox](../inbox/domain.md#aggregate-inbox-item) | Customer/Supplier (Capture = customer of Inbox intake) | Async handoff into the Inbox intake pipeline | `.domain/capture/domain.md#domain-event-itemcaptured` | Capture depends on the Inbox accepting normalized captures and taking ownership of the resulting Inbox Item lifecycle. |
| External sources (YouTube, websites/RSS, IMAP email, browser, IDE host) | ACL | Polling / event intake via source adapters | `.domain/capture/domain.md#domain-service-source-adapter` | Raw content is acquired from third-party systems and normalized behind adapters so their formats never leak downstream. |
| External sources (YouTube, websites/RSS, IMAP email, browser, IDE-class hosts: VS Code, Visual Studio, GitHub Copilot App) | ACL | Polling / event intake via source adapters | `.domain/capture/domain.md#domain-service-source-adapter` | Raw content is acquired from third-party systems and normalized behind adapters so their formats never leak downstream. |

## Inbound dependents (known)

Expand All @@ -24,7 +24,10 @@ status: draft
## Notes

- The `Source Adapter` service is an anti-corruption layer: external formats
(video metadata, RSS diffs, email MIME, IDE selections) are translated into the
Capture shape so no external model crosses the boundary.
(video metadata, RSS diffs, email MIME, IDE/agentic-session selections) are
translated into the Capture shape so no external model crosses the boundary.
- The GitHub Copilot App adapter runs locally against the session's worktree,
like the IDE extension adapters; it introduces no new external credential
surface beyond what the editor adapters already have.
- Delivery to Inbox is intentionally one-way and fire-and-forget; Capture never
reads Inbox state.
26 changes: 18 additions & 8 deletions .domain/capture/domain.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ status: draft

Capture owns **how items enter the system**. It acquires raw content from any
source — mobile devices, automated monitors, email subscriptions, web clippers,
IDE extensions, and manual import — normalizes it, and delivers it to the
IDE-class hosts (IDE extensions and agentic session tools such as the GitHub
Copilot App), and manual import — normalizes it, and delivers it to the
[Inbox](../inbox/domain.md#aggregate-inbox-item) as an Inbox Item. Once an item
is delivered, Capture's responsibility ends.

Expand Down Expand Up @@ -39,9 +40,11 @@ carried by the `Source Metadata` value object and the `Capture Source` enum.
#### Source Metadata

Source-specific context attached to a capture, e.g. YouTube channel name,
clipped `source_url`, email sender, or IDE file path / line / branch. Equality
is by value. Its concrete keys depend on the `Capture Source`; it is opaque to
downstream domains except as provenance.
clipped `source_url`, email sender, or IDE-class file path / line / branch. For
captures from an agentic session tool (e.g. the GitHub Copilot App), the same
`ide` shape also carries a `session_id` and the local worktree path in place of
an open-editor selection. Equality is by value. Its concrete keys depend on the
`Capture Source`; it is opaque to downstream domains except as provenance.

#### Tag

Expand All @@ -59,7 +62,9 @@ Origin type of a capture. Values and meaning:
- `website` — a change detected by the website monitor.
- `email` — a newsletter/summary ingested from an IMAP inbox.
- `web_clipper` — content clipped by the browser extension/bookmarklet.
- `ide` — content captured from a selection in an IDE extension adapter.
- `ide` — content captured from an IDE-class host: a selection in an IDE
extension adapter (VS Code, Visual Studio) or an in-session capture command
from an agentic session tool such as the GitHub Copilot App.
- `manual` — drag-and-drop or pasted content imported by hand.

## Domain Service: Source Adapter
Expand All @@ -73,9 +78,14 @@ Coordinates acquisition for a given `Capture Source`: polling or event intake,
retry with exponential backoff, offline-first buffering with background sync,
and normalization of raw content into a Capture. Each source (mobile monitor,
YouTube monitor, website monitor, email ingestion, web clipper, IDE adapter,
manual import) is a concrete adapter behind this service. The behavior does not
belong on the Capture aggregate because it spans external I/O, scheduling, and
transport concerns that are outside a single capture's consistency boundary. Invocation semantics: command-/scheduler-invoked application service behind per-source adapters.
GitHub Copilot App session adapter, manual import) is a concrete adapter behind
this service. The GitHub Copilot App adapter runs as a peer of the IDE
extension adapters: it is invoked from within a Copilot App session against
the session's local worktree, so it reads/writes through the same local-first
path as the Desktop App and never routes credentials through the optional
Cloud Service. The behavior does not belong on the Capture aggregate because it
spans external I/O, scheduling, and transport concerns that are outside a
single capture's consistency boundary. Invocation semantics: command-/scheduler-invoked application service behind per-source adapters.

## Domain Service: Delivery

Expand Down
20 changes: 18 additions & 2 deletions .domain/capture/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,24 @@ preserved.
status: draft
```

Adapter that lets IDE extensions trigger a capture from selected code/text,
attaching file path, line number, and branch as context metadata.
Adapter that lets IDE-class hosts trigger a capture of selected code/text or an
in-session note, attaching file path, line number, and branch (or session and
worktree context) as context metadata. Covers both editor extensions (VS Code,
Visual Studio) and agentic session tools (GitHub Copilot App).

### Sub-feature: Copilot App session capture

```meta
status: draft
related: [.domain/capture/domain.md#domain-service-source-adapter]
```

Let a GitHub Copilot App session capture a backlog idea, follow-up, or
knowledge note directly from within its agent conversation, attaching the
session id, local worktree path, and current branch as context metadata. Runs
against the session's local worktree only, so no source credential leaves the
machine — the same local-first constraint that applies to the desktop's
inbound polling workers.

## Feature: Manual import

Expand Down
5 changes: 4 additions & 1 deletion .domain/capture/naming.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ related: [.domain/capture/domain.md#capture-source]

Which channel produced a capture (mobile, youtube, website, email, web_clipper,
ide, manual). This is a published enum shared with the Inbox — both contexts use
the same value set (see `.domain/inbox/naming.md#term-capture-source`).
the same value set (see `.domain/inbox/naming.md#term-capture-source`). The
`ide` value covers every IDE-class host that captures via the Source Adapter's
IDE-family adapters: VS Code, Visual Studio, and the GitHub Copilot App (an
agentic session-management tool treated as a peer of the editor extensions).

## Term: Source Adapter

Expand Down