@cats-inc/cats-platform 0.1.10 → 0.1.21

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 (163) hide show
  1. package/.env.example +7 -10
  2. package/build/desktop/bootstrapPage.d.ts.map +1 -1
  3. package/build/desktop/bootstrapPage.js +162 -55
  4. package/build/desktop/bootstrapPage.js.map +1 -1
  5. package/build/desktop/cliInventoryProbe.d.ts +18 -0
  6. package/build/desktop/cliInventoryProbe.d.ts.map +1 -1
  7. package/build/desktop/cliInventoryProbe.js +42 -0
  8. package/build/desktop/cliInventoryProbe.js.map +1 -1
  9. package/build/desktop/contracts.d.ts +9 -0
  10. package/build/desktop/contracts.d.ts.map +1 -1
  11. package/build/desktop/main.js +101 -20
  12. package/build/desktop/main.js.map +1 -1
  13. package/build/desktop/readiness.d.ts.map +1 -1
  14. package/build/desktop/readiness.js +35 -2
  15. package/build/desktop/readiness.js.map +1 -1
  16. package/build/desktop/tray.d.ts +1 -1
  17. package/build/desktop/tray.d.ts.map +1 -1
  18. package/build/desktop/tray.js +2 -7
  19. package/build/desktop/tray.js.map +1 -1
  20. package/build/desktop/trayMenu.d.ts +23 -2
  21. package/build/desktop/trayMenu.d.ts.map +1 -1
  22. package/build/desktop/trayMenu.js +24 -30
  23. package/build/desktop/trayMenu.js.map +1 -1
  24. package/build/desktop/updateDialog.d.ts +40 -0
  25. package/build/desktop/updateDialog.d.ts.map +1 -0
  26. package/build/desktop/updateDialog.js +178 -0
  27. package/build/desktop/updateDialog.js.map +1 -0
  28. package/build/desktop/updateNotifications.js +2 -2
  29. package/build/desktop/updateNotifications.js.map +1 -1
  30. package/build/desktop/updaterAdapter.d.ts +1 -0
  31. package/build/desktop/updaterAdapter.d.ts.map +1 -1
  32. package/build/desktop/updaterAdapter.js +13 -1
  33. package/build/desktop/updaterAdapter.js.map +1 -1
  34. package/build/renderer/assets/{ActiveSessionPermissionChip-Dl2UOFgh.js → ActiveSessionPermissionChip-DImsuR9T.js} +1 -1
  35. package/build/renderer/assets/{App-CPqGDXVi.js → App-BfOvMP2m.js} +1 -1
  36. package/build/renderer/assets/{App-ChvP0G9X.js → App-DKOSn0o_.js} +1 -1
  37. package/build/renderer/assets/{App-C57f4p8k.js → App-DWd7I3Z2.js} +1 -1
  38. package/build/renderer/assets/{WorkspaceAppRoutes-DYg2vnjz.js → WorkspaceAppRoutes-CrbTA9En.js} +1 -1
  39. package/build/renderer/assets/app-BTww3Hl4.js +43 -0
  40. package/build/renderer/assets/{app-XnXwkcD2.css → app-CPxWQwLA.css} +1 -1
  41. package/build/renderer/assets/conversationSidebarRecentEntries-QuaOPxCb.js +6 -0
  42. package/build/renderer/assets/{useDraftSessionChips-By3XXabI.js → useDraftSessionChips-DCIId0eY.js} +1 -1
  43. package/build/renderer/index.html +2 -2
  44. package/build/server/app/renderer/auth/api.d.ts +28 -2
  45. package/build/server/app/renderer/auth/api.d.ts.map +1 -1
  46. package/build/server/app/renderer/auth/api.js +29 -4
  47. package/build/server/app/renderer/auth/api.js.map +1 -1
  48. package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.d.ts +11 -4
  49. package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.d.ts.map +1 -1
  50. package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.js +25 -5
  51. package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.js.map +1 -1
  52. package/build/server/app/server/authGatePolicy.js +1 -2
  53. package/build/server/app/server/authGatePolicy.js.map +1 -1
  54. package/build/server/app/server/authRoutes.d.ts +14 -1
  55. package/build/server/app/server/authRoutes.d.ts.map +1 -1
  56. package/build/server/app/server/authRoutes.js +395 -76
  57. package/build/server/app/server/authRoutes.js.map +1 -1
  58. package/build/server/app/server/contracts.d.ts +4 -1
  59. package/build/server/app/server/contracts.d.ts.map +1 -1
  60. package/build/server/app/server/dependencies.d.ts.map +1 -1
  61. package/build/server/app/server/dependencies.js +6 -1
  62. package/build/server/app/server/dependencies.js.map +1 -1
  63. package/build/server/app/server/platformSetupRoutes.d.ts +2 -1
  64. package/build/server/app/server/platformSetupRoutes.d.ts.map +1 -1
  65. package/build/server/app/server/platformSetupRoutes.js +129 -64
  66. package/build/server/app/server/platformSetupRoutes.js.map +1 -1
  67. package/build/server/app/server/requestRouter.d.ts.map +1 -1
  68. package/build/server/app/server/requestRouter.js +3 -0
  69. package/build/server/app/server/requestRouter.js.map +1 -1
  70. package/build/server/app/server/runtimeSurfaceProxy.d.ts.map +1 -1
  71. package/build/server/app/server/runtimeSurfaceProxy.js +12 -17
  72. package/build/server/app/server/runtimeSurfaceProxy.js.map +1 -1
  73. package/build/server/config.d.ts +1 -3
  74. package/build/server/config.d.ts.map +1 -1
  75. package/build/server/config.js +2 -13
  76. package/build/server/config.js.map +1 -1
  77. package/build/server/design/components/providerModelFieldsSupport.d.ts.map +1 -1
  78. package/build/server/design/components/providerModelFieldsSupport.js +4 -1
  79. package/build/server/design/components/providerModelFieldsSupport.js.map +1 -1
  80. package/build/server/design/components/useProviderTargetReconciliation.d.ts.map +1 -1
  81. package/build/server/design/components/useProviderTargetReconciliation.js +3 -1
  82. package/build/server/design/components/useProviderTargetReconciliation.js.map +1 -1
  83. package/build/server/platform/auth/actionGrant.d.ts +61 -0
  84. package/build/server/platform/auth/actionGrant.d.ts.map +1 -0
  85. package/build/server/platform/auth/actionGrant.js +108 -0
  86. package/build/server/platform/auth/actionGrant.js.map +1 -0
  87. package/build/server/platform/auth/adminCredentials.d.ts +37 -0
  88. package/build/server/platform/auth/adminCredentials.d.ts.map +1 -0
  89. package/build/server/platform/auth/adminCredentials.js +63 -0
  90. package/build/server/platform/auth/adminCredentials.js.map +1 -0
  91. package/build/server/platform/auth/bootstrap.d.ts +14 -0
  92. package/build/server/platform/auth/bootstrap.d.ts.map +1 -1
  93. package/build/server/platform/auth/bootstrap.js +29 -4
  94. package/build/server/platform/auth/bootstrap.js.map +1 -1
  95. package/build/server/platform/auth/config.d.ts.map +1 -1
  96. package/build/server/platform/auth/config.js +1 -1
  97. package/build/server/platform/auth/config.js.map +1 -1
  98. package/build/server/platform/auth/errorCodes.d.ts +2 -0
  99. package/build/server/platform/auth/errorCodes.d.ts.map +1 -1
  100. package/build/server/platform/auth/errorCodes.js +2 -0
  101. package/build/server/platform/auth/errorCodes.js.map +1 -1
  102. package/build/server/platform/auth/googleAccount.d.ts +40 -13
  103. package/build/server/platform/auth/googleAccount.d.ts.map +1 -1
  104. package/build/server/platform/auth/googleAccount.js +89 -70
  105. package/build/server/platform/auth/googleAccount.js.map +1 -1
  106. package/build/server/platform/auth/index.d.ts +4 -0
  107. package/build/server/platform/auth/index.d.ts.map +1 -1
  108. package/build/server/platform/auth/index.js +4 -0
  109. package/build/server/platform/auth/index.js.map +1 -1
  110. package/build/server/platform/auth/localLogin.d.ts +10 -0
  111. package/build/server/platform/auth/localLogin.d.ts.map +1 -1
  112. package/build/server/platform/auth/localLogin.js +17 -0
  113. package/build/server/platform/auth/localLogin.js.map +1 -1
  114. package/build/server/platform/auth/loginMethods.d.ts +18 -0
  115. package/build/server/platform/auth/loginMethods.d.ts.map +1 -0
  116. package/build/server/platform/auth/loginMethods.js +19 -0
  117. package/build/server/platform/auth/loginMethods.js.map +1 -0
  118. package/build/server/platform/auth/securityEvents.d.ts +31 -0
  119. package/build/server/platform/auth/securityEvents.d.ts.map +1 -0
  120. package/build/server/platform/auth/securityEvents.js +45 -0
  121. package/build/server/platform/auth/securityEvents.js.map +1 -0
  122. package/build/server/products/chat/api/contracts.d.ts +0 -8
  123. package/build/server/products/chat/api/contracts.d.ts.map +1 -1
  124. package/build/server/products/chat/api/setupRoutes.d.ts.map +1 -1
  125. package/build/server/products/chat/api/setupRoutes.js +2 -84
  126. package/build/server/products/chat/api/setupRoutes.js.map +1 -1
  127. package/build/server/products/shared/api/workspaceContracts.d.ts +0 -8
  128. package/build/server/products/shared/api/workspaceContracts.d.ts.map +1 -1
  129. package/build/server/runtime/client.d.ts +11 -0
  130. package/build/server/runtime/client.d.ts.map +1 -1
  131. package/build/server/runtime/client.js +23 -1
  132. package/build/server/runtime/client.js.map +1 -1
  133. package/build/server/shared/i18n/catalogs/en.d.ts.map +1 -1
  134. package/build/server/shared/i18n/catalogs/en.js +40 -0
  135. package/build/server/shared/i18n/catalogs/en.js.map +1 -1
  136. package/build/server/shared/i18n/catalogs/zh-TW.d.ts.map +1 -1
  137. package/build/server/shared/i18n/catalogs/zh-TW.js +39 -0
  138. package/build/server/shared/i18n/catalogs/zh-TW.js.map +1 -1
  139. package/build/server/shared/i18n/index.d.ts +39 -0
  140. package/build/server/shared/i18n/index.d.ts.map +1 -1
  141. package/build/server/shared/i18n/messageKeys.d.ts +39 -0
  142. package/build/server/shared/i18n/messageKeys.d.ts.map +1 -1
  143. package/build/server/shared/i18n/messageKeys.js +39 -0
  144. package/build/server/shared/i18n/messageKeys.js.map +1 -1
  145. package/build/server/shared/providerCatalog.d.ts +3 -2
  146. package/build/server/shared/providerCatalog.d.ts.map +1 -1
  147. package/build/server/shared/providerCatalog.js +9 -1
  148. package/build/server/shared/providerCatalog.js.map +1 -1
  149. package/build/server/shared/providerCatalogData.d.ts +11 -1
  150. package/build/server/shared/providerCatalogData.d.ts.map +1 -1
  151. package/build/server/shared/providerCatalogData.js +9 -0
  152. package/build/server/shared/providerCatalogData.js.map +1 -1
  153. package/build/server/shared/providerCatalogInstances.d.ts.map +1 -1
  154. package/build/server/shared/providerCatalogInstances.js +3 -0
  155. package/build/server/shared/providerCatalogInstances.js.map +1 -1
  156. package/package.json +1 -1
  157. package/scripts/README.md +30 -0
  158. package/scripts/linux/node-cli-common.sh +2 -75
  159. package/scripts/macos/node-cli-common.sh +2 -75
  160. package/scripts/windows/Check-WindowsSetupReadiness.ps1 +14 -443
  161. package/scripts/windows/Remove-MergedBranches.ps1 +229 -0
  162. package/build/renderer/assets/app-DVN9Ghrk.js +0 -43
  163. package/build/renderer/assets/conversationSidebarRecentEntries-XZVCnMLw.js +0 -6
@@ -0,0 +1,229 @@
1
+ <#
2
+ .SYNOPSIS
3
+ Remove local branches whose upstream was deleted after a squash merge.
4
+
5
+ .DESCRIPTION
6
+ Intended as the opening step of an agent session in a repository that is
7
+ shared by several agents working from one clone.
8
+
9
+ The project merges with `gh pr merge --auto --squash` and lets GitHub delete
10
+ the head branch. A squashed commit has a different SHA than the branch it
11
+ came from, so `git branch -d` always reports "not fully merged" and refuses.
12
+ This script therefore uses upstream state, not commit reachability: a branch
13
+ counts as merged when it had an upstream and that upstream is gone, which
14
+ for this project only happens after the pull request landed.
15
+
16
+ A branch that was never pushed has no upstream at all and can never be
17
+ reported as gone, so local-only experiments are never swept. Branches that
18
+ are checked out in another worktree are reported and skipped rather than
19
+ left to fail.
20
+
21
+ The working tree must be clean. In a shared clone a dirty tree usually means
22
+ another agent left work behind, so the script stops instead of guessing.
23
+
24
+ The default branch comes from origin/HEAD, falling back to init.defaultBranch,
25
+ main, or master, and only ever to a branch that actually exists - guessing a
26
+ name breaks a clone whose default is not what this script assumed. A fetch
27
+ that fails because the remote is unreachable only warns, since the recorded
28
+ upstream state stays accurate and an offline run can at worst miss a recently
29
+ merged branch.
30
+
31
+ .PARAMETER ReturnToDefault
32
+ Switch to the default branch and fast-forward it after sweeping. The switch
33
+ happens regardless when the current branch is one of the deleted ones,
34
+ because a checked-out branch cannot be removed.
35
+
36
+ .PARAMETER SkipFetch
37
+ Skip `git fetch --prune`. Only useful when a fetch just ran, since without a
38
+ prune the deleted upstreams are not yet visible as gone.
39
+
40
+ .PARAMETER RepositoryRoot
41
+ Override the repository to operate on. Intended for isolated validation.
42
+
43
+ .EXAMPLE
44
+ .\Remove-MergedBranches.ps1 -WhatIf
45
+ Show which branches would be removed without changing anything.
46
+
47
+ .EXAMPLE
48
+ .\Remove-MergedBranches.ps1 -ReturnToDefault
49
+ Sweep merged branches, then land on an up-to-date default branch.
50
+ #>
51
+ [CmdletBinding(SupportsShouldProcess)]
52
+ param(
53
+ [Parameter(Mandatory = $false)]
54
+ [switch]$ReturnToDefault,
55
+
56
+ [Parameter(Mandatory = $false)]
57
+ [switch]$SkipFetch,
58
+
59
+ [Parameter(Mandatory = $false)]
60
+ [string]$RepositoryRoot
61
+ )
62
+
63
+ $ErrorActionPreference = "Stop"
64
+
65
+ function Invoke-Git {
66
+ param([string[]]$Arguments, [switch]$AllowFailure)
67
+
68
+ $output = & git -C $script:RepoRoot @Arguments 2>&1
69
+ if ($LASTEXITCODE -ne 0 -and -not $AllowFailure) {
70
+ throw "git $($Arguments -join ' ') failed with exit code $LASTEXITCODE`n$output"
71
+ }
72
+ return $output
73
+ }
74
+
75
+ function Test-LocalBranch {
76
+ param([string]$Name)
77
+
78
+ if (-not $Name) { return $false }
79
+ Invoke-Git @("show-ref", "--verify", "--quiet", "refs/heads/$Name") -AllowFailure | Out-Null
80
+ return ($LASTEXITCODE -eq 0)
81
+ }
82
+
83
+ function Get-RemoteDefaultBranch {
84
+ $ref = Invoke-Git @("symbolic-ref", "--quiet", "refs/remotes/origin/HEAD") -AllowFailure
85
+ if ($LASTEXITCODE -eq 0 -and $ref) {
86
+ return ($ref | Select-Object -First 1).ToString().Trim() -replace '^refs/remotes/origin/', ''
87
+ }
88
+ return $null
89
+ }
90
+
91
+ function Resolve-DefaultBranch {
92
+ # origin/HEAD records what the remote considers default. Prefer it, and try
93
+ # once to populate it when the clone never recorded one.
94
+ $name = Get-RemoteDefaultBranch
95
+ if ($name) { return $name }
96
+
97
+ Invoke-Git @("remote", "set-head", "origin", "--auto") -AllowFailure | Out-Null
98
+ $name = Get-RemoteDefaultBranch
99
+ if ($name) { return $name }
100
+
101
+ # No remote, or one that has never been reachable. Guessing a name here is
102
+ # how a fresh clone breaks, because init.defaultBranch varies by machine.
103
+ # Only return a branch that actually exists.
104
+ $configured = Invoke-Git @("config", "--get", "init.defaultBranch") -AllowFailure
105
+ $configuredName = if ($LASTEXITCODE -eq 0 -and $configured) {
106
+ ($configured | Select-Object -First 1).ToString().Trim()
107
+ } else {
108
+ $null
109
+ }
110
+
111
+ foreach ($candidate in @($configuredName, "main", "master")) {
112
+ if (Test-LocalBranch $candidate) { return $candidate }
113
+ }
114
+
115
+ return $null
116
+ }
117
+
118
+ # Resolve the repository first so every later call is explicitly scoped to it.
119
+ $startDir = if ($RepositoryRoot) { $RepositoryRoot } else { (Get-Location).Path }
120
+ $script:RepoRoot = & git -C $startDir rev-parse --show-toplevel 2>$null
121
+ if ($LASTEXITCODE -ne 0 -or -not $script:RepoRoot) {
122
+ throw "Not a git repository: $startDir"
123
+ }
124
+ $script:RepoRoot = $script:RepoRoot.Trim()
125
+
126
+ # A dirty tree in a shared clone is somebody else's unfinished work.
127
+ $dirty = Invoke-Git @("status", "--porcelain")
128
+ if ($dirty) {
129
+ $count = @($dirty).Count
130
+ throw "Working tree is not clean ($count entries). Resolve or stash that work before sweeping branches."
131
+ }
132
+
133
+ # Stale worktree registrations keep their branches undeletable, so clear them
134
+ # before deciding what can go.
135
+ Invoke-Git @("worktree", "prune") | Out-Null
136
+
137
+ # A failed fetch is not fatal. `gone` is recorded by an earlier successful prune
138
+ # and stays accurate, so the worst an offline run can do is miss a branch that
139
+ # was merged since the last fetch - it can never delete the wrong one.
140
+ if (-not $SkipFetch) {
141
+ Invoke-Git @("fetch", "--prune") -AllowFailure | Out-Null
142
+ if ($LASTEXITCODE -ne 0) {
143
+ Write-Warning "git fetch --prune failed; sweeping on the upstream state already recorded. Branches merged since the last successful fetch will not be detected yet."
144
+ }
145
+ }
146
+
147
+ $defaultBranch = Resolve-DefaultBranch
148
+
149
+ $currentBranch = (Invoke-Git @("branch", "--show-current") | Select-Object -First 1)
150
+ if ($currentBranch) { $currentBranch = $currentBranch.ToString().Trim() }
151
+
152
+ # Branches held by another worktree cannot be deleted; git blocks it for us, but
153
+ # reporting them is more useful than surfacing a raw error.
154
+ $worktreeBranches = @{}
155
+ foreach ($line in @(Invoke-Git @("worktree", "list", "--porcelain"))) {
156
+ $text = $line.ToString()
157
+ if ($text -match '^branch\s+refs/heads/(.+)$') {
158
+ $name = $Matches[1]
159
+ if ($name -ne $currentBranch) { $worktreeBranches[$name] = $true }
160
+ }
161
+ }
162
+
163
+ $gone = @()
164
+ foreach ($line in @(Invoke-Git @("for-each-ref", "--format=%(refname:short)%09%(upstream:track,nobracket)", "refs/heads"))) {
165
+ $parts = $line.ToString().Split("`t")
166
+ if ($parts.Count -ge 2 -and $parts[1].Trim() -eq "gone") {
167
+ $gone += $parts[0].Trim()
168
+ }
169
+ }
170
+
171
+ # The default branch tracks a live upstream and should never reach this list,
172
+ # but never delete the branch everything else falls back to.
173
+ $gone = @($gone | Where-Object { $_ -ne $defaultBranch })
174
+
175
+ $blocked = @($gone | Where-Object { $worktreeBranches.ContainsKey($_) })
176
+ $deletable = @($gone | Where-Object { -not $worktreeBranches.ContainsKey($_) })
177
+
178
+ foreach ($name in $blocked) {
179
+ Write-Host " skip $name (checked out in another worktree)"
180
+ }
181
+
182
+ if ($deletable.Count -eq 0) {
183
+ Write-Host "No merged branches to remove."
184
+ } else {
185
+ # A checked-out branch cannot be deleted, so step off it first.
186
+ if ($currentBranch -and $deletable -contains $currentBranch) {
187
+ if (-not $defaultBranch) {
188
+ Write-Host " skip $currentBranch (checked out, and no default branch to switch to)"
189
+ $deletable = @($deletable | Where-Object { $_ -ne $currentBranch })
190
+ } elseif ($PSCmdlet.ShouldProcess($defaultBranch, "Switch away from '$currentBranch' before deleting it")) {
191
+ Invoke-Git @("switch", $defaultBranch) | Out-Null
192
+ Write-Host " switch $defaultBranch (left '$currentBranch' so it can be removed)"
193
+ $currentBranch = $defaultBranch
194
+ } elseif (-not $WhatIfPreference) {
195
+ # Declined under -Confirm: the branch cannot be deleted while it is
196
+ # still checked out, so drop it. -WhatIf also lands here because
197
+ # ShouldProcess reports false, but there the intent is a preview, so
198
+ # keep the branch listed and let the delete below be previewed too.
199
+ $deletable = @($deletable | Where-Object { $_ -ne $currentBranch })
200
+ }
201
+ }
202
+
203
+ foreach ($name in $deletable) {
204
+ # -D, not -d: a squashed branch is never reachable from the default
205
+ # branch, so -d refuses every time. `gone` is the merge evidence here.
206
+ if ($PSCmdlet.ShouldProcess($name, "Delete merged local branch")) {
207
+ $sha = (Invoke-Git @("rev-parse", "--short", $name) | Select-Object -First 1).ToString().Trim()
208
+ Invoke-Git @("branch", "-D", $name) | Out-Null
209
+ Write-Host " delete $name (was $sha)"
210
+ }
211
+ }
212
+ }
213
+
214
+ if ($ReturnToDefault) {
215
+ if (-not $defaultBranch) {
216
+ Write-Warning "No default branch could be determined, so -ReturnToDefault did nothing."
217
+ } elseif ($currentBranch -ne $defaultBranch) {
218
+ if ($PSCmdlet.ShouldProcess($defaultBranch, "Switch and fast-forward")) {
219
+ Invoke-Git @("switch", $defaultBranch) | Out-Null
220
+ Invoke-Git @("pull", "--ff-only") -AllowFailure | Out-Null
221
+ Write-Host " switch $defaultBranch (fast-forwarded)"
222
+ }
223
+ } else {
224
+ if ($PSCmdlet.ShouldProcess($defaultBranch, "Fast-forward")) {
225
+ Invoke-Git @("pull", "--ff-only") -AllowFailure | Out-Null
226
+ Write-Host " pull $defaultBranch (fast-forwarded)"
227
+ }
228
+ }
229
+ }