Voice-note capture as the primary mobile input channel. AudioPen polishes on their cloud, POSTs to a self-hosted receiver on the desktop (exposed via Tailscale Funnel so no router ports open and nothing behind Authentik). The receiver writes to inbox/raw/; a bash normaliser wraps each drop in frontmatter and moves it to inbox/; /triage-inbox routes them from there. scripts/audiopen-ingest.sh — 80-line bash normaliser. Idempotent; safe to re-run. Extracts title, slugifies, computes capture timestamp from mtime, rewrites with fleeting-note frontmatter. scripts/audiopen-webhook/main.py — stdlib-only Python HTTP server. Zero pip deps; binds to 127.0.0.1 by default. Accepts flexible payload shapes (title/name + body/output/summary/polished/ orig_transcript) so AudioPen version drift is logged rather than silently dropped. scripts/audiopen-webhook/*.example — systemd user-unit templates for the receiver and the path/service pair that fires the ingest wrapper on inbox/raw/ changes. scripts/pyproject.toml + README.md — Python venv convention. Zero deps today; venv location reserved at scripts/.venv/ (gitignored), manifest at scripts/pyproject.toml, bootstrap documented for both plain pip and uv. Optional-dependencies groups let individual tools pull what they need without bloating the whole env. docs/setup/audiopen.md — full setup guide: generating the shared secret, installing the systemd units, pairing with Tailscale Funnel, configuring AudioPen's webhook, and the IMAP-fallback path for setups that can't run a public-reachable receiver. docs/setup/sync.md — companion guide: Gitea SSH remote (works even with Authentik gating HTTPS), obsidian-git plugin configuration, Syncthing desktop↔phone pairing with the critical .stignore patterns, and the three phone-role tiers so the user can pick Tier 1 / 2 / 3 at their own pace. .gitignore gains **/.venv/, **/venv/, **/__pycache__/, and *.pyc so nobody accidentally commits a materialised environment. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
43 lines
1.1 KiB
TOML
43 lines
1.1 KiB
TOML
[project]
|
|
name = "council-scripts"
|
|
version = "0.1.0"
|
|
description = "Operational scripts for the Council PKB — AudioPen ingest, webhook receiver, inbox normalisation."
|
|
readme = "README.md"
|
|
requires-python = ">=3.11"
|
|
dependencies = []
|
|
|
|
# Empty today. Stdlib-only code in this directory. Add entries here when a real
|
|
# pip-installable dependency arrives (e.g. watchdog, imap-tools). Bootstrap:
|
|
#
|
|
# cd scripts
|
|
# python3 -m venv .venv
|
|
# .venv/bin/pip install -e .
|
|
#
|
|
# Or with uv:
|
|
#
|
|
# cd scripts
|
|
# uv venv
|
|
# uv pip install -e .
|
|
|
|
[project.optional-dependencies]
|
|
# Example shape for when deps arrive — split by tool so you can install only what
|
|
# you run. Uncomment and populate as needed.
|
|
#
|
|
# imap = [
|
|
# "imap-tools>=1.4.0",
|
|
# ]
|
|
# watch = [
|
|
# "watchdog>=4.0.0",
|
|
# ]
|
|
|
|
[build-system]
|
|
requires = ["setuptools>=68"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[tool.setuptools]
|
|
# There's no package to build — these are standalone scripts. Point setuptools
|
|
# at an empty package list so `pip install -e .` succeeds as a no-op installer
|
|
# for the dependency manifest, without trying to import a module named
|
|
# `council-scripts`.
|
|
packages = []
|