@cat-factory/app 0.230.0 → 0.231.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/app/components/auth/LoginScreen.vue +48 -20
- package/app/docs/consumer-extensions.md +2 -2
- package/i18n/locales/de.json +2 -0
- package/i18n/locales/en.json +2 -0
- package/i18n/locales/es.json +2 -0
- package/i18n/locales/fr.json +2 -0
- package/i18n/locales/he.json +2 -0
- package/i18n/locales/it.json +2 -0
- package/i18n/locales/ja.json +2 -0
- package/i18n/locales/pl.json +2 -0
- package/i18n/locales/tr.json +2 -0
- package/i18n/locales/uk.json +2 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -583,7 +583,7 @@ event left to restore it.
|
|
|
583
583
|
All user-facing SPA copy goes through `@nuxtjs/i18n`; never hard-code a display string. This
|
|
584
584
|
layer ships the base `en` locale, and a downstream deployment overrides by dropping its own files
|
|
585
585
|
(the per-layer deep-merge is the override seam, consumer wins key by key). Migration status:
|
|
586
|
-
[`docs/localization.md`](../../docs/localization.md).
|
|
586
|
+
[`docs/internal/localization.md`](../../docs/internal/localization.md).
|
|
587
587
|
|
|
588
588
|
- `i18n/locales/<locale>.json`: the catalogs (the v9+ `i18n/` convention, NOT `app/locales/`).
|
|
589
589
|
- `i18n/i18n.config.ts`: runtime vue-i18n behaviour only (fallback locale, the plural
|
|
@@ -9,25 +9,32 @@ import { SSO_ERROR_MESSAGE_KEYS } from '~/utils/sso'
|
|
|
9
9
|
const auth = useAuthStore()
|
|
10
10
|
const { t } = useI18n()
|
|
11
11
|
|
|
12
|
-
// Local-mode source-control PAT login.
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
// constants rather than catalog keys — the
|
|
17
|
-
// token" link prefers the server's
|
|
18
|
-
// descriptor's URL is the fallback.
|
|
12
|
+
// Local-mode source-control PAT login. A configured token lives server-side and is selected by
|
|
13
|
+
// PROVIDER (no token is typed into the browser); a deployment that holds none can be handed one
|
|
14
|
+
// here, and it becomes both this sign-in and the credential the deployment operates with. The
|
|
15
|
+
// brand labels / icons / token-settings URLs are the shared provider descriptors in `~/utils/vcs`
|
|
16
|
+
// (brand names stay verbatim across locales, so they are constants rather than catalog keys — the
|
|
17
|
+
// same convention as ApiKeysSection). The "create a token" link prefers the server's
|
|
18
|
+
// scopes-preselected deep link (`patLogin.setupUrls`); the descriptor's URL is the fallback.
|
|
19
19
|
type PatProvider = VcsProvider
|
|
20
|
+
/** Every provider a token page exists for — the fallback link set when none can be installed. */
|
|
20
21
|
const ALL_PROVIDERS: PatProvider[] = ['github', 'gitlab']
|
|
21
22
|
const PROVIDER_LABELS = VCS_PROVIDER_LABELS
|
|
22
23
|
const PROVIDER_ICONS = VCS_PROVIDER_ICONS
|
|
23
24
|
const PROVIDER_TOKEN_URLS = VCS_PROVIDER_TOKEN_URLS
|
|
24
25
|
|
|
25
26
|
const patLoginCfg = computed(() => auth.localMode?.patLogin)
|
|
26
|
-
//
|
|
27
|
-
//
|
|
27
|
+
// Providers whose token the deployment already holds: one-click sign-in. A provider without one
|
|
28
|
+
// gets no button — it is offered in the paste form below instead.
|
|
28
29
|
const configuredProviders = computed<PatProvider[]>(
|
|
29
30
|
() => (patLoginCfg.value?.configured ?? []) as PatProvider[],
|
|
30
31
|
)
|
|
32
|
+
// Providers the server will ACCEPT a token for from here. Empty when `.env` owns the credential
|
|
33
|
+
// (it wins, so a pasted token would be ignored) or nothing can seal one — the notice then falls
|
|
34
|
+
// back to telling the developer where the token actually has to go.
|
|
35
|
+
const installableProviders = computed<PatProvider[]>(
|
|
36
|
+
() => (patLoginCfg.value?.installable ?? []) as PatProvider[],
|
|
37
|
+
)
|
|
31
38
|
const isLocalMode = computed(() => auth.localMode?.enabled === true)
|
|
32
39
|
const hasConfiguredPat = computed(() => configuredProviders.value.length > 0)
|
|
33
40
|
// Mothership mode: identity + org data live on a hosted mothership, so the primary sign-in is a
|
|
@@ -137,13 +144,15 @@ const ssoErrorMessage = computed(() =>
|
|
|
137
144
|
auth.ssoError ? t(SSO_ERROR_MESSAGE_KEYS[auth.ssoError]) : null,
|
|
138
145
|
)
|
|
139
146
|
|
|
140
|
-
//
|
|
141
|
-
//
|
|
142
|
-
//
|
|
143
|
-
// on both hosted facades (Node + Worker)
|
|
144
|
-
//
|
|
147
|
+
// Paste-a-token sign-in. The user supplies a source-control PAT and the server resolves it to an
|
|
148
|
+
// account. What it MEANS differs per facade, which is why the providers come from two places:
|
|
149
|
+
// - hosted (remote node): the user's OWN token, held to the login/org/domain allowlist. GitHub
|
|
150
|
+
// always, GitLab when configured, on both hosted facades (Node + Worker).
|
|
151
|
+
// - local: the token also becomes the DEPLOYMENT's credential, so the server names the providers
|
|
152
|
+
// it will accept one for (`installable`) — empty once `.env` owns it.
|
|
153
|
+
// One form serves both; the local-only hint below says what the token is additionally used for.
|
|
145
154
|
const remotePatProviders = computed<PatProvider[]>(() =>
|
|
146
|
-
isLocalMode.value ?
|
|
155
|
+
isLocalMode.value ? installableProviders.value : (auth.patProviders as PatProvider[]),
|
|
147
156
|
)
|
|
148
157
|
const remotePatProvider = ref<PatProvider>('github')
|
|
149
158
|
watch(
|
|
@@ -251,16 +260,24 @@ const noSignInMethod = computed(
|
|
|
251
260
|
{{ t('auth.localMode.continueWithConfigured', { provider: PROVIDER_LABELS[p] }) }}
|
|
252
261
|
</UButton>
|
|
253
262
|
|
|
254
|
-
<!--
|
|
263
|
+
<!-- The deployment holds no token. When one can be installed from here the notice says
|
|
264
|
+
so and the create-token links feed the form below; when it can't (`.env` owns the
|
|
265
|
+
credential, or nothing can seal one) it names where the token has to go instead. -->
|
|
255
266
|
<template v-if="!hasConfiguredPat">
|
|
256
267
|
<UAlert
|
|
257
268
|
color="warning"
|
|
258
269
|
variant="subtle"
|
|
259
270
|
icon="i-lucide-key-round"
|
|
260
271
|
:title="t('auth.localMode.noPatTitle')"
|
|
261
|
-
:description="
|
|
272
|
+
:description="
|
|
273
|
+
installableProviders.length > 0
|
|
274
|
+
? t('auth.localMode.setupBody')
|
|
275
|
+
: t('auth.localMode.noPatBody')
|
|
276
|
+
"
|
|
262
277
|
/>
|
|
263
|
-
|
|
278
|
+
<!-- Only when nothing can be installed here: the paste form below carries its own
|
|
279
|
+
per-provider link, so showing these too would offer the same thing twice. -->
|
|
280
|
+
<div v-if="installableProviders.length === 0" class="flex flex-wrap gap-3 px-1">
|
|
264
281
|
<a
|
|
265
282
|
v-for="p in ALL_PROVIDERS"
|
|
266
283
|
:key="p"
|
|
@@ -423,10 +440,16 @@ const noSignInMethod = computed(
|
|
|
423
440
|
</p>
|
|
424
441
|
</form>
|
|
425
442
|
|
|
426
|
-
<!--
|
|
443
|
+
<!-- Paste-a-token sign-in: your own PAT on a hosted node; on local mode the token this
|
|
444
|
+
deployment will operate with (see `remotePatProviders`). -->
|
|
427
445
|
<template v-if="remotePatProviders.length > 0 && mode !== 'forgot'">
|
|
428
446
|
<div
|
|
429
|
-
v-if="
|
|
447
|
+
v-if="
|
|
448
|
+
auth.providers.github ||
|
|
449
|
+
auth.providers.google ||
|
|
450
|
+
auth.providers.password ||
|
|
451
|
+
hasConfiguredPat
|
|
452
|
+
"
|
|
430
453
|
class="my-4 flex items-center gap-3 text-xs text-slate-500"
|
|
431
454
|
>
|
|
432
455
|
<span class="h-px flex-1 bg-slate-800" /> {{ t('auth.login.or') }}
|
|
@@ -471,6 +494,11 @@ const noSignInMethod = computed(
|
|
|
471
494
|
>
|
|
472
495
|
{{ t('auth.login.signInWithPat', { provider: PROVIDER_LABELS[remotePatProvider] }) }}
|
|
473
496
|
</UButton>
|
|
497
|
+
<!-- Local mode only: say what else the token is for BEFORE it is handed over, since it
|
|
498
|
+
becomes the credential every agent step on this machine clones and pushes with. -->
|
|
499
|
+
<p v-if="isLocalMode" class="px-1 text-xs text-slate-400">
|
|
500
|
+
{{ t('auth.localMode.tokenBecomesCredential') }}
|
|
501
|
+
</p>
|
|
474
502
|
<p class="px-1 text-center">
|
|
475
503
|
<a
|
|
476
504
|
:href="tokenCreateUrl(remotePatProvider)"
|
|
@@ -213,8 +213,8 @@ suite can address a row and the caption inside it.
|
|
|
213
213
|
Together, `fields` + `defaultFragmentIds` + `defaultPipelineId` are what turns a task type from a
|
|
214
214
|
badge into a **reusable operation**: a canned unit of work an org runs repeatedly with per-case
|
|
215
215
|
input, whose collected values reach every agent's prompt. See
|
|
216
|
-
[`docs/
|
|
217
|
-
|
|
216
|
+
[`backend/docs/reusable-operations.md`](../../../../backend/docs/reusable-operations.md) and the
|
|
217
|
+
`org:introduce-api` worked example in `backend/internal/example-custom-agent`.
|
|
218
218
|
|
|
219
219
|
The **same type can be delivered from the backend** instead of code-shipped: register it on the
|
|
220
220
|
deployment's app-owned `TaskTypeRegistry` and it arrives in the workspace snapshot's
|
package/i18n/locales/de.json
CHANGED
|
@@ -3644,7 +3644,9 @@
|
|
|
3644
3644
|
"continueWithConfigured": "Mit konfiguriertem {provider}-PAT anmelden",
|
|
3645
3645
|
"noPatTitle": "Kein Versionsverwaltungs-Token konfiguriert",
|
|
3646
3646
|
"noPatBody": "Setzen Sie GITHUB_PAT oder GITLAB_PAT in Ihrer .env, um sich mit einem Personal Access Token anzumelden, und starten Sie dann den Server neu.",
|
|
3647
|
+
"setupBody": "Erstellen Sie einen Personal Access Token und fügen Sie ihn unten ein. Er meldet Sie an und wird zum Token, mit dem diese Installation klont, pusht und merged.",
|
|
3647
3648
|
"createToken": "Einen {provider}-Token erstellen ↗",
|
|
3649
|
+
"tokenBecomesCredential": "Dieser Token wird auf diesem Rechner gespeichert und für jeden Clone, Push, PR und Merge der Agenten verwendet.",
|
|
3648
3650
|
"orDivider": "oder",
|
|
3649
3651
|
"failed": "Anmeldung fehlgeschlagen. Prüfen Sie, ob der konfigurierte Token gültig ist, und versuchen Sie es erneut."
|
|
3650
3652
|
},
|
package/i18n/locales/en.json
CHANGED
|
@@ -1884,7 +1884,9 @@
|
|
|
1884
1884
|
"continueWithConfigured": "Sign in with configured {provider} PAT",
|
|
1885
1885
|
"noPatTitle": "No source-control token configured",
|
|
1886
1886
|
"noPatBody": "Set GITHUB_PAT or GITLAB_PAT in your .env to sign in with a personal access token, then restart the server.",
|
|
1887
|
+
"setupBody": "Create a personal access token and paste it below. It signs you in and becomes the token this deployment clones, pushes and merges with.",
|
|
1887
1888
|
"createToken": "Create a {provider} token ↗",
|
|
1889
|
+
"tokenBecomesCredential": "This token is stored on this machine and used for every clone, push, PR and merge the agents make.",
|
|
1888
1890
|
"orDivider": "or",
|
|
1889
1891
|
"failed": "Sign-in failed. Check that the configured token is valid and try again."
|
|
1890
1892
|
},
|
package/i18n/locales/es.json
CHANGED
|
@@ -1789,7 +1789,9 @@
|
|
|
1789
1789
|
"continueWithConfigured": "Inicia sesión con el PAT de {provider} configurado",
|
|
1790
1790
|
"noPatTitle": "No hay ningún token de control de versiones configurado",
|
|
1791
1791
|
"noPatBody": "Define GITHUB_PAT o GITLAB_PAT en tu .env para iniciar sesión con un token de acceso personal y reinicia el servidor.",
|
|
1792
|
+
"setupBody": "Crea un token de acceso personal y pégalo abajo. Inicia tu sesión y pasa a ser el token con el que esta instalación clona, publica y fusiona.",
|
|
1792
1793
|
"createToken": "Crear un token de {provider} ↗",
|
|
1794
|
+
"tokenBecomesCredential": "Este token se guarda en esta máquina y se usa en cada clonado, push, PR y fusión que hacen los agentes.",
|
|
1793
1795
|
"orDivider": "o",
|
|
1794
1796
|
"failed": "Error al iniciar sesión. Comprueba que el token configurado sea válido e inténtalo de nuevo."
|
|
1795
1797
|
},
|
package/i18n/locales/fr.json
CHANGED
|
@@ -1789,7 +1789,9 @@
|
|
|
1789
1789
|
"continueWithConfigured": "Se connecter avec le PAT {provider} configuré",
|
|
1790
1790
|
"noPatTitle": "Aucun jeton de gestion de versions configuré",
|
|
1791
1791
|
"noPatBody": "Définissez GITHUB_PAT ou GITLAB_PAT dans votre .env pour vous connecter avec un jeton d'accès personnel, puis redémarrez le serveur.",
|
|
1792
|
+
"setupBody": "Créez un jeton d'accès personnel et collez-le ci-dessous. Il vous connecte et devient le jeton avec lequel cette installation clone, pousse et fusionne.",
|
|
1792
1793
|
"createToken": "Créer un jeton {provider} ↗",
|
|
1794
|
+
"tokenBecomesCredential": "Ce jeton est stocké sur cette machine et utilisé pour chaque clone, push, PR et fusion des agents.",
|
|
1793
1795
|
"orDivider": "ou",
|
|
1794
1796
|
"failed": "Échec de la connexion. Vérifiez que le jeton configuré est valide et réessayez."
|
|
1795
1797
|
},
|
package/i18n/locales/he.json
CHANGED
|
@@ -1789,7 +1789,9 @@
|
|
|
1789
1789
|
"continueWithConfigured": "התחבר באמצעות PAT מוגדר של {provider}",
|
|
1790
1790
|
"noPatTitle": "לא הוגדר טוקן לבקרת מקור",
|
|
1791
1791
|
"noPatBody": "הגדר את GITHUB_PAT או GITLAB_PAT בקובץ ה-.env שלך כדי להתחבר עם טוקן גישה אישי, ואז הפעל מחדש את השרת.",
|
|
1792
|
+
"setupBody": "צור טוקן גישה אישי והדבק אותו למטה. הוא מחבר אותך וגם הופך לטוקן שבו ההתקנה הזו משכפלת, דוחפת וממזגת.",
|
|
1792
1793
|
"createToken": "צור טוקן {provider} ↗",
|
|
1794
|
+
"tokenBecomesCredential": "הטוקן נשמר במחשב הזה ומשמש לכל שכפול, דחיפה, PR ומיזוג שהסוכנים מבצעים.",
|
|
1793
1795
|
"orDivider": "או",
|
|
1794
1796
|
"failed": "ההתחברות נכשלה. ודא שהטוקן המוגדר תקף ונסה שוב."
|
|
1795
1797
|
},
|
package/i18n/locales/it.json
CHANGED
|
@@ -3644,7 +3644,9 @@
|
|
|
3644
3644
|
"continueWithConfigured": "Accedi con il PAT {provider} configurato",
|
|
3645
3645
|
"noPatTitle": "Nessun token di controllo del codice sorgente configurato",
|
|
3646
3646
|
"noPatBody": "Imposta GITHUB_PAT o GITLAB_PAT nel tuo file .env per accedere con un personal access token, poi riavvia il server.",
|
|
3647
|
+
"setupBody": "Crea un personal access token e incollalo qui sotto. Ti autentica e diventa il token con cui questa installazione clona, pubblica e unisce.",
|
|
3647
3648
|
"createToken": "Crea un token {provider} ↗",
|
|
3649
|
+
"tokenBecomesCredential": "Questo token viene salvato su questa macchina e usato per ogni clone, push, PR e merge degli agenti.",
|
|
3648
3650
|
"orDivider": "oppure",
|
|
3649
3651
|
"failed": "Accesso non riuscito. Verifica che il token configurato sia valido e riprova."
|
|
3650
3652
|
},
|
package/i18n/locales/ja.json
CHANGED
|
@@ -1789,7 +1789,9 @@
|
|
|
1789
1789
|
"continueWithConfigured": "設定済みの {provider} PAT でサインイン",
|
|
1790
1790
|
"noPatTitle": "ソース管理トークンが設定されていません",
|
|
1791
1791
|
"noPatBody": ".env に GITHUB_PAT または GITLAB_PAT を設定するとパーソナルアクセストークンでサインインできます。設定後、サーバーを再起動してください。",
|
|
1792
|
+
"setupBody": "パーソナルアクセストークンを作成して下に貼り付けてください。サインインに使われるとともに、この環境がクローン・プッシュ・マージに使うトークンになります。",
|
|
1792
1793
|
"createToken": "{provider} トークンを作成 ↗",
|
|
1794
|
+
"tokenBecomesCredential": "このトークンはこのマシンに保存され、エージェントによるクローン・プッシュ・PR・マージのすべてに使われます。",
|
|
1793
1795
|
"orDivider": "または",
|
|
1794
1796
|
"failed": "サインインに失敗しました。設定されたトークンが有効か確認して、もう一度お試しください。"
|
|
1795
1797
|
},
|
package/i18n/locales/pl.json
CHANGED
|
@@ -1789,7 +1789,9 @@
|
|
|
1789
1789
|
"continueWithConfigured": "Zaloguj się skonfigurowanym tokenem PAT {provider}",
|
|
1790
1790
|
"noPatTitle": "Nie skonfigurowano tokenu systemu kontroli wersji",
|
|
1791
1791
|
"noPatBody": "Ustaw GITHUB_PAT lub GITLAB_PAT w pliku .env, aby zalogować się za pomocą osobistego tokenu dostępu, a następnie zrestartuj serwer.",
|
|
1792
|
+
"setupBody": "Utwórz osobisty token dostępu i wklej go poniżej. Zaloguje Cię i stanie się tokenem, którym ta instalacja klonuje, wypycha zmiany i scala.",
|
|
1792
1793
|
"createToken": "Utwórz token {provider} ↗",
|
|
1794
|
+
"tokenBecomesCredential": "Token jest zapisywany na tym komputerze i używany przy każdym klonowaniu, wypchnięciu, PR i scaleniu wykonywanym przez agentów.",
|
|
1793
1795
|
"orDivider": "lub",
|
|
1794
1796
|
"failed": "Logowanie nie powiodło się. Sprawdź, czy skonfigurowany token jest prawidłowy, i spróbuj ponownie."
|
|
1795
1797
|
},
|
package/i18n/locales/tr.json
CHANGED
|
@@ -1789,7 +1789,9 @@
|
|
|
1789
1789
|
"continueWithConfigured": "Yapılandırılmış {provider} PAT ile oturum aç",
|
|
1790
1790
|
"noPatTitle": "Yapılandırılmış kaynak denetimi token'ı yok",
|
|
1791
1791
|
"noPatBody": "Kişisel erişim token'ı ile oturum açmak için .env dosyanızda GITHUB_PAT veya GITLAB_PAT ayarlayın, ardından sunucuyu yeniden başlatın.",
|
|
1792
|
+
"setupBody": "Bir kişisel erişim token’ı oluşturup aşağıya yapıştırın. Hem oturumunuzu açar hem de bu kurulumun klonlama, push ve birleştirme işlemlerinde kullandığı token olur.",
|
|
1792
1793
|
"createToken": "{provider} token'ı oluştur ↗",
|
|
1794
|
+
"tokenBecomesCredential": "Bu token bu makinede saklanır ve ajanların yaptığı her klonlama, push, PR ve birleştirmede kullanılır.",
|
|
1793
1795
|
"orDivider": "veya",
|
|
1794
1796
|
"failed": "Oturum açma başarısız. Yapılandırılan token'ın geçerli olduğunu kontrol edip tekrar deneyin."
|
|
1795
1797
|
},
|
package/i18n/locales/uk.json
CHANGED
|
@@ -1789,7 +1789,9 @@
|
|
|
1789
1789
|
"continueWithConfigured": "Увійти за допомогою налаштованого PAT {provider}",
|
|
1790
1790
|
"noPatTitle": "Токен системи контролю версій не налаштовано",
|
|
1791
1791
|
"noPatBody": "Установіть GITHUB_PAT або GITLAB_PAT у файлі .env, щоб увійти за допомогою особистого токена доступу, потім перезапустіть сервер.",
|
|
1792
|
+
"setupBody": "Створіть особистий токен доступу та вставте його нижче. Він виконає вхід і стане токеном, яким ця інсталяція клонує, надсилає зміни та зливає гілки.",
|
|
1792
1793
|
"createToken": "Створити токен {provider} ↗",
|
|
1794
|
+
"tokenBecomesCredential": "Токен зберігається на цій машині й використовується для кожного клонування, надсилання, PR та злиття, які роблять агенти.",
|
|
1793
1795
|
"orDivider": "або",
|
|
1794
1796
|
"failed": "Не вдалося увійти. Перевірте, що налаштований токен дійсний, і спробуйте ще раз."
|
|
1795
1797
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.231.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",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"valibot": "^1.4.2",
|
|
41
41
|
"vue": "3.5.40",
|
|
42
42
|
"wretch": "^3.0.9",
|
|
43
|
-
"@cat-factory/contracts": "0.
|
|
43
|
+
"@cat-factory/contracts": "0.248.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@toad-contracts/testing": "0.3.2",
|