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 .github/workflows/marketplace.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
release_tag:
description: Checksummed GitHub release to verify before manual Marketplace upload
required: true
default: v0.2.6
default: v0.2.7
type: string

permissions:
Expand Down
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,29 @@
# Changelog

## 0.2.7 - 2026-08-28

### Added

- Publish supported workspace-local images, audio, video, and attachments
referenced by a shared Markdown file or folder. Hidden, unsupported, and
outside-workspace files remain private.
- Show a concise notice when referenced local files are omitted, with redacted
details available in the local DocFerry output channel.

### Fixed

- Accept the current DocFerry account-selection login contract while continuing
to reject untrusted origins, return paths, prompts, and query parameters.
- Use the same workspace identity and cross-surface share claim/update rules as
current DocFerry mainline, preventing duplicate ownership across VS Code,
Obsidian, CLI, and MCP.
- Hide the Folder Share creation action unless the signed-in service grants the
`docferry.publish.folder` capability. Existing folder history remains visible.

### Changed

- Updated the bundled and minimum Agent Kit version to `0.4.6`.

## 0.2.6 - 2026-08-19

### Fixed
Expand Down
9 changes: 5 additions & 4 deletions DEVELOPMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@ npm run build:helper
npm run package:vsix
```

`sync:agent-kit` refreshes the three pinned CLI runtime files when this directory
is built inside the private DocFerry monorepo. In the public release repository,
it verifies and preserves the vendored runtime recorded in
`runtime/PROVENANCE.json`.
`sync:agent-kit` refreshes the five pinned CLI runtime files when this directory
is built inside the DocFerry monorepo. From a standalone public checkout, set
`DOCFERRY_MONOREPO_ROOT` to a reviewed DocFerry mainline checkout when advancing
the vendored runtime. With no source checkout configured, the command verifies
and preserves the runtime recorded in `runtime/PROVENANCE.json`.

The generated VSIX is platform-specific because it contains a native helper and
its private runtime directory under `bin/helper/`. Never copy that directory
Expand Down
18 changes: 11 additions & 7 deletions PRIVACY.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Privacy

Last updated: August 12, 2026.
Last updated: August 28, 2026.

DocFerry for VS Code connects to the hosted DocFerry service at
`docferry.bondie.io`. The extension does not contain advertising SDKs or sell
Expand All @@ -12,10 +12,12 @@ personal information.
the extension version, operating-system description, and a random local
instance identifier. Authentication completes in the system browser.
- **Share Markdown:** the selected Markdown, title, workspace-relative source
path, content hash, and publication settings are sent only after confirmation.
path, content hash, publication settings, and supported referenced local
images, audio, video, or attachments are sent only after confirmation.
- **Share a folder:** visible Markdown in the selected folder, relative paths,
titles, hashes, and publication settings are sent only after confirmation.
Hidden files and paths outside the workspace are excluded.
titles, hashes, publication settings, and supported referenced local files are
sent only after confirmation. Hidden files, unsupported files, and paths
outside the workspace are excluded.
- **Import a DocFerry share:** the selected share URL and optional password are
sent to retrieve the document and assets.
- **Detailed note:** the confirmed public source URL is sent to DocFerry's
Expand All @@ -38,9 +40,11 @@ the extension can resume after reload. It does not store the source URL or
generated Markdown there, and clears the record after save, cancellation, or a
terminal failure.

The DocFerry output channel records operation names and redacted error details.
It does not intentionally log session tokens, imported content, shared Markdown,
share URLs, titles, or workspace paths.
The DocFerry output channel records operation names, redacted error details, and
local warnings when referenced files cannot be published. A warning may contain
a redacted local file name or path for troubleshooting, but never the file
content. The channel does not intentionally log session tokens, imported
content, shared Markdown, share URLs, or titles, and remains on the device.

## Controls

Expand Down
14 changes: 9 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,11 @@ DocFerry works with ordinary folders and repositories; Obsidian is optional.
saves ordinary public URLs, and creates detailed notes for supported sources
when the connected account has Pro access.
- **Share Markdown** from the editor or Explorer after a clear confirmation.
- **Share a folder** as one navigable collection with Pro access. Hidden files
and paths outside the selected workspace stay excluded.
Supported workspace-local images, audio, video, and attachments referenced by
the note are included with it.
- **Share a folder** as one navigable collection with Pro access. Supported
local files referenced by its notes are included; hidden, unsupported, and
outside-workspace files stay private.
- **Manage shares** in the Activity Bar: open, copy, update, stop, and remove
stopped history records.
- **Open DocFerry Dashboard** with a short-lived product handoff. Account and
Expand Down Expand Up @@ -67,9 +70,10 @@ Imported notes are written to `DocFerry Imports` by default. Change
## Privacy and security

DocFerry reads only content selected for an action. Publishing sends the chosen
Markdown or visible folder documents to `docferry.bondie.io`; Advanced Import
sends the confirmed public URL for hosted processing. The extension stores no
Auth0, Stripe, SynapseHub operator, or AI-provider credential.
Markdown or visible folder documents and supported referenced local files to
`docferry.bondie.io`; Advanced Import sends the confirmed public URL for hosted
processing. The extension stores no Auth0, Stripe, SynapseHub operator, or
AI-provider credential.

Workspaces must be trusted and backed by a local filesystem. Commands use
argument arrays with `shell: false`, paths are contained to the chosen workspace,
Expand Down
3 changes: 3 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ way to follow up. Do not include active credentials or private user content.
- The bundled helper is version-checked before use and starts with `shell: false`.
- Workspace paths are canonicalized, bounded to an open workspace, and checked
against symbolic-link escapes.
- Referenced local files are resolved only inside the selected workspace;
hidden and unsupported files are excluded, and references inside code or
comments are not treated as publishable assets.
- Authentication uses a short-lived Device Code approval in the system browser.
- Publishing, stopping links, and deleting stopped history require explicit
confirmation. The server independently enforces ownership and state.
Expand Down
8 changes: 5 additions & 3 deletions docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,15 @@ separate entitlement model.
| Import DocFerry share | Complete | Saves into the selected workspace |
| Save ordinary public link | Complete | No remote source fetch |
| Advanced Import | Complete | Pro capability, provider contract, confirmation |
| Share Markdown | Complete | Free/Pro server limits |
| Share visible Markdown folder | Complete | Pro capability and atomic revision |
| Share Markdown and local assets | Complete | Free/Pro server limits; workspace-contained supported files |
| Share visible Markdown folder and local assets | Complete | Server capability, atomic revision, workspace containment |
| Open/copy/update/stop share | Complete | Note and folder variants |
| Delete stopped history | Complete | Separate permanent confirmation |
| Plan and usage | Complete | Notes, folders, and detailed-note monthly usage |
| Full Obsidian theme capture | Not applicable | Requires Obsidian rendering context |
| Agent conversation slash commands | Separate Agent Kit | CLI/MCP/Skill distribution, not VS Code Chat transcript access |

The extension uses returned limits and feature gates and cannot grant or mutate
Folder Share creation is shown only when the signed-in service grants
`docferry.publish.folder`; existing folder history remains visible. The
extension uses returned limits and feature gates and cannot grant or mutate
server-managed access roles.
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# DocFerry VS Code 0.2.7 mainline sync evidence

Date: 2026-08-28

## Reviewed sources

- DocFerry mainline: `f78eae80a808f5f04e31d651a1db287b1e2d0a13`
- Public VS Code base: `5c0fa39a632dd4be219e5b1f51917007637ca6e0`
- Bundled Agent Kit: `0.4.6`
- Candidate extension: `0.2.7`

The review covered DocFerry `0.0.68` through the `0.0.72` Community review
candidate, Agent Kit `0.4.5` workspace identity, Agent Kit `0.4.6` local asset
publication, the production Device Code login response, and the public
Marketplace extension.

## Closed drift

- The extension accepts the current product-owned account-selection login URL
and rejects alternate origins, prompts, return paths, and extra parameters.
- The bundled helper uses the current cross-surface workspace identity and
claim/update contract shared by Obsidian, CLI, and MCP.
- Note and folder shares publish supported workspace-local images, audio,
video, and attachments. Hidden, unsupported, missing, and outside-workspace
files remain private.
- Omitted local references produce a concise user notice and redacted local
troubleshooting output.
- Folder Share creation follows the authoritative
`docferry.publish.folder` capability. Existing history remains visible.
- Public privacy, security, feature, development, and Marketplace copy now
describe the same behavior as the package.

Checkout contract and hosted Dashboard navigation changes remain owned by the
DocFerry web/server surface and require no separate VS Code implementation.
Obsidian theme capture remains inapplicable outside Obsidian.

## Verification

- TypeScript check and bundle: passed.
- Contract tests: `21/21` passed.
- Extension Host test: passed on VS Code `1.96.4`.
- Marketplace release verifier tests: `4/4` passed.
- Public source verifier: passed, `61` source files, Agent Kit `0.4.6`.
- Agent Kit tests: `116` passed plus `20` subtests.
- npm audit: zero vulnerabilities.
- Production Device Code start returned the expected
`https://docferry.bondie.io/v0/auth/login` account-selection URL and the
extension trust contract accepted it.
- Isolated VSIX install: passed; signed-out Activity Bar showed a visible
**Connect Bondie account** system-browser action and no Folder Share creation
action.
- macOS arm64 VSIX: `14,665,895` bytes.
- VSIX SHA-256:
`e9e9bed95aeceffd5fb7af675a1dcccc32e88fdb963f9830f2f0c3f6554b1913`.
- Bundled helper: `docferry 0.4.6`; production HTTPS health passed.

## Distribution boundary

The Visual Studio Marketplace still serves `bondie.docferry@0.2.4` at the time
of this review. Version `0.2.7` must pass public repository CI, be built for all
release targets, and be uploaded through the authenticated Bondie publisher
page before it can be described as the Marketplace version.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "docferry",
"displayName": "DocFerry",
"description": "Save links, create detailed notes, and share Markdown files or folders from VS Code.",
"version": "0.2.6",
"version": "0.2.7",
"publisher": "bondie",
"author": {
"name": "Bondie",
Expand Down Expand Up @@ -90,7 +90,8 @@
{
"command": "docferry.shareFolder",
"title": "DocFerry: Share Folder",
"icon": "$(folder-opened)"
"icon": "$(folder-opened)",
"enablement": "docferry.folderShareEnabled && isWorkspaceTrusted"
},
{
"command": "docferry.showMembership",
Expand Down Expand Up @@ -230,7 +231,7 @@
},
{
"command": "docferry.shareFolder",
"when": "explorerResourceIsFolder && isWorkspaceTrusted",
"when": "explorerResourceIsFolder && isWorkspaceTrusted && docferry.folderShareEnabled",
"group": "docferry@2"
}
],
Expand Down
10 changes: 6 additions & 4 deletions runtime/PROVENANCE.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@
"canonical_source": "agent-kit/src/docferry_agent_kit",
"component": "docferry-agent-kit-cli-runtime",
"files": {
"__init__.py": "6c111b140917e8e2f6f50a62f7a3c998c88141cbb896a5a012232c89702da52b",
"cli.py": "e746b8cd7783988c8da0b369ea9cebbb12d921ff470afba070624b78710feee5",
"conversation.py": "421e065a0fae11c0024a8089d0a6bebcc3bc9816664aa083719cc9c2889f27d7"
"__init__.py": "b8e0ef8b4e686a20cff354a4cb5a06e844703da28625cb64e08f4d3077cca5a8",
"cli.py": "302d14052f36d8129d6757f8dda3ebae61f9f0d1271b308fb260836f3993c940",
"conversation.py": "421e065a0fae11c0024a8089d0a6bebcc3bc9816664aa083719cc9c2889f27d7",
"local_assets.py": "5228332c524e02ca15aa90d810236828e95558b71360a175e658cea8644be639",
"workspace_identity.py": "9446f4e55e3d5017504a16ae23e8a7661fd254a217bb9645719d0c5725f6052b"
},
"schema_version": 1,
"version": "0.4.4"
"version": "0.4.6"
}
2 changes: 1 addition & 1 deletion runtime/src/docferry_agent_kit/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""DocFerry CLI and MCP Agent integration kit."""

__version__ = "0.4.4"
__version__ = "0.4.6"
Loading