github-issue-tower-defence-management 1.147.4 → 1.148.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.
Files changed (43) hide show
  1. package/.github/workflows/umino-project.yml +12 -0
  2. package/CHANGELOG.md +14 -0
  3. package/README.md +4 -0
  4. package/bin/adapter/entry-points/console/ui-dist/assets/index-D7Yt5Ya6.js +82 -0
  5. package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
  6. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +3 -0
  7. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  8. package/bin/adapter/repositories/issue/RestIssueRepository.js +47 -0
  9. package/bin/adapter/repositories/issue/RestIssueRepository.js.map +1 -1
  10. package/bin/domain/entities/SearchedIssue.js +3 -0
  11. package/bin/domain/entities/SearchedIssue.js.map +1 -0
  12. package/bin/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.js +68 -10
  13. package/bin/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.js.map +1 -1
  14. package/bin/domain/usecases/HandleScheduledEventUseCase.js +3 -0
  15. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  16. package/package.json +1 -1
  17. package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +1 -0
  18. package/src/adapter/entry-points/console/ui/src/features/console/lib/markdown.test.ts +48 -0
  19. package/src/adapter/entry-points/console/ui/src/features/console/lib/markdown.ts +55 -25
  20. package/src/adapter/entry-points/console/ui-dist/assets/index-D7Yt5Ya6.js +82 -0
  21. package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
  22. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +6 -1
  23. package/src/adapter/repositories/issue/RestIssueRepository.test.ts +107 -0
  24. package/src/adapter/repositories/issue/RestIssueRepository.ts +69 -2
  25. package/src/domain/entities/SearchedIssue.ts +11 -0
  26. package/src/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.test.ts +208 -0
  27. package/src/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.ts +104 -13
  28. package/src/domain/usecases/HandleScheduledEventUseCase.ts +5 -0
  29. package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +3 -1
  30. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +5 -3
  31. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  32. package/types/adapter/repositories/issue/RestIssueRepository.d.ts +5 -2
  33. package/types/adapter/repositories/issue/RestIssueRepository.d.ts.map +1 -1
  34. package/types/domain/entities/SearchedIssue.d.ts +11 -0
  35. package/types/domain/entities/SearchedIssue.d.ts.map +1 -0
  36. package/types/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.d.ts +10 -2
  37. package/types/domain/usecases/AssignNoAssigneeIssueToManagerUseCase.d.ts.map +1 -1
  38. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +2 -0
  39. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  40. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts +3 -1
  41. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts.map +1 -1
  42. package/bin/adapter/entry-points/console/ui-dist/assets/index-CtUryuGr.js +0 -82
  43. package/src/adapter/entry-points/console/ui-dist/assets/index-CtUryuGr.js +0 -82
@@ -101,6 +101,18 @@ jobs:
101
101
 
102
102
  echo "Resolved ITEM_ID=$ITEM_ID"
103
103
 
104
+ if [ "${{ github.event.action }}" = "opened" ]; then
105
+ EXISTING_STATUS=$(gh api graphql \
106
+ -f query='query($itemId:ID!){node(id:$itemId){... on ProjectV2Item{fieldValueByName(name:"Status"){... on ProjectV2ItemFieldSingleSelectValue{name}}}}}' \
107
+ -f itemId="$ITEM_ID" \
108
+ --jq '.data.node.fieldValueByName.name // ""')
109
+
110
+ if [ -n "$EXISTING_STATUS" ]; then
111
+ echo "Status is already $EXISTING_STATUS; keeping it instead of overwriting with ${{ env.unread }}"
112
+ exit 0
113
+ fi
114
+ fi
115
+
104
116
  gh api graphql \
105
117
  -f query='mutation($projectId:ID!,$itemId:ID!,$fieldId:ID!,$optionId:String!){updateProjectV2ItemFieldValue(input:{projectId:$projectId,itemId:$itemId,fieldId:$fieldId,value:{singleSelectOptionId:$optionId}}){projectV2Item{id}}}' \
106
118
  -f projectId="$PROJECT_V2_ID" \
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [1.148.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.147.5...v1.148.0) (2026-08-09)
2
+
3
+
4
+ ### Features
5
+
6
+ * **core:** assign manager to allow-listed authors' pull requests that are not project items ([#1467](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1467)) ([7d2a606](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/7d2a606e453b957578fdf75987974f6d8e5458c4))
7
+
8
+ ## [1.147.5](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.147.4...v1.147.5) (2026-08-09)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **console:** render cross-repository issue references with the referenced repository ([#1462](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/1462)) ([d415451](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/d415451727639a8f23bbcb44e4153184748fea0d))
14
+
1
15
  ## [1.147.4](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.147.3...v1.147.4) (2026-08-09)
2
16
 
3
17
 
package/README.md CHANGED
@@ -216,6 +216,8 @@ labelsNotRequiringPullRequest?: string[] | null # Optional: List of issue labels
216
216
  changeTargetPathAliases?: Record<string, string> | null # Optional: Map of short alias keys to full repository-root-relative directory paths, for use with `change-target:<alias>` labels. Allows deeply nested paths that exceed GitHub's 50-character label limit to be referenced via a short alias. Example: `{ "adapters": "src/domain/usecases/adapter-interfaces" }` — a label `change-target:adapters` then matches files under `src/domain/usecases/adapter-interfaces/`. Keys not matching any `change-target:` label value are ignored; values with leading or trailing slashes are normalized automatically. Declared at the top level (sibling of startPreparation), not inside it.
217
217
  claudeCodeOauthTokenListJsonPath?: string # Optional: Path to a JSON file listing long-term Claude Code OAuth tokens to rotate across (see "Claude OAuth Token Rotation" below). Declared at the top level (sibling of startPreparation), not inside it.
218
218
  autoAssignManagerAuthors?: string | string[] | null # Optional: Restrict which authors' open, unassigned issues and pull requests are auto-assigned to the manager. Accepts a comma-separated string or an array of GitHub author logins (bot logins carry the `[bot]` suffix, for example `renovate[bot]`). When set to a non-empty list, only items whose author is in the list are auto-assigned; when omitted, null, or empty, every open unassigned item is auto-assigned (current behavior). Author matching is exact equality. Declared at the top level (sibling of startPreparation), not inside it.
219
+ queryToAddProjectEnabled?: boolean # Optional: Enable the queryToAddProject search (default false). The search runs only when this is true, so setting queryToAddProject alone changes nothing. Declared at the top level (sibling of startPreparation), not inside it.
220
+ queryToAddProject?: string | null # Optional: GitHub search query string, used only when queryToAddProjectEnabled is true. Each schedule cycle, issues and pull requests matching this query that are not already on the project board are added to the project and, when their author satisfies autoAssignManagerAuthors, assigned to the manager. Omit or set to null to skip this search. Declared at the top level (sibling of startPreparation), not inside it.
219
221
  dailySecurityScan?: # Optional: Run a daily OSV-Scanner security scan across locally cloned repositories of the org. Declared at the top level (sibling of startPreparation).
220
222
  scanBaseDirectory: string # Base directory searched (4 levels deep) for cloned repositories to scan
221
223
  targetHourUtc: number # UTC hour (0-23) at which the scan runs once per day; the scan runs only when a target date matches this hour at minute zero
@@ -286,6 +288,8 @@ maximumPreparingIssuesCount?: number # Optional: Max concurrent preparing issues
286
288
  utilizationPercentageThreshold?: number # Optional: 5-hour utilization hard threshold (percentage, default 90). Tokens at or above this value are excluded from rotation
287
289
  allowedIssueAuthors?: string # Optional: Comma-separated list of allowed issue authors
288
290
  autoAssignManagerAuthors?: string # Optional: Comma-separated list of author logins whose open, unassigned issues and pull requests are auto-assigned to the manager. When set to a non-empty list, only items whose author is in the list are auto-assigned; when omitted or empty, every open unassigned item is auto-assigned (current behavior). Author matching is exact equality; bot logins carry the `[bot]` suffix (for example `renovate[bot]`)
291
+ queryToAddProjectEnabled?: boolean # Optional: Enable the queryToAddProject search (default false). The search runs only when this is true, so setting queryToAddProject alone changes nothing
292
+ queryToAddProject?: string # Optional: GitHub search query string, used only when queryToAddProjectEnabled is true. Each schedule cycle, issues and pull requests matching this query that are not already on the project board are added to the project and, when their author satisfies autoAssignManagerAuthors, assigned to the manager. Omit to skip this search.
289
293
  thresholdForAutoReject?: number # Optional: Consecutive rejections before escalation (default: 3)
290
294
  workflowBlockerResolvedWebhookUrl?: string # Optional: Webhook URL. Supports {URL} and {MESSAGE} placeholders
291
295
  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 Quality Check; 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