Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
5b064d6
Update repository links in README.md
AxaySharma Jun 4, 2026
bcdd73c
Merge branch 'main' into develop
AxaySharma Jun 4, 2026
e5bde1e
feat: add SQLite database layer
AxaySharma Jun 4, 2026
7184b6f
fix: update CI workflow for Node.js 24 + fix better-sqlite3 compilation
AxaySharma Jun 4, 2026
bf2836d
fix: correct content type annotation in verifyChain
AxaySharma Jun 4, 2026
bc56c8e
chore: update lockfile with typescript dependency
AxaySharma Jun 4, 2026
d1b0020
Merge pull request #2 from wrkmark/fix/ci-workflow
AxaySharma Jun 4, 2026
9853dc7
fix: overwrite CI workflow with correct version
AxaySharma Jun 4, 2026
628715c
Merge branch 'develop' into feature/database-layer
AxaySharma Jun 4, 2026
5cd2fed
Merge pull request #1 from wrkmark/feature/database-layer
AxaySharma Jun 4, 2026
f08d8ea
chore: add CODEOWNERS — all changes require founder review
AxaySharma Jun 4, 2026
b1d7329
Merge pull request #3 from wrkmark/chore/add-codeowners
AxaySharma Jun 4, 2026
ed4cfdd
feat: add SignalExtractor — behavioral feature computation
AxaySharma Jun 9, 2026
4f127e7
Merge pull request #4 from wrkmark/feature/signal-extractor
AxaySharma Jun 9, 2026
e1cac87
feat: add SessionManager — central observation orchestrator
AxaySharma Jun 9, 2026
1112973
Merge pull request #5 from wrkmark/feature/session-manager
AxaySharma Jun 9, 2026
e49b221
feat: add VSCodeCollector — first real behavioral collector
AxaySharma Jun 9, 2026
f1e2b10
Merge pull request #6 from wrkmark/feature/vscode-collector
AxaySharma Jun 9, 2026
c839ebd
feat: add Chrome extension — AI tool detection only
AxaySharma Jun 9, 2026
5bf9683
Merge pull request #7 from wrkmark/feature/chrome-extension
AxaySharma Jun 9, 2026
f92f9ab
feat: public API + createObserver() factory function
AxaySharma Jun 9, 2026
d332aa3
Merge pull request #8 from wrkmark/feature/public-api
AxaySharma Jun 9, 2026
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
11 changes: 11 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Wrkmark Observer — Code Owners
# Every PR touching these files requires founder approval

# Privacy-critical files — must review every single change
AGENTS.md @AxaySharma
WHAT_WE_SEE.md @AxaySharma
src/processor/anonymizer.ts @AxaySharma
src/privacy/ @AxaySharma

# Everything else
* @AxaySharma
35 changes: 25 additions & 10 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,47 @@ on:
pull_request:
branches: [main, develop]

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

jobs:
test:
name: Run tests
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v4.2.2

- uses: actions/setup-node@v4
- uses: pnpm/action-setup@v4
with:
node-version: '22'
version: 9

- uses: pnpm/action-setup@v3
- uses: actions/setup-node@v4.4.0
with:
version: 9
node-version: '22'
cache: 'pnpm'

- name: Install system dependencies for better-sqlite3
run: sudo apt-get install -y python3 make g++

- run: pnpm install --build-from-source
- name: Install dependencies
run: pnpm install

- run: pnpm typecheck
- name: Rebuild better-sqlite3 for CI environment
run: pnpm rebuild better-sqlite3

- run: pnpm test
- name: Type check
run: pnpm typecheck

- name: Run tests
run: pnpm test

privacy-audit:
name: Privacy constraint check
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v4.2.2

- name: Check for forbidden patterns
run: |
Expand All @@ -48,4 +63,4 @@ jobs:
echo "Privacy check FAILED"
exit 1
fi
echo "✅ Privacy check passed"
echo "✅ Privacy check passed"
44 changes: 40 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
<h1>wrkmark-observer</h1>
<p><strong>Open-source behavioral observation engine for Wrkmark</strong></p>
<p>
<a href="https://github.com/wrkmark-hq/wrkmark-observer/actions">
<img src="https://github.com/wrkmark-hq/wrkmark-observer/actions/workflows/test.yml/badge.svg" alt="Tests">
<a href="https://github.com/wrkmark/wrkmark-observer/actions">
<img src="https://github.com/wrkmark/wrkmark-observer/actions/workflows/test.yml/badge.svg" alt="Tests">
</a>
<a href="LICENSE">
<img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT License">
Expand Down Expand Up @@ -41,10 +41,46 @@ personal app activity, microphone, camera, or screenshots.
4. **Tamper-evident audit log** — every observation creates a hash-chained record
5. **Open source** — you are reading the enforcement code right now

## Quick Start

```typescript
import { createObserver } from '@wrkmark/observer'

// Wire everything up in one call
const { sessionManager, collector } = createObserver('./wrkmark.db')

// Start observing a VS Code session
sessionManager.startSession('VS Code')
collector.start(sessionManager)

// Your IPC bridge calls these as VS Code fires events:
// collector.onKeystroke(Date.now())
// collector.onUndo(Date.now())
// collector.onFileSwitch(Date.now())

// When the session ends
const completed = sessionManager.endSession()
console.log(`Session: ${completed.duration_ms / 60000} minutes`)
```

## Individual Imports

```typescript
import {
createDatabase,
AuditLog,
SignalAnonymizer,
SignalExtractor,
SessionManager,
VSCodeCollector,
WrkmarkObserverError
} from '@wrkmark/observer'
```

## Run the tests yourself

```bash
git clone https://github.com/wrkmark-hq/wrkmark-observer
git clone https://github.com/wrkmark/wrkmark-observer
cd wrkmark-observer
pnpm install
pnpm test
Expand Down Expand Up @@ -74,4 +110,4 @@ Privacy-critical files require founder review (see CODEOWNERS).

## License

MIT — use this code however you like.
MIT — use this code however you like.
15 changes: 15 additions & 0 deletions extensions/chrome/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"manifest_version": 3,
"name": "Wrkmark Observer",
"version": "0.1.0",
"description": "Detects AI tool usage for Wrkmark behavioral verification. Never reads page content.",
"permissions": ["tabs", "activeTab"],
"background": {
"service_worker": "dist/background.js",
"type": "module"
},
"action": {
"default_title": "Wrkmark Observer"
},
"host_permissions": []
}
16 changes: 16 additions & 0 deletions extensions/chrome/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "@wrkmark/chrome-extension",
"version": "0.1.0",
"description": "Chrome extension for Wrkmark Observer",
"type": "module",
"scripts": {
"build": "tsc --project tsconfig.json",
"test": "vitest run",
"typecheck": "tsc --noEmit --project tsconfig.json"
},
"devDependencies": {
"@types/chrome": "^0.0.300",
"typescript": "~5.4.5",
"vitest": "^4.1.8"
}
}
Loading
Loading