@markjaquith/agency 3.7.0 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -616,18 +616,21 @@ handoffs restore the terminal before starting the interactive worker, then reope
616
616
  the TUI when the worker returns. A configured
617
617
  external chooser continues to offer goals and **Browse items** through that chooser.
618
618
 
619
- | Goal | Choose in `act` | Discovery/action ID |
620
- | ------------------------------------ | ------------------------------------------------------------------------------------------------- | ------------------------------------- |
621
- | Add a repository | Add from a remote, or link an existing local repository | `repo-add`, `repo-link` |
622
- | Create a task | Create a task → standard task or investigation; describe the outcome | `task-create`, `investigation-create` |
623
- | Split work | Add a phase / split this task; name the existing work's first phase | `split` |
624
- | Work on a task or phase | Work on this item | `work` |
625
- | Move from investigation to execution | Create implementation follow-up | `handoff` |
626
- | Review someone else's work | Review a PR, or a remote branch/commit | `review`, `review-ref` |
627
- | Close finished work | Close or reopen work → complete without a PR, drop abandoned work, refresh a merged PR, or reopen | `complete`, `drop`, `sync`, `reopen` |
628
- | Update PR status | Refresh Agency state from the provider, create a PR, mark a GitHub PR ready, or close it | `sync`, `pr`, `pr-ready`, `pr-close` |
629
- | Archive terminal work | Archive | `archive` |
630
- | See current work | See current work | `current-work` |
619
+ | Goal | Choose in `act` | Discovery/action ID |
620
+ | ------------------------------------ | ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
621
+ | Manage repositories | Add, link, set up, materialize, fetch, verify, rename, update, unlink, or remove aliases | `repo-add`, `repo-link`, `repo-setup`, `repo-materialize`, `repo-fetch`, `repo-verify`, `repo-rename`, `repo-remote`, `repo-unlink`, `repo-remove` |
622
+ | Create work | Create a standard task, multi-phase task, investigation, epic, or a task inside an epic | `task-create`, `multi-phase-create`, `investigation-create`, `epic-create`, `task-create-in-epic` |
623
+ | Split work | Add a phase / split this task; name the existing work's first phase | `split` |
624
+ | Work on a task or phase | Work on this item | `work` |
625
+ | Move from investigation to execution | Create implementation follow-up | `handoff` |
626
+ | Review someone else's work | Review a PR, or a remote branch/commit | `review`, `review-ref` |
627
+ | Close finished work | Close or reopen work → complete without a PR, drop abandoned work, refresh a merged PR, or reopen | `complete`, `drop`, `sync`, `reopen` |
628
+ | Publish or update PR status | Push without a PR, refresh provider state, create a PR, mark a GitHub PR ready, or close it | `push`, `sync`, `pr`, `pr-ready`, `pr-close` |
629
+ | Maintain review work | Fetch and repin a review task to its current source | `review-refresh` |
630
+ | Organize work | Rename an item, move a task into/out of an epic, or add/remove a sibling dependency | `rename`, `move-to-epic`, `remove-from-epic`, `dependency-add`, `dependency-remove` |
631
+ | Archive terminal work | Archive | `archive` |
632
+ | See work status | See current or ready work | `current-work`, `ready-work` |
633
+ | Check or refresh the workbase | Validate, diagnose, reconcile all state, or inspect/update managed integration files | `validate`, `doctor`, `sync-all`, `integration-status`, `integration-sync` |
631
634
 
632
635
  After creating a task, phase, review, or implementation follow-up, choose **Work
633
636
  on the new item now** or **Finish**. Only choosing Work prepares checkouts and
@@ -663,6 +666,8 @@ For agents, `--json` never prompts or executes. Its compact, runtime-validated
663
666
  result includes workbase actions and repository aliases, current working items,
664
667
  and matching targets with readiness, document revisions, available `actions`,
665
668
  and `blockedActions` with reasons. `--action` filters discovery to one scenario.
669
+ Every action includes a concise `description`, Nerd Font `icon`, and semantic
670
+ hex `color`, in addition to its label and availability.
666
671
  Targets and current working items share the same identity and metadata fields:
667
672
  `id`, `kind`, `key`, `status`, `description`, `repo` (the declared main repository,
668
673
  when present), `repositories`, `readiness`, and `revision`. Descriptions retain
@@ -770,9 +775,11 @@ structured `changes`, `warnings`, `unresolved`, and per-execution evidence. The
770
775
  default mode applies safe reconciliation transitions; `--dry-run` is explicitly
771
776
  observational.
772
777
 
773
- Pass `<task-id>` to scope reconciliation to one task and its repositories. A
774
- multi-phase task scope includes all of its phases; add `[phase-id]` to select one
775
- phase. Scoped sync does not query, materialize, or reconcile unrelated work.
778
+ Pass `<task-id>` to scope reconciliation to one task and its repositories. With
779
+ no target, invocation inside an epic, task, or phase scopes to that current item;
780
+ invocation at the workbase root retains whole-workbase scope. A multi-phase task
781
+ scope includes all of its phases; add `[phase-id]` to select one phase. Scoped
782
+ sync does not query, materialize, or reconcile unrelated work.
776
783
 
777
784
  `agency sync` performs only these safe transitions:
778
785
 
@@ -1098,15 +1105,16 @@ agency archive task <task-id> [--dry-run] [--json]
1098
1105
  agency archive tasks [--dry-run] [--json]
1099
1106
  agency archive phase <task-id> <phase-id> [--dry-run] [--json]
1100
1107
  agency archive <path> [--dry-run] [--json]
1108
+ agency archive [--dry-run] [--json]
1101
1109
  agency restore epic <epic-id> [--dry-run] [--json]
1102
1110
  agency restore task <task-id> [--dry-run] [--json]
1103
1111
  agency restore phase <task-id> <phase-id> [--dry-run] [--json]
1104
1112
  ```
1105
1113
 
1106
- An existing path within an active epic or task infers that work item, so
1107
- `agency archive .` works from its directory. Collection roots are ambiguous,
1108
- phase paths require the explicit `archive phase` form, and paths outside active
1109
- epic or task trees are rejected. Archived work keeps its hierarchy under
1114
+ With no target, `agency archive` infers the active epic, task, or phase containing
1115
+ the current directory. An existing path within one of those items is inferred
1116
+ the same way. Collection roots are ambiguous, and paths outside active work item
1117
+ trees are rejected. Archived work keeps its hierarchy under
1110
1118
  `archive/`. Epic archiving includes its
1111
1119
  listed tasks. A task can be archived only when its effective status is terminal
1112
1120
  (`done` or `dropped`). Multi-phase task status is derived from its phases, every
@@ -1140,10 +1148,11 @@ agency pr create <task-id> [phase-id] [--draft] [--title <title>] [--head <branc
1140
1148
  agency pr [args...]
1141
1149
  ```
1142
1150
 
1143
- `agency work` presents the full hierarchy in the native OpenTUI selector or the
1144
- configured external chooser. Pass a directory, including `.` for the current
1145
- directory, to infer its epic, task, or phase. Outside a workbase, Agency first
1146
- presents the registered workbases, then the selected workbase's hierarchy.
1151
+ Inside an epic, task, or phase, `agency work` defaults to that current item.
1152
+ At the workbase root it presents the full hierarchy in the native OpenTUI
1153
+ selector or the configured external chooser. An explicit directory can target a
1154
+ different item. Outside a workbase, Agency first presents the registered
1155
+ workbases, then the selected workbase's hierarchy.
1147
1156
 
1148
1157
  Agency automatically uses the first available agent in this order: `opencode2`,
1149
1158
  `opencode`, then `claude`. `--opencode` and `--claude` remain aliases for
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markjaquith/agency",
3
- "version": "3.7.0",
3
+ "version": "3.9.0",
4
4
  "description": "Manage agentic work across repositories with durable workbases",
5
5
  "keywords": [
6
6
  "agents",
package/src/act-schema.ts CHANGED
@@ -6,6 +6,9 @@ const Argv = Schema.Array(Schema.String)
6
6
  const Action = Schema.Struct({
7
7
  id: Schema.String,
8
8
  label: Schema.optional(Schema.String),
9
+ description: Schema.String,
10
+ icon: Schema.String,
11
+ color: Schema.String,
9
12
  available: Schema.Boolean,
10
13
  blockedReason: Schema.optional(Schema.NullOr(Schema.String)),
11
14
  inputs: Schema.optional(
package/src/cli-parser.ts CHANGED
@@ -499,7 +499,14 @@ const commands = {
499
499
  usage: "agency task status <id> <status> [options] [--json]",
500
500
  minArgs: 2,
501
501
  maxArgs: 2,
502
- options: ["json", "task", "no-pull-request", "summary", "evidence-url"],
502
+ options: [
503
+ "json",
504
+ "task",
505
+ "if-revision",
506
+ "no-pull-request",
507
+ "summary",
508
+ "evidence-url",
509
+ ],
503
510
  },
504
511
  update: {
505
512
  usage: "agency task update <id> [options] [--json]",
@@ -630,6 +637,7 @@ const commands = {
630
637
  "json",
631
638
  "task",
632
639
  "phase",
640
+ "if-revision",
633
641
  "no-pull-request",
634
642
  "summary",
635
643
  "evidence-url",
@@ -689,7 +697,7 @@ const commands = {
689
697
  },
690
698
  },
691
699
  archive: {
692
- usage: "agency archive <path|list|show|epic|task|tasks|phase>",
700
+ usage: "agency archive [path|list|show|epic|task|tasks|phase]",
693
701
  options: {
694
702
  ...outputOptions,
695
703
  ...entitySelectorOptions,
@@ -699,8 +707,8 @@ const commands = {
699
707
  repository: { type: "string", multiple: true },
700
708
  },
701
709
  command: {
702
- usage: "agency archive <path> [--dry-run] [--json]",
703
- minArgs: 1,
710
+ usage: "agency archive [path] [--dry-run] [--json]",
711
+ minArgs: 0,
704
712
  maxArgs: 1,
705
713
  options: ["dry-run", "json"],
706
714
  },