Repository navigation
feat: the task tools return compact lists, find a project by name, and say when more remain EXO-91948 - #683
Draft
bmestrallet wants to merge 6 commits into
Conversation
…d say when more remain EXO-91948 list_projects takes a name, a keyword passed to the project list and count (and to the scan of a space's projects in a run limited to a space), and lists compact items {project_id, name, space_id, url}; get_project_by_id keeps the full project. list_tasks, list_assigned_tasks and list_unscheduled_tasks list compact items: the search result's fields plus the assignee as {username, display_name}, due_date, days_overdue, priority, comments_count, and the changes of a changed_since/completed_since listing; include_change_log and get_task_by_id keep the full task. list_assigned_tasks takes an offset. Every list tool's limit is 10 by default and 100 at most. The project and task collections carry has_more and next_offset. The two constant per-task tool names move to the tool descriptions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…XO-91948 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…asked for comes alone EXO-91948 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Why
Task tool answers were far larger than an assistant needs: on the Tribe,
list_projectsover 427 projects returned ≈ 89k characters andlist_tasksfor 200 tasks ≈ 457k, so clients cut them without saying so and agents concluded on partial data. Each project carried its allowed statuses and labels (two queries per project); each task its full HTML description, full user profiles for the assignee and every coworker, and two constant strings.limithad no upper bound, and nothing let an assistant find a board by name.How
list_projectstakes an optionalname: it lists the projects whose name holds all its words, ignoring case (ProjectQuery#setNameWords, AND); only when none does and the name has several words, those holding any one of them (setKeyword, OR). Same in a run limited to a space. Items become{project_id, name, space_id, url};get_project_by_idkeeps the full project. The total is counted with the sameProjectQueryselection as the list, so a project with several managers or participants counts once andhas_moreis exact.list_tasks,list_assigned_tasks,list_unscheduled_tasksreturn compact items (task_id, title, link, completed, project_id, project_name, status, labels, assignee{username, display_name}, due_date, created_date, days_overdue, priority, comments_count, pluschangeswithchanged_since/completed_since). The compact path skips HTML rendering, coworker and user-model lookups.include_change_log=truekeeps the full shape;get_task_by_idstays full.include_description: true), each compact task item also carries itsdescriptionas plain text — HTML and entities removed with Jsoup, mentions and links shown as their text, one line per block, cut at 500 characters on a word or line boundary withdescription_truncated: truewhen cut — for readers that need a card's qualification lines without oneget_task_by_idper task. Without it the item is unchanged and the description is not read.limitis capped at 100 (localMAX_LIMIT), a zero or negative one means 10. Collections carryhas_moreandnext_offset(absent when nothing remains);countandused_limitkeep their meaning.list_assigned_taskstakesoffset. It now readsgetAssignedTasksQuery+findLastUpdatedTasksinstead ofgetUncompletedTasks, which had no offset and no order: same selection (open, assignee or coworker), now most recently active first.list_unscheduled_tasksreportshas_morebut has no offset (it scans the project's 100 most recently active open tasks).list_task_comments_tool/list_allowed_project_labelsleaveTaskModel(soget_task_by_idtoo); their content moves to the tool descriptions, which are trimmed to keep the per-call prompt small.Measured on a local instance (50 projects, 206 tasks)
list_projectstraversal vslist_projects name=list_tasks, 110 taskslist_assigned_tasks, 206 taskslist_tasks title=(filter existed before)Depends on
has_more,name, and the create-task actions getlist_project_statuses).get_project_by_id.Tests
mvn -o test -pl servicesat6a0407a3d: 375 tests, 0 failures. They pin the compact shapes (exact JSON key sets,created_dateequal to the full task's), the all-words query and its fallback (structure, and run through the engine inTestProjectDAO: count, AND, case, exclusion outside the memberships), a project counted once with several participants, the one-word name without fallback, the clamp,has_more/next_offseton full, last and empty pages, thelist_assigned_tasksoffset, and the opt-in description (default key set unchanged and the description never read; plain text, line per block, cut at a boundary, surrogate pairs kept whole, flag only when cut); each was mutation-checked.Classification: N1 proposed — the space-scope
allowed_argsgainname(list_projects) andinclude_description(list_tasks), so a run limited to a space may pass a new argument (it only narrows projects already selected by the scope check), and a new DAO query condition (setNameWords). No ACL,getTaskQueryorrequire_approvalchange.Knowledge: Meeds-io/eng-standards#668, Meeds-io/eng-standards#669, Meeds-io/eng-standards#630, Meeds-io/eng-standards#670
🤖 Generated with Claude Code