github-issue-tower-defence-management 2.147.1 → 2.148.1

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.
Files changed (27) hide show
  1. package/README.md +11 -12
  2. package/bin/adapter/entry-points/console/consoleDoneStore.js +0 -2
  3. package/bin/adapter/entry-points/console/consoleDoneStore.js.map +1 -1
  4. package/bin/adapter/entry-points/console/consoleTabNames.js +0 -1
  5. package/bin/adapter/entry-points/console/consoleTabNames.js.map +1 -1
  6. package/bin/adapter/entry-points/console/ui-dist/assets/{index-cAb-vp3x.js → index-xXoVcvXJ.js} +2 -2
  7. package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
  8. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +15 -7
  9. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  10. package/bin/domain/entities/WorkflowStatus.js +1 -6
  11. package/bin/domain/entities/WorkflowStatus.js.map +1 -1
  12. package/bin/domain/usecases/RevertOrphanedPreparationUseCase.js +0 -13
  13. package/bin/domain/usecases/RevertOrphanedPreparationUseCase.js.map +1 -1
  14. package/bin/domain/usecases/SetupTowerDefenceProjectUseCase.js +1 -0
  15. package/bin/domain/usecases/SetupTowerDefenceProjectUseCase.js.map +1 -1
  16. package/bin/domain/usecases/console/GenerateConsoleListsUseCase.js +0 -2
  17. package/bin/domain/usecases/console/GenerateConsoleListsUseCase.js.map +1 -1
  18. package/package.json +1 -1
  19. package/types/adapter/entry-points/console/consoleDoneStore.d.ts.map +1 -1
  20. package/types/adapter/entry-points/console/consoleTabNames.d.ts.map +1 -1
  21. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  22. package/types/domain/entities/WorkflowStatus.d.ts +0 -1
  23. package/types/domain/entities/WorkflowStatus.d.ts.map +1 -1
  24. package/types/domain/usecases/RevertOrphanedPreparationUseCase.d.ts.map +1 -1
  25. package/types/domain/usecases/SetupTowerDefenceProjectUseCase.d.ts.map +1 -1
  26. package/types/domain/usecases/console/GenerateConsoleListsUseCase.d.ts +1 -2
  27. package/types/domain/usecases/console/GenerateConsoleListsUseCase.d.ts.map +1 -1
package/README.md CHANGED
@@ -50,7 +50,7 @@ Options for startDaemon:
50
50
  --maximumPreparingIssuesCount <count> Maximum number of issues in preparation status (default: 6 per available Claude OAuth token, otherwise 6)
51
51
  --utilizationPercentageThreshold <percent> 5-hour utilization hard threshold; tokens at or above this percentage are excluded from rotation. Per-token concurrency also tapers from 6 slots down to 1 as either the 5h or 7d utilization rises from 80% toward 100%, taking the more restrictive of the two (default: 90)
52
52
  --allowedIssueAuthors <authors> Comma-separated list of allowed issue authors
53
- --preparationProcessCheckCommand <template> Shell command template with {URL} placeholder to check if a preparation process is alive; also used to detect orphaned Todo by agent issues, which are reverted to Awaiting Workspace with a STRAY_TODO_BY_AGENT_REVERTED comment
53
+ --preparationProcessCheckCommand <template> Shell command template with {URL} placeholder to check if a preparation process is alive
54
54
  --fleetConfigFilePath <path> Path to the fleet-wide YAML config file holding the preparationWorker mapping (normalConcurrentLimit); falls back to the TDPM_FLEET_CONFIG environment variable, and to the built-in values when neither is set
55
55
 
56
56
  Options for notifyFinishedIssuePreparation:
@@ -118,13 +118,13 @@ Options for archive-unresumable-session:
118
118
  --archive-dir <path> Destination directory the conversation record is moved into; created when it does not exist (required)
119
119
  ```
120
120
 
121
- The `serveWeb` sub-command starts a local HTTP server that serves the TDPM web surface — the console tabs, the dashboard, and the in-tmux-by-human session list. `serveConsole` remains available as a deprecated alias that maps to the same handler, so existing invokers keep working during rollout; new usage should prefer `serveWeb`. One running instance serves every project: the user opens a per-project URL path `/projects/{pjcode}` (or `/projects/{pjcode}/{workflow-blocker|prs|triage|unread|failed-preparation|todo-by-human|todo-by-agent}`) and the bundled UI reads the `pjcode` from its own URL path and loads that project's list data. The server serves the bundled single-page-application `index.html` at `/`, `/index.html`, and every `/projects/{pjcode}` and `/projects/{pjcode}/{tab}` app route. Every response is sent with `Cache-Control: no-store`. Any request path containing a segment that begins with a dot (for example `/.git` or `/.env`) is rejected with HTTP 404. The UI bootstrap assets (HTML and JS) are served without authentication; served `*.json` files and `/api/*` paths require an access token supplied either as the `k` query parameter (`?k=<token>`) or the `X-PV-Token` request header. The access token is read from the `consoleAccessToken` config value and never appears on the command line. When the built UI bundle directory (`ui-dist`) is absent the server still starts and serves a minimal placeholder index for `/`, `/index.html`, and the per-project app routes.
121
+ The `serveWeb` sub-command starts a local HTTP server that serves the TDPM web surface — the console tabs, the dashboard, and the in-tmux-by-human session list. `serveConsole` remains available as a deprecated alias that maps to the same handler, so existing invokers keep working during rollout; new usage should prefer `serveWeb`. One running instance serves every project: the user opens a per-project URL path `/projects/{pjcode}` (or `/projects/{pjcode}/{workflow-blocker|prs|triage|unread|failed-preparation|todo-by-human}`) and the bundled UI reads the `pjcode` from its own URL path and loads that project's list data. The server serves the bundled single-page-application `index.html` at `/`, `/index.html`, and every `/projects/{pjcode}` and `/projects/{pjcode}/{tab}` app route. Every response is sent with `Cache-Control: no-store`. Any request path containing a segment that begins with a dot (for example `/.git` or `/.env`) is rejected with HTTP 404. The UI bootstrap assets (HTML and JS) are served without authentication; served `*.json` files and `/api/*` paths require an access token supplied either as the `k` query parameter (`?k=<token>`) or the `X-PV-Token` request header. The access token is read from the `consoleAccessToken` config value and never appears on the command line. When the built UI bundle directory (`ui-dist`) is absent the server still starts and serves a minimal placeholder index for `/`, `/index.html`, and the per-project app routes.
122
122
 
123
123
  The dashboard fragment is served unauthenticated at `GET /tdpm.txt` as `text/html`. Compose mode is opt-in: when `--dashboardDataDir` is set and every required data file is present (`machine-status.json`, `token-status.json`, and a `projects/<projectName>.json` for every name in `--dashboardProjectNames`), the server composes the fragment at request time from those files emitted by the scheduled run — one `projects/<projectName>.json` per project, keyed by the full project name (the same key the scheduled run writes; that project's actionable status counts), `machine-status.json` (mem%, cpu%, disk%, loadavg, cycle-minutes), and `token-status.json` (per-token rate-limit utilization, reset countdown, status color, and prep/hum counts). It renders the fixed-width fragment — the host-metrics line (`{memDot}M{mem}% {cpuDot}C{cpu}% {diskDot}D{disk}% cy{cycle} {loadDot}LA {load1} {load5} {load15}` for the no-disks case; each dot is 🔴 at or above the danger threshold — ≥90% for mem/cpu/disk, ≥10 for load1m — or 🟡 at or above the warning threshold — ≥80% for mem/cpu/disk, ≥5 for load1m — and absent when the metric is normal; the per-disk case still emits multiple lines), the project grid (a totals row summing each column across projects with data, then the header, then one row per name in `--dashboardProjectNames` order, labelled with the project's two-character display code derived from its name and prefixed with its severity dot), a blank separator line, then one row per token sorted by soonest seven-day reset — wrapped in `<tt>…</tt><br>` with spaces encoded as `&nbsp;`. Otherwise — when `--dashboardDataDir` is unset, or it is set but any required data file is missing — the server falls back to serving the static `tdpm.txt` byte-for-byte from `--dashboardDir`, exactly as before compose mode existed. The route returns HTTP 404 only when neither source is available (compose mode inactive and no static `tdpm.txt` present). Only `GET` is accepted on this path.
124
124
 
125
125
  Behind the token gate the server exposes three groups of routes:
126
126
 
127
- - Data delivery (GET): `GET /projects/{pjcode}/{workflow-blocker|prs|triage|unread|failed-preparation|todo-by-human|todo-by-agent}/list.json` and the matching `detail/<key>.json` files are read from `{consoleDataOutputDir}/{pjcode}/{tab}/`, and `GET /projects/{pjcode}/in-tmux-by-human/*` is read from `{consoleDataOutputDir}/{pjcode}/in-tmux-by-human/`. Each served list has the `.done` cross-tab exclusion applied. The schedule cycle writes the full tab files; `notifyFinishedIssuePreparation` additionally patches the affected tab files immediately after each status transition.
127
+ - Data delivery (GET): `GET /projects/{pjcode}/{workflow-blocker|prs|triage|unread|failed-preparation|todo-by-human}/list.json` and the matching `detail/<key>.json` files are read from `{consoleDataOutputDir}/{pjcode}/{tab}/`, and `GET /projects/{pjcode}/in-tmux-by-human/*` is read from `{consoleDataOutputDir}/{pjcode}/in-tmux-by-human/`. Each served list has the `.done` cross-tab exclusion applied. The schedule cycle writes the full tab files; `notifyFinishedIssuePreparation` additionally patches the affected tab files immediately after each status transition.
128
128
  - Flat in-tmux-by-human static files (GET): `GET /in-tmux-by-human/<file>.json` serves the flat static JSON files (for example `index.v4.json` and `{project}.v4.json`, plus the v3 files for backward compatibility) byte-for-byte from `--inTmuxDataDir`. Only flat file names directly under that directory are served; any other nested path and any path traversal attempt are rejected with HTTP 404. This route is distinct from the per-project `/projects/{pjcode}/in-tmux-by-human/*` data-delivery route above. These files are still gated by the same access token, so requests carry `?k=<token>`. The token-keyed file generation is performed by an external watcher, not by this server.
129
129
  - Per-session owner call files (GET and DELETE): `GET /in-tmux-by-human/call-to-user/{pjcode or NA}/{session}.yaml` serves the owner call file of exactly one session byte-for-byte from `--inTmuxDataDir`, as `text/yaml`, and `DELETE` on the same path removes it and answers HTTP 204 whether or not the file was still there, so a client that deletes twice is not in error. Only this one-directory-deep shape is accepted; `DELETE` is refused with HTTP 404 on every other path under the prefix, including the flat JSON files. Both methods sit behind the same access token as every other served file. There is no route that returns several sessions at once: a client derives one path from one session name and fetches that.
130
130
  - Read APIs (GET, backed by the server-side `GH_TOKEN`): `GET /api/itembody`, `GET /api/comments`, `GET /api/prfiles`, `GET /api/prcommits`, `GET /api/relatedprs`, and `GET /api/issuetitle`. Each takes a `url` query parameter. `GET /api/issuetitle` returns `{ state, merged, isPullRequest, title }`, where `title` comes from the pull request summary for pull request URLs and from the issue for issue URLs; it is served through an in-process cache: a merged result is cached permanently and every other result is re-fetched after 300 seconds. The console UI uses this endpoint both for the opened item header and to decorate full PR/issue URL links inside rendered markdown with their open/closed/merged state icon and title.
@@ -260,7 +260,7 @@ npx github-issue-tower-defence-management countInTmuxByHumanSessionsPerToken --c
260
260
 
261
261
  The `config.yaml` for the `schedule` command must match the input type of `HandleScheduledEventUseCase.run()`. Below is the structure:
262
262
 
263
- Workflow status names (`Unread`, `Awaiting Workspace`, `Awaiting Owner`, `Preparation`, `Failed Preparation`, `Todo by human`, `Todo by agent`, `In Tmux by human`, `In Tmux by agent`, `Done`, `Icebox`) are fixed code constants and cannot be overridden from CLI options, config files, or project README. The `schedule` command automatically creates any missing required statuses on the target project on each run via `SetupTowerDefenceProjectUseCase`. Projects with the legacy `Todo` and `In Tmux` status names are automatically migrated to `Todo by human` and `In Tmux by human` respectively by reusing the existing option IDs so that task associations are preserved. The legacy `PC Todo` status is removed from the required list and excluded from the project status list on the next setup run. The legacy `Awaiting Task Breakdown` status is removed from the required list; any project items in that status are automatically moved to `Todo by human` and the status option is removed on the next setup run. The `Awaiting Owner` status is a required workflow status.
263
+ Workflow status names (`Unread`, `Awaiting Workspace`, `Awaiting Owner`, `Preparation`, `Failed Preparation`, `Todo by human`, `In Tmux by human`, `In Tmux by agent`, `Done`, `Icebox`) are fixed code constants and cannot be overridden from CLI options, config files, or project README. The `schedule` command automatically creates any missing required statuses on the target project on each run via `SetupTowerDefenceProjectUseCase`. Projects with the legacy `Todo` and `In Tmux` status names are automatically migrated to `Todo by human` and `In Tmux by human` respectively by reusing the existing option IDs so that task associations are preserved. The legacy `PC Todo` status is removed from the required list and excluded from the project status list on the next setup run. The legacy `Awaiting Task Breakdown` status is removed from the required list; any project items in that status are automatically moved to `Todo by human` and the status option is removed on the next setup run. The `Awaiting Owner` status is a required workflow status.
264
264
 
265
265
  The two tmux-related statuses have distinct meanings. `In Tmux by human` means a task being handled in a live tmux session together with the human owner, who attends the session and converses with it; the owner does look at these tasks. `In Tmux by agent` means a task managed by an agent in tmux that the human owner does not look at. A task launched into a live, owner-attended session therefore belongs to `In Tmux by human`, and setting such a task to `In Tmux by agent` would remove it from the owner's view.
266
266
 
@@ -289,7 +289,7 @@ startPreparation?: # Optional: Enable automatic issue preparation workflow
289
289
  maximumPreparingIssuesCount: number | null # Max concurrent preparing issues. When token rotation is active, effective concurrency is also capped at 6 per available token. When null, the default is 6 per available token, or 6 without token rotation
290
290
  utilizationPercentageThreshold?: number # Optional: 5-hour utilization hard threshold (percentage, default 90). Tokens at or above this value are excluded from rotation
291
291
  allowedIssueAuthors?: string[] | null # Optional: Only start preparation for issues from these authors (null or omitted = no authors allowed; set an explicit list)
292
- preparationProcessCheckCommand?: string # Optional: Shell command template with {URL} placeholder to check if a preparation process is alive. When set, orphaned Preparation issues (process exits non-zero, or stale aw log) are evaluated for completion: if work is done they advance to Awaiting Owner; otherwise they fall back to Awaiting Workspace. Also used to detect orphaned Todo by agent issues (process exits non-zero): these are immediately reverted to Awaiting Workspace with an `Auto Status Check: STRAY_TODO_BY_AGENT_REVERTED` comment
292
+ preparationProcessCheckCommand?: string # Optional: Shell command template with {URL} placeholder to check if a preparation process is alive. When set, orphaned Preparation issues (process exits non-zero, or stale aw log) are evaluated for completion: if work is done they advance to Awaiting Owner; otherwise they fall back to Awaiting Workspace.
293
293
  awaitingOwnerStatus?: string | null # Optional: Project status name for issues awaiting owner review. When set with preparationProcessCheckCommand, orphaned issues with no rejections advance to this status instead of awaitingWorkspaceStatus
294
294
  autoAdvanceQualityCheckEnabled?: boolean # Optional: When true, issues in the Awaiting Owner status are automatically advanced to Done on each scheduled cycle. Default false (issues remain in Awaiting Owner for human review). Use awaitingOwnerStatus to configure the status name when it differs from the default
295
295
  autoRevertReopenedDoneEnabled?: boolean # Optional: When true, issues in the Done status that were reopened on GitHub (stateReason = REOPENED) are automatically moved back to Awaiting Workspace on each scheduled cycle. Default false. Requires startPreparation to be configured.
@@ -382,7 +382,7 @@ queryToAddProject?: string # Optional: GitHub search query string, used only whe
382
382
  thresholdForAutoReject?: number # Optional: Consecutive rejections before escalation (default: 3). Applies to orphaned-preparation, Auto Status Check reject, and conflict-revert paths alike
383
383
  thresholdForDispatchLoop?: number # Optional: How many times one agent may be dispatched on a single issue since the last human comment before the issue is moved to Failed Preparation instead of being dispatched again (default: 6). This bounds dispatch loops in which the agents do report each round, both when an agent names itself as the next step and when two agents name each other in turn. Any comment that is neither an agent report nor a comment this tool posts itself counts as human input and restarts the count. Applies to orphaned-preparation, Auto Status Check reject, and conflict-revert paths alike
384
384
  workflowBlockerResolvedWebhookUrl?: string # Optional: Webhook URL. Supports {URL} and {MESSAGE} placeholders
385
- preparationProcessCheckCommand?: string # Optional: Shell command template with {URL} placeholder to check if a preparation process is alive. Orphaned Preparation issues (process exits non-zero, or stale aw log) are evaluated for completion: if work is done they advance to Awaiting Owner; otherwise an `Auto Status Check: REJECTED` comment is posted and the issue falls back to Awaiting Workspace, except that once `thresholdForAutoReject` cumulative orphan-time rejections accumulate within the recent comment window (and no earlier escalation marker is present) the issue is transitioned to Failed Preparation instead. Also used to detect orphaned Todo by agent issues (process exits non-zero): these are immediately reverted to Awaiting Workspace with an `Auto Status Check: STRAY_TODO_BY_AGENT_REVERTED` comment
385
+ preparationProcessCheckCommand?: string # Optional: Shell command template with {URL} placeholder to check if a preparation process is alive. Orphaned Preparation issues (process exits non-zero, or stale aw log) are evaluated for completion: if work is done they advance to Awaiting Owner; otherwise an `Auto Status Check: REJECTED` comment is posted and the issue falls back to Awaiting Workspace, except that once `thresholdForAutoReject` cumulative orphan-time rejections accumulate within the recent comment window (and no earlier escalation marker is present) the issue is transitioned to Failed Preparation instead.
386
386
  codexHomeCandidates?: string[] # Optional: Ordered list of CODEX_HOME directory paths for Codex profile cycling. Absent or empty keeps current behavior
387
387
  claudeCodeOauthTokenListJsonPath?: string # Optional: Path to a JSON file listing long-term Claude Code OAuth tokens to rotate across (see "Claude OAuth Token Rotation" below)
388
388
  awLogDirectoryPath?: string # Optional: Directory path where aw log files named {org}_{repo}_{number}_* are written. Used with awLogStaleThresholdMinutes to detect zombie-wrapper orphans, and by startPreparation when an issue has more than one open same-repository PR: the PR whose head branch is checked out in the working directory recorded on the `Current directory:` line of the issue's newest {org}_{repo}_{number}_{YYYYMMDD}_{HHMMSS}.log is adopted and every other PR is closed. When this is unset, or that branch is the head branch of no open PR, the PR created first is adopted
@@ -419,7 +419,7 @@ changeTargetPathAliases?: # Optional: Map of short alias keys to full repository
419
419
  errorReportingRepository?: string # Optional: GitHub repository in `owner/repo` format for TDPM-level issue routing. When set: (1) any unhandled error that escapes the CLI process creates a new GitHub issue here (title: `CLI error: {errorName}: {first 80 chars of message}`), or adds a comment to an existing open issue with the same title; (2) "Register missing agent definition" tasks (triggered when an agent definition file is absent) and "Unregistered agent in workflow configuration" blocker issues are created here instead of the product repository. Requires GH_TOKEN. Can also be set via the TDPM_ERROR_REPORT_REPOSITORY environment variable without a config file.
420
420
  ```
421
421
 
422
- Workflow status names (`Unread`, `Awaiting Workspace`, `Awaiting Owner`, `Preparation`, `Failed Preparation`, `Todo by human`, `Todo by agent`, `In Tmux by human`, `In Tmux by agent`, `Done`, `Icebox`) are hardcoded constants and are not accepted via this config, the CLI, or the project README. To ensure they exist on the target project, run the `schedule` command — it invokes `SetupTowerDefenceProjectUseCase` automatically. Projects with the legacy `Todo` and `In Tmux` status names are automatically migrated; `PC Todo` and `Awaiting Task Breakdown` are removed on the next setup run (items in `Awaiting Task Breakdown` are moved to `Todo by human` before the option is deleted). `Awaiting Owner` is a required workflow status created automatically when absent.
422
+ Workflow status names (`Unread`, `Awaiting Workspace`, `Awaiting Owner`, `Preparation`, `Failed Preparation`, `Todo by human`, `In Tmux by human`, `In Tmux by agent`, `Done`, `Icebox`) are hardcoded constants and are not accepted via this config, the CLI, or the project README. To ensure they exist on the target project, run the `schedule` command — it invokes `SetupTowerDefenceProjectUseCase` automatically. Projects with the legacy `Todo` and `In Tmux` status names are automatically migrated; `PC Todo` and `Awaiting Task Breakdown` are removed on the next setup run (items in `Awaiting Task Breakdown` are moved to `Todo by human` before the option is deleted). `Awaiting Owner` is a required workflow status created automatically when absent.
423
423
 
424
424
  Example:
425
425
 
@@ -575,7 +575,7 @@ When `consoleDataOutputDir` is configured, each schedule cycle writes the full p
575
575
  {consoleDataOutputDir}/{projectName}/{tab}/list.json
576
576
  ```
577
577
 
578
- for `tab` in `workflow-blocker`, `prs`, `triage`, `unread`, `failed-preparation`, `todo-by-human`, and `todo-by-agent`. Each file is written atomically (written to a `.tmp` file then renamed) so external readers never see a partial write. When `consoleDataOutputDir` is unset the generation is skipped, and any error during generation is logged and swallowed so the schedule cycle is never affected.
578
+ for `tab` in `workflow-blocker`, `prs`, `triage`, `unread`, `failed-preparation`, and `todo-by-human`. Each file is written atomically (written to a `.tmp` file then renamed) so external readers never see a partial write. When `consoleDataOutputDir` is unset the generation is skipped, and any error during generation is logged and swallowed so the schedule cycle is never affected.
579
579
 
580
580
  ### Item Selection
581
581
 
@@ -585,14 +585,13 @@ Most tabs apply a common actionable filter to the project's issues: the issue is
585
585
  - `unread`: status equals `Unread` (case-insensitive)
586
586
  - `failed-preparation`: status equals `Failed Preparation` (exact case)
587
587
  - `todo-by-human`: status equals `Todo by human` or the legacy value `Todo` (exact case)
588
- - `todo-by-agent`: status equals `Todo by agent` (exact case)
589
588
  - `triage`: every open issue assigned to the console owner whose story field is empty or whose story name contains `no story` (case-insensitive), the two being the same operational state because the `NO STORY` option is what this tool assigns to an issue that has none, whatever status it carries, whatever it depends on and whatever next action date or hour it holds, because the `NO STORY` story option is assigned by this tool rather than chosen by a person, so the triage decision stays open however far the status has advanced and however the issue is blocked or scheduled. Pull requests are excluded, because a pull request's story is written by this tool from its task issue. This tab is the one tab built from the full issue list rather than from the shared actionable set, so `In Tmux by agent` is listed here while every other tab drops it
590
589
 
591
590
  The `workflow-blocker` tab is the one exception to the common actionable filter: it lists every issue whose story name equals the configured `workflowBlockerStoryName` (case-insensitive) and whose issue state is not closed, regardless of its status, next action date, next action hour, or depended issue URLs. When `workflowBlockerStoryName` is unset, the `workflow-blocker` list is always empty.
592
591
 
593
592
  ### JSON Shape
594
593
 
595
- The `workflow-blocker`, `prs`, `unread`, `failed-preparation`, `todo-by-human`, and `todo-by-agent` tabs share this shape:
594
+ The `workflow-blocker`, `prs`, `unread`, `failed-preparation`, and `todo-by-human` tabs share this shape:
596
595
 
597
596
  ```json
598
597
  {
@@ -627,10 +626,10 @@ The `triage` tab omits `statusOptions`, adds `storyOptions` (all story field opt
627
626
 
628
627
  - `pjcode`: The configured project name.
629
628
  - `generatedAt`: UTC timestamp (no milliseconds) when the lists were generated. Item `createdAt` values keep milliseconds.
630
- - `statusOptions`: Project status field options offered as routing buttons. The current-status option and `Done` are excluded; `failed-preparation` additionally excludes `Preparation`, `Icebox`, `Unread`, `In Tmux by human`, `In Tmux by agent`, and `Todo by agent`.
629
+ - `statusOptions`: Project status field options offered as routing buttons. The current-status option and `Done` are excluded; `failed-preparation` additionally excludes `Preparation`, `Icebox`, `Unread`, `In Tmux by human`, and `In Tmux by agent`.
631
630
  - `storyOptions` (triage tab only): All story field options.
632
631
  - `storyOrder`: Story field option names in field order (empty array when the project has no story field).
633
- - `storyColors`: Map from story name to its color. Object value (`{ "color": ... }`) for `workflow-blocker`/`prs`/`unread`/`failed-preparation`/`todo-by-human`/`todo-by-agent`; plain string value for `triage`.
632
+ - `storyColors`: Map from story name to its color. Object value (`{ "color": ... }`) for `workflow-blocker`/`prs`/`unread`/`failed-preparation`/`todo-by-human`; plain string value for `triage`.
634
633
  - `items`: Selected issues, stable-sorted by their story's position in `storyOrder` (unknown stories sorted last). No item carries a `body` field.
635
634
 
636
635
  ## In-Tmux-by-Human Data
@@ -91,14 +91,12 @@ exports.CONSOLE_DONE_TAB_NAMES = [
91
91
  'prs',
92
92
  'failed-preparation',
93
93
  'todo-by-human',
94
- 'todo-by-agent',
95
94
  'in-tmux-by-human',
96
95
  ];
97
96
  exports.CONSOLE_DONE_STATUS_SELECTED_TAB_NAMES = [
98
97
  'prs',
99
98
  'failed-preparation',
100
99
  'todo-by-human',
101
- 'todo-by-agent',
102
100
  'in-tmux-by-human',
103
101
  ];
104
102
  exports.CONSOLE_DONE_STORY_SELECTED_TAB_NAMES = [
@@ -1 +1 @@
1
- {"version":3,"file":"consoleDoneStore.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleDoneStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consoleDoneStore.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleDoneStore.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,6 @@ exports.CONSOLE_LIST_TAB_NAMES = [
6
6
  'workflow-blocker',
7
7
  'prs',
8
8
  'failed-preparation',
9
- 'todo-by-agent',
10
9
  'queued',
11
10
  'stories',
12
11
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"consoleTabNames.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleTabNames.ts"],"names":[],"mappings":";;;AAEa,QAAA,sBAAsB,GAAqB;IACtD,eAAe;IACf,kBAAkB;IAClB,KAAK;IACL,oBAAoB;IACpB,eAAe;IACf,QAAQ;IACR,SAAS;CACV,CAAC;AAEF,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAEjC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAC3E,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAD1D,QAAA,QAAQ,YACkD;AAEhE,MAAM,gBAAgB,GAAG,CAC9B,KAAgB,EAChB,UAAoB,EACT,EAAE;IACb,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7E,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;QACtB,MAAM,UAAU,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,MAAM,KAAK,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,OAAO;YACL,IAAI;YACJ,QAAQ;YACR,OAAO,EACL,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC3D,wBAAwB;SAC3B,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;SAChE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC;AAnBW,QAAA,gBAAgB,oBAmB3B"}
1
+ {"version":3,"file":"consoleTabNames.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/consoleTabNames.ts"],"names":[],"mappings":";;;AAEa,QAAA,sBAAsB,GAAqB;IACtD,eAAe;IACf,kBAAkB;IAClB,KAAK;IACL,oBAAoB;IACpB,QAAQ;IACR,SAAS;CACV,CAAC;AAEF,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAEjC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAC3E,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAD1D,QAAA,QAAQ,YACkD;AAEhE,MAAM,gBAAgB,GAAG,CAC9B,KAAgB,EAChB,UAAoB,EACT,EAAE;IACb,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7E,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;QACtB,MAAM,UAAU,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,MAAM,KAAK,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,OAAO;YACL,IAAI;YACJ,QAAQ;YACR,OAAO,EACL,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC3D,wBAAwB;SAC3B,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;SAChE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC;AAnBW,QAAA,gBAAgB,oBAmB3B"}