| Age | Commit message (Collapse) | Author |
|
I think the calls to Log.setup() were accidentally creating multiple
loggers, hopefully this fixes the problem.
|
|
- Remove UNIQUE constraints from ALTER TABLE statements
(SQLite doesn't support adding constraints via ALTER TABLE)
- Add better logging for migration failures (debug level) - Rely on
application logic to ensure uniqueness instead of DB constraint -
This fixes the silent failure where stripe_customer_id and
stripe_subscription_id columns weren't being added
|
|
- Implement Biz.PodcastItLater.Billing with checkout sessions, billing
portal, webhook handling - Add subscription database schema: plan_tier,
stripe fields, period dates, stripe_events table - Three-tier pricing:
free (10/month), personal (/month, 50 articles), pro (9/month,
unlimited) - Usage tracking and enforcement with tier-based limits
- Full billing UI with plan display, usage stats, pricing cards,
upgrade buttons - Dashboard shows current tier with billing button -
Update Web.nix with Stripe environment variables - Fix POST redirects
to Stripe with 303 status code for CloudFront compatibility
Amp-Thread-ID:
https://ampcode.com/threads/T-c139e5b5-1901-4cd6-8030-5623bfe1df35
Co-authored-by: Amp <amp@ampcode.com>
|
|
Without this, run.sh would continue if bild failed, and you might
end up running an out of date artifact.
|
|
- Add stripe to Omni/Bild/Deps/Python.nix (alphabetically sorted) -
Fix all type annotations in Billing.py for mypy - Document how to add
Python packages in AGENTS.md - Add billing routes to Web.py (checkout,
portal, webhook)
This enables Stripe integration in PodcastItLater.
Related to task t-144e7lF
|
|
Changed epic display in tree view from:
t-PpXWsU [Epic] [ ] Task Manager Improvements
To:
t-PpXWsU [6/11] Task Manager Improvements
The [6/11] shows completed/total child tasks, giving immediate visual
feedback on epic progress. Regular tasks still use checkbox indicators:
[ ] open, [~] in-progress, [✓] done.
|
|
Changed tree output format from:
t-abc123 [ ] Task title [Omni/Task.hs]
To:
t-abc123 [ ] [Omni/Task.hs] Task title
This makes the namespace more prominent and groups all metadata
(status + namespace) together before the title.
|
|
Changes: 1. Remove [Task] label - only show [Epic] for epics, cleaner
output 2. Truncate long titles to fit 80 columns with ... ellipsis
3. Better spacing with type label included in layout calculation
Created task for future improvement: prettier box-drawing characters
(├──, └──) which would require Data.Tree library
investigation.
Current output is clean and readable within standard terminal width.
|
|
Add 'task tree' command to show hierarchical task structure:
Usage:
task tree # Show all epics with their children task tree <id> #
Show specific epic/task with children
Features: - Visual status indicators: [ ] open, [~] in-progress,
[✓] done - Shows task type: [Epic] or [Task] - Indented display
for hierarchy - Shows namespace associations
Example output:
t-PpXWsU [Epic] [ ] Task Manager Improvements [Omni/Task.hs]
t-PpYZt2 [Task] [ ] Implement child ID generation t-PpZGVf [Task]
[✓] Add filtering by type and parent
Updated AGENTS.md with usage examples.
Closes task t-PpZlbL
|
|
Implemented proper pre-commit hook that: - Calls 'task export --flush'
to consolidate tasks - Auto-stages .tasks/tasks.jsonl if modified -
Runs before every commit
Added reminder message after 'task update' to inform users that task
changes will be committed on next git commit.
Updated AGENTS.md to document the auto-commit behavior.
This fixes the bug where task status updates (e.g., marking tasks as
Done) were not being committed to git.
|
|
Implement --status and --namespace filters for task list:
New filters: - --status: Filter by open, in-progress, or done -
--namespace: Filter by namespace (e.g., Omni/Task)
All filters can be combined: - task list --parent=t-abc123
--status=open - task list --type=epic --status=done - task list
--namespace="Omni/Task" --status=open
Updated listTasks signature to accept all filter parameters and apply
them in sequence. Updated AGENTS.md with examples.
Closes task t-PpZGVf
|
|
- Add TASK_TEST_MODE environment variable to use separate test database
- All file operations now use getTasksFilePath to respect test mode -
Tests use .tasks/tasks-test.jsonl instead of production database -
Add automatic migration from old task format (taskProject field)
to new format - Migrated tasks convert taskProject to WorkTask type
with empty parent - Old [Text] dependencies converted to [Dependency]
with Blocks type - Restore actual tasks from commit 3bf1691 (were
lost during testing)
This prevents accidental data loss when running tests and provides
backward compatibility for existing task databases.
|
|
Implement four dependency types based on beads patterns: - Blocks:
Hard dependency, blocks ready work queue (default) - DiscoveredFrom:
Work discovered during implementation (doesn't block) - ParentChild:
Epic/task relationships (blocks ready work) - Related: Soft
relationships (doesn't block)
Key changes: - New Dependency data type with depId and depType fields
- New DependencyType enum with four relationship types - Updated CLI
with --dep-type and --discovered-from flags - Enhanced getReadyTasks
to respect only blocking dependency types - Added comprehensive tests
for all dependency behaviors - Updated AGENTS.md with usage examples
and patterns
The discovered-from pattern is especially important for AI agents to
maintain context of work found during implementation while keeping
it immediately available in the ready work queue.
Amp-Thread-ID:
https://ampcode.com/threads/T-178b273a-3ac7-416c-a964-db89bac3c8f7
Co-authored-by: Amp <amp@ampcode.com>
|
|
Major refactoring of task data model: - Added TaskType enum (Epic |
WorkTask) - Replaced taskProject with taskType and taskParent fields -
Epics are containers for tasks (hierarchical organization) - Tasks can
have optional parent epics - Updated createTask signature to accept
type and parent - Updated CLI: --type=epic|task and --parent=<id>
options - Updated list command to filter by type and parent - Updated
printTask to display type and parent info - Fixed naming collision
(WorkTask instead of Task constructor)
Example usage:
task create "Auth System" --type=epic task create "Design API"
--type=task --parent=t-abc123 task list --type=epic task list
--parent=t-abc123
Completed task: t-8WR5Zg
Amp-Thread-ID:
https://ampcode.com/threads/T-85f4ee29-a529-4f59-ac6f-6ffec75b6a56
Co-authored-by: Amp <amp@ampcode.com>
|
|
Updated namespace handling to use the Omni.Namespace module: - Import
Omni.Namespace in Task CLI - Parse and validate namespace strings
using fromHaskellModule - Convert to proper path format using toPath -
Ensures namespaces are well-formed (e.g., Omni/Task -> Omni/Task.hs)
Example:
task create "Fix bug" project --namespace="Omni/Task" # Creates
task with validated namespace Omni/Task.hs
This provides type safety and ensures all task namespaces correspond
to actual code namespaces in the monorepo.
Amp-Thread-ID:
https://ampcode.com/threads/T-85f4ee29-a529-4f59-ac6f-6ffec75b6a56
Co-authored-by: Amp <amp@ampcode.com>
|
|
Tasks can now be associated with specific namespaces in the monorepo:
- Added taskNamespace (Maybe Text) field to Task data type - Updated
createTask to accept optional namespace parameter - Added --namespace
CLI option to task create command - Display namespace in task list
output (e.g., [Omni/Task]) - Updated tests to pass Nothing for
namespace - Updated AGENTS.md documentation
Example usage:
task create "Fix bug" project --namespace="Omni/Task"
Completed task: t-j0k1L2
Amp-Thread-ID:
https://ampcode.com/threads/T-85f4ee29-a529-4f59-ac6f-6ffec75b6a56
Co-authored-by: Amp <amp@ampcode.com>
|
|
Implemented a dependency-aware task tracker inspired by beads: - Task
CRUD operations (create, list, update, ready) - Dependency tracking
and ready work detection - JSONL storage with git sync via hooks -
Export/import for cross-machine synchronization - Short base62-encoded
task IDs (e.g., t-1ky7gJ2)
Added comprehensive AGENTS.md documentation: - Task manager usage and
workflows - Development tools (bild, lint, repl.sh) - Git-branchless
workflow guidelines - Coding conventions
Integrated with git hooks for auto-sync: - post-merge/post-checkout:
import tasks - pre-commit/pre-push: export tasks
Also includes beads design analysis document for reference.
Completed tasks: - t-a1b2c3: Show help text when invoked without args
- t-d4e5f6: Move dev instructions to AGENTS.md - t-g7h8i9: Implement
shorter task IDs - t-p6q7r8: Add git-branchless workflow docs
https: //ampcode.com/threads/T-85f4ee29-a529-4f59-ac6f-6ffec75b6a56
Co-authored-by: Amp <amp@ampcode.com> Amp-Thread-ID:
https://ampcode.com/threads/T-85f4ee29-a529-4f59-ac6f-6ffec75b6a56
|
|
Without this, my custom git commit template will get mangled
into the commit message with the call to fmt. I guess git strips
all of this stuff *after* it runs the commit-msg hook. Oy vey.
diff --git a/Omni/Ide/hooks/commit-msg b/Omni/Ide/hooks/commit-msg
index c15b4a1..bfbb06f 100755 --- a/Omni/Ide/hooks/commit-msg +++
b/Omni/Ide/hooks/commit-msg @@ -1,6 +1,7 @@
#!/usr/bin/env bash temp=$(mktemp)
-fmt -w 72 -u "$1" > "$temp" +# strip comment lines and everything
after >8 cut line +sed '/^#/d; /^# -\+ >8 -\+/,$d' "$1" | fmt -w 72
-u > "$temp"
mv "$temp" "$1" if ! gitlint --ignore-stdin --staged --msg-filename
"$1" run-hook; then
backup="$CODEROOT"/.git/COMMIT_EDITMSG.backup
|
|
Check to prevent processing of large articles, truncate oversized
content, defer jobs during high memory usage, use streaming TTS
generation and upload to minimize memory consumption.
|
|
The -s and -u flags tell fmt to fill the paragraph by merging
lines. Without this, fmt might just add line breaks, and this is
no good.
|
|
Moved the Admin related stuff to a separate file. Removed the
repetitive
`db_path` arg everywhere and replaced it with correct assumptions,
similar to
whats in other apps.
|
|
When I deploy, I get an error like this:
Error: Failed to open dbus connection
Caused by: Failed to connect to socket /run/user/1000/bus:
Connection refused
According to Claude, this is because dbus is trying to do stuff while
I'm running the `systemd-run` command, but that loses my user context so
dbus errors out, and I can disable dbus by setting this variable to
nothing. I guess we'll see if it works!
|
|
Sometimes aider will write commit messages without wrapping them at 80 chars,
and then the commit fails the gitlint hook, and aider can't finish the commit.
To fix this I can just auto-wrap before we check it.
|
|
According to Claude, the nixos-unstable branch has more stuff in it's binary
cache than nixos-unstable-small. Idk, let's try it and find out.
|
|
This implements a working prototype of PodcastItLater. It basically just works
for a single user currently, but the articles are nice to listen to and this is
something that we can start to build with.
|
|
If there are no lints to fix, this should just exit without starting aider.
|
|
This runs a repl and calls mypy to typecheck the given target. Not only is
this *much* faster than using bild to typecheck stuff, but it also produces less
noise in the logs, so I can have aider call this and the output won't overwhelm
the llm.
|
|
This is actually useful because nix only shows the last 25 log lines, so I'd
like to know how deep the problems go with a summary.
|
|
The colored output is not decoded by the nix log accumulator, so you just get
these control characters. Get rid of them for more readable output.
|
|
This took quite a bit of work to package, and it's not a perfect package, but I
think it will do to get Biz/Astrologer.py working.
|
|
This needs to be a separate mailbox so I don't get a bunch of dmarc reports in
my inbox.
|
|
I think storage is not a problem, and not having all the transactions means I
might not get the correct balance if the wallet has really old transactions (I
think).
|
|
This just fixes my lint errors for me which is awesome. Very useful.
|
|
This just fixes my lint errors for me which is awesome. Very useful.
|
|
Introduce a new systemd service that pulls the latest open-webui
Docker image and restarts the associated container. This ensures that
the application is always running the most recent version. Additionally,
a timer is added to schedule this update process to occur every Sunday
at 3 AM, automating the maintenance of the service without manual
intervention. This change enhances the reliability and freshness of
the application deployment.
|
|
This domain is not actually useful.
|
|
I had to update nixos-unstable-small and nixos-24_11 and disable a bunch of
tests, and then re-compile like the whole world, but aider is actually working,
finally.
|
|
Introduce a new container definition for the Open Web UI AI Chat service
in `OpenWebui.nix`, specifying its Docker image, volume, and environment
variables. This change includes the addition of a new port in `Ports.nix`
to facilitate communication with the service.
Furthermore, configure Nginx to serve the AI Chat application by adding
a new virtual host entry in `Web.nix`, ensuring SSL is enforced and
websocket support is enabled. This setup allows for a seamless
integration of the AI Chat service into the existing infrastructure,
improving accessibility and security.
|
|
This change removes "mail.bensima.com" from the list of allowed hosts
in the Web.nix configuration. The removal is likely due to a decision
to restrict access or because the mail service is no longer in use.
This helps to tighten security and ensure that only necessary hosts
are permitted.
|
|
This was the old username.
|
|
Not sure if this will help but I figure one more substituter can't hurt.
|
|
Basically every time I try to run CI it times out, so just disable timeout on CI
jobs for now.
|
|
Also improves the Example.py a bit with a real test case and example of how to
use Omni.Test.
|
|
I have this script I have to run on startup that sets these interactively, which
is fine, but I haven't changed this script in like 3 years so lets just make it
permanent at this point.
|
|
obs-do is a command line tool fro controlling obs over a socket, I plan to use
it for keyboard-driven automations. Helvum is just not necessary, qpwgraph is
better anyway.
|
|
I think this was causing feedback from my microphone.
|
|
This does all of the audio routing stuff that I need to combine my mic audio
with application audio into a virtual source that meeting software or OBS can
select as an input source. This way I can share what I'm listening to or
watching in a meeting.
I think the routes are not quite correct, and I'm not sure that the
`context.exec` is even a reliable way to setup the routes. I've also been using
`qpwgraph` to visually setup the routes, and that's helpful. I'll tweak this as
needed over time.
|
|
This is needed to use the OBS virtual camera thing.
|
|
Pydantic-ai is an agent framework that seems simple and good: well-typed with
pydantic, tool usage is just an `@tool` decorator on a function, and so
on. While building these I realized there were some deps they needed that were
already in nixpkgs unstable, so I just switched to that instead of trying to
backport all the versions and stuff.
|
|
This adds a kernel module that allows the virtual camera to work.
https://nixos.wiki/wiki/OBS_Studio
|