cistack 6.0.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/.github/dependabot.yml +42 -0
  2. package/.github/workflows/ci.yml +2 -1
  3. package/.github/workflows/pipeline.yml +250 -0
  4. package/README.md +4 -0
  5. package/package.json +7 -2
  6. package/product-site/.github/dependabot.yml +27 -0
  7. package/product-site/.github/workflows/pipeline.yml +202 -0
  8. package/product-site/.lighthouserc.json +22 -0
  9. package/product-site/README.md +1 -0
  10. package/product-site/app/[lang]/layout.tsx +95 -0
  11. package/product-site/app/[lang]/page.tsx +19 -0
  12. package/product-site/app/favicon.ico +0 -0
  13. package/product-site/app/globals.css +228 -0
  14. package/product-site/app/manifest.ts +20 -0
  15. package/product-site/app/robots.ts +12 -0
  16. package/product-site/app/sitemap.ts +12 -0
  17. package/product-site/components/CanvasText.tsx +219 -0
  18. package/product-site/components/CopyButton.tsx +85 -0
  19. package/product-site/components/HomeClient.tsx +985 -0
  20. package/product-site/components/InstallToggle.tsx +87 -0
  21. package/product-site/components/MotionRevealClient.tsx +53 -0
  22. package/product-site/components/TerminalCard.tsx +61 -0
  23. package/product-site/components/TerminalCardMotion.tsx +317 -0
  24. package/product-site/components/ui/accordion.tsx +74 -0
  25. package/product-site/components/ui/badge.tsx +52 -0
  26. package/product-site/components/ui/button.tsx +60 -0
  27. package/product-site/components/ui/card.tsx +103 -0
  28. package/product-site/components/ui/checkbox.tsx +29 -0
  29. package/product-site/components/ui/separator.tsx +25 -0
  30. package/product-site/components/ui/table.tsx +116 -0
  31. package/product-site/components/ui/tabs.tsx +82 -0
  32. package/product-site/components.json +25 -0
  33. package/product-site/dictionaries/br.json +137 -0
  34. package/product-site/dictionaries/cn.json +137 -0
  35. package/product-site/dictionaries/de.json +137 -0
  36. package/product-site/dictionaries/en.json +137 -0
  37. package/product-site/dictionaries/es.json +182 -0
  38. package/product-site/dictionaries/fr.json +182 -0
  39. package/product-site/dictionaries/pt.json +137 -0
  40. package/product-site/eslint.config.mjs +18 -0
  41. package/product-site/lib/dictionaries.ts +18 -0
  42. package/product-site/lib/dictionary-types.ts +3 -0
  43. package/product-site/lib/utils.ts +6 -0
  44. package/product-site/middleware.ts +39 -0
  45. package/product-site/next.config.mjs +14 -0
  46. package/product-site/package-lock.json +14201 -0
  47. package/product-site/package.json +41 -0
  48. package/product-site/postcss.config.mjs +7 -0
  49. package/product-site/public/file.svg +1 -0
  50. package/product-site/public/globe.svg +1 -0
  51. package/product-site/public/next.svg +1 -0
  52. package/product-site/public/og-image.png +0 -0
  53. package/product-site/public/vercel.svg +1 -0
  54. package/product-site/public/window.svg +1 -0
  55. package/product-site/scripts/sync-i18n.mjs +58 -0
  56. package/product-site/tsconfig.json +34 -0
  57. package/product-site/types/negotiator.d.ts +14 -0
  58. package/product-site/vercel.json +5 -0
@@ -0,0 +1,60 @@
1
+ "use client"
2
+
3
+ import { Button as ButtonPrimitive } from "@base-ui/react/button"
4
+ import { cva, type VariantProps } from "class-variance-authority"
5
+
6
+ import { cn } from "@/lib/utils"
7
+
8
+ const buttonVariants = cva(
9
+ "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
10
+ {
11
+ variants: {
12
+ variant: {
13
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
14
+ outline:
15
+ "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
16
+ secondary:
17
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
18
+ ghost:
19
+ "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
20
+ destructive:
21
+ "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
22
+ link: "text-primary underline-offset-4 hover:underline",
23
+ },
24
+ size: {
25
+ default:
26
+ "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
27
+ xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
28
+ sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
29
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
30
+ icon: "size-8",
31
+ "icon-xs":
32
+ "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
33
+ "icon-sm":
34
+ "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
35
+ "icon-lg": "size-9",
36
+ },
37
+ },
38
+ defaultVariants: {
39
+ variant: "default",
40
+ size: "default",
41
+ },
42
+ }
43
+ )
44
+
45
+ function Button({
46
+ className,
47
+ variant = "default",
48
+ size = "default",
49
+ ...props
50
+ }: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {
51
+ return (
52
+ <ButtonPrimitive
53
+ data-slot="button"
54
+ className={cn(buttonVariants({ variant, size, className }))}
55
+ {...props}
56
+ />
57
+ )
58
+ }
59
+
60
+ export { Button, buttonVariants }
@@ -0,0 +1,103 @@
1
+ import * as React from "react"
2
+
3
+ import { cn } from "@/lib/utils"
4
+
5
+ function Card({
6
+ className,
7
+ size = "default",
8
+ ...props
9
+ }: React.ComponentProps<"div"> & { size?: "default" | "sm" }) {
10
+ return (
11
+ <div
12
+ data-slot="card"
13
+ data-size={size}
14
+ className={cn(
15
+ "group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",
16
+ className
17
+ )}
18
+ {...props}
19
+ />
20
+ )
21
+ }
22
+
23
+ function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
24
+ return (
25
+ <div
26
+ data-slot="card-header"
27
+ className={cn(
28
+ "group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",
29
+ className
30
+ )}
31
+ {...props}
32
+ />
33
+ )
34
+ }
35
+
36
+ function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
37
+ return (
38
+ <div
39
+ data-slot="card-title"
40
+ className={cn(
41
+ "font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",
42
+ className
43
+ )}
44
+ {...props}
45
+ />
46
+ )
47
+ }
48
+
49
+ function CardDescription({ className, ...props }: React.ComponentProps<"div">) {
50
+ return (
51
+ <div
52
+ data-slot="card-description"
53
+ className={cn("text-sm text-muted-foreground", className)}
54
+ {...props}
55
+ />
56
+ )
57
+ }
58
+
59
+ function CardAction({ className, ...props }: React.ComponentProps<"div">) {
60
+ return (
61
+ <div
62
+ data-slot="card-action"
63
+ className={cn(
64
+ "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
65
+ className
66
+ )}
67
+ {...props}
68
+ />
69
+ )
70
+ }
71
+
72
+ function CardContent({ className, ...props }: React.ComponentProps<"div">) {
73
+ return (
74
+ <div
75
+ data-slot="card-content"
76
+ className={cn("px-4 group-data-[size=sm]/card:px-3", className)}
77
+ {...props}
78
+ />
79
+ )
80
+ }
81
+
82
+ function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
83
+ return (
84
+ <div
85
+ data-slot="card-footer"
86
+ className={cn(
87
+ "flex items-center rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/card:p-3",
88
+ className
89
+ )}
90
+ {...props}
91
+ />
92
+ )
93
+ }
94
+
95
+ export {
96
+ Card,
97
+ CardHeader,
98
+ CardFooter,
99
+ CardTitle,
100
+ CardAction,
101
+ CardDescription,
102
+ CardContent,
103
+ }
@@ -0,0 +1,29 @@
1
+ "use client"
2
+
3
+ import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox"
4
+
5
+ import { cn } from "@/lib/utils"
6
+ import { CheckIcon } from "lucide-react"
7
+
8
+ function Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) {
9
+ return (
10
+ <CheckboxPrimitive.Root
11
+ data-slot="checkbox"
12
+ className={cn(
13
+ "peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary",
14
+ className
15
+ )}
16
+ {...props}
17
+ >
18
+ <CheckboxPrimitive.Indicator
19
+ data-slot="checkbox-indicator"
20
+ className="grid place-content-center text-current transition-none [&>svg]:size-3.5"
21
+ >
22
+ <CheckIcon
23
+ />
24
+ </CheckboxPrimitive.Indicator>
25
+ </CheckboxPrimitive.Root>
26
+ )
27
+ }
28
+
29
+ export { Checkbox }
@@ -0,0 +1,25 @@
1
+ "use client"
2
+
3
+ import { Separator as SeparatorPrimitive } from "@base-ui/react/separator"
4
+
5
+ import { cn } from "@/lib/utils"
6
+
7
+ function Separator({
8
+ className,
9
+ orientation = "horizontal",
10
+ ...props
11
+ }: SeparatorPrimitive.Props) {
12
+ return (
13
+ <SeparatorPrimitive
14
+ data-slot="separator"
15
+ orientation={orientation}
16
+ className={cn(
17
+ "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
18
+ className
19
+ )}
20
+ {...props}
21
+ />
22
+ )
23
+ }
24
+
25
+ export { Separator }
@@ -0,0 +1,116 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+
5
+ import { cn } from "@/lib/utils"
6
+
7
+ function Table({ className, ...props }: React.ComponentProps<"table">) {
8
+ return (
9
+ <div
10
+ data-slot="table-container"
11
+ className="relative w-full overflow-x-auto"
12
+ >
13
+ <table
14
+ data-slot="table"
15
+ className={cn("w-full caption-bottom text-sm", className)}
16
+ {...props}
17
+ />
18
+ </div>
19
+ )
20
+ }
21
+
22
+ function TableHeader({ className, ...props }: React.ComponentProps<"thead">) {
23
+ return (
24
+ <thead
25
+ data-slot="table-header"
26
+ className={cn("[&_tr]:border-b", className)}
27
+ {...props}
28
+ />
29
+ )
30
+ }
31
+
32
+ function TableBody({ className, ...props }: React.ComponentProps<"tbody">) {
33
+ return (
34
+ <tbody
35
+ data-slot="table-body"
36
+ className={cn("[&_tr:last-child]:border-0", className)}
37
+ {...props}
38
+ />
39
+ )
40
+ }
41
+
42
+ function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">) {
43
+ return (
44
+ <tfoot
45
+ data-slot="table-footer"
46
+ className={cn(
47
+ "border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
48
+ className
49
+ )}
50
+ {...props}
51
+ />
52
+ )
53
+ }
54
+
55
+ function TableRow({ className, ...props }: React.ComponentProps<"tr">) {
56
+ return (
57
+ <tr
58
+ data-slot="table-row"
59
+ className={cn(
60
+ "border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",
61
+ className
62
+ )}
63
+ {...props}
64
+ />
65
+ )
66
+ }
67
+
68
+ function TableHead({ className, ...props }: React.ComponentProps<"th">) {
69
+ return (
70
+ <th
71
+ data-slot="table-head"
72
+ className={cn(
73
+ "h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0",
74
+ className
75
+ )}
76
+ {...props}
77
+ />
78
+ )
79
+ }
80
+
81
+ function TableCell({ className, ...props }: React.ComponentProps<"td">) {
82
+ return (
83
+ <td
84
+ data-slot="table-cell"
85
+ className={cn(
86
+ "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",
87
+ className
88
+ )}
89
+ {...props}
90
+ />
91
+ )
92
+ }
93
+
94
+ function TableCaption({
95
+ className,
96
+ ...props
97
+ }: React.ComponentProps<"caption">) {
98
+ return (
99
+ <caption
100
+ data-slot="table-caption"
101
+ className={cn("mt-4 text-sm text-muted-foreground", className)}
102
+ {...props}
103
+ />
104
+ )
105
+ }
106
+
107
+ export {
108
+ Table,
109
+ TableHeader,
110
+ TableBody,
111
+ TableFooter,
112
+ TableHead,
113
+ TableRow,
114
+ TableCell,
115
+ TableCaption,
116
+ }
@@ -0,0 +1,82 @@
1
+ "use client"
2
+
3
+ import { Tabs as TabsPrimitive } from "@base-ui/react/tabs"
4
+ import { cva, type VariantProps } from "class-variance-authority"
5
+
6
+ import { cn } from "@/lib/utils"
7
+
8
+ function Tabs({
9
+ className,
10
+ orientation = "horizontal",
11
+ ...props
12
+ }: TabsPrimitive.Root.Props) {
13
+ return (
14
+ <TabsPrimitive.Root
15
+ data-slot="tabs"
16
+ data-orientation={orientation}
17
+ className={cn(
18
+ "group/tabs flex gap-2 data-horizontal:flex-col",
19
+ className
20
+ )}
21
+ {...props}
22
+ />
23
+ )
24
+ }
25
+
26
+ const tabsListVariants = cva(
27
+ "group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none",
28
+ {
29
+ variants: {
30
+ variant: {
31
+ default: "bg-muted",
32
+ line: "gap-1 bg-transparent",
33
+ },
34
+ },
35
+ defaultVariants: {
36
+ variant: "default",
37
+ },
38
+ }
39
+ )
40
+
41
+ function TabsList({
42
+ className,
43
+ variant = "default",
44
+ ...props
45
+ }: TabsPrimitive.List.Props & VariantProps<typeof tabsListVariants>) {
46
+ return (
47
+ <TabsPrimitive.List
48
+ data-slot="tabs-list"
49
+ data-variant={variant}
50
+ className={cn(tabsListVariants({ variant }), className)}
51
+ {...props}
52
+ />
53
+ )
54
+ }
55
+
56
+ function TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {
57
+ return (
58
+ <TabsPrimitive.Tab
59
+ data-slot="tabs-trigger"
60
+ className={cn(
61
+ "relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
62
+ "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent",
63
+ "data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground",
64
+ "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100",
65
+ className
66
+ )}
67
+ {...props}
68
+ />
69
+ )
70
+ }
71
+
72
+ function TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {
73
+ return (
74
+ <TabsPrimitive.Panel
75
+ data-slot="tabs-content"
76
+ className={cn("flex-1 text-sm outline-none", className)}
77
+ {...props}
78
+ />
79
+ )
80
+ }
81
+
82
+ export { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "base-nova",
4
+ "rsc": true,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "",
8
+ "css": "app/globals.css",
9
+ "baseColor": "neutral",
10
+ "cssVariables": true,
11
+ "prefix": ""
12
+ },
13
+ "iconLibrary": "lucide",
14
+ "rtl": false,
15
+ "aliases": {
16
+ "components": "@/components",
17
+ "utils": "@/lib/utils",
18
+ "ui": "@/components/ui",
19
+ "lib": "@/lib",
20
+ "hooks": "@/hooks"
21
+ },
22
+ "menuColor": "default",
23
+ "menuAccent": "subtle",
24
+ "registries": {}
25
+ }
@@ -0,0 +1,137 @@
1
+ {
2
+ "navigation": {
3
+ "version": "VERSÃO",
4
+ "status": "Pipelines_Sincronizados",
5
+ "repository": "Repositório",
6
+ "registry": "Registro",
7
+ "core_manifest": "MANIFESTO_CORE",
8
+ "docs": "Docs"
9
+ },
10
+ "hero": {
11
+ "scan_identity": "IDENTIDADE_SCAN",
12
+ "s1_label": "S_01 // MOTOR_INGESTÃO",
13
+ "s1_title": "SEU STACK",
14
+ "s2_label": "S_02 // SÍNTESE_PIPELINE",
15
+ "s2_title": "SEU PIPELINE",
16
+ "s3_label": "S_03 // VALIDAÇÃO_AÇÃO",
17
+ "s3_title": "ORQUESTRADO",
18
+ "description": "cistack realiza um scan profundo no seu repositório para gerar instantaneamente workflows do GitHub Actions prontos para produção em mais de 30 frameworks e 12 plataformas.",
19
+ "npx_command": "npx cistack",
20
+ "active_installs": "Instalações Ativas",
21
+ "per_week": "/ semana",
22
+ "realtime_synth": "SÍNTESE_TEMPO_REAL",
23
+ "integrations": "Integrações",
24
+ "stack_aware": "Compatível com Stack",
25
+ "success_rate": "Taxa de Sucesso"
26
+ },
27
+ "docs": {
28
+ "badge": "Especificação Técnica v",
29
+ "title_part1": "Projetado para consistência.",
30
+ "title_part2": "Gerado para velocidade.",
31
+ "description": "cistack realiza um scan profundo no diretório do seu projeto para produzir YAML do GitHub Actions com qualidade de produção. Detecta sua linguagem, framework, ferramentas de teste e plataforma de hospedagem — depois escreve o melhor pipeline para seu stack.",
32
+ "section1_id": "01 / 04",
33
+ "section1_num": "01. Recursos",
34
+ "section1_title": "Análise e Detecção",
35
+ "capabilities": {
36
+ "analysis": { "label": "Análise profunda de código", "sub": "Lê package.json, arquivos lock, configs" },
37
+ "detection": { "label": "Detecção inteligente", "sub": "Identifica mais de 30 frameworks e 12 linguagens" },
38
+ "cache": { "label": "Suporte a Cache nativo", "sub": "Acelera pipelines para npm, pip, go, cargo e mais" },
39
+ "preview": { "label": "Deploys PR Preview", "sub": "Ambientes automáticos para Vercel e Netlify" },
40
+ "audit": { "label": "Auditoria e Upgrade de Workflow", "sub": "Atualiza versões de ações e verifica as melhores práticas" },
41
+ "hosting": { "label": "Auto-detecção de hospedagem", "sub": "AWS, Vercel, Firebase, Docker e mais" },
42
+ "multi_workflow": { "label": "Saída multi-workflow", "sub": "ci.yml, deploy.yml, docker.yml, security.yml" },
43
+ "security": { "label": "Segurança integrada", "sub": "Checkpoints CodeQL + auditoria de dependências" },
44
+ "monorepo": { "label": "Compatível com Monorepo", "sub": "Turborepo, Nx, Lerna, pnpm workspaces" },
45
+ "interactive": { "label": "Modo interativo", "sub": "Confirma configurações antes de escrever arquivos" },
46
+ "zero_config": { "label": "Zero config", "sub": "Funciona imediatamente sem necessidade de configuração" }
47
+ },
48
+ "section2_num": "02. Ativação",
49
+ "section2_title": "Instalação",
50
+ "command_registry": "REGISTRO_COMANDOS",
51
+ "commands": {
52
+ "audit": "Verifica workflows por ações desatualizadas",
53
+ "upgrade": "Atualiza todas as ações para as últimas versões",
54
+ "init": "Cria um arquivo de configuração de override"
55
+ },
56
+ "recommended_npx": "Recomendado: Use npx para uma geração única.",
57
+ "parameters_manifest": "MANIFESTO_PARÂMETROS",
58
+ "flags": {
59
+ "explain": "Mostra o raciocínio da stack detectada",
60
+ "path": "Caminho do diretório alvo para o scan",
61
+ "output": "Redefine o diretório de saída do workflow",
62
+ "dry_run": "Simula a saída sem escrever",
63
+ "no_prompt": "Ignora verificações de segurança interativas",
64
+ "verbose": "Ativa o rastreamento stdout máximo",
65
+ "force": "Ignora arquivos existentes e sobrescreve"
66
+ },
67
+ "detection_logic_title": "Lógica de Detecção",
68
+ "detection_logic_desc": "Gatilhos de reconhecimento automático baseados em sinais do sistema de arquivos.",
69
+ "signal_source": "Fonte do sinal:",
70
+ "framework_coverage": "Cobertura Framework",
71
+ "testing_tools": "Ferramentas de teste",
72
+ "section3_num": "03. Artefatos",
73
+ "section3_title": "Workflows Gerados",
74
+ "workflows": {
75
+ "ci": { "label": "Integração Contínua", "desc": "Executado em push/PR: Lint (ESLint, TS type-check), Test (matriz de versões Node), Build (produção), e E2E." },
76
+ "deploy": { "label": "Deploy Contínuo", "desc": "Acionado na main: Deploy de plataforma com ambientes PR Preview automáticos para Vercel e Netlify." },
77
+ "docker": { "label": "Build & Push Docker", "desc": "Acionado na main/tags: Build multi-plataforma via Docker Buildx, push GHCR, e cache GitHub Actions." },
78
+ "security": { "label": "Auditoria de Segurança", "desc": "Executado em push/PR/cronogramas semanais: Análise de dependências e auditoria profunda CodeQL para a linguagem detectada." }
79
+ },
80
+ "security_requirement": "Requisito de Segurança",
81
+ "encrypted_secrets": "Secrets Criptografados",
82
+ "add_secrets_at": "Adicionar secrets em:",
83
+ "section4_num": "04. Exemplos Estruturais",
84
+ "section4_title": "Cenários de Stacks Padrão",
85
+ "validated_output": "Saída Validada"
86
+ },
87
+ "footer": {
88
+ "project_origin": "Origem_Projeto",
89
+ "architected_by": "Arquitetado_Por",
90
+ "status": "Status",
91
+ "operational": "Todos os sistemas operacionais",
92
+ "license": "Licença",
93
+ "open_source": "Open Source",
94
+ "footer_desc": "Geração automatizada de infraestrutura CI/CD para a web moderna. Construído com precisão para desenvolvedores que valorizam visibilidade e segurança em seus pipelines de deploy.",
95
+ "global_install": "Instalação_Global",
96
+ "copyright": "CISTACK ENGINE — TODOS OS PIPELINES MATERIALIZADOS."
97
+ },
98
+ "install_toggle": {
99
+ "recommended": "recomendado",
100
+ "npm_global": "npm install -g",
101
+ "recommended_badge": "Recomendado",
102
+ "global_badge": "Global",
103
+ "npx_desc": "Sempre obtém a última versão. Sem etapa de instalação.",
104
+ "npm_desc": "Melhor para desenvolvedores em múltiplos repositórios."
105
+ },
106
+ "terminal": {
107
+ "label": "TERMINAL",
108
+ "mission": "MISSÃO_CORE // L_02",
109
+ "project_scanned": "✔ Projeto escaneado",
110
+ "stack_detected": "✔ Stack detectada",
111
+ "detected_stack": "Stack Detectada",
112
+ "languages": "Linguagens:",
113
+ "frameworks": "Frameworks:",
114
+ "hosting": "Hospedagem:",
115
+ "testing": "Testes:",
116
+ "release_tool": "Ferramenta release:",
117
+ "look_correct": "? Isso parece correto? Gerar pipeline com essas configurações? Sim",
118
+ "generated_workflows": "✔ Gerados 3 workflows CI",
119
+ "smart_merged": "↻ Merge inteligente: ci.yml",
120
+ "updated_on": "atualizado \"on\" de nível superior",
121
+ "updated_concurrency": "atualizado \"concurrency\" de nível superior",
122
+ "added_lint": "adicionado job \"lint\"",
123
+ "updated_build": "job \"build\" → nome atualizado",
124
+ "updated_needs": "job \"build\" → needs atualizado",
125
+ "added_checkout": "job \"build\" → adicionada etapa \"Checkout code\"",
126
+ "added_node": "job \"build\" → adicionada etapa \"Set up Node.js\"",
127
+ "updated_step_build": "job \"build\" → etapa \"Build\" atualizada",
128
+ "added_upload": "job \"build\" → adicionada etapa \"Upload build artifact\"",
129
+ "written_deploy": "Escrito: deploy.yml",
130
+ "written_security": "Escrito: security.yml",
131
+ "written_dependabot": "Escrito: .github/dependabot.yml",
132
+ "done_msg": "Pronto! Seu pipeline de GitHub Actions está preparado.",
133
+ "workflows_path": "Workflows → cistack/.github/workflows",
134
+ "dependabot_path": "Dependabot → cistack/.github/dependabot.yml",
135
+ "processing": "Processando Saída..."
136
+ }
137
+ }