specrails-desktop 2.31.2 → 2.32.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/client/dist/assets/{ActivityFeedPage-Cdccp1kl.js → ActivityFeedPage-DvnFkjVG.js} +1 -1
- package/client/dist/assets/{AgentBrowserCapture-DUwwfVOf.js → AgentBrowserCapture-CBjcliD7.js} +1 -1
- package/client/dist/assets/{AgentModeCodePane-B1Fu0f_G.js → AgentModeCodePane-CokuFVdV.js} +2 -2
- package/client/dist/assets/{AgentModeJobsPane-DA6wQKKt.js → AgentModeJobsPane-rf_DlWNo.js} +1 -1
- package/client/dist/assets/{AgentsPage-CR72XsPj.js → AgentsPage-B648IzGI.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-CPnl0xkM.js → AnalyticsPage-0rBoULPX.js} +1 -1
- package/client/dist/assets/{CodePage-BYY7EF1b.js → CodePage-ju302Vl7.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-9PUjsD8C.js → DesktopAnalyticsPage-gBRVqiw6.js} +1 -1
- package/client/dist/assets/{DocsDialog-zngqdI-4.js → DocsDialog-BzO5dg2B.js} +1 -1
- package/client/dist/assets/{DocsPage-CDJH_q9M.js → DocsPage-Db_uxr1j.js} +1 -1
- package/client/dist/assets/{InteractiveJobComposer-drUo56r7.js → InteractiveJobComposer-_jmsE_Az.js} +1 -1
- package/client/dist/assets/{JobDetailModal-CWmzaRXG.js → JobDetailModal-DPHh2WOS.js} +1 -1
- package/client/dist/assets/{JobDetailPage-xlzBYZEJ.js → JobDetailPage-7nwHyHGV.js} +1 -1
- package/client/dist/assets/{JobsPage-Dcnol1Y6.js → JobsPage-C_6YrcmE.js} +1 -1
- package/client/dist/assets/{LoopBuilderPage-D3q7EoNM.js → LoopBuilderPage-DJ1UPDwL.js} +1 -1
- package/client/dist/assets/{LoopPreviewModal-Q8osegkj.js → LoopPreviewModal-12cUnljK.js} +1 -1
- package/client/dist/assets/{LoopsPage-CATnNd1X.js → LoopsPage-CHYK0Xjr.js} +1 -1
- package/client/dist/assets/{MinimizedChatsContext-DIsnQMVz.js → MinimizedChatsContext-Gt6KQySM.js} +1 -1
- package/client/dist/assets/{PluginsPage-BOh6z0zK.js → PluginsPage-E59oQmwc.js} +1 -1
- package/client/dist/assets/{ProjectSettingsDialog-CNcANqEL.js → ProjectSettingsDialog-DQTLQ7ie.js} +1 -1
- package/client/dist/assets/{TemplatePreviewModal-4EpqyErX.js → TemplatePreviewModal-nXUcDgfk.js} +1 -1
- package/client/dist/assets/{TicketDetailModal-BfV4tnvr.js → TicketDetailModal-C-tHW-2s.js} +3 -3
- package/client/dist/assets/{Trans-cWtExGkC.js → Trans-B2i5HVcM.js} +1 -1
- package/client/dist/assets/{dist-js-Cn09PP3z.js → dist-js-CkTZKBF9.js} +1 -1
- package/client/dist/assets/{dist-js-mq5XA-4f.js → dist-js-ClShHcGa.js} +1 -1
- package/client/dist/assets/{formatDistanceToNow-DUyzS4rr.js → formatDistanceToNow-BjGwPf6I.js} +1 -1
- package/client/dist/assets/{getTimezoneOffsetInMilliseconds-BCIwmmTj.js → getTimezoneOffsetInMilliseconds-CSCbUI4W.js} +1 -1
- package/client/dist/assets/{i18n-D21Pr8Sj.js → i18n-Ch-Db_x2.js} +2 -2
- package/client/dist/assets/{index-CzNyrRn5.js → index-kCUcnT8G.js} +6 -6
- package/client/dist/assets/loops-B2_97D26.js +1 -0
- package/client/dist/assets/loops-BISOkuCu.js +1 -0
- package/client/dist/assets/loops-Bo6w_peZ.js +1 -0
- package/client/dist/assets/loops-BwxCndZk.js +1 -0
- package/client/dist/assets/loops-CD19kEzq.js +1 -0
- package/client/dist/assets/loops-CMMQOw2P.js +1 -0
- package/client/dist/assets/loops-CnxqL8IL.js +1 -0
- package/client/dist/assets/loops-aEb4RxN2.js +1 -0
- package/client/dist/assets/{spending-BCyUxoOI.js → spending-Dq43JYmD.js} +1 -1
- package/client/dist/assets/{useBrowserCaptureSession-CkVCDzer.js → useBrowserCaptureSession-TTO8vHtd.js} +1 -1
- package/client/dist/assets/{useDesktop-DCP_MHp9.js → useDesktop-DUvS4fuP.js} +1 -1
- package/client/dist/index.html +11 -11
- package/package.json +1 -1
- package/server/dist/loop-executors.js +5 -2
- package/server/dist/loop-factory.js +7 -5
- package/server/dist/loop-graph.js +4 -3
- package/server/dist/loop-run-manager.js +7 -3
- package/server/dist/loop-templates.js +4 -3
- package/server/dist/profiles-router.js +24 -1
- package/server/dist/rail-isolated-launch.js +15 -0
- package/server/dist/spawn-lifecycle.js +1 -1
- package/server/dist/worktree-node-modules.js +158 -0
- package/client/dist/assets/loops-BzfXWEwO.js +0 -1
- package/client/dist/assets/loops-CPpgMapU.js +0 -1
- package/client/dist/assets/loops-CWWbKuVL.js +0 -1
- package/client/dist/assets/loops-Crc9It8o.js +0 -1
- package/client/dist/assets/loops-DH2hZcbK.js +0 -1
- package/client/dist/assets/loops-DS5TmvIU.js +0 -1
- package/client/dist/assets/loops-P2f0cN8-.js +0 -1
- package/client/dist/assets/loops-fJV-9hH7.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=`Loops`,t=`可复用的自动化循环——在你所有项目间共享。`,n=`新建循环`,r={drafts:`草稿`,published:`已发布`,templates:`模板`,builtIn:`内置`},i={search:`搜索模板…`,noResults:`没有模板符合筛选条件。`,clearFilter:`清除筛选`,resultCount_one:`{{count}} 个模板`,resultCount_other:`{{count}} 个模板`,needsSpec:`需要规格`,standalone:`独立运行`,needsSpecHint:`在 rail 上运行,需拖入一个规格`,standaloneHint:`独立运行——只需选择一个项目`},a={API:`API`,Automation:`自动化`,CI:`CI`,Database:`数据库`,Debugging:`调试`,DevOps:`DevOps`,Docs:`文档`,Git:`Git`,Maintenance:`维护`,Performance:`性能`,Planning:`规划`,Quality:`质量`,Review:`评审`,Security:`安全`,Testing:`测试`},o={draft:`草稿`,published:`已发布`,running:`运行中`},s={title:`暂无循环`,body:`从零创建一个,或从模板开始。`},c={edit:`编辑`,delete:`删除`,publish:`发布`,unpublish:`取消发布`,duplicate:`复制`,use:`使用模板`,preview:`预览`,fork:`复刻以编辑`,run:`运行`,export:`导出`,import:`导入`,select:`选择 {{name}}`},l={nodes_one:`{{count}} 个节点`,nodes_other:`{{count}} 个节点`,usedIn:`使用中 · {{project}}`},u=`删除此循环?它将从所有 rail 选择器中消失。`,d=`新建循环`,f={load:`加载循环失败`,save:`保存循环失败`,publishInvalid:`此循环暂时无法发布——请修复高亮显示的问题。`},p={back:`返回循环列表`,save:`保存`,saved:`循环已保存`,publish:`发布`,published:`循环已发布`,addNode:`添加节点`,deleteNode:`删除节点`,config:{maxIterations:`最大迭代次数`,timeout:`超时(分钟)`,maxIterationsHint:`Loop Decider 迭代次数上限——达到后即使目标未达成也会停止循环。防止无限循环。`,timeoutHint:`整个运行的实际时间上限(分钟)。超过后运行将停止并标记为失败——与最大迭代次数一起作为安全网。`,maxCost:`最大费用 ($)`,maxCostHint:`整个运行的可选美元预算。在步骤之间检查(每步费用只有在该步结束后才知道),因此当总额超过时循环会在下一步之前停止——可能超出一步。非 Claude 提供方的费用为估算。留空 = 不限制。`},nodes:{start:`开始`,"ai-step":`AI 步骤`,shell:`Shell`,decider:`循环决策器`,condition:`条件`,end:`结束`},inspector:{selectNode:`选择一个节点进行编辑。`,prompt:`提示词`,provider:`提供方`,model:`模型`,effort:`推理强度`,command:`命令`,goal:`目标 / 停止条件`,join:`合并`,outcome:`结果`,startNote:`循环的入口点。将其连接到第一个步骤。`,promptHint:`点击或拖动令牌将其插入提示词。`,tokensSpec:`Spec 字段`,tokensJira:`Jira`,tokensCommands:`命令`,label:`名称`},branch:{continue:`↻ 继续`,stop:`✓ 停止`},edgesHelp:{label:`步骤如何连接`,body:`箭头设定的是运行顺序,而非数据——节点没有输入端口,连线也不携带任何参数。每个 AI Step 都会自动恢复其会话(完整的先前上下文),并附带前序步骤的简短摘要;无需手动连线。Loop Decider 有两个输出:↻ 继续(目标未达成 → 循环返回)和 ✓ 停止(目标达成 → 退出)。`},arrange:{label:`排列`,vertical:`垂直`,horizontal:`水平`,grid:`网格`,reset:`重置`},constants:{label:`常量`,manage:`管理常量`,title:`循环常量`,empty:`还没有自定义常量。`,name:`名称`,value:`值`,add:`添加`,builtinBadge:`内置`},paste:{done_one:`已粘贴 {{count}} 个步骤`,done_other:`已粘贴 {{count}} 个步骤`},problems:{count_one:`{{count}} 个问题`,count_other:`{{count}} 个问题`,NO_START:`添加一个开始节点。`,MULTIPLE_START:`只允许一个开始节点。`,NO_END:`至少添加一个结束节点。`,ORPHAN:`该步骤无法从开始到达。`,DECIDER_BRANCHES:`Loop Decider 需要一个继续分支和一个停止分支。`,EMPTY_PROMPT:`AI 步骤的提示词为空。`,EMPTY_COMMAND:`Shell 步骤的命令为空。`,EMPTY_GOAL:`Loop Decider 没有目标。`,DEAD_END:`该步骤没有出向连接。`},preview:{label:`预览`,title:`试运行预览`,sampleNote:`Spec 值为示例数据;命令和常量按运行时的实际值解析。`,empty:`没有可预览的步骤。`,error:`预览失败`}},m={steps:`步骤`,limits:`最多 {{iterations}} 次迭代 · {{timeout}} 分钟超时`,openInBuilder:`在构建器中打开`,builtin:`内置`},h=`内置`,g={title:`运行 {{name}}`,subtitle:`在某个项目上启动此循环(无需工单)。`,project:`项目`,provider:`提供方`,model:`模型`,effort:`推理强度`,execute:`执行`,noProjects:`没有可用的项目。`,launched:`正在运行 {{name}}`},_=JSON.parse(`{"ship-and-green":{"name":"交付并通过","description":"全自动:实现 spec、验证,失败时自动修正(fix)——循环执行 验证 → 修复 → 验证,直到全部通过。无需人工干预。"},"verify-pass":{"name":"验证通过","description":"自动验证并修复:检测并运行项目的 build/lint/测试,失败时自动修正——验证 → 修复 → 验证,直到全部通过。"},"ci-watch":{"name":"CI 监视","description":"轮询当前已打开 PR 的 CI 检查(由 agent 使用仓库的 CI 工具),直到每一项检查都通过。"},"lint-and-fix":{"name":"Lint 修复","description":"agent 检测并运行项目的 linter,修复每一个问题,持续迭代直到代码库干净无误。"},"type-safe":{"name":"类型安全","description":"agent 检测并运行项目的类型检查器,解决每一个错误,持续迭代直到顺利通过。"},"coverage-climb":{"name":"覆盖率提升","description":"agent 运行项目的覆盖率工具并补充针对性测试,直到达到阈值。"},"build-fix":{"name":"构建修复","description":"agent 检测并运行项目的生产 build,修复编译/打包错误,直到顺利通过。"},"deploy-check":{"name":"部署检查","description":"agent 轮询部署/健康状态(使用项目的 deploy 工具),直到服务报告健康。"},"factory_implement":{"name":"实现","description":"全自动:实现 spec、验证,失败时自动修正(fix)——循环直到所有测试通过。"},"factory_batch":{"name":"批量实现","description":"一次性批量实现该 rail 的全部工单,然后验证 + 失败时修正,直到全部通过。"},"factory_freestyle":{"name":"Freestyle","description":"将 spec 直接交给模型, 给予完全自由 — 无管线, 像普通编码智能体一样工作, 然后验证+改进直到全部通过。仅限 Claude。"},"autoloop-tdd":{"name":"自动循环 TDD","description":"针对 {{spec.title}} 严格执行红-绿-重构循环:先用失败的测试锁定每个行为,再写刚好够让它变绿的代码,然后整理代码——如此反复,直到完整覆盖该规格。"},"e2e-until-green":{"name":"E2E 直到通过","description":"运行 {{spec.title}} 的 E2E 测试套件,逐一诊断失败的用户流程,修复底层的 UI 或集成缺陷,持续循环直到每条 E2E 用例都通过。"},"flaky-test-triage":{"name":"不稳定测试分诊","description":"多次重跑 {{spec.title}} 相关的失败测试,区分真正的回归与偶发的不稳定,然后修复真正的故障,并稳定或记录那些不稳定的用例。"},"independent-verifier-pass":{"name":"独立验证一遍","description":"对 {{spec.title}} 做对抗式验证:从零重新运行构建、lint 和测试,只信任命令的原始输出(不信任此前任何「能用」的说法),并暴露或修复每个缺口。"},"post-edit-test-guard":{"name":"改后测试守卫","description":"针对 {{spec.title}} 每改完一批代码,立刻运行覆盖改动文件的最小测试集——在回归出现的当下就捕获,而非拖到最后。"},"post-merge-regression-guard":{"name":"合并后回归守卫","description":"在合并或变基把他人的工作引入 {{spec.title}} 后,立即运行快速 smoke test 套件以第一时间发现集成破坏——在新功能开发动工之前。"},"pre-commit-guard":{"name":"提交前守卫","description":"为 {{spec.title}} 把守每次提交:先运行测试套件,只要测试为红就拒绝提交,让坏代码永远进不了历史记录。"},"visual-regression-until-match":{"name":"视觉回归直到匹配","description":"对改动的 UI 截取视觉快照,揪出每一处非预期的像素差异并自我修正,直到视觉套件全部通过、且只保留经审批的有意设计变更。"},"format-until-clean":{"name":"格式化直到干净","description":"运行项目格式化工具,手动收拾它无法自动修复的少量风格问题,持续进行直到再次格式化不再改动工作区。"},"lint-typecheck-fix":{"name":"Lint 与类型检查修复","description":"运行 lint 工具和类型检查器,以尽可能小的改动逐一解决每个报告的问题,循环直到两道关卡都彻底通过。"},"a11y-audit-until-clean":{"name":"无障碍审计直到干净","description":"对改动的页面运行自动化无障碍检查,按类别逐项修复违规,反复进行直到审计返回零问题。"},"de-sloppify-pass":{"name":"清理杂乱一遍","description":"功能落地后,把改动从头扫一遍清除残留杂乱——调试输出、死分支、随意命名、臃肿函数——清理干净,并证明清理没有破坏任何东西。"},"fix-ci-until-green":{"name":"修复 CI 直到通过","description":"拉取本分支最近一次失败的 CI 运行,在本地复现故障,修复真正的根因并推送,持续循环直到每项检查都报告成功。"},"pr-babysitter":{"name":"PR 看护","description":"按固定间隔巡查你关注的开放 PR,让每个都保持可合并状态:救活失败的 CI,对落后于基线分支的进行变基,催促停滞的——并把需要人来决策的事项上报。"},"pr-watch-loop":{"name":"PR 监视循环","description":"以稳定节奏轮询监视列表中的 PR,汇总各自的 CI 与评审健康度,要么顺手解决琐碎的阻塞项,要么标记出需要负责人处理的事项。"},"pr-self-review":{"name":"PR 自审","description":"像挑剔的资深评审者那样审视自己的工作改动,逐一修复发现的问题,反复自审直到一遍下来再无关键问题——赶在 PR 离手之前。"},"spec-first-ship":{"name":"规格优先交付","description":"逐项推进一份书面需求清单直至全部完成——每一遍只实现一条未勾选的需求、验证它、再打勾——让规格成为「完成」的契约。"},"dependency-audit-weekly":{"name":"每周依赖审计","description":"每周盘点哪些依赖包已落后,将其分为可安全升级与有风险两类,并交还一份你可直接执行的清晰升级计划。"},"dependency-upgrade-one-by-one":{"name":"逐个升级依赖","description":"每一遍只升级一个过时的依赖包,修好升级带来的破坏,证明项目仍可正常运行后再提交——远比一次性全部升级更安全。"},"knip-until-clean":{"name":"清除死代码直到干净","description":"揪出无人引用的导出、孤立文件和没人导入的依赖,安全地移除它们,持续进行直到死代码扫描工具再无可报告的内容。"},"docs-sync-after-edits":{"name":"文档同步代码改动","description":"在一轮代码改动之后,找出每一份被改动波及的文档——README、API 参考、内联注释——让它们与代码现在的实际行为重新对齐。"},"security-audit-weekly":{"name":"每周安全审计","description":"每周对依赖树运行一次漏洞扫描,按严重程度和真实暴露面对结果分诊,并交还一份按优先级排序的修复计划。"},"npm-audit-fix-loop":{"name":"逐个修补漏洞","description":"有条不紊地清除高危和严重的依赖告警——每一遍只修一个,并用测试套件逐一验证——而非可能悄悄弄坏构建的盲目强制修复。"},"api-contract-until-match":{"name":"API 契约直到匹配","description":"推动实现直到其响应符合已发布的 API 契约,弥合 schema 承诺与处理函数实际返回之间的任何差距。"},"openapi-sync-until-valid":{"name":"OpenAPI 同步直到有效","description":"保持 OpenAPI 文档格式良好且忠实于真实的路由处理函数,每一遍修复规格错误和代码与文档的偏差,直到 lint 工具满意为止。"},"migration-until-applied":{"name":"迁移直到生效","description":"干净地推进数据库 schema:运行待执行的迁移,修复其暴露出的任何 schema 或 SQL 错误,并确认迁移历史保持一致。"},"bundle-size-budget":{"name":"打包体积预算","description":"在不让客户端打包体积超出预算的前提下交付功能——每一遍测量并精简、代码拆分或懒加载,直到体积关卡通过。"},"changelog-sync-after-ship":{"name":"交付后同步变更日志","description":"交付后确保变更日志讲清面向用户的来龙去脉:回顾落地的内容,按 Keep a Changelog 规范撰写条目,并确认没有遗漏任何可见变更。"},"guardrails-learning-loop":{"name":"护栏学习循环","description":"持续迭代直到各项关卡通过,但每当某项检查以同样的方式失败两次,先记下一条护栏笔记,让循环不再浪费迭代去重试一个已经失败的方案。"},"ralph-story-executor":{"name":"待办故事执行器","description":"以每遍全新上下文逐个处理用户故事待办:挑出下一个未完成的故事,只构建它,证明项目各项关卡保持通过,提交并标记完成,再继续下一个。"},"investigation-script-loop":{"name":"探查脚本循环","description":"凭实证锁定 bug 的真正根因:写一个一次性的小脚本来触发可疑行为,运行它、读取真实输出,并不断打磨探针,直到输出本身证明根因所在。"},"reflexion-debug-loop":{"name":"反思调试循环","description":"不靠瞎试就让失败的测试变绿:每次尝试失败时把一段简短反思写入磁盘,并在下次尝试前查阅它,让循环不再重复已被排除的修法。"},"merge-conflict-resolver":{"name":"合并冲突解决器","description":"通过变基把分支更新到与目标一致,然后逐个文件解决每处冲突、保留双方意图,并在宣布分支已同步前证明结果仍然通过。"},"staging-smoke-test":{"name":"预发布 Smoke Test","description":"在预发布部署后,走一遍固定的 smoke test 清单——认证、核心用户路径和关键集成——每次出问题就修复最小的那个并重跑,直到整份清单全部通过。"},"deploy-verification-loop":{"name":"部署验证循环","description":"部署上线后,按间隔轮询健康检查和 smoke test 端点,对任何非健康响应进行排查、修复或上报,并持续检查直到每个配置的端点都报告成功。"},"factory_openspec":{"name":"OpenSpec Lifecycle","description":"从 ticket 到归档的 OpenSpec 生命周期: 生成工件 (opsx:ff) → 实现 (opsx:apply) → 验证 (opsx:verify); FAIL 则回环修正同一 change, PASS 则无人值守归档。"}}`),v={title:e,subtitle:t,newLoop:n,sections:r,gallery:i,categories:a,status:o,empty:s,actions:c,card:l,confirmDelete:u,newLoopName:d,errors:f,builder:p,preview:m,builtInBadge:h,run:g,catalog:_,import:{done_one:`已导入 {{count}} 个循环`,done_other:`已导入 {{count}} 个循环`,skipped_one:`已跳过 {{count}} 个重复项:{{names}}`,skipped_other:`已跳过 {{count}} 个重复项:{{names}}`,invalid:`该文件不是有效的循环导出。`}};export{c as actions,p as builder,h as builtInBadge,l as card,_ as catalog,a as categories,u as confirmDelete,v as default,s as empty,f as errors,i as gallery,n as newLoop,d as newLoopName,m as preview,g as run,r as sections,o as status,t as subtitle,e as title};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=`Loops`,t=`Wiederverwendbare Automatisierungs-Loops – projektübergreifend geteilt.`,n=`Neuer Loop`,r={drafts:`Entwürfe`,published:`Veröffentlicht`,templates:`Vorlagen`,builtIn:`Integriert`},i={search:`Vorlagen suchen…`,noResults:`Keine Vorlagen entsprechen deinen Filtern.`,clearFilter:`Filter zurücksetzen`,resultCount_one:`{{count}} Vorlage`,resultCount_other:`{{count}} Vorlagen`,needsSpec:`Spec nötig`,standalone:`Eigenständig`,needsSpecHint:`Läuft auf einer Rail mit einer gezogenen Spec`,standaloneHint:`Läuft eigenständig — einfach ein Projekt wählen`},a={API:`API`,Automation:`Automatisierung`,CI:`CI`,Database:`Datenbank`,Debugging:`Debugging`,DevOps:`DevOps`,Docs:`Doku`,Git:`Git`,Maintenance:`Wartung`,Performance:`Performance`,Planning:`Planung`,Quality:`Qualität`,Review:`Review`,Security:`Sicherheit`,Testing:`Tests`},o={draft:`Entwurf`,published:`Veröffentlicht`,running:`Läuft`},s={title:`Noch keine Loops`,body:`Erstelle einen von Grund auf neu oder beginne mit einer Vorlage.`},c={edit:`Bearbeiten`,delete:`Löschen`,publish:`Veröffentlichen`,unpublish:`Zurückziehen`,duplicate:`Duplizieren`,use:`Vorlage verwenden`,preview:`Vorschau`,fork:`Zum Bearbeiten forken`,run:`Ausführen`,export:`Exportieren`,import:`Importieren`,select:`{{name}} auswählen`},l={nodes_one:`{{count}} Knoten`,nodes_other:`{{count}} Knoten`,usedIn:`In Verwendung · {{project}}`},u=`Diesen Loop löschen? Er verschwindet aus jeder Rail-Auswahl.`,d=`Neuer Loop`,f={load:`Loops konnten nicht geladen werden`,save:`Loop konnte nicht gespeichert werden`,publishInvalid:`Dieser Loop kann noch nicht veröffentlicht werden – behebe die hervorgehobenen Probleme.`},p={back:`Zurück zu Loops`,save:`Speichern`,saved:`Loop gespeichert`,publish:`Veröffentlichen`,published:`Loop veröffentlicht`,addNode:`Knoten hinzufügen`,deleteNode:`Knoten löschen`,config:{maxIterations:`Maximale Iterationen`,timeout:`Timeout (Min.)`,maxIterationsHint:`Obergrenze für Loop-Decider-Iterationen — der Loop stoppt beim Erreichen, auch wenn das Ziel nicht erfüllt ist. Verhindert Endlosschleifen.`,timeoutHint:`Echtzeit-Limit für den gesamten Lauf, in Minuten. Bei Überschreitung wird der Lauf gestoppt und als fehlgeschlagen markiert — ein Sicherheitsnetz neben den max. Iterationen.`,maxCost:`Max. Kosten ($)`,maxCostHint:`Optionales USD-Budget für den gesamten Lauf. Wird ZWISCHEN Schritten geprüft (die Kosten eines Schritts stehen erst nach dessen Ende fest), der Loop stoppt vor dem nächsten Schritt, sobald die Summe es überschreitet — kann um einen Schritt überschreiten. Bei Nicht-Claude-Anbietern sind die Kosten geschätzt. Leer = kein Limit.`},nodes:{start:`Start`,"ai-step":`KI-Schritt`,shell:`Shell`,decider:`Loop-Entscheider`,condition:`Bedingung`,end:`Ende`},inspector:{selectNode:`Wähle einen Knoten aus, um ihn zu bearbeiten.`,prompt:`Prompt`,provider:`Anbieter`,model:`Modell`,effort:`Denkaufwand`,command:`Befehl`,goal:`Ziel / Abbruchkriterien`,join:`Verknüpfung`,outcome:`Ergebnis`,startNote:`Der Einstiegspunkt des Loops. Verbinde ihn mit dem ersten Schritt.`,promptHint:`Klicke oder ziehe ein Token, um es in den Prompt einzufügen.`,tokensSpec:`Spec-Felder`,tokensJira:`Jira`,tokensCommands:`Befehle`,label:`Name`},branch:{continue:`↻ Fortsetzen`,stop:`✓ Stoppen`},edgesHelp:{label:`Wie Schritte verbunden werden`,body:`Pfeile legen die REIHENFOLGE der Ausführung fest, keine Daten — Boxen haben keine Eingangsports und Kanten übergeben keine Parameter. Jeder AI Step setzt automatisch seine Session fort (vollständiger vorheriger Kontext) plus eine kurze Zusammenfassung der vorherigen Schritte; nichts wird von Hand verdrahtet. Der Loop Decider hat zwei Ausgänge: ↻ Fortsetzen (Ziel nicht erreicht → zurück in die Schleife) und ✓ Stoppen (Ziel erreicht → beenden).`},arrange:{label:`Anordnen`,vertical:`Vertikal`,horizontal:`Horizontal`,grid:`Raster`,reset:`Zurücksetzen`},constants:{label:`Konstanten`,manage:`Konstanten verwalten`,title:`Loop-Konstanten`,empty:`Noch keine eigenen Konstanten.`,name:`NAME`,value:`Wert`,add:`Hinzufügen`,builtinBadge:`Integriert`},paste:{done_one:`{{count}} Schritt eingefügt`,done_other:`{{count}} Schritte eingefügt`},problems:{count_one:`{{count}} Problem`,count_other:`{{count}} Probleme`,NO_START:`Füge einen Start-Knoten hinzu.`,MULTIPLE_START:`Nur ein Start-Knoten ist erlaubt.`,NO_END:`Füge mindestens einen End-Knoten hinzu.`,ORPHAN:`Dieser Schritt ist vom Start nicht erreichbar.`,DECIDER_BRANCHES:`Der Loop Decider braucht einen Fortsetzen- und einen Stopp-Zweig.`,EMPTY_PROMPT:`Der KI-Schritt hat einen leeren Prompt.`,EMPTY_COMMAND:`Der Shell-Schritt hat einen leeren Befehl.`,EMPTY_GOAL:`Der Loop Decider hat kein Ziel.`,DEAD_END:`Dieser Schritt hat keine ausgehende Verbindung.`},preview:{label:`Vorschau`,title:`Probelauf-Vorschau`,sampleNote:`Spec-Werte sind Beispieldaten; Befehle und Konstanten werden wie zur Laufzeit aufgelöst.`,empty:`Keine Schritte zur Vorschau.`,error:`Vorschau fehlgeschlagen`}},m={steps:`Schritte`,limits:`max. {{iterations}} Iterationen · {{timeout}} Min. Timeout`,openInBuilder:`Im Builder öffnen`,builtin:`Integriert`},h=`Integriert`,g={title:`{{name}} ausführen`,subtitle:`Diesen Loop auf einem Projekt starten (kein Ticket nötig).`,project:`Projekt`,provider:`Anbieter`,model:`Modell`,effort:`Reasoning-Aufwand`,execute:`Ausführen`,noProjects:`Keine Projekte verfügbar.`,launched:`{{name}} wird ausgeführt`},_=JSON.parse(`{"ship-and-green":{"name":"Ship & Green","description":"Vollständig autonom: spec implementieren, verifizieren und bei Fehlern nachbessern (Fix) — in der Schleife verifizieren → fixen → verifizieren, bis alles grün ist. Kein manuelles Eingreifen."},"verify-pass":{"name":"Verify Pass","description":"Autonomes Verifizieren-und-Fixen: build/lint/Tests des Projekts erkennen und ausführen, dann bei Fehlern nachbessern — verifizieren → fixen → verifizieren, bis grün."},"ci-watch":{"name":"CI Watch","description":"Fragt die CI-Checks des offenen PR ab (der Agent nutzt das CI-Tooling des Repos), bis jeder Check grün ist."},"lint-and-fix":{"name":"Lint & Fix","description":"Der Agent erkennt und führt den lint des Projekts aus und behebt jedes Problem, iterierend, bis die Codebasis sauber ist."},"type-safe":{"name":"Type Safe","description":"Der Agent erkennt und führt den Typchecker des Projekts aus und behebt jeden Fehler, iterierend, bis er sauber durchläuft."},"coverage-climb":{"name":"Coverage Climb","description":"Der Agent führt das Coverage-Tooling des Projekts aus und ergänzt gezielte Tests, bis die Schwellenwerte erreicht sind."},"build-fix":{"name":"Build Fix","description":"Der Agent erkennt und führt den Produktions-build des Projekts aus und behebt Kompilier-/Bundle-Fehler, bis er grün ist."},"deploy-check":{"name":"Deploy Check","description":"Der Agent fragt den deploy-/Health-Status ab (mit dem deploy-Tooling des Projekts), bis der Dienst als gesund gemeldet wird."},"factory_implement":{"name":"Implementieren","description":"Vollständig autonom: spec implementieren, verifizieren und bei Fehlern nachbessern (Fix) — in der Schleife, bis alle Tests bestehen."},"factory_batch":{"name":"Batch-Implementierung","description":"Alle Tickets des Rails auf einmal als Batch implementieren, dann verifizieren + bei Fehlern nachbessern, bis grün."},"factory_freestyle":{"name":"Freestyle","description":"Übergibt die Spec direkt an das Modell mit voller Freiheit — ohne Pipeline, es arbeitet wie ein normaler Coding-Agent, dann verifizieren + verfeinern bis alles grün ist. Nur Claude."},"autoloop-tdd":{"name":"Autoloop TDD","description":"Ein strenger Red-Green-Refactor-Zyklus für {{spec.title}}: Jedes Verhalten zuerst mit einem fehlschlagenden Test festnageln, nur so viel Code schreiben, bis er grün wird, und dann aufräumen – so lange wiederholen, bis die Spec vollständig abgedeckt ist."},"e2e-until-green":{"name":"E2E bis grün","description":"Die E2E-Suite für {{spec.title}} ausführen, jeden fehlschlagenden User-Flow diagnostizieren, den zugrunde liegenden UI- oder Integrationsfehler beheben und so lange durchlaufen, bis jede E2E-Spec besteht."},"flaky-test-triage":{"name":"Flaky-Test-Triage","description":"Die fehlschlagenden Tests rund um {{spec.title}} mehrfach erneut ausführen, um echte Regressionen von sporadischen Flakes zu trennen, dann die echten Brüche reparieren und die instabilen Tests stabilisieren oder dokumentieren."},"independent-verifier-pass":{"name":"Unabhängige Prüfung","description":"Eine adversariale Verifikation von {{spec.title}}: Build, Lint und Tests komplett neu ausführen, nur der rohen Befehlsausgabe vertrauen (nicht früheren „läuft\\"-Behauptungen) und jede Lücke aufdecken oder beheben."},"post-edit-test-guard":{"name":"Test-Guard nach Edits","description":"Nach jedem Block von Änderungen an {{spec.title}} sofort die kleinstmögliche Testmenge ausführen, die die geänderten Dateien berührt – so werden Regressionen im Moment ihres Auftretens erkannt statt erst am Ende."},"post-merge-regression-guard":{"name":"Regressions-Guard nach Merge","description":"Direkt nachdem ein Merge oder Rebase fremde Arbeit in {{spec.title}} gebracht hat, den schnellen Smoke Test ausführen, um Integrationsbrüche sofort zu erkennen – bevor neue Feature-Arbeit darauf aufsetzt."},"pre-commit-guard":{"name":"Pre-Commit-Guard","description":"Ein Sicherheits-Gate für {{spec.title}}, das jeden Commit abfängt: zuerst die Test-Suite ausführen und den Commit verweigern, solange sie rot ist – so gelangt kaputter Code nie in die Historie."},"visual-regression-until-match":{"name":"Visuelle Regression bis passt","description":"Visuelle Snapshots der geänderten UI aufnehmen, jeden ungewollten Pixel-Diff aufspüren und so lange selbst korrigieren, bis die visuelle Suite grün ist und nur bewusste Designänderungen freigegeben sind."},"format-until-clean":{"name":"Formatieren bis sauber","description":"Den Projekt-Formatter anwenden, die wenigen Stilprobleme beheben, die er nicht automatisch fixen kann, und weitermachen, bis ein erneuter Formatlauf den Arbeitsbaum unverändert lässt."},"lint-typecheck-fix":{"name":"Lint und Typecheck beheben","description":"Linter und Typechecker ausführen, jedes gemeldete Problem mit der kleinstmöglichen Änderung lösen und schleifen, bis beide Gates völlig sauber zurückkommen."},"a11y-audit-until-clean":{"name":"A11y-Audit bis sauber","description":"Die automatischen Barrierefreiheits-Checks über die geänderten Screens laufen lassen, die Verstöße Kategorie für Kategorie beheben und wiederholen, bis das Audit null Probleme meldet."},"de-sloppify-pass":{"name":"Aufräum-Durchlauf","description":"Nachdem das Feature steht, den Diff nach übrig gebliebenem Ballast durchforsten – Debug-Ausgaben, tote Zweige, schlampige Namen, aufgeblähte Funktionen –, das aufräumen und nachweisen, dass dabei nichts kaputtgegangen ist."},"fix-ci-until-green":{"name":"CI reparieren bis grün","description":"Den jüngsten roten CI-Lauf dieses Branches holen, den Bruch lokal reproduzieren, die echte Ursache patchen, pushen und so lange durchlaufen, bis jeder Check Erfolg meldet."},"pr-babysitter":{"name":"PR-Babysitter","description":"In regelmäßigen Abständen die beobachteten offenen Pull Requests durchgehen und jeden mergebar halten: rote CI wiederbeleben, zurückgefallene Branches gegen den Base-Branch rebasen und veraltete anstoßen – alles, was ein Mensch entscheiden muss, eskalieren."},"pr-watch-loop":{"name":"PR-Watch-Loop","description":"Die Pull Requests auf deiner Watchlist in gleichmäßigem Takt abfragen, für jeden den Zustand von CI und Review zusammenfassen und entweder triviale Blocker direkt erledigen oder aufzeigen, was einen Owner braucht."},"pr-self-review":{"name":"PR-Selbstreview","description":"Den eigenen Arbeits-Diff so kritisch prüfen wie ein anspruchsvoller Senior-Reviewer, das Gefundene beheben und erneut prüfen, bis ein sauberer Durchgang nichts Kritisches mehr findet – noch bevor der PR deine Hände verlässt."},"spec-first-ship":{"name":"Spec-First liefern","description":"Eine schriftliche Anforderungs-Checkliste Punkt für Punkt zum Abschluss bringen – jeder Durchgang setzt eine einzige offene Anforderung um, weist sie nach und hakt sie ab –, sodass die Spec der Vertrag für „fertig\\" ist."},"dependency-audit-weekly":{"name":"Wöchentliches Dependency-Audit","description":"Jede Woche Bilanz ziehen, welche Pakete zurückgefallen sind, sie in unbedenklich versus riskant einteilen und einen klaren, umsetzbaren Upgrade-Plan zurückliefern."},"dependency-upgrade-one-by-one":{"name":"Dependencies einzeln upgraden","description":"Pro Durchgang genau ein veraltetes Paket anheben, reparieren, was das Update bricht, nachweisen, dass das Projekt weiter läuft, und committen – weit sicherer, als alles auf einmal zu upgraden."},"knip-until-clean":{"name":"Toten Code entfernen bis sauber","description":"Unreferenzierte Exports, verwaiste Dateien und von niemandem importierte Abhängigkeiten aufspüren, sie sicher entfernen und weitermachen, bis der Dead-Code-Scanner nichts mehr zu melden hat."},"docs-sync-after-edits":{"name":"Docs an Codeänderungen angleichen","description":"Nach einer Runde Codeänderungen jedes betroffene Dokument aufspüren – README, API-Referenz, Inline-Kommentare – und es wieder damit in Einklang bringen, wie sich der Code jetzt tatsächlich verhält."},"security-audit-weekly":{"name":"Wöchentliches Security-Audit","description":"Wöchentlich einen Schwachstellen-Scan über den Dependency-Baum laufen lassen, die Funde nach Schweregrad und realer Exposition triagieren und einen priorisierten Behebungsplan zurückliefern."},"npm-audit-fix-loop":{"name":"Schwachstellen einzeln patchen","description":"High- und Critical-Advisories der Dependencies gezielt abarbeiten – ein Fix pro Durchgang, jeder gegen die Test-Suite verifiziert – statt eines blinden Force-Fix, der den Build still kaputt machen kann."},"api-contract-until-match":{"name":"API-Contract bis passt","description":"Die Implementierung so weit treiben, dass ihre Antworten dem veröffentlichten API-Contract entsprechen, und jede Lücke zwischen dem, was das Schema verspricht, und dem, was die Handler tatsächlich zurückgeben, schließen."},"openapi-sync-until-valid":{"name":"OpenAPI-Sync bis valide","description":"Das OpenAPI-Dokument wohlgeformt und getreu zu den echten Route-Handlern halten, indem in jedem Durchgang Spec-Fehler und Drift zwischen Code und Doku behoben werden, bis der Linter zufrieden ist."},"migration-until-applied":{"name":"Migration bis angewendet","description":"Das Datenbankschema sauber nach vorn bringen: die ausstehenden Migrationen ausführen, dabei auftretende Schema- oder SQL-Fehler beheben und sicherstellen, dass die Migrationshistorie konsistent bleibt."},"bundle-size-budget":{"name":"Bundle-Size-Budget","description":"Das Feature liefern, ohne das Client-Bundle über sein Budget aufzublähen – in jedem Durchgang messen und kürzen, per Code-Splitting aufteilen oder lazy laden, bis das Größen-Gate grün ist."},"changelog-sync-after-ship":{"name":"Changelog nach Release angleichen","description":"Nach dem Release sicherstellen, dass das Changelog die nutzersichtbare Geschichte erzählt: prüfen, was gelandet ist, Einträge im Keep-a-Changelog-Stil schreiben und bestätigen, dass nichts Sichtbares übersehen wurde."},"guardrails-learning-loop":{"name":"Guardrails-Lern-Loop","description":"Weiter an den Gates iterieren, bis sie grün werden, aber sobald ein Check zweimal auf dieselbe Weise scheitert, zuerst eine Guardrail-Notiz festhalten – so verschwendet die Schleife nie Iterationen mit einem Ansatz, der schon gescheitert ist."},"ralph-story-executor":{"name":"Backlog-Story-Executor","description":"Einen Backlog von User Storys einzeln und mit jeweils frischem Kontext abarbeiten: die nächste offene Story wählen, nur sie umsetzen, nachweisen, dass die Projekt-Gates grün bleiben, committen und sie als erledigt markieren, bevor es weitergeht."},"investigation-script-loop":{"name":"Untersuchungs-Skript-Loop","description":"Die wahre Ursache eines Bugs empirisch festnageln: ein winziges Wegwerf-Skript schreiben, das das verdächtige Verhalten auslöst, es ausführen, die echte Ausgabe lesen und die Sonde verfeinern, bis die Ausgabe selbst die Grundursache beweist."},"reflexion-debug-loop":{"name":"Reflexions-Debug-Loop","description":"Einen fehlschlagenden Test grün bekommen, ohne im Kreis zu laufen: bei jedem gescheiterten Versuch eine kurze Reflexion auf die Festplatte schreiben und sie vor dem nächsten Anlauf konsultieren, damit die Schleife nie einen bereits ausgeschlossenen Fix wiederholt."},"merge-conflict-resolver":{"name":"Merge-Konflikt-Löser","description":"Den Branch per Rebase auf seinen Zielstand bringen, dann jeden Konflikt Datei für Datei lösen und dabei die Absicht beider Seiten bewahren, und nachweisen, dass das Ergebnis weiterhin besteht, bevor der Branch als aktuell gilt."},"staging-smoke-test":{"name":"Staging-Smoke-Test","description":"Nach einem Staging-Deploy eine feste Smoke-Checkliste durchgehen – Auth, die zentralen User-Pfade und wichtige Integrationen –, bei jedem Bruch das kleinste Problem beheben und erneut durchlaufen, bis die ganze Checkliste sauber zurückkommt."},"deploy-verification-loop":{"name":"Deploy-Verifikations-Loop","description":"Nachdem ein Deploy raus ist, die Health- und Smoke-Endpoints im Intervall abfragen, jede nicht gesunde Antwort untersuchen und beheben oder eskalieren und so lange weiter prüfen, bis jeder konfigurierte Endpoint Erfolg meldet."},"factory_openspec":{"name":"OpenSpec Lifecycle","description":"OpenSpec-Lebenszyklus vom Ticket bis zum Archiv: Artefakte generieren (opsx:ff) → implementieren (opsx:apply) → verifizieren (opsx:verify); bei FAIL zurück und denselben Change nachbessern, bei PASS unbeaufsichtigt archivieren."}}`),v={title:e,subtitle:t,newLoop:n,sections:r,gallery:i,categories:a,status:o,empty:s,actions:c,card:l,confirmDelete:u,newLoopName:d,errors:f,builder:p,preview:m,builtInBadge:h,run:g,catalog:_,import:{done_one:`{{count}} Loop importiert`,done_other:`{{count}} Loops importiert`,skipped_one:`{{count}} Duplikat übersprungen: {{names}}`,skipped_other:`{{count}} Duplikate übersprungen: {{names}}`,invalid:`Diese Datei ist kein gültiger Loops-Export.`}};export{c as actions,p as builder,h as builtInBadge,l as card,_ as catalog,a as categories,u as confirmDelete,v as default,s as empty,f as errors,i as gallery,n as newLoop,d as newLoopName,m as preview,g as run,r as sections,o as status,t as subtitle,e as title};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=`Loops`,t=`Loop di automazione riutilizzabili — condivisi tra tutti i tuoi progetti.`,n=`Nuovo loop`,r={drafts:`Bozze`,published:`Pubblicati`,templates:`Modelli`,builtIn:`Integrati`},i={search:`Cerca modelli…`,noResults:`Nessun modello corrisponde ai filtri.`,clearFilter:`Cancella filtri`,resultCount_one:`{{count}} modello`,resultCount_other:`{{count}} modelli`,needsSpec:`Richiede spec`,standalone:`Autonoma`,needsSpecHint:`Gira su una rail con una spec trascinata`,standaloneHint:`Gira da sola — basta scegliere un progetto`},a={API:`API`,Automation:`Automazione`,CI:`CI`,Database:`Database`,Debugging:`Debug`,DevOps:`DevOps`,Docs:`Docs`,Git:`Git`,Maintenance:`Manutenzione`,Performance:`Prestazioni`,Planning:`Pianificazione`,Quality:`Qualità`,Review:`Revisione`,Security:`Sicurezza`,Testing:`Test`},o={draft:`Bozza`,published:`Pubblicato`,running:`In esecuzione`},s={title:`Ancora nessun loop`,body:`Creane uno da zero o parti da un modello.`},c={edit:`Modifica`,delete:`Elimina`,publish:`Pubblica`,unpublish:`Annulla pubblicazione`,duplicate:`Duplica`,use:`Usa modello`,preview:`Anteprima`,fork:`Fork per modificare`,run:`Esegui`,export:`Esporta`,import:`Importa`,select:`Seleziona {{name}}`},l={nodes_one:`{{count}} nodo`,nodes_other:`{{count}} nodi`,usedIn:`In uso · {{project}}`},u=`Eliminare questo loop? Scomparirà da ogni selettore di rail.`,d=`Nuovo loop`,f={load:`Impossibile caricare i loop`,save:`Impossibile salvare il loop`,publishInvalid:`Questo loop non può ancora essere pubblicato — correggi i problemi evidenziati.`},p={back:`Torna ai loop`,save:`Salva`,saved:`Loop salvato`,publish:`Pubblica`,published:`Loop pubblicato`,addNode:`Aggiungi nodo`,deleteNode:`Elimina nodo`,config:{maxIterations:`Iterazioni massime`,timeout:`Timeout (min)`,maxIterationsHint:`Limite massimo di iterazioni del Loop Decider — il loop si ferma al raggiungimento anche se l'obiettivo non è soddisfatto. Evita loop infiniti.`,timeoutHint:`Limite di tempo reale per l'intera esecuzione, in minuti. Se superato, l'esecuzione viene interrotta e segnata come fallita — una rete di sicurezza insieme alle iterazioni massime.`,maxCost:`Costo max ($)`,maxCostHint:`Budget USD opzionale per l’intera esecuzione. Controllato TRA i passi (il costo di un passo si conosce solo al termine), il loop si ferma prima del passo successivo quando il totale lo supera — può sforare di un passo. Per i provider non-Claude il costo è stimato. Vuoto = nessun limite.`},nodes:{start:`Inizio`,"ai-step":`Passo IA`,shell:`Shell`,decider:`Decisore del loop`,condition:`Condizione`,end:`Fine`},inspector:{selectNode:`Seleziona un nodo per modificarlo.`,prompt:`Prompt`,provider:`Provider`,model:`Modello`,effort:`Sforzo di ragionamento`,command:`Comando`,goal:`Obiettivo / criteri di arresto`,join:`Unione`,outcome:`Esito`,startNote:`Il punto di ingresso del loop. Collegalo al primo passo.`,promptHint:`Clicca o trascina un token per inserirlo nel prompt.`,tokensSpec:`Campi della spec`,tokensJira:`Jira`,tokensCommands:`Comandi`,label:`Nome`},branch:{continue:`↻ Continua`,stop:`✓ Ferma`},edgesHelp:{label:`Come si collegano i passaggi`,body:`Le frecce definiscono l'ORDINE di esecuzione, non i dati — i box non hanno porte di input e gli archi non trasportano parametri. Ogni AI Step riprende automaticamente la propria sessione (intero contesto precedente) più un breve riepilogo dei passaggi precedenti; nulla viene collegato a mano. Il Loop Decider ha due uscite: ↻ Continua (obiettivo non raggiunto → torna al ciclo) e ✓ Ferma (obiettivo raggiunto → esci).`},arrange:{label:`Disponi`,vertical:`Verticale`,horizontal:`Orizzontale`,grid:`Griglia`,reset:`Reimposta`},constants:{label:`Costanti`,manage:`Gestisci costanti`,title:`Costanti del loop`,empty:`Ancora nessuna costante personalizzata.`,name:`NOME`,value:`valore`,add:`Aggiungi`,builtinBadge:`Integrate`},paste:{done_one:`{{count}} passo incollato`,done_other:`{{count}} passi incollati`},problems:{count_one:`{{count}} problema`,count_other:`{{count}} problemi`,NO_START:`Aggiungi un nodo di Avvio.`,MULTIPLE_START:`È consentito un solo nodo di Avvio.`,NO_END:`Aggiungi almeno un nodo di Fine.`,ORPHAN:`Questo passo non è raggiungibile dall'Avvio.`,DECIDER_BRANCHES:`Il Loop Decider richiede un ramo Continua e uno Ferma.`,EMPTY_PROMPT:`L'AI Step ha il prompt vuoto.`,EMPTY_COMMAND:`Il passo Shell ha il comando vuoto.`,EMPTY_GOAL:`Il Loop Decider non ha un obiettivo.`,DEAD_END:`Questo passo non ha connessioni in uscita.`},preview:{label:`Anteprima`,title:`Anteprima (dry-run)`,sampleNote:`I valori dello spec sono di esempio; comandi e costanti si risolvono come a runtime.`,empty:`Nessun passo da visualizzare.`,error:`Anteprima non riuscita`}},m={steps:`Passi`,limits:`max {{iterations}} iterazioni · {{timeout}} min di timeout`,openInBuilder:`Apri nel builder`,builtin:`Integrato`},h=`Integrato`,g={title:`Esegui {{name}}`,subtitle:`Avvia questo loop su un progetto (senza ticket).`,project:`Progetto`,provider:`Provider`,model:`Modello`,effort:`Sforzo di ragionamento`,execute:`Esegui`,noProjects:`Nessun progetto disponibile.`,launched:`Esecuzione di {{name}}`},_=JSON.parse(`{"ship-and-green":{"name":"Ship & Green","description":"Completamente autonomo: implementa la spec, verifica e affina (corregge) in caso di fallimento — ripetendo il ciclo verifica → correggi → verifica finché tutto è verde. Nessun intervento umano."},"verify-pass":{"name":"Verify Pass","description":"Verifica e correzione autonome: rileva ed esegue build/lint/test del progetto, poi affina in caso di fallimento — verifica → correggi → verifica finché è verde."},"ci-watch":{"name":"CI Watch","description":"Controlla i check di CI sulla PR aperta (l'agente usa gli strumenti di CI del repository) finché ogni check non è verde."},"lint-and-fix":{"name":"Lint & Fix","description":"L'agente rileva ed esegue il linter del progetto e corregge ogni problema, iterando finché il codice non è pulito."},"type-safe":{"name":"Type Safe","description":"L'agente rileva ed esegue il type checker del progetto e risolve ogni errore, iterando finché non passa senza errori."},"coverage-climb":{"name":"Coverage Climb","description":"L'agente esegue gli strumenti di copertura del progetto e aggiunge test mirati finché le soglie non vengono superate."},"build-fix":{"name":"Build Fix","description":"L'agente rileva ed esegue il build di produzione del progetto e corregge gli errori di compilazione/bundle finché non è verde."},"deploy-check":{"name":"Deploy Check","description":"L'agente controlla lo stato di deploy/salute (usando gli strumenti di deploy del progetto) finché il servizio non risulta integro."},"factory_implement":{"name":"Implementa","description":"Completamente autonomo: implementa la spec, verifica e affina (corregge) in caso di fallimento — ripetendo il ciclo finché tutti i test non passano."},"factory_batch":{"name":"Implementa in batch","description":"Implementa in batch tutti i ticket del rail in una sola volta, poi verifica + affina in caso di fallimento finché non è verde."},"factory_freestyle":{"name":"Freestyle","description":"Consegna la spec direttamente al modello con piena libertà — senza pipeline, lavora come un normale coding agent, poi verifica + rifinisce fino al verde. Solo Claude."},"autoloop-tdd":{"name":"Autoloop TDD","description":"Un ciclo rigoroso red-green-refactor per {{spec.title}}: fissa ogni comportamento con un test che prima fallisce, scrivi solo il codice necessario a farlo passare, poi rifinisci — ripetendo finché la spec non è coperta del tutto."},"e2e-until-green":{"name":"E2E fino al verde","description":"Esegui la suite end-to-end per {{spec.title}}, diagnostica ogni flusso utente che fallisce, correggi il difetto di UI o integrazione alla radice e ripeti finché ogni spec E2E non passa."},"flaky-test-triage":{"name":"Triage test instabili","description":"Riesegui più volte i test che falliscono attorno a {{spec.title}} per distinguere le vere regressioni dai fallimenti intermittenti, poi correggi i problemi reali e stabilizza o documenta quelli instabili."},"independent-verifier-pass":{"name":"Verifica indipendente","description":"Una verifica avversariale di {{spec.title}}: riesegui da zero build, lint e test, fidati solo dell'output grezzo dei comandi (non delle dichiarazioni 'funziona') e individua o correggi ogni lacuna."},"post-edit-test-guard":{"name":"Guardia test post-modifica","description":"Dopo ogni gruppo di modifiche per {{spec.title}}, esegui subito il set di test più ristretto che tocca i file cambiati — cogliendo le regressioni nel momento in cui appaiono, non alla fine."},"post-merge-regression-guard":{"name":"Guardia post-merge","description":"Subito dopo che un merge o un rebase porta il lavoro altrui in {{spec.title}}, esegui lo smoke test rapido per cogliere subito le rotture di integrazione — prima di costruirci sopra qualunque nuova funzionalità."},"pre-commit-guard":{"name":"Guardia pre-commit","description":"Un cancello di sicurezza per {{spec.title}} che intercetta ogni commit: esegue prima la suite di test e rifiuta il commit finché è rossa, così il codice rotto non entra mai nella storia."},"visual-regression-until-match":{"name":"Regressione visiva fino al match","description":"Cattura snapshot visivi della UI modificata, scova ogni differenza di pixel non voluta e correggi finché la suite visiva non è verde, con approvate solo le modifiche di design intenzionali."},"format-until-clean":{"name":"Formatta fino a pulito","description":"Applica il formatter del progetto, sistema i pochi problemi di stile che non riesce a correggere da solo e prosegui finché una nuova formattazione non lascia il working tree intatto."},"lint-typecheck-fix":{"name":"Correggi lint e tipi","description":"Esegui il lint e il type checker, risolvi ogni problema segnalato con la modifica più piccola possibile e ripeti finché entrambi i controlli non tornano del tutto puliti."},"a11y-audit-until-clean":{"name":"Audit a11y fino a pulito","description":"Esegui i controlli automatici di accessibilità sulle schermate modificate, correggi le violazioni una categoria alla volta e ripeti finché l'audit non torna senza alcun problema."},"de-sloppify-pass":{"name":"Passata di pulizia","description":"Dopo che la funzionalità è pronta, setaccia il diff per residui di sciatteria — output di debug, rami morti, nomi approssimativi, funzioni gonfie — ripuliscili e dimostra che la pulizia non ha rotto nulla."},"fix-ci-until-green":{"name":"Correggi la CI fino al verde","description":"Recupera l'ultima esecuzione CI rossa su questo branch, riproduci la rottura sulla tua macchina, correggi la vera causa, fai push e ripeti finché ogni check non riporta successo."},"pr-babysitter":{"name":"Babysitter PR","description":"A intervalli regolari, passa in rassegna le pull request che segui e mantieni ognuna mergeabile: rianima la CI rossa, fai il rebase di quelle rimaste indietro rispetto al branch base e sollecita quelle ferme — escalando tutto ciò che deve decidere una persona."},"pr-watch-loop":{"name":"Loop di monitoraggio PR","description":"Controlla a cadenza costante le pull request nella tua watch list, riassumi lo stato di CI e review di ognuna e risolvi i blocchi banali o evidenzia ciò che richiede un proprietario."},"pr-self-review":{"name":"Auto-review della PR","description":"Critica il tuo diff di lavoro come farebbe un reviewer senior esigente, risolvi ciò che trovi e ripeti la review finché una passata pulita non rivela nulla di critico — prima ancora che la PR lasci le tue mani."},"spec-first-ship":{"name":"Prima la spec","description":"Porta a termine una checklist di requisiti scritti un elemento alla volta — ogni passata implementa un singolo requisito non spuntato, lo dimostra e lo segna fatto — così la spec è il contratto del 'completato'."},"dependency-audit-weekly":{"name":"Audit dipendenze settimanale","description":"Ogni settimana fai il punto su quali pacchetti sono rimasti indietro, dividili tra sicuri da aggiornare e rischiosi e restituisci un piano di upgrade chiaro e attuabile."},"dependency-upgrade-one-by-one":{"name":"Aggiorna le dipendenze una alla volta","description":"Aggiorna esattamente un pacchetto obsoleto per passata, ripara ciò che l'aggiornamento rompe, dimostra che il progetto funziona ancora e fai commit — molto più sicuro che aggiornare tutto insieme."},"knip-until-clean":{"name":"Elimina il codice morto","description":"Scova export non referenziati, file orfani e dipendenze che nessuno importa, rimuovili in sicurezza e prosegui finché lo scanner del codice morto non ha più nulla da segnalare."},"docs-sync-after-edits":{"name":"Allinea i doc al codice","description":"Dopo un giro di modifiche al codice, rintraccia ogni documento toccato dai cambiamenti — README, riferimento API, commenti inline — e riallinealo a come il codice si comporta davvero ora."},"security-audit-weekly":{"name":"Audit sicurezza settimanale","description":"Esegui ogni settimana una scansione delle vulnerabilità sull'albero delle dipendenze, fai il triage di ciò che emerge per gravità ed esposizione reale e restituisci un piano di remediation prioritizzato."},"npm-audit-fix-loop":{"name":"Correggi le vulnerabilità una alla volta","description":"Risolvi gli advisory critici e ad alta gravità delle dipendenze in modo deliberato — una correzione per passata, ognuna verificata contro la suite di test — invece di un force-fix alla cieca che può rompere la build di nascosto."},"api-contract-until-match":{"name":"Contratto API fino al match","description":"Porta avanti l'implementazione finché le sue risposte non rispettano il contratto API pubblicato, colmando ogni divario tra ciò che lo schema promette e ciò che gli handler restituiscono davvero."},"openapi-sync-until-valid":{"name":"Sync OpenAPI fino a valido","description":"Mantieni il documento OpenAPI ben formato e fedele agli handler delle route reali, riparando errori di spec e divergenze codice-doc a ogni passata finché il lint non è soddisfatto."},"migration-until-applied":{"name":"Migrazione fino ad applicata","description":"Porta avanti lo schema del database in modo pulito: esegui le migrazioni pendenti, ripara eventuali errori di schema o SQL che emergono e verifica che la storia delle migrazioni resti coerente."},"bundle-size-budget":{"name":"Budget dimensione bundle","description":"Rilascia la funzionalità senza gonfiare il bundle client oltre il suo budget — misura a ogni passata e taglia, fai code-split o lazy-load finché il controllo sulla dimensione non è verde."},"changelog-sync-after-ship":{"name":"Sync changelog dopo il rilascio","description":"Dopo il rilascio, assicurati che il changelog racconti la storia rivolta all'utente: rivedi cosa è stato rilasciato, scrivi le voci in stile Keep a Changelog e verifica che nulla di visibile sia stato omesso."},"guardrails-learning-loop":{"name":"Loop con guardrail","description":"Continua a iterare sui controlli finché non diventano verdi, ma ogni volta che un check fallisce allo stesso modo due volte, scrivi prima una nota guardrail così il loop non spreca mai iterazioni ritentando un approccio già fallito."},"ralph-story-executor":{"name":"Esecutore di story","description":"Lavora un backlog di user story una alla volta con un contesto fresco a ogni passata: scegli la prossima story incompiuta, costruisci solo quella, dimostra che i controlli del progetto restano verdi, fai commit e segnala completata prima di proseguire."},"investigation-script-loop":{"name":"Loop di script d'indagine","description":"Individua empiricamente la vera causa di un bug: scrivi un piccolo script usa e getta che esercita il comportamento sospetto, eseguilo, leggi l'output reale e affina la sonda finché l'output stesso non prova la causa radice."},"reflexion-debug-loop":{"name":"Loop di debug riflessivo","description":"Fai diventare verde un test che fallisce senza girare a vuoto: ogni volta che un tentativo fallisce, registra una breve riflessione su disco e consultala prima del tentativo successivo, così il loop non ripete mai una correzione già esclusa."},"merge-conflict-resolver":{"name":"Risolutore di conflitti merge","description":"Aggiorna il branch rispetto al suo target con un rebase, poi risolvi ogni conflitto file per file preservando l'intento di entrambe le parti e dimostra che il risultato passa ancora prima di dichiarare il branch aggiornato."},"staging-smoke-test":{"name":"Smoke test su staging","description":"Dopo un deploy su staging, percorri una checklist di smoke fissa — auth, i percorsi utente principali e le integrazioni chiave — correggendo il problema più piccolo ogni volta che qualcosa si rompe e rieseguendo finché tutta la checklist non torna pulita."},"deploy-verification-loop":{"name":"Loop di verifica deploy","description":"Dopo che un deploy è andato in produzione, interroga a intervalli gli endpoint di health e smoke, indaga e correggi o esegui escalation per ogni risposta non sana, e continua a controllare finché ogni endpoint configurato non riporta successo."},"factory_openspec":{"name":"OpenSpec Lifecycle","description":"Ciclo OpenSpec dal ticket all'archivio: genera artefatti (opsx:ff) → implementa (opsx:apply) → verifica (opsx:verify); con FAIL torna indietro ed emenda lo stesso change, con PASS lo archivia senza intervento."}}`),v={title:e,subtitle:t,newLoop:n,sections:r,gallery:i,categories:a,status:o,empty:s,actions:c,card:l,confirmDelete:u,newLoopName:d,errors:f,builder:p,preview:m,builtInBadge:h,run:g,catalog:_,import:{done_one:`{{count}} loop importato`,done_other:`{{count}} loop importati`,skipped_one:`{{count}} duplicato saltato: {{names}}`,skipped_other:`{{count}} duplicati saltati: {{names}}`,invalid:`Quel file non è un export di loop valido.`}};export{c as actions,p as builder,h as builtInBadge,l as card,_ as catalog,a as categories,u as confirmDelete,v as default,s as empty,f as errors,i as gallery,n as newLoop,d as newLoopName,m as preview,g as run,r as sections,o as status,t as subtitle,e as title};
|