@cat-factory/app 0.315.9 → 0.317.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/app/components/github/AddServiceFromRepoModal.vue +30 -0
- package/app/components/settings/ApiTokensPanel.vue +16 -15
- package/app/composables/useAddRepoDeepLink.spec.ts +66 -0
- package/app/composables/useAddRepoDeepLink.ts +92 -0
- package/app/modular/tutorial-tours.spec.ts +25 -18
- package/app/pages/index.vue +2 -0
- package/app/stores/ui/modals.ts +7 -1
- package/i18n/locales/de.json +17 -10
- package/i18n/locales/en.json +15 -8
- package/i18n/locales/es.json +17 -10
- package/i18n/locales/fr.json +17 -10
- package/i18n/locales/he.json +17 -10
- package/i18n/locales/it.json +17 -10
- package/i18n/locales/ja.json +17 -10
- package/i18n/locales/pl.json +17 -10
- package/i18n/locales/tr.json +17 -10
- package/i18n/locales/uk.json +17 -10
- package/package.json +2 -2
|
@@ -27,6 +27,7 @@ import VcsConnectSurfaces from '~/components/vcs/VcsConnectSurfaces.vue'
|
|
|
27
27
|
import ServiceTestConfig from '~/components/panels/inspector/ServiceTestConfig.vue'
|
|
28
28
|
import ServiceFragments from '~/components/panels/inspector/ServiceFragments.vue'
|
|
29
29
|
import { appInstallationManageUrl, VCS_PROVIDER_LABELS } from '~/utils/vcs'
|
|
30
|
+
import { prefilledRepoMatch, prefillProviderMismatch } from '~/composables/useAddRepoDeepLink'
|
|
30
31
|
import SectionLabel from '~/components/common/SectionLabel.vue'
|
|
31
32
|
import IconButton from '~/components/common/IconButton.vue'
|
|
32
33
|
import AppModal from '~/components/common/AppModal.vue'
|
|
@@ -305,10 +306,26 @@ watch(
|
|
|
305
306
|
if (!isOpen) return
|
|
306
307
|
resetSelection()
|
|
307
308
|
void loadRepos()
|
|
309
|
+
if (ui.addServicePrefill) repoSearch.value = ui.addServicePrefill.repo
|
|
308
310
|
},
|
|
309
311
|
{ immediate: true },
|
|
310
312
|
)
|
|
311
313
|
|
|
314
|
+
// A deep link names one repository: select it as soon as the search lists it, once. A repository
|
|
315
|
+
// the connection cannot reach never lists, which leaves the search's own empty state (and its
|
|
316
|
+
// grant-access remedy) in front of the person.
|
|
317
|
+
const prefillMismatch = computed(() =>
|
|
318
|
+
prefillProviderMismatch(ui.addServicePrefill, github.connected ? github.provider : null),
|
|
319
|
+
)
|
|
320
|
+
watch(repoResults, (repos) => {
|
|
321
|
+
const prefill = ui.addServicePrefill
|
|
322
|
+
if (!prefill || prefillMismatch.value || selectedRepoId.value !== undefined) return
|
|
323
|
+
const match = prefilledRepoMatch(prefill, repos)
|
|
324
|
+
if (!match || toRepoItem(match).disabled) return
|
|
325
|
+
selectedRepoId.value = match.githubId
|
|
326
|
+
ui.addServicePrefill = null
|
|
327
|
+
})
|
|
328
|
+
|
|
312
329
|
// A whole-repo service is added once (then configured inline). A monorepo instead
|
|
313
330
|
// multi-selects directories and adds them together via `addServices`.
|
|
314
331
|
const canAdd = computed(
|
|
@@ -511,6 +528,19 @@ function done() {
|
|
|
511
528
|
</div>
|
|
512
529
|
</UFormField>
|
|
513
530
|
|
|
531
|
+
<p
|
|
532
|
+
v-if="prefillMismatch"
|
|
533
|
+
class="text-sm text-app-warning-200/90"
|
|
534
|
+
data-testid="add-service-prefill-mismatch"
|
|
535
|
+
>
|
|
536
|
+
{{
|
|
537
|
+
t('github.addService.prefillProviderMismatch', {
|
|
538
|
+
repo: ui.addServicePrefill?.repo,
|
|
539
|
+
connected: providerLabel,
|
|
540
|
+
})
|
|
541
|
+
}}
|
|
542
|
+
</p>
|
|
543
|
+
|
|
514
544
|
<UFormField
|
|
515
545
|
:label="t('github.addService.repoType')"
|
|
516
546
|
:description="t('github.addService.repoTypeHint')"
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
// renders metadata only (label + created / last-used). To rotate a token, revoke it and mint a new
|
|
6
6
|
// one. Opened from the Integrations hub.
|
|
7
7
|
import { computed, ref, watch } from 'vue'
|
|
8
|
-
import { showOverrideField } from '~/utils/uiMode'
|
|
9
8
|
import type { PublicApiKey, PublicApiScope } from '~/types/publicApiKeys'
|
|
10
9
|
import IntegrationBackTitle from '~/components/layout/IntegrationBackTitle.vue'
|
|
11
10
|
import CopyButton from '~/components/common/CopyButton.vue'
|
|
@@ -13,18 +12,21 @@ import AppModal from '~/components/common/AppModal.vue'
|
|
|
13
12
|
|
|
14
13
|
const { t, d } = useI18n()
|
|
15
14
|
|
|
16
|
-
// The permission ladder a minted key can carry (read ⊂ write ⊂ decide ⊂ admin), mirroring
|
|
17
|
-
// backend contract. A `read` key can only observe; `
|
|
15
|
+
// The permission ladder a minted key can carry (read ⊂ webhooks ⊂ write ⊂ decide ⊂ admin), mirroring
|
|
16
|
+
// the backend contract. A `read` key can only observe; `webhooks` adds registering push endpoints;
|
|
17
|
+
// `write` adds create/start/manage; `decide` adds
|
|
18
18
|
// answering a run's PARKED human decisions (and, because of that, starting a headless run on a
|
|
19
19
|
// pipeline that can park at all); `admin` adds the destructive/merge-adjacent operations (e.g.
|
|
20
20
|
// deleting a task).
|
|
21
|
-
const SCOPES: PublicApiScope[] = ['read', 'write', 'decide', 'admin']
|
|
21
|
+
const SCOPES: PublicApiScope[] = ['read', 'webhooks', 'write', 'decide', 'admin']
|
|
22
22
|
|
|
23
23
|
/** Localized label for a scope — an exhaustive switch, so a new scope is a compile error here. */
|
|
24
24
|
function scopeLabel(scope: PublicApiScope): string {
|
|
25
25
|
switch (scope) {
|
|
26
26
|
case 'read':
|
|
27
27
|
return t('settings.apiTokens.scopes.read')
|
|
28
|
+
case 'webhooks':
|
|
29
|
+
return t('settings.apiTokens.scopes.webhooks')
|
|
28
30
|
case 'write':
|
|
29
31
|
return t('settings.apiTokens.scopes.write')
|
|
30
32
|
case 'decide':
|
|
@@ -40,19 +42,14 @@ const auth = useAuthStore()
|
|
|
40
42
|
const store = usePublicApiKeysStore()
|
|
41
43
|
const accounts = useAccountsStore()
|
|
42
44
|
const workspace = useWorkspaceStore()
|
|
43
|
-
const uiMode = useUiModeStore()
|
|
44
45
|
|
|
45
|
-
// A key's reach. The default is this board alone
|
|
46
|
-
//
|
|
47
|
-
//
|
|
46
|
+
// A key's reach. The default is this board alone. The wider choices are an account admin's to
|
|
47
|
+
// make, so the field is shown to everyone in both UI modes and disabled for anyone else, with the
|
|
48
|
+
// reason, because a directory webhook needs a key that reaches every workspace.
|
|
48
49
|
type TokenReach = 'this' | 'all' | 'selected'
|
|
49
50
|
const reach = ref<TokenReach>('this')
|
|
50
51
|
const selectedWorkspaceIds = ref<string[]>([])
|
|
51
|
-
const canWidenReach = computed(
|
|
52
|
-
() =>
|
|
53
|
-
accounts.activeAccount?.roles?.includes('admin') === true &&
|
|
54
|
-
showOverrideField(uiMode.isAdvanced),
|
|
55
|
-
)
|
|
52
|
+
const canWidenReach = computed(() => accounts.activeAccount?.roles?.includes('admin') === true)
|
|
56
53
|
const reachItems = computed(() => [
|
|
57
54
|
{ value: 'this' as const, label: t('settings.apiTokens.add.reachThis') },
|
|
58
55
|
{ value: 'all' as const, label: t('settings.apiTokens.add.reachAll') },
|
|
@@ -385,13 +382,17 @@ async function revokeToken(key: PublicApiKey) {
|
|
|
385
382
|
/>
|
|
386
383
|
</UFormField>
|
|
387
384
|
<UFormField
|
|
388
|
-
v-if="canWidenReach"
|
|
389
385
|
:label="t('settings.apiTokens.add.reach')"
|
|
390
|
-
:help="
|
|
386
|
+
:help="
|
|
387
|
+
canWidenReach
|
|
388
|
+
? t('settings.apiTokens.add.reachHelp')
|
|
389
|
+
: t('settings.apiTokens.add.reachAdminOnly')
|
|
390
|
+
"
|
|
391
391
|
>
|
|
392
392
|
<USelect
|
|
393
393
|
v-model="reach"
|
|
394
394
|
:items="reachItems"
|
|
395
|
+
:disabled="!canWidenReach"
|
|
395
396
|
class="w-full"
|
|
396
397
|
data-testid="api-token-reach"
|
|
397
398
|
/>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { createPinia, setActivePinia } from 'pinia'
|
|
2
|
+
import { beforeEach, describe, expect, it } from 'vitest'
|
|
3
|
+
import type { GitHubAvailableRepo } from '~/types/domain'
|
|
4
|
+
import {
|
|
5
|
+
captureAddRepoDeepLink,
|
|
6
|
+
prefilledRepoMatch,
|
|
7
|
+
prefillProviderMismatch,
|
|
8
|
+
} from './useAddRepoDeepLink'
|
|
9
|
+
|
|
10
|
+
function setUrl(search: string): void {
|
|
11
|
+
history.replaceState(null, '', `/${search}`)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function repo(owner: string, name: string): GitHubAvailableRepo {
|
|
15
|
+
return { owner, name, githubId: owner.length + name.length } as GitHubAvailableRepo
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
describe('captureAddRepoDeepLink', () => {
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
setActivePinia(createPinia())
|
|
21
|
+
setUrl('')
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('parses the link an integration builds, and strips only its own params', () => {
|
|
25
|
+
setUrl('?addRepo=kibertoad%2Fsimpler-service3&provider=github&ws=ws_1&keep=yes')
|
|
26
|
+
expect(captureAddRepoDeepLink()).toEqual({
|
|
27
|
+
repo: 'kibertoad/simpler-service3',
|
|
28
|
+
provider: 'github',
|
|
29
|
+
workspaceId: 'ws_1',
|
|
30
|
+
})
|
|
31
|
+
expect(window.location.search).toBe('?keep=yes')
|
|
32
|
+
expect(captureAddRepoDeepLink()).toBeNull()
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('takes a GitLab project under nested groups', () => {
|
|
36
|
+
setUrl('?addRepo=acme/platform/payments')
|
|
37
|
+
expect(captureAddRepoDeepLink()).toMatchObject({ repo: 'acme/platform/payments' })
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
it('drops a value that is not a repository path, and still strips it', () => {
|
|
41
|
+
setUrl('?addRepo=payments')
|
|
42
|
+
expect(captureAddRepoDeepLink()).toBeNull()
|
|
43
|
+
expect(window.location.search).toBe('')
|
|
44
|
+
})
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
describe('prefilledRepoMatch', () => {
|
|
48
|
+
it('matches the full path regardless of case, never a longer name', () => {
|
|
49
|
+
const wanted = repo('Kibertoad', 'simpler-service3')
|
|
50
|
+
const found = prefilledRepoMatch({ repo: 'kibertoad/simpler-service3', provider: null }, [
|
|
51
|
+
repo('kibertoad', 'simpler-service30'),
|
|
52
|
+
wanted,
|
|
53
|
+
])
|
|
54
|
+
expect(found).toBe(wanted)
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
describe('prefillProviderMismatch', () => {
|
|
59
|
+
it('flags a link for another host only when the board is connected', () => {
|
|
60
|
+
const prefill = { repo: 'acme/payments', provider: 'gitlab' }
|
|
61
|
+
expect(prefillProviderMismatch(prefill, 'github')).toBe(true)
|
|
62
|
+
expect(prefillProviderMismatch(prefill, 'gitlab')).toBe(false)
|
|
63
|
+
expect(prefillProviderMismatch(prefill, null)).toBe(false)
|
|
64
|
+
expect(prefillProviderMismatch({ ...prefill, provider: null }, 'github')).toBe(false)
|
|
65
|
+
})
|
|
66
|
+
})
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boot-time replay of an ADD-REPOSITORY deep link: `?addRepo=<owner>/<name>&provider=<id>&ws=<id>`.
|
|
3
|
+
*
|
|
4
|
+
* An integration that finds a repository the platform has no service for (sainte-beuve filing a
|
|
5
|
+
* review, say) cannot create the service itself, because adding one is a person's choice of board,
|
|
6
|
+
* role and layout. It sends the person here instead: the add-service window opens with the
|
|
7
|
+
* repository already searched for, and selected once the connection lists it. `provider` is the
|
|
8
|
+
* host the link means, so a link for a GitLab project is not silently matched against GitHub;
|
|
9
|
+
* `ws` pins the board the same way a run link does. Integrations build it on `GET
|
|
10
|
+
* /api/v1/deployment`; the format is published at
|
|
11
|
+
* https://catfactory.ai/extend/public-api.html#sending-a-person-to-add-a-repository
|
|
12
|
+
*
|
|
13
|
+
* Signing in first keeps the query (`postSignInUrl`), so a signed-out person lands here too.
|
|
14
|
+
*/
|
|
15
|
+
import { watch } from 'vue'
|
|
16
|
+
import type { GitHubAvailableRepo } from '~/types/domain'
|
|
17
|
+
import type { VcsProvider } from '~/types/vcs'
|
|
18
|
+
import { useUiStore } from '../stores/ui'
|
|
19
|
+
import { useWorkspaceStore } from '../stores/workspace'
|
|
20
|
+
|
|
21
|
+
/** What the add-service window is opened with: the repository to look for, and its host. */
|
|
22
|
+
export interface AddServicePrefill {
|
|
23
|
+
repo: string
|
|
24
|
+
provider: string | null
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
interface PendingAddRepoLink extends AddServicePrefill {
|
|
28
|
+
workspaceId: string | null
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const ADD_REPO_LINK_PARAMS = ['addRepo', 'provider', 'ws'] as const
|
|
32
|
+
|
|
33
|
+
/** `owner/name`, where a GitLab owner may itself be a nested group path. */
|
|
34
|
+
const REPO_PATH = /^[\w.-]+(?:\/[\w.-]+)+$/
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Read (and strip) an add-repository link from the current URL, or null when there is none or its
|
|
38
|
+
* `addRepo` is not a repository path. Called before `workspace.init()` so `ws` can pin the board.
|
|
39
|
+
*/
|
|
40
|
+
export function captureAddRepoDeepLink(): PendingAddRepoLink | null {
|
|
41
|
+
if (typeof window === 'undefined') return null
|
|
42
|
+
const params = new URLSearchParams(window.location.search)
|
|
43
|
+
const repo = params.get('addRepo')?.trim()
|
|
44
|
+
if (!repo) return null
|
|
45
|
+
const link = { repo, provider: params.get('provider'), workspaceId: params.get('ws') }
|
|
46
|
+
for (const key of ADD_REPO_LINK_PARAMS) params.delete(key)
|
|
47
|
+
const qs = params.toString()
|
|
48
|
+
history.replaceState(null, '', window.location.pathname + (qs ? `?${qs}` : ''))
|
|
49
|
+
return REPO_PATH.test(repo) ? link : null
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** The listed repository a prefill names, matched on its full path regardless of case. */
|
|
53
|
+
export function prefilledRepoMatch(
|
|
54
|
+
prefill: AddServicePrefill,
|
|
55
|
+
repos: readonly GitHubAvailableRepo[],
|
|
56
|
+
): GitHubAvailableRepo | undefined {
|
|
57
|
+
const wanted = prefill.repo.toLowerCase()
|
|
58
|
+
return repos.find((r) => `${r.owner}/${r.name}`.toLowerCase() === wanted)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Whether the link names a host other than the one this board is connected to. */
|
|
62
|
+
export function prefillProviderMismatch(
|
|
63
|
+
prefill: AddServicePrefill | null,
|
|
64
|
+
connected: VcsProvider | null,
|
|
65
|
+
): boolean {
|
|
66
|
+
return prefill?.provider != null && connected !== null && prefill.provider !== connected
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Capture an add-repository link and, once the board has hydrated, open the window with it. */
|
|
70
|
+
export function useAddRepoDeepLink(): void {
|
|
71
|
+
const link = captureAddRepoDeepLink()
|
|
72
|
+
if (!link) return
|
|
73
|
+
|
|
74
|
+
const workspace = useWorkspaceStore()
|
|
75
|
+
const ui = useUiStore()
|
|
76
|
+
if (link.workspaceId) workspace.workspaceId = link.workspaceId
|
|
77
|
+
|
|
78
|
+
// One-shot, for the same reasons `useRunDeepLink` spells out: a later refresh must not reopen a
|
|
79
|
+
// window the person closed, and `immediate` runs the callback before `stop` is bound.
|
|
80
|
+
let applied = false
|
|
81
|
+
let stop: (() => void) | undefined
|
|
82
|
+
stop = watch(
|
|
83
|
+
() => workspace.ready,
|
|
84
|
+
(ready) => {
|
|
85
|
+
if (!ready || applied) return
|
|
86
|
+
applied = true
|
|
87
|
+
ui.openAddService({ repo: link.repo, provider: link.provider })
|
|
88
|
+
stop?.()
|
|
89
|
+
},
|
|
90
|
+
{ immediate: true },
|
|
91
|
+
)
|
|
92
|
+
}
|
|
@@ -163,29 +163,35 @@ function absentGates(gates: NavGates): readonly string[] {
|
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
/**
|
|
166
|
-
*
|
|
167
|
-
* `undefined` when no such set exists (what the guard wants). A step the gate set
|
|
168
|
-
* (`when`) needs no anchor, so it cannot be a counterexample.
|
|
166
|
+
* For each pair, a gate set that OFFERS its tour while the entry its step clicks is NOT
|
|
167
|
+
* rendered, or `undefined` when no such set exists (what the guard wants). A step the gate set
|
|
168
|
+
* DROPS (`when`) needs no anchor, so it cannot be a counterexample.
|
|
169
169
|
*
|
|
170
170
|
* Of the many counterexamples one break produces, the one reported is the SMALLEST: the gate
|
|
171
171
|
* set closest to fully-permitted, so its absent fields are exactly the ones that matter. The
|
|
172
172
|
* first witness the matrix happens to reach names most of `NavGates` and reads as noise, which
|
|
173
173
|
* is the difference between a failure that says "declare `advancedMode`" and one that says
|
|
174
174
|
* "something about fourteen gates".
|
|
175
|
+
*
|
|
176
|
+
* The matrix is walked ONCE for every pair together: building each gate set per pair made the
|
|
177
|
+
* test several times slower, enough to cross vitest's timeout on a loaded CI runner.
|
|
175
178
|
*/
|
|
176
|
-
function
|
|
177
|
-
|
|
178
|
-
): NavGates | undefined {
|
|
179
|
-
|
|
180
|
-
|
|
179
|
+
function navRequirementDrifts(
|
|
180
|
+
pairs: readonly ReturnType<typeof navAnchoredSteps>[number][],
|
|
181
|
+
): (NavGates | undefined)[] {
|
|
182
|
+
const smallest: (NavGates | undefined)[] = pairs.map(() => undefined)
|
|
183
|
+
const fewestAbsent = pairs.map(() => Number.POSITIVE_INFINITY)
|
|
181
184
|
for (const gates of everyGateSet()) {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
185
|
+
let absent: number | undefined
|
|
186
|
+
for (const [index, pair] of pairs.entries()) {
|
|
187
|
+
if (!(pair.tour.requires ?? []).every((requirement) => requirement.met(gates))) continue
|
|
188
|
+
if (pair.step.when && !pair.step.when(gates)) continue
|
|
189
|
+
if (navItemVisible(pair.item, gates)) continue
|
|
190
|
+
absent ??= absentGates(gates).length
|
|
191
|
+
if (absent < fewestAbsent[index]!) {
|
|
192
|
+
fewestAbsent[index] = absent
|
|
193
|
+
smallest[index] = gates
|
|
194
|
+
}
|
|
189
195
|
}
|
|
190
196
|
}
|
|
191
197
|
return smallest
|
|
@@ -306,8 +312,9 @@ describe('the built-in tutorial tour catalog', () => {
|
|
|
306
312
|
expect(pairs.length).toBeGreaterThanOrEqual(8)
|
|
307
313
|
expect(Object.values(ALL_GATES).every((value) => typeof value === 'boolean')).toBe(true)
|
|
308
314
|
|
|
309
|
-
const
|
|
310
|
-
|
|
315
|
+
const witnesses = navRequirementDrifts(pairs)
|
|
316
|
+
const drifted = pairs.flatMap((pair, index) => {
|
|
317
|
+
const witness = witnesses[index]
|
|
311
318
|
if (witness === undefined) return []
|
|
312
319
|
return [`${pair.label} is offered without ${absentGates(witness).join(' / ')}`]
|
|
313
320
|
})
|
|
@@ -474,7 +481,7 @@ describe('tour availability across the catalog', () => {
|
|
|
474
481
|
|
|
475
482
|
it('holds the interface tier as a requirement of the tours whose surface hides in basic', () => {
|
|
476
483
|
// Two different reasons, one requirement. `share-services` clicks a nav entry marked
|
|
477
|
-
// `advanced: true` (which `
|
|
484
|
+
// `advanced: true` (which `navRequirementDrifts` also enforces); `panel-reviews` clicks a
|
|
478
485
|
// BASIC entry whose consensus section renders only in advanced mode or once a group exists,
|
|
479
486
|
// one level below anything the nav guard can see. Basic is the shipped default, so without
|
|
480
487
|
// this both would be offered to nearly every user and find nothing.
|
package/app/pages/index.vue
CHANGED
|
@@ -183,6 +183,8 @@ onMounted(() => {
|
|
|
183
183
|
// board it names is the one that opens. This is what makes the observability link on an
|
|
184
184
|
// engine-published PR verification report resolve.
|
|
185
185
|
useRunDeepLink()
|
|
186
|
+
// `?addRepo=<owner>/<name>`: an integration sending a person to add a service for a repository.
|
|
187
|
+
useAddRepoDeepLink()
|
|
186
188
|
// `?view=queue` / `?view=board`: a link that opens one of the board's two views.
|
|
187
189
|
views.consumeDeepLink()
|
|
188
190
|
void workspace.init()
|
package/app/stores/ui/modals.ts
CHANGED
|
@@ -10,6 +10,7 @@ import type {
|
|
|
10
10
|
InfrastructureTab,
|
|
11
11
|
ProviderConnectionKind,
|
|
12
12
|
} from '~/types/providerConnections'
|
|
13
|
+
import type { AddServicePrefill } from '~/composables/useAddRepoDeepLink'
|
|
13
14
|
import type { PendingContext } from '~/composables/useContextLinking'
|
|
14
15
|
import {
|
|
15
16
|
infraSetupDismissalKey,
|
|
@@ -523,6 +524,8 @@ function createOverlayModals() {
|
|
|
523
524
|
const bootstrapOpen = ref(false)
|
|
524
525
|
// "Add a service from an existing GitHub repo" modal (no bootstrap run).
|
|
525
526
|
const addServiceOpen = ref(false)
|
|
527
|
+
// The repository an add-repository deep link opened the window for, consumed on open.
|
|
528
|
+
const addServicePrefill = ref<AddServicePrefill | null>(null)
|
|
526
529
|
// Prompt-fragment library panel (manage the board's best-practice catalog +
|
|
527
530
|
// linked guideline repos; ADR 0006).
|
|
528
531
|
const fragmentLibraryOpen = ref(false)
|
|
@@ -546,11 +549,13 @@ function createOverlayModals() {
|
|
|
546
549
|
function closeBootstrap() {
|
|
547
550
|
bootstrapOpen.value = false
|
|
548
551
|
}
|
|
549
|
-
function openAddService() {
|
|
552
|
+
function openAddService(prefill: AddServicePrefill | null = null) {
|
|
553
|
+
addServicePrefill.value = prefill
|
|
550
554
|
addServiceOpen.value = true
|
|
551
555
|
}
|
|
552
556
|
function closeAddService() {
|
|
553
557
|
addServiceOpen.value = false
|
|
558
|
+
addServicePrefill.value = null
|
|
554
559
|
}
|
|
555
560
|
function openFragmentLibrary() {
|
|
556
561
|
fragmentLibraryOpen.value = true
|
|
@@ -601,6 +606,7 @@ function createOverlayModals() {
|
|
|
601
606
|
return {
|
|
602
607
|
bootstrapOpen,
|
|
603
608
|
addServiceOpen,
|
|
609
|
+
addServicePrefill,
|
|
604
610
|
fragmentLibraryOpen,
|
|
605
611
|
foundationalServicesOpen,
|
|
606
612
|
commandBarOpen,
|
package/i18n/locales/de.json
CHANGED
|
@@ -9,19 +9,23 @@
|
|
|
9
9
|
"scopeHint": "Jede Stufe schließt die darüberliegenden ein.",
|
|
10
10
|
"scope": {
|
|
11
11
|
"read": {
|
|
12
|
-
"label": "
|
|
12
|
+
"label": "Lesen · read",
|
|
13
13
|
"description": "Services, Aufgaben, Pipelines und Läufe ansehen."
|
|
14
14
|
},
|
|
15
|
+
"webhooks": {
|
|
16
|
+
"label": "Webhooks",
|
|
17
|
+
"description": "Zusätzlich Webhooks registrieren, die Änderungen an ein anderes System senden."
|
|
18
|
+
},
|
|
15
19
|
"write": {
|
|
16
|
-
"label": "
|
|
20
|
+
"label": "Schreiben · write",
|
|
17
21
|
"description": "Zusätzlich Aufgaben anlegen und starten."
|
|
18
22
|
},
|
|
19
23
|
"decide": {
|
|
20
|
-
"label": "
|
|
24
|
+
"label": "Entscheiden · decide",
|
|
21
25
|
"description": "Zusätzlich die Fragen beantworten, auf die ein pausierter Lauf wartet."
|
|
22
26
|
},
|
|
23
27
|
"admin": {
|
|
24
|
-
"label": "
|
|
28
|
+
"label": "Vollzugriff · admin",
|
|
25
29
|
"description": "Zusätzlich Aufgaben löschen und auf Benachrichtigungen reagieren, was einen Pull Request zusammenführen kann."
|
|
26
30
|
}
|
|
27
31
|
},
|
|
@@ -852,7 +856,7 @@
|
|
|
852
856
|
"labelHelp": "Ein Name, um dieses Token später wiederzuerkennen.",
|
|
853
857
|
"labelPlaceholder": "z. B. CI-Pipeline",
|
|
854
858
|
"scope": "Berechtigung",
|
|
855
|
-
"scopeHelp": "Jede Stufe umfasst alles, was die vorherige erlaubt. Lesen: Aufgaben, Läufe und deren Ergebnisse ansehen. Schreiben: zusätzlich Aufgaben anlegen, bearbeiten, starten, stoppen und wiederholen sowie Reviews und Bewertungen ausführen. Entscheiden: zusätzlich die menschlichen Entscheidungen eines Laufs beantworten (Freigaben, Review-Befunde, Interview- und Rückfragen, manuelle Tests); diese Stufe braucht ein Token auch, um eine Pipeline zu starten, die an einer solchen Entscheidung anhalten kann. Vollzugriff: zusätzlich Services anlegen, konfigurieren und löschen, Aufgaben löschen, Repositories verknüpfen, Umgebungsverbindungen
|
|
859
|
+
"scopeHelp": "Jede Stufe umfasst alles, was die vorherige erlaubt. Lesen: Aufgaben, Läufe und deren Ergebnisse ansehen. Webhooks: zusätzlich Webhooks registrieren und entfernen, die Änderungen an ein anderes System senden, etwa Verzeichnis- und Benachrichtigungs-Webhooks. Schreiben: zusätzlich Aufgaben anlegen, bearbeiten, starten, stoppen und wiederholen sowie Reviews und Bewertungen ausführen. Entscheiden: zusätzlich die menschlichen Entscheidungen eines Laufs beantworten (Freigaben, Review-Befunde, Interview- und Rückfragen, manuelle Tests); diese Stufe braucht ein Token auch, um eine Pipeline zu starten, die an einer solchen Entscheidung anhalten kann. Vollzugriff (admin): zusätzlich Services anlegen, konfigurieren und löschen, Aufgaben löschen, Repositories verknüpfen, Umgebungsverbindungen verwalten und auf Benachrichtigungen reagieren.",
|
|
856
860
|
"create": "Token erstellen",
|
|
857
861
|
"identity": "Läuft als",
|
|
858
862
|
"identitySystem": "Dieser Arbeitsbereich (System-Token)",
|
|
@@ -861,16 +865,18 @@
|
|
|
861
865
|
"identitySelfHelp": "Mit diesem Token gestartete Läufe gelten als Ihre und können Ihr persönliches Claude-/Codex-/GLM-Abonnement nutzen. Jeder solche Aufruf muss zusätzlich Ihr persönliches Passwort im Header X-Personal-Password senden; es wird nie gespeichert. Für Ihre eigenen Headless-Läufe.",
|
|
862
866
|
"reach": "Arbeitsbereiche",
|
|
863
867
|
"reachHelp": "Auf welchen Arbeitsbereichen dieses Token handeln darf. Ein Token für mehr als einen Arbeitsbereich nennt den Arbeitsbereich bei jedem Aufruf im Header x-cat-factory-workspace.",
|
|
868
|
+
"reachAdminOnly": "Nur ein Konto-Admin kann ein Token anlegen, das weitere Arbeitsbereiche erreicht, wie es Verzeichnis-Webhooks brauchen. Bitte einen Konto-Admin darum.",
|
|
864
869
|
"reachThis": "Nur dieser Arbeitsbereich",
|
|
865
870
|
"reachAll": "Alle Arbeitsbereiche des Kontos",
|
|
866
871
|
"reachSelected": "Ausgewählte Arbeitsbereiche",
|
|
867
872
|
"reachPick": "Arbeitsbereiche auswählen"
|
|
868
873
|
},
|
|
869
874
|
"scopes": {
|
|
870
|
-
"read": "Lesen",
|
|
871
|
-
"
|
|
872
|
-
"
|
|
873
|
-
"
|
|
875
|
+
"read": "Lesen · read",
|
|
876
|
+
"webhooks": "Webhooks (inkl. Lesen)",
|
|
877
|
+
"write": "Schreiben · write (inkl. Webhooks)",
|
|
878
|
+
"decide": "Entscheiden · decide (inkl. Schreiben)",
|
|
879
|
+
"admin": "Vollzugriff · admin (inkl. Entscheiden)"
|
|
874
880
|
},
|
|
875
881
|
"toast": {
|
|
876
882
|
"loadFailed": "API-Tokens konnten nicht geladen werden",
|
|
@@ -3807,7 +3813,8 @@
|
|
|
3807
3813
|
"servicesAddedDescription": "{count} Service zum Board hinzugefügt. | {count} Services zum Board hinzugefügt.",
|
|
3808
3814
|
"frontendLinkedNote": "{directory} wurde als Frontend hinzugefügt und mit den übrigen verknüpft. Benennen Sie die Umgebungsvariablen für die Backend-URLs im Inspector.",
|
|
3809
3815
|
"frontendWiringFailedNote": "Die Frontend-Einstellungen wurden nicht gespeichert. Öffnen Sie den Inspector jeder Frontend-App, um ihr Unterverzeichnis und ihre Backend-Services zu setzen."
|
|
3810
|
-
}
|
|
3816
|
+
},
|
|
3817
|
+
"prefillProviderMismatch": "Der Link verweist auf {repo} bei einem anderen Anbieter, dieses Board ist aber mit {connected} verbunden. Suche das Repository von Hand oder öffne den Link auf einem Board, das mit seinem Anbieter verbunden ist."
|
|
3811
3818
|
},
|
|
3812
3819
|
"repoTree": {
|
|
3813
3820
|
"root": "root",
|
package/i18n/locales/en.json
CHANGED
|
@@ -3065,19 +3065,23 @@
|
|
|
3065
3065
|
"scopeHint": "Each level includes the ones above it.",
|
|
3066
3066
|
"scope": {
|
|
3067
3067
|
"read": {
|
|
3068
|
-
"label": "Read
|
|
3068
|
+
"label": "Read",
|
|
3069
3069
|
"description": "See services, tasks, pipelines and runs."
|
|
3070
3070
|
},
|
|
3071
|
+
"webhooks": {
|
|
3072
|
+
"label": "Webhooks",
|
|
3073
|
+
"description": "Also register webhooks that push changes to another system."
|
|
3074
|
+
},
|
|
3071
3075
|
"write": {
|
|
3072
|
-
"label": "
|
|
3076
|
+
"label": "Write",
|
|
3073
3077
|
"description": "Also create and start tasks."
|
|
3074
3078
|
},
|
|
3075
3079
|
"decide": {
|
|
3076
|
-
"label": "
|
|
3080
|
+
"label": "Decide",
|
|
3077
3081
|
"description": "Also answer the questions a parked run is waiting on."
|
|
3078
3082
|
},
|
|
3079
3083
|
"admin": {
|
|
3080
|
-
"label": "
|
|
3084
|
+
"label": "Admin",
|
|
3081
3085
|
"description": "Also delete tasks and act on notifications, which can merge a pull request."
|
|
3082
3086
|
}
|
|
3083
3087
|
},
|
|
@@ -3920,7 +3924,7 @@
|
|
|
3920
3924
|
"labelHelp": "A name to recognize this token by later.",
|
|
3921
3925
|
"labelPlaceholder": "e.g. CI pipeline",
|
|
3922
3926
|
"scope": "Scope",
|
|
3923
|
-
"scopeHelp": "Each level includes everything the one before it allows. Read: view tasks, runs and their results. Write: also create, edit, start, stop and retry tasks, and run reviews and assessments. Decide: also answer a run's human decisions (approvals, review findings, interview and clarifying questions, human tests); a token also needs this level to start a pipeline that can stop for one.
|
|
3927
|
+
"scopeHelp": "Each level includes everything the one before it allows. Read: view tasks, runs and their results. Webhooks: also register and remove webhooks that push changes to another system, such as directory and notification webhooks. Write: also create, edit, start, stop and retry tasks, and run reviews and assessments. Decide: also answer a run's human decisions (approvals, review findings, interview and clarifying questions, human tests); a token also needs this level to start a pipeline that can stop for one. Admin: also add, configure and delete services, delete tasks, link repositories, manage environment connections, and act on notifications.",
|
|
3924
3928
|
"create": "Create token",
|
|
3925
3929
|
"identity": "Runs as",
|
|
3926
3930
|
"identitySystem": "This workspace (system token)",
|
|
@@ -3929,6 +3933,7 @@
|
|
|
3929
3933
|
"identitySelfHelp": "Runs started with this token count as yours and can use your personal Claude / Codex / GLM subscription. Every such call must also send your personal password in the X-Personal-Password header; it is never stored. Use this to drive your own headless runs.",
|
|
3930
3934
|
"reach": "Workspaces",
|
|
3931
3935
|
"reachHelp": "Which workspaces this token can act on. A token reaching more than one names the workspace on each call in the x-cat-factory-workspace header.",
|
|
3936
|
+
"reachAdminOnly": "Only an account admin can create a token that reaches other workspaces, which directory webhooks need. Ask one to create it.",
|
|
3932
3937
|
"reachThis": "This workspace only",
|
|
3933
3938
|
"reachAll": "Every workspace in the account",
|
|
3934
3939
|
"reachSelected": "Selected workspaces",
|
|
@@ -3936,9 +3941,10 @@
|
|
|
3936
3941
|
},
|
|
3937
3942
|
"scopes": {
|
|
3938
3943
|
"read": "Read",
|
|
3939
|
-
"
|
|
3944
|
+
"webhooks": "Webhooks (includes Read)",
|
|
3945
|
+
"write": "Write (includes Webhooks)",
|
|
3940
3946
|
"decide": "Decide (includes Write)",
|
|
3941
|
-
"admin": "
|
|
3947
|
+
"admin": "Admin (includes Decide)"
|
|
3942
3948
|
},
|
|
3943
3949
|
"toast": {
|
|
3944
3950
|
"loadFailed": "Could not load API tokens",
|
|
@@ -4824,7 +4830,8 @@
|
|
|
4824
4830
|
},
|
|
4825
4831
|
"frontendLinkedNote": "{directory} was added as the frontend and linked to the others. Name its backend URL environment variables in its inspector.",
|
|
4826
4832
|
"frontendWiringFailedNote": "The frontend settings did not save. Open each frontend app's inspector to set its subdirectory and its backend services."
|
|
4827
|
-
}
|
|
4833
|
+
},
|
|
4834
|
+
"prefillProviderMismatch": "The link asked for {repo} on a different host, and this board is connected to {connected}. Search for the repository by hand, or open the link on a board connected to its host."
|
|
4828
4835
|
},
|
|
4829
4836
|
"repoTree": {
|
|
4830
4837
|
"root": "root",
|
package/i18n/locales/es.json
CHANGED
|
@@ -2910,19 +2910,23 @@
|
|
|
2910
2910
|
"scopeHint": "Cada nivel incluye los anteriores.",
|
|
2911
2911
|
"scope": {
|
|
2912
2912
|
"read": {
|
|
2913
|
-
"label": "
|
|
2913
|
+
"label": "Lectura · read",
|
|
2914
2914
|
"description": "Ver servicios, tareas, pipelines y ejecuciones."
|
|
2915
2915
|
},
|
|
2916
|
+
"webhooks": {
|
|
2917
|
+
"label": "Webhooks",
|
|
2918
|
+
"description": "Además, registrar webhooks que envían cambios a otro sistema."
|
|
2919
|
+
},
|
|
2916
2920
|
"write": {
|
|
2917
|
-
"label": "
|
|
2921
|
+
"label": "Escritura · write",
|
|
2918
2922
|
"description": "Además, crear e iniciar tareas."
|
|
2919
2923
|
},
|
|
2920
2924
|
"decide": {
|
|
2921
|
-
"label": "
|
|
2925
|
+
"label": "Decisión · decide",
|
|
2922
2926
|
"description": "Además, responder a las preguntas que espera una ejecución detenida."
|
|
2923
2927
|
},
|
|
2924
2928
|
"admin": {
|
|
2925
|
-
"label": "Acceso completo",
|
|
2929
|
+
"label": "Acceso completo · admin",
|
|
2926
2930
|
"description": "Además, eliminar tareas y actuar sobre notificaciones, lo que puede fusionar un pull request."
|
|
2927
2931
|
}
|
|
2928
2932
|
},
|
|
@@ -3612,7 +3616,7 @@
|
|
|
3612
3616
|
"labelHelp": "Un nombre para reconocer este token más adelante.",
|
|
3613
3617
|
"labelPlaceholder": "p. ej. pipeline de CI",
|
|
3614
3618
|
"scope": "Alcance",
|
|
3615
|
-
"scopeHelp": "Cada nivel incluye todo lo que permite el anterior. Lectura: ver tareas, ejecuciones y sus resultados. Escritura: además, crear, editar, iniciar, detener y reintentar tareas, y lanzar revisiones y evaluaciones. Decisión: además, responder a las decisiones humanas de una ejecución (aprobaciones, hallazgos de revisión, preguntas de entrevista y de aclaración, pruebas manuales); un token también necesita este nivel para iniciar una canalización que pueda detenerse en una de ellas. Acceso completo: además, añadir, configurar y eliminar servicios, eliminar tareas, vincular repositorios, gestionar conexiones de entorno y
|
|
3619
|
+
"scopeHelp": "Cada nivel incluye todo lo que permite el anterior. Lectura: ver tareas, ejecuciones y sus resultados. Webhooks: además, registrar y eliminar webhooks que envían cambios a otro sistema, como los webhooks de directorio y de notificaciones. Escritura: además, crear, editar, iniciar, detener y reintentar tareas, y lanzar revisiones y evaluaciones. Decisión: además, responder a las decisiones humanas de una ejecución (aprobaciones, hallazgos de revisión, preguntas de entrevista y de aclaración, pruebas manuales); un token también necesita este nivel para iniciar una canalización que pueda detenerse en una de ellas. Acceso completo (admin): además, añadir, configurar y eliminar servicios, eliminar tareas, vincular repositorios, gestionar conexiones de entorno y actuar sobre notificaciones.",
|
|
3616
3620
|
"create": "Crear token",
|
|
3617
3621
|
"identity": "Se ejecuta como",
|
|
3618
3622
|
"identitySystem": "Este espacio de trabajo (token de sistema)",
|
|
@@ -3621,16 +3625,18 @@
|
|
|
3621
3625
|
"identitySelfHelp": "Las ejecuciones iniciadas con este token se te atribuyen y pueden usar tu suscripción personal de Claude / Codex / GLM. Cada llamada debe enviar además tu contraseña personal en la cabecera X-Personal-Password; nunca se almacena. Úsalo para tus propias ejecuciones headless.",
|
|
3622
3626
|
"reach": "Espacios de trabajo",
|
|
3623
3627
|
"reachHelp": "En qué espacios de trabajo puede actuar este token. Un token con acceso a más de uno indica el espacio de trabajo en cada llamada con la cabecera x-cat-factory-workspace.",
|
|
3628
|
+
"reachAdminOnly": "Solo un administrador de la cuenta puede crear un token que llegue a otros espacios de trabajo, como necesitan los webhooks de directorio. Pídeselo a uno.",
|
|
3624
3629
|
"reachThis": "Solo este espacio de trabajo",
|
|
3625
3630
|
"reachAll": "Todos los espacios de trabajo de la cuenta",
|
|
3626
3631
|
"reachSelected": "Espacios de trabajo seleccionados",
|
|
3627
3632
|
"reachPick": "Elige espacios de trabajo"
|
|
3628
3633
|
},
|
|
3629
3634
|
"scopes": {
|
|
3630
|
-
"read": "Lectura",
|
|
3631
|
-
"
|
|
3632
|
-
"
|
|
3633
|
-
"
|
|
3635
|
+
"read": "Lectura · read",
|
|
3636
|
+
"webhooks": "Webhooks (incluye Lectura)",
|
|
3637
|
+
"write": "Escritura · write (incluye Webhooks)",
|
|
3638
|
+
"decide": "Decisión · decide (incluye Escritura)",
|
|
3639
|
+
"admin": "Acceso completo · admin (incluye Decisión)"
|
|
3634
3640
|
},
|
|
3635
3641
|
"toast": {
|
|
3636
3642
|
"loadFailed": "No se pudieron cargar los tokens de la API",
|
|
@@ -4639,7 +4645,8 @@
|
|
|
4639
4645
|
"frontendWiringFailedNote": "Los ajustes del frontend no se guardaron. Abre el inspector de cada aplicación frontend para definir su subdirectorio y sus servicios backend."
|
|
4640
4646
|
},
|
|
4641
4647
|
"repoType": "Tipo de repositorio",
|
|
4642
|
-
"repoTypeHint": "Qué es este repositorio: un servicio backend, una aplicación frontend, una biblioteca compartida o un repositorio de documentación (solo documentos/spikes)."
|
|
4648
|
+
"repoTypeHint": "Qué es este repositorio: un servicio backend, una aplicación frontend, una biblioteca compartida o un repositorio de documentación (solo documentos/spikes).",
|
|
4649
|
+
"prefillProviderMismatch": "El enlace pedía {repo} en otro proveedor, y este tablero está conectado a {connected}. Busca el repositorio a mano o abre el enlace en un tablero conectado a su proveedor."
|
|
4643
4650
|
},
|
|
4644
4651
|
"repoTree": {
|
|
4645
4652
|
"root": "raíz",
|
package/i18n/locales/fr.json
CHANGED
|
@@ -2910,19 +2910,23 @@
|
|
|
2910
2910
|
"scopeHint": "Chaque niveau inclut les précédents.",
|
|
2911
2911
|
"scope": {
|
|
2912
2912
|
"read": {
|
|
2913
|
-
"label": "Lecture
|
|
2913
|
+
"label": "Lecture · read",
|
|
2914
2914
|
"description": "Voir les services, les tâches, les pipelines et les exécutions."
|
|
2915
2915
|
},
|
|
2916
|
+
"webhooks": {
|
|
2917
|
+
"label": "Webhooks",
|
|
2918
|
+
"description": "Et aussi enregistrer des webhooks qui envoient les changements à un autre système."
|
|
2919
|
+
},
|
|
2916
2920
|
"write": {
|
|
2917
|
-
"label": "
|
|
2921
|
+
"label": "Écriture · write",
|
|
2918
2922
|
"description": "Et aussi créer et lancer des tâches."
|
|
2919
2923
|
},
|
|
2920
2924
|
"decide": {
|
|
2921
|
-
"label": "
|
|
2925
|
+
"label": "Décision · decide",
|
|
2922
2926
|
"description": "Et aussi répondre aux questions qu'attend une exécution en pause."
|
|
2923
2927
|
},
|
|
2924
2928
|
"admin": {
|
|
2925
|
-
"label": "Accès complet",
|
|
2929
|
+
"label": "Accès complet · admin",
|
|
2926
2930
|
"description": "Et aussi supprimer des tâches et agir sur les notifications, ce qui peut fusionner une pull request."
|
|
2927
2931
|
}
|
|
2928
2932
|
},
|
|
@@ -3612,7 +3616,7 @@
|
|
|
3612
3616
|
"labelHelp": "Un nom pour reconnaître ce jeton plus tard.",
|
|
3613
3617
|
"labelPlaceholder": "ex. pipeline CI",
|
|
3614
3618
|
"scope": "Portée",
|
|
3615
|
-
"scopeHelp": "Chaque niveau inclut tout ce que permet le précédent. Lecture : consulter les tâches, les exécutions et leurs résultats. Écriture : en plus, créer, modifier, démarrer, arrêter et relancer des tâches, et lancer des revues et des évaluations. Décision : en plus, répondre aux décisions humaines d'une exécution (approbations, constats de revue, questions d'entretien et de clarification, tests manuels) ; un jeton a aussi besoin de ce niveau pour démarrer un pipeline qui peut s'arrêter sur l'une d'elles. Accès complet : en plus, ajouter, configurer et supprimer des services, supprimer des tâches, lier des dépôts, gérer les connexions d'environnement
|
|
3619
|
+
"scopeHelp": "Chaque niveau inclut tout ce que permet le précédent. Lecture : consulter les tâches, les exécutions et leurs résultats. Webhooks : en plus, enregistrer et supprimer les webhooks qui envoient les changements à un autre système, comme les webhooks d'annuaire et de notification. Écriture : en plus, créer, modifier, démarrer, arrêter et relancer des tâches, et lancer des revues et des évaluations. Décision : en plus, répondre aux décisions humaines d'une exécution (approbations, constats de revue, questions d'entretien et de clarification, tests manuels) ; un jeton a aussi besoin de ce niveau pour démarrer un pipeline qui peut s'arrêter sur l'une d'elles. Accès complet (admin) : en plus, ajouter, configurer et supprimer des services, supprimer des tâches, lier des dépôts, gérer les connexions d'environnement, et agir sur les notifications.",
|
|
3616
3620
|
"create": "Créer le jeton",
|
|
3617
3621
|
"identity": "S'exécute en tant que",
|
|
3618
3622
|
"identitySystem": "Cet espace de travail (jeton système)",
|
|
@@ -3621,16 +3625,18 @@
|
|
|
3621
3625
|
"identitySelfHelp": "Les exécutions lancées avec ce jeton vous sont attribuées et peuvent utiliser votre abonnement personnel Claude / Codex / GLM. Chaque appel doit aussi envoyer votre mot de passe personnel dans l'en-tête X-Personal-Password ; il n'est jamais conservé. À utiliser pour vos propres exécutions headless.",
|
|
3622
3626
|
"reach": "Espaces de travail",
|
|
3623
3627
|
"reachHelp": "Les espaces de travail sur lesquels ce jeton peut agir. Un jeton qui en couvre plusieurs indique l’espace de travail à chaque appel dans l’en-tête x-cat-factory-workspace.",
|
|
3628
|
+
"reachAdminOnly": "Seul un administrateur du compte peut créer un jeton qui couvre d'autres espaces de travail, ce dont les webhooks d'annuaire ont besoin. Demandez-le à l'un d'eux.",
|
|
3624
3629
|
"reachThis": "Cet espace de travail uniquement",
|
|
3625
3630
|
"reachAll": "Tous les espaces de travail du compte",
|
|
3626
3631
|
"reachSelected": "Espaces de travail sélectionnés",
|
|
3627
3632
|
"reachPick": "Choisir des espaces de travail"
|
|
3628
3633
|
},
|
|
3629
3634
|
"scopes": {
|
|
3630
|
-
"read": "Lecture",
|
|
3631
|
-
"
|
|
3632
|
-
"
|
|
3633
|
-
"
|
|
3635
|
+
"read": "Lecture · read",
|
|
3636
|
+
"webhooks": "Webhooks (inclut Lecture)",
|
|
3637
|
+
"write": "Écriture · write (inclut Webhooks)",
|
|
3638
|
+
"decide": "Décision · decide (inclut Écriture)",
|
|
3639
|
+
"admin": "Accès complet · admin (inclut Décision)"
|
|
3634
3640
|
},
|
|
3635
3641
|
"toast": {
|
|
3636
3642
|
"loadFailed": "Impossible de charger les jetons d'API",
|
|
@@ -4639,7 +4645,8 @@
|
|
|
4639
4645
|
"frontendWiringFailedNote": "Les réglages du frontend n'ont pas été enregistrés. Ouvrez l'inspecteur de chaque application frontend pour définir son sous-répertoire et ses services backend."
|
|
4640
4646
|
},
|
|
4641
4647
|
"repoType": "Type de dépôt",
|
|
4642
|
-
"repoTypeHint": "Ce qu'est ce dépôt : un service backend, une application frontend, une bibliothèque partagée ou un dépôt de documentation (documents/spikes uniquement)."
|
|
4648
|
+
"repoTypeHint": "Ce qu'est ce dépôt : un service backend, une application frontend, une bibliothèque partagée ou un dépôt de documentation (documents/spikes uniquement).",
|
|
4649
|
+
"prefillProviderMismatch": "Le lien visait {repo} chez un autre hébergeur, et ce tableau est connecté à {connected}. Cherchez le dépôt à la main, ou ouvrez le lien sur un tableau connecté à son hébergeur."
|
|
4643
4650
|
},
|
|
4644
4651
|
"repoTree": {
|
|
4645
4652
|
"root": "racine",
|
package/i18n/locales/he.json
CHANGED
|
@@ -2910,19 +2910,23 @@
|
|
|
2910
2910
|
"scopeHint": "כל רמה כוללת את הרמות שמעליה.",
|
|
2911
2911
|
"scope": {
|
|
2912
2912
|
"read": {
|
|
2913
|
-
"label": "קריאה
|
|
2913
|
+
"label": "קריאה · read",
|
|
2914
2914
|
"description": "לראות שירותים, משימות, פייפליינים והרצות."
|
|
2915
2915
|
},
|
|
2916
|
+
"webhooks": {
|
|
2917
|
+
"label": "Webhooks",
|
|
2918
|
+
"description": "וגם לרשום webhooks ששולחים שינויים למערכת אחרת."
|
|
2919
|
+
},
|
|
2916
2920
|
"write": {
|
|
2917
|
-
"label": "
|
|
2921
|
+
"label": "כתיבה · write",
|
|
2918
2922
|
"description": "וגם ליצור משימות ולהפעיל אותן."
|
|
2919
2923
|
},
|
|
2920
2924
|
"decide": {
|
|
2921
|
-
"label": "
|
|
2925
|
+
"label": "החלטה · decide",
|
|
2922
2926
|
"description": "וגם לענות על השאלות שהרצה ממתינה להן."
|
|
2923
2927
|
},
|
|
2924
2928
|
"admin": {
|
|
2925
|
-
"label": "גישה מלאה",
|
|
2929
|
+
"label": "גישה מלאה · admin",
|
|
2926
2930
|
"description": "וגם למחוק משימות ולפעול על התראות, מה שעשוי למזג בקשת משיכה."
|
|
2927
2931
|
}
|
|
2928
2932
|
},
|
|
@@ -3753,7 +3757,7 @@
|
|
|
3753
3757
|
"labelHelp": "שם שיעזור לך לזהות את האסימון הזה בהמשך.",
|
|
3754
3758
|
"labelPlaceholder": "לדוגמה, צינור CI",
|
|
3755
3759
|
"scope": "היקף הרשאות",
|
|
3756
|
-
"scopeHelp": "כל רמה כוללת את כל מה שהרמה שלפניה מאפשרת. קריאה: צפייה במשימות, בהרצות ובתוצאות שלהן. כתיבה: בנוסף, יצירה, עריכה, הפעלה, עצירה והרצה חוזרת של משימות, והפעלת סקירות והערכות. החלטה: בנוסף, מענה להחלטות אנושיות של הרצה (אישורים, ממצאי סקירה, שאלות ראיון והבהרה, בדיקות ידניות); אסימון צריך את הרמה הזו גם כדי להפעיל צינור שעשוי לעצור באחת מהן. גישה
|
|
3760
|
+
"scopeHelp": "כל רמה כוללת את כל מה שהרמה שלפניה מאפשרת. קריאה: צפייה במשימות, בהרצות ובתוצאות שלהן. Webhooks: בנוסף, רישום והסרה של webhooks ששולחים שינויים למערכת אחרת, כמו webhooks של מדריך ושל התראות. כתיבה: בנוסף, יצירה, עריכה, הפעלה, עצירה והרצה חוזרת של משימות, והפעלת סקירות והערכות. החלטה: בנוסף, מענה להחלטות אנושיות של הרצה (אישורים, ממצאי סקירה, שאלות ראיון והבהרה, בדיקות ידניות); אסימון צריך את הרמה הזו גם כדי להפעיל צינור שעשוי לעצור באחת מהן. גישה מלאה (admin): בנוסף, הוספה, הגדרה ומחיקה של שירותים, מחיקת משימות, קישור מאגרים, ניהול חיבורי סביבה, ופעולה על התראות.",
|
|
3757
3761
|
"create": "צור אסימון",
|
|
3758
3762
|
"identity": "פועל בשם",
|
|
3759
3763
|
"identitySystem": "סביבת העבודה הזו (אסימון מערכת)",
|
|
@@ -3762,16 +3766,18 @@
|
|
|
3762
3766
|
"identitySelfHelp": "הרצות שמתחילות עם האסימון הזה נחשבות שלך ויכולות להשתמש במנוי האישי שלך ל-Claude / Codex / GLM. כל קריאה כזו חייבת לשלוח גם את הסיסמה האישית שלך בכותרת X-Personal-Password; היא לעולם אינה נשמרת. השתמשו בו להרצות headless משלכם.",
|
|
3763
3767
|
"reach": "סביבות עבודה",
|
|
3764
3768
|
"reachHelp": "באילו סביבות עבודה האסימון הזה יכול לפעול. אסימון שמגיע ליותר מסביבה אחת מציין את סביבת העבודה בכל קריאה בכותרת x-cat-factory-workspace.",
|
|
3769
|
+
"reachAdminOnly": "רק מנהל חשבון יכול ליצור אסימון שמגיע לסביבות עבודה נוספות, כפי ש-webhooks של מדריך דורשים. בקשו זאת ממנהל חשבון.",
|
|
3765
3770
|
"reachThis": "סביבת העבודה הזו בלבד",
|
|
3766
3771
|
"reachAll": "כל סביבות העבודה בחשבון",
|
|
3767
3772
|
"reachSelected": "סביבות עבודה נבחרות",
|
|
3768
3773
|
"reachPick": "בחירת סביבות עבודה"
|
|
3769
3774
|
},
|
|
3770
3775
|
"scopes": {
|
|
3771
|
-
"read": "קריאה",
|
|
3772
|
-
"
|
|
3773
|
-
"
|
|
3774
|
-
"
|
|
3776
|
+
"read": "קריאה · read",
|
|
3777
|
+
"webhooks": "Webhooks (כולל קריאה)",
|
|
3778
|
+
"write": "כתיבה · write (כולל Webhooks)",
|
|
3779
|
+
"decide": "החלטה · decide (כולל כתיבה)",
|
|
3780
|
+
"admin": "גישה מלאה · admin (כולל החלטה)"
|
|
3775
3781
|
},
|
|
3776
3782
|
"toast": {
|
|
3777
3783
|
"loadFailed": "לא ניתן לטעון את אסימוני ה-API",
|
|
@@ -4639,7 +4645,8 @@
|
|
|
4639
4645
|
"frontendWiringFailedNote": "הגדרות הפרונט-אנד לא נשמרו. פתח את האינספקטור של כל אפליקציית פרונט-אנד כדי להגדיר את תת-הספרייה ואת שירותי הבק-אנד שלה."
|
|
4640
4646
|
},
|
|
4641
4647
|
"repoType": "סוג המאגר",
|
|
4642
|
-
"repoTypeHint": "מה המאגר הזה: שירות בק-אנד, אפליקציית פרונט-אנד, ספרייה משותפת או מאגר תיעוד (מסמכים/ספייקים בלבד)."
|
|
4648
|
+
"repoTypeHint": "מה המאגר הזה: שירות בק-אנד, אפליקציית פרונט-אנד, ספרייה משותפת או מאגר תיעוד (מסמכים/ספייקים בלבד).",
|
|
4649
|
+
"prefillProviderMismatch": "הקישור ביקש את {repo} אצל ספק אחר, והלוח הזה מחובר ל-{connected}. חפשו את המאגר ידנית, או פתחו את הקישור בלוח שמחובר לספק שלו."
|
|
4643
4650
|
},
|
|
4644
4651
|
"repoTree": {
|
|
4645
4652
|
"root": "שורש",
|
package/i18n/locales/it.json
CHANGED
|
@@ -9,19 +9,23 @@
|
|
|
9
9
|
"scopeHint": "Ogni livello include quelli precedenti.",
|
|
10
10
|
"scope": {
|
|
11
11
|
"read": {
|
|
12
|
-
"label": "
|
|
12
|
+
"label": "Lettura · read",
|
|
13
13
|
"description": "Vedere servizi, attività, pipeline ed esecuzioni."
|
|
14
14
|
},
|
|
15
|
+
"webhooks": {
|
|
16
|
+
"label": "Webhook · webhooks",
|
|
17
|
+
"description": "Inoltre registrare webhook che inviano le modifiche a un altro sistema."
|
|
18
|
+
},
|
|
15
19
|
"write": {
|
|
16
|
-
"label": "
|
|
20
|
+
"label": "Scrittura · write",
|
|
17
21
|
"description": "Inoltre creare e avviare attività."
|
|
18
22
|
},
|
|
19
23
|
"decide": {
|
|
20
|
-
"label": "
|
|
24
|
+
"label": "Decisione · decide",
|
|
21
25
|
"description": "Inoltre rispondere alle domande su cui un'esecuzione è in attesa."
|
|
22
26
|
},
|
|
23
27
|
"admin": {
|
|
24
|
-
"label": "Accesso completo",
|
|
28
|
+
"label": "Accesso completo · admin",
|
|
25
29
|
"description": "Inoltre eliminare attività e agire sulle notifiche, il che può unire una pull request."
|
|
26
30
|
}
|
|
27
31
|
},
|
|
@@ -852,7 +856,7 @@
|
|
|
852
856
|
"labelHelp": "Un nome per riconoscere questo token in seguito.",
|
|
853
857
|
"labelPlaceholder": "es. pipeline CI",
|
|
854
858
|
"scope": "Ambito",
|
|
855
|
-
"scopeHelp": "Ogni livello include tutto ciò che consente il precedente. Lettura: visualizzare attività, esecuzioni e i loro risultati. Scrittura: inoltre creare, modificare, avviare, fermare e riprovare attività, ed eseguire revisioni e valutazioni. Decisione: inoltre rispondere alle decisioni umane di un'esecuzione (approvazioni, rilievi di revisione, domande di intervista e di chiarimento, test manuali); un token ha bisogno di questo livello anche per avviare una pipeline che può fermarsi su una di esse. Accesso completo: inoltre aggiungere, configurare ed eliminare servizi, eliminare attività, collegare repository, gestire connessioni di ambiente
|
|
859
|
+
"scopeHelp": "Ogni livello include tutto ciò che consente il precedente. Lettura: visualizzare attività, esecuzioni e i loro risultati. Webhook: inoltre registrare e rimuovere i webhook che inviano le modifiche a un altro sistema, come i webhook di directory e di notifica. Scrittura: inoltre creare, modificare, avviare, fermare e riprovare attività, ed eseguire revisioni e valutazioni. Decisione: inoltre rispondere alle decisioni umane di un'esecuzione (approvazioni, rilievi di revisione, domande di intervista e di chiarimento, test manuali); un token ha bisogno di questo livello anche per avviare una pipeline che può fermarsi su una di esse. Accesso completo (admin): inoltre aggiungere, configurare ed eliminare servizi, eliminare attività, collegare repository, gestire connessioni di ambiente, e agire sulle notifiche.",
|
|
856
860
|
"create": "Crea token",
|
|
857
861
|
"identity": "Viene eseguito come",
|
|
858
862
|
"identitySystem": "Questo spazio di lavoro (token di sistema)",
|
|
@@ -861,16 +865,18 @@
|
|
|
861
865
|
"identitySelfHelp": "Le esecuzioni avviate con questo token sono attribuite a te e possono usare il tuo abbonamento personale Claude / Codex / GLM. Ogni chiamata deve inviare anche la tua password personale nell'intestazione X-Personal-Password; non viene mai memorizzata. Usalo per le tue esecuzioni headless.",
|
|
862
866
|
"reach": "Spazi di lavoro",
|
|
863
867
|
"reachHelp": "Su quali spazi di lavoro questo token può agire. Un token che ne raggiunge più di uno indica lo spazio di lavoro a ogni chiamata nell’header x-cat-factory-workspace.",
|
|
868
|
+
"reachAdminOnly": "Solo un amministratore dell'account può creare un token che raggiunge altri spazi di lavoro, come richiedono i webhook di directory. Chiedilo a uno di loro.",
|
|
864
869
|
"reachThis": "Solo questo spazio di lavoro",
|
|
865
870
|
"reachAll": "Tutti gli spazi di lavoro dell’account",
|
|
866
871
|
"reachSelected": "Spazi di lavoro selezionati",
|
|
867
872
|
"reachPick": "Scegli gli spazi di lavoro"
|
|
868
873
|
},
|
|
869
874
|
"scopes": {
|
|
870
|
-
"read": "Lettura",
|
|
871
|
-
"
|
|
872
|
-
"
|
|
873
|
-
"
|
|
875
|
+
"read": "Lettura · read",
|
|
876
|
+
"webhooks": "Webhook · webhooks (include Lettura)",
|
|
877
|
+
"write": "Scrittura · write (include Webhook)",
|
|
878
|
+
"decide": "Decisione · decide (include Scrittura)",
|
|
879
|
+
"admin": "Accesso completo · admin (include Decisione)"
|
|
874
880
|
},
|
|
875
881
|
"toast": {
|
|
876
882
|
"loadFailed": "Impossibile caricare i token API",
|
|
@@ -3807,7 +3813,8 @@
|
|
|
3807
3813
|
"servicesAddedDescription": "{count} servizio aggiunto alla board. | {count} servizi aggiunti alla board.",
|
|
3808
3814
|
"frontendLinkedNote": "{directory} è stata aggiunta come frontend e collegata alle altre. Assegna il nome alle sue variabili d'ambiente con gli URL dei backend nel suo inspector.",
|
|
3809
3815
|
"frontendWiringFailedNote": "Le impostazioni del frontend non sono state salvate. Apri l'inspector di ogni app frontend per impostarne la sottodirectory e i servizi backend."
|
|
3810
|
-
}
|
|
3816
|
+
},
|
|
3817
|
+
"prefillProviderMismatch": "Il link chiedeva {repo} su un altro provider, e questa board è collegata a {connected}. Cerca il repository a mano, oppure apri il link su una board collegata al suo provider."
|
|
3811
3818
|
},
|
|
3812
3819
|
"repoTree": {
|
|
3813
3820
|
"root": "root",
|
package/i18n/locales/ja.json
CHANGED
|
@@ -2910,19 +2910,23 @@
|
|
|
2910
2910
|
"scopeHint": "各レベルは上位のレベルを含みます。",
|
|
2911
2911
|
"scope": {
|
|
2912
2912
|
"read": {
|
|
2913
|
-
"label": "
|
|
2913
|
+
"label": "読み取り · read",
|
|
2914
2914
|
"description": "サービス、タスク、パイプライン、実行を閲覧します。"
|
|
2915
2915
|
},
|
|
2916
|
+
"webhooks": {
|
|
2917
|
+
"label": "Webhook · webhooks",
|
|
2918
|
+
"description": "加えて、変更を別のシステムへ送る Webhook を登録できます。"
|
|
2919
|
+
},
|
|
2916
2920
|
"write": {
|
|
2917
|
-
"label": "
|
|
2921
|
+
"label": "書き込み · write",
|
|
2918
2922
|
"description": "加えて、タスクの作成と開始ができます。"
|
|
2919
2923
|
},
|
|
2920
2924
|
"decide": {
|
|
2921
|
-
"label": "
|
|
2925
|
+
"label": "判断 · decide",
|
|
2922
2926
|
"description": "加えて、停止中の実行が待っている質問に回答できます。"
|
|
2923
2927
|
},
|
|
2924
2928
|
"admin": {
|
|
2925
|
-
"label": "フルアクセス",
|
|
2929
|
+
"label": "フルアクセス · admin",
|
|
2926
2930
|
"description": "加えて、タスクの削除と通知への対応ができ、プルリクエストがマージされることもあります。"
|
|
2927
2931
|
}
|
|
2928
2932
|
},
|
|
@@ -3753,7 +3757,7 @@
|
|
|
3753
3757
|
"labelHelp": "後でこのトークンを識別するための名前。",
|
|
3754
3758
|
"labelPlaceholder": "例: CI パイプライン",
|
|
3755
3759
|
"scope": "権限範囲",
|
|
3756
|
-
"scopeHelp": "各レベルには、その前のレベルで許可されることがすべて含まれます。読み取り:
|
|
3760
|
+
"scopeHelp": "各レベルには、その前のレベルで許可されることがすべて含まれます。読み取り: タスク、実行、その結果を閲覧できます。Webhook: さらに、変更を別のシステムへ送る Webhook(ディレクトリ Webhook や通知 Webhook など)の登録と削除ができます。書き込み: さらに、タスクの作成、編集、開始、停止、再試行と、レビューや評価の実行ができます。判断: さらに、実行中の人による判断(承認、レビュー指摘、インタビューや確認の質問、手動テスト)に回答できます。こうした判断で停止しうるパイプラインを開始するにも、このレベルが必要です。フルアクセス (admin): さらに、サービスの追加・設定・削除、タスクの削除、リポジトリのリンク、環境接続の管理、通知への対応ができます。",
|
|
3757
3761
|
"create": "トークンを作成",
|
|
3758
3762
|
"identity": "実行者",
|
|
3759
3763
|
"identitySystem": "このワークスペース(システムトークン)",
|
|
@@ -3762,16 +3766,18 @@
|
|
|
3762
3766
|
"identitySelfHelp": "このトークンで開始した実行はあなたのものとして扱われ、あなたの個人 Claude / Codex / GLM サブスクリプションを利用できます。その際は毎回のリクエストで X-Personal-Password ヘッダーに個人パスワードを送る必要があります。パスワードは保存されません。自分のヘッドレス実行にはこちらを使ってください。",
|
|
3763
3767
|
"reach": "ワークスペース",
|
|
3764
3768
|
"reachHelp": "このトークンが操作できるワークスペース。複数のワークスペースに届くトークンは、各呼び出しで x-cat-factory-workspace ヘッダーにワークスペースを指定します。",
|
|
3769
|
+
"reachAdminOnly": "他のワークスペースに届くトークンを作成できるのはアカウント管理者だけです。ディレクトリ Webhook にはこのトークンが必要です。アカウント管理者に依頼してください。",
|
|
3765
3770
|
"reachThis": "このワークスペースのみ",
|
|
3766
3771
|
"reachAll": "アカウント内のすべてのワークスペース",
|
|
3767
3772
|
"reachSelected": "選択したワークスペース",
|
|
3768
3773
|
"reachPick": "ワークスペースを選択"
|
|
3769
3774
|
},
|
|
3770
3775
|
"scopes": {
|
|
3771
|
-
"read": "読み取り",
|
|
3772
|
-
"
|
|
3773
|
-
"
|
|
3774
|
-
"
|
|
3776
|
+
"read": "読み取り · read",
|
|
3777
|
+
"webhooks": "Webhook · webhooks(読み取りを含む)",
|
|
3778
|
+
"write": "書き込み · write(Webhook を含む)",
|
|
3779
|
+
"decide": "判断 · decide(書き込みを含む)",
|
|
3780
|
+
"admin": "フルアクセス · admin(判断を含む)"
|
|
3775
3781
|
},
|
|
3776
3782
|
"toast": {
|
|
3777
3783
|
"loadFailed": "APIトークンを読み込めませんでした",
|
|
@@ -4639,7 +4645,8 @@
|
|
|
4639
4645
|
"frontendWiringFailedNote": "フロントエンドの設定を保存できませんでした。各フロントエンドアプリのインスペクターを開き、サブディレクトリとバックエンドサービスを設定してください。"
|
|
4640
4646
|
},
|
|
4641
4647
|
"repoType": "リポジトリの種類",
|
|
4642
|
-
"repoTypeHint": "このリポジトリの種類: バックエンドサービス、フロントエンドアプリ、共有ライブラリ、またはドキュメントリポジトリ(ドキュメント/スパイクのみ)。"
|
|
4648
|
+
"repoTypeHint": "このリポジトリの種類: バックエンドサービス、フロントエンドアプリ、共有ライブラリ、またはドキュメントリポジトリ(ドキュメント/スパイクのみ)。",
|
|
4649
|
+
"prefillProviderMismatch": "このリンクは別のホストにある {repo} を指していますが、このボードは {connected} に接続されています。リポジトリを手動で検索するか、そのホストに接続されたボードでリンクを開いてください。"
|
|
4643
4650
|
},
|
|
4644
4651
|
"repoTree": {
|
|
4645
4652
|
"root": "ルート",
|
package/i18n/locales/pl.json
CHANGED
|
@@ -2910,19 +2910,23 @@
|
|
|
2910
2910
|
"scopeHint": "Każdy poziom obejmuje poprzednie.",
|
|
2911
2911
|
"scope": {
|
|
2912
2912
|
"read": {
|
|
2913
|
-
"label": "
|
|
2913
|
+
"label": "Odczyt · read",
|
|
2914
2914
|
"description": "Podgląd usług, zadań, potoków i uruchomień."
|
|
2915
2915
|
},
|
|
2916
|
+
"webhooks": {
|
|
2917
|
+
"label": "Webhooki · webhooks",
|
|
2918
|
+
"description": "Dodatkowo rejestrowanie webhooków wysyłających zmiany do innego systemu."
|
|
2919
|
+
},
|
|
2916
2920
|
"write": {
|
|
2917
|
-
"label": "
|
|
2921
|
+
"label": "Zapis · write",
|
|
2918
2922
|
"description": "Dodatkowo tworzenie i uruchamianie zadań."
|
|
2919
2923
|
},
|
|
2920
2924
|
"decide": {
|
|
2921
|
-
"label": "
|
|
2925
|
+
"label": "Decyzje · decide",
|
|
2922
2926
|
"description": "Dodatkowo odpowiadanie na pytania, na które czeka wstrzymane uruchomienie."
|
|
2923
2927
|
},
|
|
2924
2928
|
"admin": {
|
|
2925
|
-
"label": "Pełny dostęp",
|
|
2929
|
+
"label": "Pełny dostęp · admin",
|
|
2926
2930
|
"description": "Dodatkowo usuwanie zadań i reagowanie na powiadomienia, co może scalić pull request."
|
|
2927
2931
|
}
|
|
2928
2932
|
},
|
|
@@ -3612,7 +3616,7 @@
|
|
|
3612
3616
|
"labelHelp": "Nazwa, po której później rozpoznasz ten token.",
|
|
3613
3617
|
"labelPlaceholder": "np. potok CI",
|
|
3614
3618
|
"scope": "Zakres",
|
|
3615
|
-
"scopeHelp": "Każdy poziom obejmuje wszystko, na co pozwala poprzedni. Odczyt: przeglądanie zadań, przebiegów i ich wyników. Zapis: dodatkowo tworzenie, edytowanie, uruchamianie, zatrzymywanie i ponawianie zadań oraz uruchamianie przeglądów i ocen. Decyzje: dodatkowo odpowiadanie na decyzje człowieka w przebiegu (zatwierdzenia, uwagi z przeglądu, pytania z wywiadu i pytania doprecyzowujące, testy ręczne); token potrzebuje tego poziomu także do uruchomienia potoku, który może się zatrzymać na takiej decyzji. Pełny dostęp: dodatkowo dodawanie, konfigurowanie i usuwanie usług, usuwanie zadań, łączenie repozytoriów, zarządzanie połączeniami środowisk
|
|
3619
|
+
"scopeHelp": "Każdy poziom obejmuje wszystko, na co pozwala poprzedni. Odczyt: przeglądanie zadań, przebiegów i ich wyników. Webhooki: dodatkowo rejestrowanie i usuwanie webhooków wysyłających zmiany do innego systemu, takich jak webhooki katalogu i powiadomień. Zapis: dodatkowo tworzenie, edytowanie, uruchamianie, zatrzymywanie i ponawianie zadań oraz uruchamianie przeglądów i ocen. Decyzje: dodatkowo odpowiadanie na decyzje człowieka w przebiegu (zatwierdzenia, uwagi z przeglądu, pytania z wywiadu i pytania doprecyzowujące, testy ręczne); token potrzebuje tego poziomu także do uruchomienia potoku, który może się zatrzymać na takiej decyzji. Pełny dostęp (admin): dodatkowo dodawanie, konfigurowanie i usuwanie usług, usuwanie zadań, łączenie repozytoriów, zarządzanie połączeniami środowisk oraz reagowanie na powiadomienia.",
|
|
3616
3620
|
"create": "Utwórz token",
|
|
3617
3621
|
"identity": "Działa jako",
|
|
3618
3622
|
"identitySystem": "Ten obszar roboczy (token systemowy)",
|
|
@@ -3621,16 +3625,18 @@
|
|
|
3621
3625
|
"identitySelfHelp": "Uruchomienia rozpoczęte tym tokenem są przypisywane Tobie i mogą korzystać z Twojej osobistej subskrypcji Claude / Codex / GLM. Każde takie wywołanie musi dodatkowo przesłać Twoje hasło osobiste w nagłówku X-Personal-Password; nie jest ono nigdzie zapisywane. Użyj go do własnych uruchomień headless.",
|
|
3622
3626
|
"reach": "Obszary robocze",
|
|
3623
3627
|
"reachHelp": "W których obszarach roboczych ten token może działać. Token obejmujący więcej niż jeden wskazuje obszar roboczy przy każdym wywołaniu w nagłówku x-cat-factory-workspace.",
|
|
3628
|
+
"reachAdminOnly": "Tylko administrator konta może utworzyć token obejmujący inne obszary robocze, którego wymagają webhooki katalogu. Poproś o to administratora.",
|
|
3624
3629
|
"reachThis": "Tylko ten obszar roboczy",
|
|
3625
3630
|
"reachAll": "Wszystkie obszary robocze konta",
|
|
3626
3631
|
"reachSelected": "Wybrane obszary robocze",
|
|
3627
3632
|
"reachPick": "Wybierz obszary robocze"
|
|
3628
3633
|
},
|
|
3629
3634
|
"scopes": {
|
|
3630
|
-
"read": "Odczyt",
|
|
3631
|
-
"
|
|
3632
|
-
"
|
|
3633
|
-
"
|
|
3635
|
+
"read": "Odczyt · read",
|
|
3636
|
+
"webhooks": "Webhooki · webhooks (obejmuje Odczyt)",
|
|
3637
|
+
"write": "Zapis · write (obejmuje Webhooki)",
|
|
3638
|
+
"decide": "Decyzje · decide (obejmuje Zapis)",
|
|
3639
|
+
"admin": "Pełny dostęp · admin (obejmuje Decyzje)"
|
|
3634
3640
|
},
|
|
3635
3641
|
"toast": {
|
|
3636
3642
|
"loadFailed": "Nie udało się załadować tokenów API",
|
|
@@ -4639,7 +4645,8 @@
|
|
|
4639
4645
|
"frontendWiringFailedNote": "Ustawienia frontendu nie zostały zapisane. Otwórz inspektor każdej aplikacji frontendowej, aby ustawić jej podkatalog i usługi backendowe."
|
|
4640
4646
|
},
|
|
4641
4647
|
"repoType": "Typ repozytorium",
|
|
4642
|
-
"repoTypeHint": "Czym jest to repozytorium: usługą backendową, aplikacją frontendową, współdzieloną biblioteką lub repozytorium dokumentacji (tylko dokumenty/spike'i)."
|
|
4648
|
+
"repoTypeHint": "Czym jest to repozytorium: usługą backendową, aplikacją frontendową, współdzieloną biblioteką lub repozytorium dokumentacji (tylko dokumenty/spike'i).",
|
|
4649
|
+
"prefillProviderMismatch": "Link wskazywał {repo} u innego dostawcy, a ta tablica jest połączona z {connected}. Wyszukaj repozytorium ręcznie albo otwórz link na tablicy połączonej z jego dostawcą."
|
|
4643
4650
|
},
|
|
4644
4651
|
"repoTree": {
|
|
4645
4652
|
"root": "katalog główny",
|
package/i18n/locales/tr.json
CHANGED
|
@@ -2910,19 +2910,23 @@
|
|
|
2910
2910
|
"scopeHint": "Her düzey kendisinden öncekileri de kapsar.",
|
|
2911
2911
|
"scope": {
|
|
2912
2912
|
"read": {
|
|
2913
|
-
"label": "
|
|
2913
|
+
"label": "Okuma · read",
|
|
2914
2914
|
"description": "Servisleri, görevleri, hatları ve çalışmaları görüntüler."
|
|
2915
2915
|
},
|
|
2916
|
+
"webhooks": {
|
|
2917
|
+
"label": "Webhooklar · webhooks",
|
|
2918
|
+
"description": "Ayrıca değişiklikleri başka bir sisteme gönderen webhooklar kaydeder."
|
|
2919
|
+
},
|
|
2916
2920
|
"write": {
|
|
2917
|
-
"label": "
|
|
2921
|
+
"label": "Yazma · write",
|
|
2918
2922
|
"description": "Ayrıca görev oluşturur ve başlatır."
|
|
2919
2923
|
},
|
|
2920
2924
|
"decide": {
|
|
2921
|
-
"label": "
|
|
2925
|
+
"label": "Karar · decide",
|
|
2922
2926
|
"description": "Ayrıca duraklatılmış bir çalışmanın beklediği soruları yanıtlar."
|
|
2923
2927
|
},
|
|
2924
2928
|
"admin": {
|
|
2925
|
-
"label": "Tam erişim",
|
|
2929
|
+
"label": "Tam erişim · admin",
|
|
2926
2930
|
"description": "Ayrıca görev siler ve bildirimlere işlem uygular; bu bir pull request'i birleştirebilir."
|
|
2927
2931
|
}
|
|
2928
2932
|
},
|
|
@@ -3753,7 +3757,7 @@
|
|
|
3753
3757
|
"labelHelp": "Bu belirteci daha sonra tanımak için bir ad.",
|
|
3754
3758
|
"labelPlaceholder": "örn. CI hattı",
|
|
3755
3759
|
"scope": "Kapsam",
|
|
3756
|
-
"scopeHelp": "Her seviye, bir öncekinin izin verdiği her şeyi içerir. Okuma: görevleri, çalıştırmaları ve sonuçlarını görüntüleme. Yazma: ayrıca görev oluşturma, düzenleme, başlatma, durdurma ve yeniden deneme, inceleme ve değerlendirme başlatma. Karar: ayrıca bir çalıştırmanın insan kararlarını yanıtlama (onaylar, inceleme bulguları, görüşme ve netleştirme soruları, manuel testler); bir belirtecin, bunlardan birinde durabilecek bir işlem hattını başlatmak için de bu seviyeye ihtiyacı vardır. Tam erişim: ayrıca hizmet ekleme, yapılandırma ve silme, görev silme, depo bağlama, ortam bağlantılarını
|
|
3760
|
+
"scopeHelp": "Her seviye, bir öncekinin izin verdiği her şeyi içerir. Okuma: görevleri, çalıştırmaları ve sonuçlarını görüntüleme. Webhooklar: ayrıca değişiklikleri başka bir sisteme gönderen webhookları (dizin ve bildirim webhookları gibi) kaydetme ve kaldırma. Yazma: ayrıca görev oluşturma, düzenleme, başlatma, durdurma ve yeniden deneme, inceleme ve değerlendirme başlatma. Karar: ayrıca bir çalıştırmanın insan kararlarını yanıtlama (onaylar, inceleme bulguları, görüşme ve netleştirme soruları, manuel testler); bir belirtecin, bunlardan birinde durabilecek bir işlem hattını başlatmak için de bu seviyeye ihtiyacı vardır. Tam erişim (admin): ayrıca hizmet ekleme, yapılandırma ve silme, görev silme, depo bağlama, ortam bağlantılarını yönetme ve bildirimler üzerinde işlem yapma.",
|
|
3757
3761
|
"create": "Belirteç oluştur",
|
|
3758
3762
|
"identity": "Şu kimlikle çalışır",
|
|
3759
3763
|
"identitySystem": "Bu çalışma alanı (sistem belirteci)",
|
|
@@ -3762,16 +3766,18 @@
|
|
|
3762
3766
|
"identitySelfHelp": "Bu belirteçle başlatılan çalıştırmalar size ait sayılır ve kişisel Claude / Codex / GLM aboneliğinizi kullanabilir. Bu tür her çağrının ayrıca kişisel parolanızı X-Personal-Password başlığında göndermesi gerekir; parola hiçbir zaman saklanmaz. Kendi headless çalıştırmalarınız için bunu kullanın.",
|
|
3763
3767
|
"reach": "Çalışma alanları",
|
|
3764
3768
|
"reachHelp": "Bu belirtecin hangi çalışma alanlarında işlem yapabileceği. Birden fazla çalışma alanına erişen bir belirteç, her çağrıda çalışma alanını x-cat-factory-workspace başlığında belirtir.",
|
|
3769
|
+
"reachAdminOnly": "Diğer çalışma alanlarına erişen bir belirteci yalnızca bir hesap yöneticisi oluşturabilir; dizin webhookları buna ihtiyaç duyar. Bir hesap yöneticisinden isteyin.",
|
|
3765
3770
|
"reachThis": "Yalnızca bu çalışma alanı",
|
|
3766
3771
|
"reachAll": "Hesaptaki tüm çalışma alanları",
|
|
3767
3772
|
"reachSelected": "Seçili çalışma alanları",
|
|
3768
3773
|
"reachPick": "Çalışma alanlarını seçin"
|
|
3769
3774
|
},
|
|
3770
3775
|
"scopes": {
|
|
3771
|
-
"read": "Okuma",
|
|
3772
|
-
"
|
|
3773
|
-
"
|
|
3774
|
-
"
|
|
3776
|
+
"read": "Okuma · read",
|
|
3777
|
+
"webhooks": "Webhooklar · webhooks (Okuma dahil)",
|
|
3778
|
+
"write": "Yazma · write (Webhooklar dahil)",
|
|
3779
|
+
"decide": "Karar · decide (Yazma dahil)",
|
|
3780
|
+
"admin": "Tam erişim · admin (Karar dahil)"
|
|
3775
3781
|
},
|
|
3776
3782
|
"toast": {
|
|
3777
3783
|
"loadFailed": "API belirteçleri yüklenemedi",
|
|
@@ -4639,7 +4645,8 @@
|
|
|
4639
4645
|
"frontendWiringFailedNote": "Frontend ayarları kaydedilmedi. Alt dizinini ve backend servislerini ayarlamak için her frontend uygulamasının inspector’ını açın."
|
|
4640
4646
|
},
|
|
4641
4647
|
"repoType": "Depo türü",
|
|
4642
|
-
"repoTypeHint": "Bu deponun türü: bir backend servisi, bir frontend uygulaması, paylaşılan bir kütüphane veya bir doküman deposu (yalnızca doküman/spike)."
|
|
4648
|
+
"repoTypeHint": "Bu deponun türü: bir backend servisi, bir frontend uygulaması, paylaşılan bir kütüphane veya bir doküman deposu (yalnızca doküman/spike).",
|
|
4649
|
+
"prefillProviderMismatch": "Bağlantı başka bir sağlayıcıdaki {repo} deposunu istiyordu, bu pano ise {connected} ile bağlı. Depoyu elle arayın veya bağlantıyı onun sağlayıcısına bağlı bir panoda açın."
|
|
4643
4650
|
},
|
|
4644
4651
|
"repoTree": {
|
|
4645
4652
|
"root": "kök",
|
package/i18n/locales/uk.json
CHANGED
|
@@ -2910,19 +2910,23 @@
|
|
|
2910
2910
|
"scopeHint": "Кожен рівень включає попередні.",
|
|
2911
2911
|
"scope": {
|
|
2912
2912
|
"read": {
|
|
2913
|
-
"label": "
|
|
2913
|
+
"label": "Читання · read",
|
|
2914
2914
|
"description": "Переглядати сервіси, завдання, конвеєри та запуски."
|
|
2915
2915
|
},
|
|
2916
|
+
"webhooks": {
|
|
2917
|
+
"label": "Вебхуки · webhooks",
|
|
2918
|
+
"description": "А також реєструвати вебхуки, що надсилають зміни в іншу систему."
|
|
2919
|
+
},
|
|
2916
2920
|
"write": {
|
|
2917
|
-
"label": "
|
|
2921
|
+
"label": "Запис · write",
|
|
2918
2922
|
"description": "А також створювати й запускати завдання."
|
|
2919
2923
|
},
|
|
2920
2924
|
"decide": {
|
|
2921
|
-
"label": "
|
|
2925
|
+
"label": "Рішення · decide",
|
|
2922
2926
|
"description": "А також відповідати на питання, на які чекає призупинений запуск."
|
|
2923
2927
|
},
|
|
2924
2928
|
"admin": {
|
|
2925
|
-
"label": "Повний доступ",
|
|
2929
|
+
"label": "Повний доступ · admin",
|
|
2926
2930
|
"description": "А також видаляти завдання й діяти за сповіщеннями, що може злити пулреквест."
|
|
2927
2931
|
}
|
|
2928
2932
|
},
|
|
@@ -3612,7 +3616,7 @@
|
|
|
3612
3616
|
"labelHelp": "Назва, за якою ви пізніше впізнаєте цей токен.",
|
|
3613
3617
|
"labelPlaceholder": "напр. конвеєр CI",
|
|
3614
3618
|
"scope": "Обсяг доступу",
|
|
3615
|
-
"scopeHelp": "Кожен рівень включає все, що дозволяє попередній. Читання: перегляд завдань, виконань та їхніх результатів. Запис: додатково створення, редагування, запуск, зупинка й повторення завдань, а також запуск рев'ю та оцінок. Рішення: додатково відповіді на людські рішення у виконанні (схвалення, зауваження рев'ю, питання інтерв'ю та уточнювальні питання, ручні тести); токен потребує цього рівня й для запуску конвеєра, який може зупинитися на одному з них. Повний
|
|
3619
|
+
"scopeHelp": "Кожен рівень включає все, що дозволяє попередній. Читання: перегляд завдань, виконань та їхніх результатів. Вебхуки: додатково реєстрація й видалення вебхуків, що надсилають зміни в іншу систему, як-от вебхуки каталогу та сповіщень. Запис: додатково створення, редагування, запуск, зупинка й повторення завдань, а також запуск рев'ю та оцінок. Рішення: додатково відповіді на людські рішення у виконанні (схвалення, зауваження рев'ю, питання інтерв'ю та уточнювальні питання, ручні тести); токен потребує цього рівня й для запуску конвеєра, який може зупинитися на одному з них. Повний доступ (admin): додатково додавання, налаштування й видалення сервісів, видалення завдань, під'єднання репозиторіїв, керування підключеннями середовищ, а також дії зі сповіщеннями.",
|
|
3616
3620
|
"create": "Створити токен",
|
|
3617
3621
|
"identity": "Виконується як",
|
|
3618
3622
|
"identitySystem": "Цей робочий простір (системний токен)",
|
|
@@ -3621,16 +3625,18 @@
|
|
|
3621
3625
|
"identitySelfHelp": "Запуски, розпочаті цим токеном, вважаються вашими й можуть використовувати вашу особисту підписку Claude / Codex / GLM. Кожен такий виклик має також надсилати ваш особистий пароль у заголовку X-Personal-Password; він ніколи не зберігається. Використовуйте його для власних headless-запусків.",
|
|
3622
3626
|
"reach": "Робочі простори",
|
|
3623
3627
|
"reachHelp": "У яких робочих просторах може діяти цей токен. Токен, що охоплює більше одного, вказує робочий простір у кожному виклику в заголовку x-cat-factory-workspace.",
|
|
3628
|
+
"reachAdminOnly": "Лише адміністратор облікового запису може створити токен, що охоплює інші робочі простори, як того потребують вебхуки каталогу. Попросіть адміністратора.",
|
|
3624
3629
|
"reachThis": "Лише цей робочий простір",
|
|
3625
3630
|
"reachAll": "Усі робочі простори облікового запису",
|
|
3626
3631
|
"reachSelected": "Вибрані робочі простори",
|
|
3627
3632
|
"reachPick": "Виберіть робочі простори"
|
|
3628
3633
|
},
|
|
3629
3634
|
"scopes": {
|
|
3630
|
-
"read": "Читання",
|
|
3631
|
-
"
|
|
3632
|
-
"
|
|
3633
|
-
"
|
|
3635
|
+
"read": "Читання · read",
|
|
3636
|
+
"webhooks": "Вебхуки · webhooks (включає Читання)",
|
|
3637
|
+
"write": "Запис · write (включає Вебхуки)",
|
|
3638
|
+
"decide": "Рішення · decide (включає Запис)",
|
|
3639
|
+
"admin": "Повний доступ · admin (включає Рішення)"
|
|
3634
3640
|
},
|
|
3635
3641
|
"toast": {
|
|
3636
3642
|
"loadFailed": "Не вдалося завантажити токени API",
|
|
@@ -4639,7 +4645,8 @@
|
|
|
4639
4645
|
"frontendWiringFailedNote": "Налаштування фронтенду не збережено. Відкрийте інспектор кожного фронтенд-застосунку, щоб указати його підкаталог і бекенд-сервіси."
|
|
4640
4646
|
},
|
|
4641
4647
|
"repoType": "Тип репозиторію",
|
|
4642
|
-
"repoTypeHint": "Що це за репозиторій: бекенд-сервіс, фронтенд-застосунок, спільна бібліотека або репозиторій документації (лише документи/спайки)."
|
|
4648
|
+
"repoTypeHint": "Що це за репозиторій: бекенд-сервіс, фронтенд-застосунок, спільна бібліотека або репозиторій документації (лише документи/спайки).",
|
|
4649
|
+
"prefillProviderMismatch": "Посилання вказувало на {repo} в іншого провайдера, а ця дошка підключена до {connected}. Знайдіть репозиторій вручну або відкрийте посилання на дошці, підключеній до його провайдера."
|
|
4643
4650
|
},
|
|
4644
4651
|
"repoTree": {
|
|
4645
4652
|
"root": "корінь",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.317.0",
|
|
4
4
|
"description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"access": "public"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@cat-factory/contracts": "0.
|
|
21
|
+
"@cat-factory/contracts": "0.371.0",
|
|
22
22
|
"@modular-frontend/core": "0.6.0",
|
|
23
23
|
"@modular-vue/core": "^1.5.0",
|
|
24
24
|
"@modular-vue/journeys": "^1.4.0",
|