| Age | Commit message (Collapse) | Author |
|
Amp-Thread-ID: https://ampcode.com/threads/T-019e9b82-6ba0-77a4-b4a0-5c2cbf9bf39f
Co-authored-by: Amp <amp@ampcode.com>
|
|
- ask edit opens $EDITOR and creates a task from the (multi-line) content,
reusing the shared internal/editor package
- collapse newlines in list output and fish completion so multi-line
descriptions render on one line and don't break completion
Bump version to 0.40.0
Amp-Thread-ID: https://ampcode.com/threads/T-019e96a1-9c8e-73d6-95b4-b55cb12cc762
Co-authored-by: Amp <amp@ampcode.com>
|
|
detection
|
|
|
|
|
|
|
|
|
|
|
|
Updates go.mod from 1.21.0 to 1.24.0 because tests use testing.T.Chdir,
which requires Go 1.24. Also fixes pre-existing fmt.Errorf non-constant
format strings in task_selector.go that the printf vet analyzer flags
when running go test with the newer minimum version.
|
|
Implements `ask watch [subcommand...]` which re-runs a read-only
subcommand every 2 seconds and redraws output when it changes,
similar to gnu-watch.
Safety features:
- Restricted to read-only subcommands (list, all, ready, info,
urgency, help, dep list)
- Recursive watch is blocked
- Captures stderr so error messages are visible in the watched display
Also adds readOnly field to commandEntry registry for maintainability.
|
|
Two concurrent 'ask' invocations could race on the alias cache file:
both wrote the JSON to a shared '<path>.tmp' filename and then both
called os.Rename, so the loser failed with:
replace task alias cache: rename .../task-aliases-v2.json.tmp
.../task-aliases-v2.json: no such file or directory
The shared tempfile also enabled lost updates because each process
loaded the file independently before saving its own version on top.
Fix:
- Take an exclusive flock on a sentinel file (task-aliases-v2.json.lock)
in the cache directory around the full load/modify/save cycle in both
ensureTaskAliases and resolveTaskSelectorFromCache, using the existing
internal/filelock package.
- Switch save() to os.CreateTemp so each writer gets a unique tempfile
name; the loser's tempfile is removed cleanly on rename failure.
- Refactor resolveTaskSelectorFromCache by extracting
finalizeResolvedTaskSelector to keep functions under 50 lines.
Adds TestEnsureTaskAliases_ConcurrentCallsDoNotRaceOnTempFile, which
reproduces the original error reliably on the unfixed code and now
passes with -race.
Amp-Thread-ID: https://ampcode.com/threads/T-019df49f-52a5-75b1-98d5-371a163ef100
Co-authored-by: Amp <amp@ampcode.com>
|
|
|
|
Show only task alias IDs on ask info Depends lines. Block ask start
until every dependency is completed. Bump version to 0.33.0.
Made-with: Cursor
|
|
Add advisory lock under .git/hexai-ask.lock around Taskwarrior execution,
with metadata (PID and process basename) and Linux /proc comm checks to
remove orphan lock files when the recorded holder is gone or not ask.
Extract internal/filelock for shared flock helpers; stats uses it too.
Made-with: Cursor
|
|
- Move cmd/do to cmd/ask; mage builds and installs ask; Fish completions to ask.fish
- Update askcli help text, errors, executor default label, and Fish script (__ask_*)
- Task alias cache subdirectory under XDG cache: hexai/ask/
- Rename integration test files and helpers; refresh README and docs
- Rename plan-do-uuid-wrapper.md to plan-ask-uuid-wrapper.md
Made-with: Cursor
|
|
|
|
|
|
Add complete-aliases subcommand that emits tab-separated alias lines without
UUID duplicates. Wire embedded Fish script (__do_task_selectors) to call
complete-aliases; keep complete-uuids unchanged for scripts and tests.
Made-with: Cursor
|
|
- Move cmd/ask to cmd/do; mage BuildDo builds binary named do
- Update askcli help text, errors, Fish completion (complete -c do, __do_*)
- Task alias cache path: XDG cache hexai/do/task-aliases-v2.json
- Refresh README and docs; go install path cmd/do@latest
- Remove accidentally tracked cmd/ask build artifact; ignore cmd/do/do and cmd/do/ask
Made-with: Cursor
|
|
When the task alias cache file contains invalid JSON (e.g. from a
concurrent write race producing two concatenated JSON objects), the
previous code returned a hard error that blocked all `ask` subcommands.
Now loadTaskAliasCache discards the corrupt file and starts fresh,
assigning new alias IDs on the next run. Validation errors (e.g.
next_id reuse) still surface as errors since those indicate a logic bug.
Also fix stale v1 reference in integration test aliasCachePath.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
The complete-uuids command now emits tab-separated "selector\tdescription"
lines so fish shell displays the first 60 chars of the task description
alongside each alias/UUID in the autocompletion menu. The
__ask_add_dependency_modifiers fish function is updated to strip the
description field before matching and building depends: completions.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Alias IDs are now stored in reversed form (e.g. id=37 → "10" instead
of "01") so that the first character varies quickly across consecutive
IDs, making shell auto-completion more effective. The counter logic is
unchanged; only the string representation is reversed via a new
reverseString helper in encodeTaskAliasID/decodeTaskAliasID.
The cache file is bumped to task-aliases-v2.json so existing mappings
are abandoned and all aliases are regenerated with the new format.
Also fix TestDispatcher_CompleteUUIDsSubcommand to use an isolated temp
dir for the alias cache, preventing flakiness from cross-test pollution.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Amp-Thread-ID: https://ampcode.com/threads/T-019d37f6-6549-7119-979a-88bc1225c594
Co-authored-by: Amp <amp@ampcode.com>
|
|
Add in-memory byUUID and byAlias maps to taskAliasCache so that
ensureAlias, lookupUUIDByAlias, and lookupAliasByUUID all run in O(1)
instead of scanning the full entries slice. Maps are rebuilt after
every mutation (load, prune, append) to avoid stale pointers.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(715cc01f-1630-4d11-b6fd-18d64a8c2035)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6c1f2f60-d55c-4a0c-ba5d-e897c738ecb4
|
|
|