specrails-desktop 2.25.0 → 2.26.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-BGRTOOhT.js → ActivityFeedPage-1eXnoNAo.js} +1 -1
- package/client/dist/assets/{AgentBrowserCapture-DvDLxsUy.js → AgentBrowserCapture-BHW_6Vm0.js} +1 -1
- package/client/dist/assets/{AgentModeCodePane-DfwctjzN.js → AgentModeCodePane-C89SAJzI.js} +2 -2
- package/client/dist/assets/{AgentModeJobsPane-G3WrS-sE.js → AgentModeJobsPane-BG_4r4Dm.js} +1 -1
- package/client/dist/assets/{AgentsPage-DGFFijMC.js → AgentsPage-BrkWfc9s.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-hoJmlEpk.js → AnalyticsPage-CMZRUPrT.js} +1 -1
- package/client/dist/assets/{BarChart-BEhAXVK-.js → BarChart-BtF3zJHa.js} +1 -1
- package/client/dist/assets/{CodePage-B4zB9DVC.js → CodePage-Cime5FRs.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-CBX-Qpxd.js → DesktopAnalyticsPage-CSKHSBBF.js} +1 -1
- package/client/dist/assets/{DocsDialog-lTsnNdAM.js → DocsDialog-ClTq6Fzj.js} +1 -1
- package/client/dist/assets/{DocsPage-CkvdGroT.js → DocsPage-DTxfOpTu.js} +1 -1
- package/client/dist/assets/{ExportDropdown-Da98gR-P.js → ExportDropdown-Ho9zdPvK.js} +1 -1
- package/client/dist/assets/{IntegrationsPage-Cf9o4eZq.js → IntegrationsPage-DWNyo6jk.js} +1 -1
- package/client/dist/assets/{InteractiveJobComposer-C8N-Bbnn.js → InteractiveJobComposer-CYxXOKld.js} +1 -1
- package/client/dist/assets/{JobDetailModal-BZVwIIEx.js → JobDetailModal-DrNafHY5.js} +1 -1
- package/client/dist/assets/{JobDetailPage-CQewQ1zy.js → JobDetailPage-4VKw33GW.js} +1 -1
- package/client/dist/assets/{JobsPage-CB4wOxmE.js → JobsPage-cFr6wWaH.js} +1 -1
- package/client/dist/assets/{LoopBuilderPage-B9Y5gt08.js → LoopBuilderPage-Bk8zVvEX.js} +1 -1
- package/client/dist/assets/{LoopPreviewModal-kxQ5kV1t.js → LoopPreviewModal-XFSO2Vcs.js} +1 -1
- package/client/dist/assets/{LoopsPage-RysW-6sC.js → LoopsPage-DWMwDj9g.js} +1 -1
- package/client/dist/assets/{ProjectSettingsDialog-BHN5qsGT.js → ProjectSettingsDialog-DnSe_yWm.js} +1 -1
- package/client/dist/assets/{TemplatePreviewModal-DW6lZCIs.js → TemplatePreviewModal-B30-TY_v.js} +1 -1
- package/client/dist/assets/agent-6mhkV25_2.js +1 -0
- package/client/dist/assets/agent-BZqfQhI_.js +1 -0
- package/client/dist/assets/agent-Bjy1SlT5.js +1 -0
- package/client/dist/assets/agent-Bn6ZmjHj.js +1 -0
- package/client/dist/assets/{agent-G6Zn2gpr.js → agent-CRYdi9-t.js} +1 -1
- package/client/dist/assets/agent-D5QNn9np2.js +1 -0
- package/client/dist/assets/agent-DgFoLgrF2.js +1 -0
- package/client/dist/assets/agent-DgwPsxWQ.js +1 -0
- package/client/dist/assets/{brain-B9dkGuAN.js → brain-DcXkQwzO.js} +1 -1
- package/client/dist/assets/code-CwnBPPyA.js +1 -0
- package/client/dist/assets/{dashboard-4WX7agHF2.js → dashboard-CuGuy2__2.js} +1 -1
- package/client/dist/assets/{dashboard-IbEztmJ52.js → dashboard-CxP3TZ3I2.js} +1 -1
- package/client/dist/assets/{dashboard-5Z_esXIB.js → dashboard-DWHVfP7U.js} +1 -1
- package/client/dist/assets/{dashboard-DQ-po1MG2.js → dashboard-D_Pgs6QH2.js} +1 -1
- package/client/dist/assets/{dashboard-oqS7VRrK.js → dashboard-Dwnssayh.js} +1 -1
- package/client/dist/assets/{dashboard-ojWdDq6S.js → dashboard-S_pT1yxN.js} +1 -1
- package/client/dist/assets/{dashboard-zfoJcdFW.js → dashboard-tCxOFOxx.js} +1 -1
- package/client/dist/assets/{dashboard-nc-Raovv.js → dashboard-zefbBNyG.js} +1 -1
- package/client/dist/assets/{dist-js-BW5-IZTP.js → dist-js-6U6hyD6z.js} +1 -1
- package/client/dist/assets/{dist-js-Bbd7Wzdw.js → dist-js-BAWwLSIj.js} +1 -1
- package/client/dist/assets/index-DnkfABxY.js +156 -0
- package/client/dist/assets/index-cvOunQkD.css +2 -0
- package/client/dist/assets/{lib-EIkIPf26.js → lib-Bsny0zZp.js} +1 -1
- package/client/dist/assets/{loops-YYV2bwjd.js → loops-Brnx4Fji.js} +1 -1
- package/client/dist/assets/{loops-hXgncEpF2.js → loops-BvqQ-bHR2.js} +1 -1
- package/client/dist/assets/{loops-BvEenWBy.js → loops-CvOWsi5r.js} +1 -1
- package/client/dist/assets/{loops-DjOtVXRo.js → loops-D6D3XHjj.js} +1 -1
- package/client/dist/assets/{loops-HTHf-xu32.js → loops-DJNhp17p2.js} +1 -1
- package/client/dist/assets/{loops-kYbydDyN.js → loops-K5_HXfJa.js} +1 -1
- package/client/dist/assets/loops-LIgO_-eM.js +1 -0
- package/client/dist/assets/{loops-DNGiYKll2.js → loops-vhJdbcz92.js} +1 -1
- package/client/dist/assets/{settings-DZJeXoRV.js → settings-BWIf3vv4.js} +1 -1
- package/client/dist/assets/{settings-TNga5gIF2.js → settings-BhuXe7ek2.js} +1 -1
- package/client/dist/assets/{settings-D6qY9_UI.js → settings-DE8t6aYv.js} +1 -1
- package/client/dist/assets/{settings-BsJMsWGc.js → settings-DHd1lQ1k.js} +1 -1
- package/client/dist/assets/{settings-BOHOmHkb.js → settings-DTYQ5COE.js} +1 -1
- package/client/dist/assets/settings-DXgPh9-k.js +1 -0
- package/client/dist/assets/{settings-BlEA_7h02.js → settings-Dgv_q4qf2.js} +1 -1
- package/client/dist/assets/{settings-lFoaYT-s2.js → settings-FJXpJ3k92.js} +1 -1
- package/client/dist/assets/{setup-CmU6bTCV2.js → setup-cnqZsQSX2.js} +1 -1
- package/client/dist/assets/{upload-BCMl-nCg.js → upload-49vX83IZ.js} +1 -1
- package/client/dist/assets/{value-CG-amSq1.js → value-Bo8EiTZE.js} +1 -1
- package/client/dist/index.html +6 -6
- package/docs/agy-cli-provider-study.md +1 -1
- package/docs/codex.md +2 -2
- package/docs/gemini-cli-provider-study.md +2 -2
- package/docs/guide/de/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/fr/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/it/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/ja/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/pt/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/pt/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/zh/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/internals/api-reference.md +3 -3
- package/docs/internals/companion-rails-as-loops-contract.md +6 -6
- package/docs/internals/configuration.md +1 -1
- package/docs/internals/interactive-jobs.md +3 -3
- package/docs/internals/safe-pr-review-flow.md +1 -1
- package/docs/internals/visual-design-audit.md +2 -2
- package/docs/running-pipelines.md +1 -1
- package/package.json +1 -1
- package/server/dist/agent-chat-manager.js +16 -2
- package/server/dist/agent-chat-router.js +66 -1
- package/server/dist/agent-context-resolver.js +301 -0
- package/server/dist/agent-operator-prompt.js +14 -7
- package/server/dist/agent-store.js +24 -12
- package/server/dist/db.js +17 -17
- package/server/dist/desktop-db.js +6 -0
- package/server/dist/feature-flags.js +2 -2
- package/server/dist/index.js +1 -1
- package/server/dist/interactive-job-session.js +3 -3
- package/server/dist/loop-command-catalog.js +11 -11
- package/server/dist/loop-factory.js +7 -7
- package/server/dist/loop-graph.js +2 -2
- package/server/dist/loop-run-manager.js +1 -1
- package/server/dist/mcp/guide.js +8 -6
- package/server/dist/mcp/tools/rails.js +4 -3
- package/server/dist/mobile/mobile-router.js +1 -1
- package/server/dist/project-router-jobs.js +1 -1
- package/server/dist/project-router-loop-runs.js +1 -1
- package/server/dist/project-router-settings.js +5 -5
- package/server/dist/queue-manager.js +27 -27
- package/server/dist/rails-router.js +20 -20
- package/client/dist/assets/agent-4ARs0uac2.js +0 -1
- package/client/dist/assets/agent-C55wwsUX.js +0 -1
- package/client/dist/assets/agent-C_kqyrXo.js +0 -1
- package/client/dist/assets/agent-Df3lnHMu.js +0 -1
- package/client/dist/assets/agent-MQhun7cv.js +0 -1
- package/client/dist/assets/agent-NqlER4Yh2.js +0 -1
- package/client/dist/assets/agent-OTGI6t7e2.js +0 -1
- package/client/dist/assets/code-CqCcRThR.js +0 -1
- package/client/dist/assets/index-BtAks9nm.css +0 -2
- package/client/dist/assets/index-DC-REAcL.js +0 -155
- package/client/dist/assets/loops-CBiWd9Hf.js +0 -1
- package/client/dist/assets/settings-Mr7MnJbf.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,t}from"./chunk-BNv3lrIs.js";import{M as n,N as r}from"./index-
|
|
1
|
+
import{a as e,t}from"./chunk-BNv3lrIs.js";import{M as n,N as r}from"./index-DnkfABxY.js";var i=(function(e,t,n){let i=r(n);if(!e||!e.type||!e.children)throw Error(`Expected parent node`);if(typeof t==`number`){if(t<0||t===1/0)throw Error(`Expected positive finite number as index`)}else if(t=e.children.indexOf(t),t<0)throw Error(`Expected child node or index`);for(;++t<e.children.length;)if(i(e.children[t],t,e))return e.children[t]}),a=(function(e){if(e==null)return l;if(typeof e==`string`)return s(e);if(typeof e==`object`)return o(e);if(typeof e==`function`)return c(e);throw Error("Expected function, string, or array as `test`")});function o(e){let t=[],n=-1;for(;++n<e.length;)t[n]=a(e[n]);return c(r);function r(...e){let n=-1;for(;++n<t.length;)if(t[n].apply(this,e))return!0;return!1}}function s(e){return c(t);function t(t){return t.tagName===e}}function c(e){return t;function t(t,n,r){return!!(u(t)&&e.call(this,t,typeof n==`number`?n:void 0,r||void 0))}}function l(e){return!!(e&&typeof e==`object`&&`type`in e&&e.type===`element`&&`tagName`in e&&typeof e.tagName==`string`)}function u(e){return typeof e==`object`&&!!e&&`type`in e&&`tagName`in e}var d=/\n/g,f=/[\t ]+/g,p=a(`br`),m=a(D),h=a(`p`),g=a(`tr`),_=a([`datalist`,`head`,`noembed`,`noframes`,`noscript`,`rp`,`script`,`style`,`template`,`title`,E,O]),v=a(`address.article.aside.blockquote.body.caption.center.dd.dialog.dir.dl.dt.div.figure.figcaption.footer.form,.h1.h2.h3.h4.h5.h6.header.hgroup.hr.html.legend.li.listing.main.menu.nav.ol.p.plaintext.pre.section.ul.xmp`.split(`.`));function y(e,t){let n=t||{},r=`children`in e?e.children:[],i=v(e),a=T(e,{whitespace:n.whitespace||`normal`,breakBefore:!1,breakAfter:!1}),o=[];(e.type===`text`||e.type===`comment`)&&o.push(...S(e,{whitespace:a,breakBefore:!0,breakAfter:!0}));let s=-1;for(;++s<r.length;)o.push(...b(r[s],e,{whitespace:a,breakBefore:s?void 0:i,breakAfter:s<r.length-1?p(r[s+1]):i}));let c=[],l;for(s=-1;++s<o.length;){let e=o[s];typeof e==`number`?l!==void 0&&e>l&&(l=e):e&&(l!==void 0&&l>-1&&c.push(`
|
|
2
2
|
`.repeat(l)||` `),l=-1,c.push(e))}return c.join(``)}function b(e,t,n){return e.type===`element`?x(e,t,n):e.type===`text`?n.whitespace===`normal`?S(e,n):C(e):[]}function x(e,t,n){let r=T(e,n),a=e.children||[],o=-1,s=[];if(_(e))return s;let c,l;for(p(e)||g(e)&&i(t,e,g)?l=`
|
|
3
3
|
`:h(e)?(c=2,l=2):v(e)&&(c=1,l=1);++o<a.length;)s=s.concat(b(a[o],e,{whitespace:r,breakBefore:o?void 0:c,breakAfter:o<a.length-1?p(a[o+1]):l}));return m(e)&&i(t,e,m)&&s.push(` `),c&&s.unshift(c),l&&s.push(l),s}function S(e,t){let n=String(e.value),r=[],i=[],a=0;for(;a<=n.length;){d.lastIndex=a;let e=d.exec(n),i=e&&`index`in e?e.index:n.length;r.push(w(n.slice(a,i).replace(/[\u061C\u200E\u200F\u202A-\u202E\u2066-\u2069]/g,``),a===0?t.breakBefore:!0,i===n.length?t.breakAfter:!0)),a=i+1}let o=-1,s;for(;++o<r.length;)r[o].charCodeAt(r[o].length-1)===8203||o<r.length-1&&r[o+1].charCodeAt(0)===8203?(i.push(r[o]),s=void 0):r[o]?(typeof s==`number`&&i.push(s),i.push(r[o]),s=0):(o===0||o===r.length-1)&&i.push(0);return i}function C(e){return[String(e.value)]}function w(e,t,n){let r=[],i=0,a;for(;i<e.length;){f.lastIndex=i;let n=f.exec(e);a=n?n.index:e.length,!i&&!a&&n&&!t&&r.push(``),i!==a&&r.push(e.slice(i,a)),i=n?a+n[0].length:a}return i!==a&&!n&&r.push(``),r.join(` `)}function T(e,t){if(e.type===`element`){let n=e.properties||{};switch(e.tagName){case`listing`:case`plaintext`:case`xmp`:return`pre`;case`nobr`:return`nowrap`;case`pre`:return n.wrap?`pre-wrap`:`pre`;case`td`:case`th`:return n.noWrap?`nowrap`:t.whitespace;case`textarea`:return`pre-wrap`;default:}}return t.whitespace}function E(e){return!!(e.properties||{}).hidden}function D(e){return e.tagName===`td`||e.tagName===`th`}function O(e){return e.tagName===`dialog`&&!(e.properties||{}).open}function k(e){let t=e.regex,n=e.COMMENT(`//`,`$`,{contains:[{begin:/\\\n/}]}),r=`decltype\\(auto\\)`,i=`[a-zA-Z_]\\w*::`,a=`(?!struct)(`+r+`|`+t.optional(i)+`[a-zA-Z_]\\w*`+t.optional(`<[^<>]+>`)+`)`,o={className:`type`,begin:`\\b[a-z\\d_]*_t\\b`},s={className:`string`,variants:[{begin:`(u8?|U|L)?"`,end:`"`,illegal:`\\n`,contains:[e.BACKSLASH_ESCAPE]},{begin:`(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)`,end:`'`,illegal:`.`},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},c={className:`number`,variants:[{begin:`[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)`},{begin:`[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)`}],relevance:0},l={className:`meta`,begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:`if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include`},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:`string`}),{className:`string`,begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},u={className:`title`,begin:t.optional(i)+e.IDENT_RE,relevance:0},d=t.optional(i)+e.IDENT_RE+`\\s*\\(`,f=`alignas.alignof.and.and_eq.asm.atomic_cancel.atomic_commit.atomic_noexcept.auto.bitand.bitor.break.case.catch.class.co_await.co_return.co_yield.compl.concept.const_cast|10.consteval.constexpr.constinit.continue.decltype.default.delete.do.dynamic_cast|10.else.enum.explicit.export.extern.false.final.for.friend.goto.if.import.inline.module.mutable.namespace.new.noexcept.not.not_eq.nullptr.operator.or.or_eq.override.private.protected.public.reflexpr.register.reinterpret_cast|10.requires.return.sizeof.static_assert.static_cast|10.struct.switch.synchronized.template.this.thread_local.throw.transaction_safe.transaction_safe_dynamic.true.try.typedef.typeid.typename.union.using.virtual.volatile.while.xor.xor_eq`.split(`.`),p=[`bool`,`char`,`char16_t`,`char32_t`,`char8_t`,`double`,`float`,`int`,`long`,`short`,`void`,`wchar_t`,`unsigned`,`signed`,`const`,`static`],m=`any.auto_ptr.barrier.binary_semaphore.bitset.complex.condition_variable.condition_variable_any.counting_semaphore.deque.false_type.flat_map.flat_set.future.imaginary.initializer_list.istringstream.jthread.latch.lock_guard.multimap.multiset.mutex.optional.ostringstream.packaged_task.pair.promise.priority_queue.queue.recursive_mutex.recursive_timed_mutex.scoped_lock.set.shared_future.shared_lock.shared_mutex.shared_timed_mutex.shared_ptr.stack.string_view.stringstream.timed_mutex.thread.true_type.tuple.unique_lock.unique_ptr.unordered_map.unordered_multimap.unordered_multiset.unordered_set.variant.vector.weak_ptr.wstring.wstring_view`.split(`.`),h=`abort.abs.acos.apply.as_const.asin.atan.atan2.calloc.ceil.cerr.cin.clog.cos.cosh.cout.declval.endl.exchange.exit.exp.fabs.floor.fmod.forward.fprintf.fputs.free.frexp.fscanf.future.invoke.isalnum.isalpha.iscntrl.isdigit.isgraph.islower.isprint.ispunct.isspace.isupper.isxdigit.labs.launder.ldexp.log.log10.make_pair.make_shared.make_shared_for_overwrite.make_tuple.make_unique.malloc.memchr.memcmp.memcpy.memset.modf.move.pow.printf.putchar.puts.realloc.scanf.sin.sinh.snprintf.sprintf.sqrt.sscanf.std.stderr.stdin.stdout.strcat.strchr.strcmp.strcpy.strcspn.strlen.strncat.strncmp.strncpy.strpbrk.strrchr.strspn.strstr.swap.tan.tanh.terminate.to_underlying.tolower.toupper.vfprintf.visit.vprintf.vsprintf`.split(`.`),g={type:p,keyword:f,literal:[`NULL`,`false`,`nullopt`,`nullptr`,`true`],built_in:[`_Pragma`],_type_hints:m},_={className:`function.dispatch`,relevance:0,keywords:{_hint:h},begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))},v=[_,l,o,n,e.C_BLOCK_COMMENT_MODE,c,s],y={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:`new throw return else`,end:/;/}],keywords:g,contains:v.concat([{begin:/\(/,end:/\)/,keywords:g,contains:v.concat([`self`]),relevance:0}]),relevance:0},b={className:`function`,begin:`(`+a+`[\\*&\\s]+)+`+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:g,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:r,keywords:g,relevance:0},{begin:d,returnBegin:!0,contains:[u],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[s,c]},{relevance:0,match:/,/},{className:`params`,begin:/\(/,end:/\)/,keywords:g,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,s,c,o,{begin:/\(/,end:/\)/,keywords:g,relevance:0,contains:[`self`,n,e.C_BLOCK_COMMENT_MODE,s,c,o]}]},o,n,e.C_BLOCK_COMMENT_MODE,l]};return{name:`C++`,aliases:[`cc`,`c++`,`h++`,`hpp`,`hh`,`hxx`,`cxx`],keywords:g,illegal:`</`,classNameAliases:{"function.dispatch":`built_in`},contains:[].concat(y,b,_,v,[l,{begin:`\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\s*<(?!<)`,end:`>`,keywords:g,contains:[`self`,o]},{begin:e.IDENT_RE+`::`,keywords:g},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:`keyword`,3:`title.class`}}])}}function A(e){let t={type:[`boolean`,`byte`,`word`,`String`],built_in:`KeyboardController.MouseController.SoftwareSerial.EthernetServer.EthernetClient.LiquidCrystal.RobotControl.GSMVoiceCall.EthernetUDP.EsploraTFT.HttpClient.RobotMotor.WiFiClient.GSMScanner.FileSystem.Scheduler.GSMServer.YunClient.YunServer.IPAddress.GSMClient.GSMModem.Keyboard.Ethernet.Console.GSMBand.Esplora.Stepper.Process.WiFiUDP.GSM_SMS.Mailbox.USBHost.Firmata.PImage.Client.Server.GSMPIN.FileIO.Bridge.Serial.EEPROM.Stream.Mouse.Audio.Servo.File.Task.GPRS.WiFi.Wire.TFT.GSM.SPI.SD`.split(`.`),_hints:`setup.loop.runShellCommandAsynchronously.analogWriteResolution.retrieveCallingNumber.printFirmwareVersion.analogReadResolution.sendDigitalPortPair.noListenOnLocalhost.readJoystickButton.setFirmwareVersion.readJoystickSwitch.scrollDisplayRight.getVoiceCallStatus.scrollDisplayLeft.writeMicroseconds.delayMicroseconds.beginTransmission.getSignalStrength.runAsynchronously.getAsynchronously.listenOnLocalhost.getCurrentCarrier.readAccelerometer.messageAvailable.sendDigitalPorts.lineFollowConfig.countryNameWrite.runShellCommand.readStringUntil.rewindDirectory.readTemperature.setClockDivider.readLightSensor.endTransmission.analogReference.detachInterrupt.countryNameRead.attachInterrupt.encryptionType.readBytesUntil.robotNameWrite.readMicrophone.robotNameRead.cityNameWrite.userNameWrite.readJoystickY.readJoystickX.mouseReleased.openNextFile.scanNetworks.noInterrupts.digitalWrite.beginSpeaker.mousePressed.isActionDone.mouseDragged.displayLogos.noAutoscroll.addParameter.remoteNumber.getModifiers.keyboardRead.userNameRead.waitContinue.processInput.parseCommand.printVersion.readNetworks.writeMessage.blinkVersion.cityNameRead.readMessage.setDataMode.parsePacket.isListening.setBitOrder.beginPacket.isDirectory.motorsWrite.drawCompass.digitalRead.clearScreen.serialEvent.rightToLeft.setTextSize.leftToRight.requestFrom.keyReleased.compassRead.analogWrite.interrupts.WiFiServer.disconnect.playMelody.parseFloat.autoscroll.getPINUsed.setPINUsed.setTimeout.sendAnalog.readSlider.analogRead.beginWrite.createChar.motorsStop.keyPressed.tempoWrite.readButton.subnetMask.debugPrint.macAddress.writeGreen.randomSeed.attachGPRS.readString.sendString.remotePort.releaseAll.mouseMoved.background.getXChange.getYChange.answerCall.getResult.voiceCall.endPacket.constrain.getSocket.writeJSON.getButton.available.connected.findUntil.readBytes.exitValue.readGreen.writeBlue.startLoop.IPAddress.isPressed.sendSysex.pauseMode.gatewayIP.setCursor.getOemKey.tuneWrite.noDisplay.loadImage.switchPIN.onRequest.onReceive.changePIN.playFile.noBuffer.parseInt.overflow.checkPIN.knobRead.beginTFT.bitClear.updateIR.bitWrite.position.writeRGB.highByte.writeRed.setSpeed.readBlue.noStroke.remoteIP.transfer.shutdown.hangCall.beginSMS.endWrite.attached.maintain.noCursor.checkReg.checkPUK.shiftOut.isValid.shiftIn.pulseIn.connect.println.localIP.pinMode.getIMEI.display.noBlink.process.getBand.running.beginSD.drawBMP.lowByte.setBand.release.bitRead.prepare.pointTo.readRed.setMode.noFill.remove.listen.stroke.detach.attach.noTone.exists.buffer.height.bitSet.circle.config.cursor.random.IRread.setDNS.endSMS.getKey.micros.millis.begin.print.write.ready.flush.width.isPIN.blink.clear.press.mkdir.rmdir.close.point.yield.image.BSSID.click.delay.read.text.move.peek.beep.rect.line.open.seek.fill.size.turn.stop.home.find.step.tone.sqrt.RSSI.SSID.end.bit.tan.cos.sin.pow.map.abs.max.min.get.run.put`.split(`.`),literal:[`DIGITAL_MESSAGE`,`FIRMATA_STRING`,`ANALOG_MESSAGE`,`REPORT_DIGITAL`,`REPORT_ANALOG`,`INPUT_PULLUP`,`SET_PIN_MODE`,`INTERNAL2V56`,`SYSTEM_RESET`,`LED_BUILTIN`,`INTERNAL1V1`,`SYSEX_START`,`INTERNAL`,`EXTERNAL`,`DEFAULT`,`OUTPUT`,`INPUT`,`HIGH`,`LOW`]},n=k(e),r=n.keywords;return r.type=[...r.type,...t.type],r.literal=[...r.literal,...t.literal],r.built_in=[...r.built_in,...t.built_in],r._hints=t._hints,n.name=`Arduino`,n.aliases=[`ino`],n.supersetOf=`cpp`,n}function j(e){let t=e.regex,n={},r={begin:/\$\{/,end:/\}/,contains:[`self`,{begin:/:-/,contains:[n]}]};Object.assign(n,{className:`variable`,variants:[{begin:t.concat(/\$[\w\d#@][\w\d_]*/,`(?![\\w\\d])(?![$])`)},r]});let i={className:`subst`,begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},a=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:`comment`}}),o={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:`string`})]}},s={className:`string`,begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,i]};i.contains.push(s);let c={match:/\\"/},l={className:`string`,begin:/'/,end:/'/},u={match:/\\'/},d={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:`number`},e.NUMBER_MODE,n]},f=e.SHEBANG({binary:`(${[`fish`,`bash`,`zsh`,`sh`,`csh`,`ksh`,`tcsh`,`dash`,`scsh`].join(`|`)})`,relevance:10}),p={className:`function`,begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},m=[`if`,`then`,`else`,`elif`,`fi`,`time`,`for`,`while`,`until`,`in`,`do`,`done`,`case`,`esac`,`coproc`,`function`,`select`],h=[`true`,`false`],g={match:/(\/[a-z._-]+)+/},_=[`break`,`cd`,`continue`,`eval`,`exec`,`exit`,`export`,`getopts`,`hash`,`pwd`,`readonly`,`return`,`shift`,`test`,`times`,`trap`,`umask`,`unset`],v=[`alias`,`bind`,`builtin`,`caller`,`command`,`declare`,`echo`,`enable`,`help`,`let`,`local`,`logout`,`mapfile`,`printf`,`read`,`readarray`,`source`,`sudo`,`type`,`typeset`,`ulimit`,`unalias`],y=`autoload.bg.bindkey.bye.cap.chdir.clone.comparguments.compcall.compctl.compdescribe.compfiles.compgroups.compquote.comptags.comptry.compvalues.dirs.disable.disown.echotc.echoti.emulate.fc.fg.float.functions.getcap.getln.history.integer.jobs.kill.limit.log.noglob.popd.print.pushd.pushln.rehash.sched.setcap.setopt.stat.suspend.ttyctl.unfunction.unhash.unlimit.unsetopt.vared.wait.whence.where.which.zcompile.zformat.zftp.zle.zmodload.zparseopts.zprof.zpty.zregexparse.zsocket.zstyle.ztcp`.split(`.`),b=`chcon.chgrp.chown.chmod.cp.dd.df.dir.dircolors.ln.ls.mkdir.mkfifo.mknod.mktemp.mv.realpath.rm.rmdir.shred.sync.touch.truncate.vdir.b2sum.base32.base64.cat.cksum.comm.csplit.cut.expand.fmt.fold.head.join.md5sum.nl.numfmt.od.paste.ptx.pr.sha1sum.sha224sum.sha256sum.sha384sum.sha512sum.shuf.sort.split.sum.tac.tail.tr.tsort.unexpand.uniq.wc.arch.basename.chroot.date.dirname.du.echo.env.expr.factor.groups.hostid.id.link.logname.nice.nohup.nproc.pathchk.pinky.printenv.printf.pwd.readlink.runcon.seq.sleep.stat.stdbuf.stty.tee.test.timeout.tty.uname.unlink.uptime.users.who.whoami.yes`.split(`.`);return{name:`Bash`,aliases:[`sh`,`zsh`],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:m,literal:h,built_in:[..._,...v,`set`,`shopt`,...y,...b]},contains:[f,e.SHEBANG(),p,d,a,o,g,s,c,l,u,n]}}function M(e){let t=e.regex,n=e.COMMENT(`//`,`$`,{contains:[{begin:/\\\n/}]}),r=`decltype\\(auto\\)`,i=`[a-zA-Z_]\\w*::`,a=`(`+r+`|`+t.optional(i)+`[a-zA-Z_]\\w*`+t.optional(`<[^<>]+>`)+`)`,o={className:`type`,variants:[{begin:`\\b[a-z\\d_]*_t\\b`},{match:/\batomic_[a-z]{3,6}\b/}]},s={className:`string`,variants:[{begin:`(u8?|U|L)?"`,end:`"`,illegal:`\\n`,contains:[e.BACKSLASH_ESCAPE]},{begin:`(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)`,end:`'`,illegal:`.`},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},c={className:`number`,variants:[{match:/\b(0b[01']+)/},{match:/(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/},{match:/(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/},{match:/(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/}],relevance:0},l={className:`meta`,begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:`if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include`},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:`string`}),{className:`string`,begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},u={className:`title`,begin:t.optional(i)+e.IDENT_RE,relevance:0},d=t.optional(i)+e.IDENT_RE+`\\s*\\(`,f={keyword:`asm.auto.break.case.continue.default.do.else.enum.extern.for.fortran.goto.if.inline.register.restrict.return.sizeof.typeof.typeof_unqual.struct.switch.typedef.union.volatile.while._Alignas._Alignof._Atomic._Generic._Noreturn._Static_assert._Thread_local.alignas.alignof.noreturn.static_assert.thread_local._Pragma`.split(`.`),type:`float.double.signed.unsigned.int.short.long.char.void._Bool._BitInt._Complex._Imaginary._Decimal32._Decimal64._Decimal96._Decimal128._Decimal64x._Decimal128x._Float16._Float32._Float64._Float128._Float32x._Float64x._Float128x.const.static.constexpr.complex.bool.imaginary`.split(`.`),literal:`true false NULL`,built_in:`std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr`},p=[l,o,n,e.C_BLOCK_COMMENT_MODE,c,s],m={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:`new throw return else`,end:/;/}],keywords:f,contains:p.concat([{begin:/\(/,end:/\)/,keywords:f,contains:p.concat([`self`]),relevance:0}]),relevance:0},h={begin:`(`+a+`[\\*&\\s]+)+`+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:f,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:r,keywords:f,relevance:0},{begin:d,returnBegin:!0,contains:[e.inherit(u,{className:`title.function`})],relevance:0},{relevance:0,match:/,/},{className:`params`,begin:/\(/,end:/\)/,keywords:f,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,s,c,o,{begin:/\(/,end:/\)/,keywords:f,relevance:0,contains:[`self`,n,e.C_BLOCK_COMMENT_MODE,s,c,o]}]},o,n,e.C_BLOCK_COMMENT_MODE,l]};return{name:`C`,aliases:[`h`],keywords:f,disableAutodetect:!0,illegal:`</`,contains:[].concat(m,h,p,[l,{begin:e.IDENT_RE+`::`,keywords:f},{className:`class`,beginKeywords:`enum class struct union`,end:/[{;:<>=]/,contains:[{beginKeywords:`final class struct`},e.TITLE_MODE]}]),exports:{preprocessor:l,strings:s,keywords:f}}}function N(e){let t=e.regex,n=e.COMMENT(`//`,`$`,{contains:[{begin:/\\\n/}]}),r=`decltype\\(auto\\)`,i=`[a-zA-Z_]\\w*::`,a=`(?!struct)(`+r+`|`+t.optional(i)+`[a-zA-Z_]\\w*`+t.optional(`<[^<>]+>`)+`)`,o={className:`type`,begin:`\\b[a-z\\d_]*_t\\b`},s={className:`string`,variants:[{begin:`(u8?|U|L)?"`,end:`"`,illegal:`\\n`,contains:[e.BACKSLASH_ESCAPE]},{begin:`(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)`,end:`'`,illegal:`.`},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},c={className:`number`,variants:[{begin:`[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)`},{begin:`[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)`}],relevance:0},l={className:`meta`,begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:`if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include`},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:`string`}),{className:`string`,begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},u={className:`title`,begin:t.optional(i)+e.IDENT_RE,relevance:0},d=t.optional(i)+e.IDENT_RE+`\\s*\\(`,f=`alignas.alignof.and.and_eq.asm.atomic_cancel.atomic_commit.atomic_noexcept.auto.bitand.bitor.break.case.catch.class.co_await.co_return.co_yield.compl.concept.const_cast|10.consteval.constexpr.constinit.continue.decltype.default.delete.do.dynamic_cast|10.else.enum.explicit.export.extern.false.final.for.friend.goto.if.import.inline.module.mutable.namespace.new.noexcept.not.not_eq.nullptr.operator.or.or_eq.override.private.protected.public.reflexpr.register.reinterpret_cast|10.requires.return.sizeof.static_assert.static_cast|10.struct.switch.synchronized.template.this.thread_local.throw.transaction_safe.transaction_safe_dynamic.true.try.typedef.typeid.typename.union.using.virtual.volatile.while.xor.xor_eq`.split(`.`),p=[`bool`,`char`,`char16_t`,`char32_t`,`char8_t`,`double`,`float`,`int`,`long`,`short`,`void`,`wchar_t`,`unsigned`,`signed`,`const`,`static`],m=`any.auto_ptr.barrier.binary_semaphore.bitset.complex.condition_variable.condition_variable_any.counting_semaphore.deque.false_type.flat_map.flat_set.future.imaginary.initializer_list.istringstream.jthread.latch.lock_guard.multimap.multiset.mutex.optional.ostringstream.packaged_task.pair.promise.priority_queue.queue.recursive_mutex.recursive_timed_mutex.scoped_lock.set.shared_future.shared_lock.shared_mutex.shared_timed_mutex.shared_ptr.stack.string_view.stringstream.timed_mutex.thread.true_type.tuple.unique_lock.unique_ptr.unordered_map.unordered_multimap.unordered_multiset.unordered_set.variant.vector.weak_ptr.wstring.wstring_view`.split(`.`),h=`abort.abs.acos.apply.as_const.asin.atan.atan2.calloc.ceil.cerr.cin.clog.cos.cosh.cout.declval.endl.exchange.exit.exp.fabs.floor.fmod.forward.fprintf.fputs.free.frexp.fscanf.future.invoke.isalnum.isalpha.iscntrl.isdigit.isgraph.islower.isprint.ispunct.isspace.isupper.isxdigit.labs.launder.ldexp.log.log10.make_pair.make_shared.make_shared_for_overwrite.make_tuple.make_unique.malloc.memchr.memcmp.memcpy.memset.modf.move.pow.printf.putchar.puts.realloc.scanf.sin.sinh.snprintf.sprintf.sqrt.sscanf.std.stderr.stdin.stdout.strcat.strchr.strcmp.strcpy.strcspn.strlen.strncat.strncmp.strncpy.strpbrk.strrchr.strspn.strstr.swap.tan.tanh.terminate.to_underlying.tolower.toupper.vfprintf.visit.vprintf.vsprintf`.split(`.`),g={type:p,keyword:f,literal:[`NULL`,`false`,`nullopt`,`nullptr`,`true`],built_in:[`_Pragma`],_type_hints:m},_={className:`function.dispatch`,relevance:0,keywords:{_hint:h},begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))},v=[_,l,o,n,e.C_BLOCK_COMMENT_MODE,c,s],y={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:`new throw return else`,end:/;/}],keywords:g,contains:v.concat([{begin:/\(/,end:/\)/,keywords:g,contains:v.concat([`self`]),relevance:0}]),relevance:0},b={className:`function`,begin:`(`+a+`[\\*&\\s]+)+`+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:g,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:r,keywords:g,relevance:0},{begin:d,returnBegin:!0,contains:[u],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[s,c]},{relevance:0,match:/,/},{className:`params`,begin:/\(/,end:/\)/,keywords:g,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,s,c,o,{begin:/\(/,end:/\)/,keywords:g,relevance:0,contains:[`self`,n,e.C_BLOCK_COMMENT_MODE,s,c,o]}]},o,n,e.C_BLOCK_COMMENT_MODE,l]};return{name:`C++`,aliases:[`cc`,`c++`,`h++`,`hpp`,`hh`,`hxx`,`cxx`],keywords:g,illegal:`</`,classNameAliases:{"function.dispatch":`built_in`},contains:[].concat(y,b,_,v,[l,{begin:`\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\s*<(?!<)`,end:`>`,keywords:g,contains:[`self`,o]},{begin:e.IDENT_RE+`::`,keywords:g},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:`keyword`,3:`title.class`}}])}}function P(e){let t=[`bool`,`byte`,`char`,`decimal`,`delegate`,`double`,`dynamic`,`enum`,`float`,`int`,`long`,`nint`,`nuint`,`object`,`sbyte`,`short`,`string`,`ulong`,`uint`,`ushort`],n=[`public`,`private`,`protected`,`static`,`internal`,`protected`,`abstract`,`async`,`extern`,`override`,`unsafe`,`virtual`,`new`,`sealed`,`partial`],r={keyword:`abstract.as.base.break.case.catch.class.const.continue.do.else.event.explicit.extern.finally.fixed.for.foreach.goto.if.implicit.in.interface.internal.is.lock.namespace.new.operator.out.override.params.private.protected.public.readonly.record.ref.return.scoped.sealed.sizeof.stackalloc.static.struct.switch.this.throw.try.typeof.unchecked.unsafe.using.virtual.void.volatile.while`.split(`.`).concat(`add.alias.and.ascending.args.async.await.by.descending.dynamic.equals.file.from.get.global.group.init.into.join.let.nameof.not.notnull.on.or.orderby.partial.record.remove.required.scoped.select.set.unmanaged.value|0.var.when.where.with.yield`.split(`.`)),built_in:t,literal:[`default`,`false`,`null`,`true`]},i=e.inherit(e.TITLE_MODE,{begin:`[a-zA-Z](\\.?\\w)*`}),a={className:`number`,variants:[{begin:`\\b(0b[01']+)`},{begin:`(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)`},{begin:`(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)`}],relevance:0},o={className:`string`,begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1},s={className:`string`,begin:`@"`,end:`"`,contains:[{begin:`""`}]},c=e.inherit(s,{illegal:/\n/}),l={className:`subst`,begin:/\{/,end:/\}/,keywords:r},u=e.inherit(l,{illegal:/\n/}),d={className:`string`,begin:/\$"/,end:`"`,illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},e.BACKSLASH_ESCAPE,u]},f={className:`string`,begin:/\$@"/,end:`"`,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:`""`},l]},p=e.inherit(f,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:`""`},u]});l.contains=[f,d,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],u.contains=[p,d,c,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];let m={variants:[o,f,d,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},h={begin:`<`,end:`>`,contains:[{beginKeywords:`in out`},i]},g=e.IDENT_RE+`(<`+e.IDENT_RE+`(\\s*,\\s*`+e.IDENT_RE+`)*>)?(\\[\\])?`,_={begin:`@`+e.IDENT_RE,relevance:0};return{name:`C#`,aliases:[`cs`,`c#`],keywords:r,illegal:/::/,contains:[e.COMMENT(`///`,`$`,{returnBegin:!0,contains:[{className:`doctag`,variants:[{begin:`///`,relevance:0},{begin:`<!--|-->`},{begin:`</?`,end:`>`}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:`meta`,begin:`#`,end:`$`,keywords:{keyword:`if else elif endif define undef warning error line region endregion pragma checksum`}},m,a,{beginKeywords:`class interface`,relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:`where class`},i,h,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:`namespace`,relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:`record`,relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[i,h,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:`meta`,begin:`^\\s*\\[(?=[\\w])`,excludeBegin:!0,end:`\\]`,excludeEnd:!0,contains:[{className:`string`,begin:/"/,end:/"/}]},{beginKeywords:`new return throw await else`,relevance:0},{className:`function`,begin:`(`+g+`\\s+)+`+e.IDENT_RE+`\\s*(<[^=]+>\\s*)?\\(`,returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:r,contains:[{beginKeywords:n.join(` `),relevance:0},{begin:e.IDENT_RE+`\\s*(<[^=]+>\\s*)?\\(`,returnBegin:!0,contains:[e.TITLE_MODE,h],relevance:0},{match:/\(\)/},{className:`params`,begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:r,relevance:0,contains:[m,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},_]}}var F=e=>({IMPORTANT:{scope:`meta`,begin:`!important`},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:`number`,begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:`built_in`,begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:`selector-attr`,begin:/\[/,end:/\]/,illegal:`$`,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:`number`,begin:e.NUMBER_RE+`(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?`,relevance:0},CSS_VARIABLE:{className:`attr`,begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),I=`a.abbr.address.article.aside.audio.b.blockquote.body.button.canvas.caption.cite.code.dd.del.details.dfn.div.dl.dt.em.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hgroup.html.i.iframe.img.input.ins.kbd.label.legend.li.main.mark.menu.nav.object.ol.optgroup.option.p.picture.q.quote.samp.section.select.source.span.strong.summary.sup.table.tbody.td.textarea.tfoot.th.thead.time.tr.ul.var.video`.split(`.`),L=`defs.g.marker.mask.pattern.svg.switch.symbol.feBlend.feColorMatrix.feComponentTransfer.feComposite.feConvolveMatrix.feDiffuseLighting.feDisplacementMap.feFlood.feGaussianBlur.feImage.feMerge.feMorphology.feOffset.feSpecularLighting.feTile.feTurbulence.linearGradient.radialGradient.stop.circle.ellipse.image.line.path.polygon.polyline.rect.text.use.textPath.tspan.foreignObject.clipPath`.split(`.`),R=[...I,...L],z=`any-hover.any-pointer.aspect-ratio.color.color-gamut.color-index.device-aspect-ratio.device-height.device-width.display-mode.forced-colors.grid.height.hover.inverted-colors.monochrome.orientation.overflow-block.overflow-inline.pointer.prefers-color-scheme.prefers-contrast.prefers-reduced-motion.prefers-reduced-transparency.resolution.scan.scripting.update.width.min-width.max-width.min-height.max-height`.split(`.`).sort().reverse(),ee=`active.any-link.blank.checked.current.default.defined.dir.disabled.drop.empty.enabled.first.first-child.first-of-type.fullscreen.future.focus.focus-visible.focus-within.has.host.host-context.hover.indeterminate.in-range.invalid.is.lang.last-child.last-of-type.left.link.local-link.not.nth-child.nth-col.nth-last-child.nth-last-col.nth-last-of-type.nth-of-type.only-child.only-of-type.optional.out-of-range.past.placeholder-shown.read-only.read-write.required.right.root.scope.target.target-within.user-invalid.valid.visited.where`.split(`.`).sort().reverse(),te=[`after`,`backdrop`,`before`,`cue`,`cue-region`,`first-letter`,`first-line`,`grammar-error`,`marker`,`part`,`placeholder`,`selection`,`slotted`,`spelling-error`].sort().reverse(),ne=`accent-color.align-content.align-items.align-self.alignment-baseline.all.anchor-name.animation.animation-composition.animation-delay.animation-direction.animation-duration.animation-fill-mode.animation-iteration-count.animation-name.animation-play-state.animation-range.animation-range-end.animation-range-start.animation-timeline.animation-timing-function.appearance.aspect-ratio.backdrop-filter.backface-visibility.background.background-attachment.background-blend-mode.background-clip.background-color.background-image.background-origin.background-position.background-position-x.background-position-y.background-repeat.background-size.baseline-shift.block-size.border.border-block.border-block-color.border-block-end.border-block-end-color.border-block-end-style.border-block-end-width.border-block-start.border-block-start-color.border-block-start-style.border-block-start-width.border-block-style.border-block-width.border-bottom.border-bottom-color.border-bottom-left-radius.border-bottom-right-radius.border-bottom-style.border-bottom-width.border-collapse.border-color.border-end-end-radius.border-end-start-radius.border-image.border-image-outset.border-image-repeat.border-image-slice.border-image-source.border-image-width.border-inline.border-inline-color.border-inline-end.border-inline-end-color.border-inline-end-style.border-inline-end-width.border-inline-start.border-inline-start-color.border-inline-start-style.border-inline-start-width.border-inline-style.border-inline-width.border-left.border-left-color.border-left-style.border-left-width.border-radius.border-right.border-right-color.border-right-style.border-right-width.border-spacing.border-start-end-radius.border-start-start-radius.border-style.border-top.border-top-color.border-top-left-radius.border-top-right-radius.border-top-style.border-top-width.border-width.bottom.box-align.box-decoration-break.box-direction.box-flex.box-flex-group.box-lines.box-ordinal-group.box-orient.box-pack.box-shadow.box-sizing.break-after.break-before.break-inside.caption-side.caret-color.clear.clip.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.color-scheme.column-count.column-fill.column-gap.column-rule.column-rule-color.column-rule-style.column-rule-width.column-span.column-width.columns.contain.contain-intrinsic-block-size.contain-intrinsic-height.contain-intrinsic-inline-size.contain-intrinsic-size.contain-intrinsic-width.container.container-name.container-type.content.content-visibility.counter-increment.counter-reset.counter-set.cue.cue-after.cue-before.cursor.cx.cy.direction.display.dominant-baseline.empty-cells.enable-background.field-sizing.fill.fill-opacity.fill-rule.filter.flex.flex-basis.flex-direction.flex-flow.flex-grow.flex-shrink.flex-wrap.float.flood-color.flood-opacity.flow.font.font-display.font-family.font-feature-settings.font-kerning.font-language-override.font-optical-sizing.font-palette.font-size.font-size-adjust.font-smooth.font-smoothing.font-stretch.font-style.font-synthesis.font-synthesis-position.font-synthesis-small-caps.font-synthesis-style.font-synthesis-weight.font-variant.font-variant-alternates.font-variant-caps.font-variant-east-asian.font-variant-emoji.font-variant-ligatures.font-variant-numeric.font-variant-position.font-variation-settings.font-weight.forced-color-adjust.gap.glyph-orientation-horizontal.glyph-orientation-vertical.grid.grid-area.grid-auto-columns.grid-auto-flow.grid-auto-rows.grid-column.grid-column-end.grid-column-start.grid-gap.grid-row.grid-row-end.grid-row-start.grid-template.grid-template-areas.grid-template-columns.grid-template-rows.hanging-punctuation.height.hyphenate-character.hyphenate-limit-chars.hyphens.icon.image-orientation.image-rendering.image-resolution.ime-mode.initial-letter.initial-letter-align.inline-size.inset.inset-area.inset-block.inset-block-end.inset-block-start.inset-inline.inset-inline-end.inset-inline-start.isolation.justify-content.justify-items.justify-self.kerning.left.letter-spacing.lighting-color.line-break.line-height.line-height-step.list-style.list-style-image.list-style-position.list-style-type.margin.margin-block.margin-block-end.margin-block-start.margin-bottom.margin-inline.margin-inline-end.margin-inline-start.margin-left.margin-right.margin-top.margin-trim.marker.marker-end.marker-mid.marker-start.marks.mask.mask-border.mask-border-mode.mask-border-outset.mask-border-repeat.mask-border-slice.mask-border-source.mask-border-width.mask-clip.mask-composite.mask-image.mask-mode.mask-origin.mask-position.mask-repeat.mask-size.mask-type.masonry-auto-flow.math-depth.math-shift.math-style.max-block-size.max-height.max-inline-size.max-width.min-block-size.min-height.min-inline-size.min-width.mix-blend-mode.nav-down.nav-index.nav-left.nav-right.nav-up.none.normal.object-fit.object-position.offset.offset-anchor.offset-distance.offset-path.offset-position.offset-rotate.opacity.order.orphans.outline.outline-color.outline-offset.outline-style.outline-width.overflow.overflow-anchor.overflow-block.overflow-clip-margin.overflow-inline.overflow-wrap.overflow-x.overflow-y.overlay.overscroll-behavior.overscroll-behavior-block.overscroll-behavior-inline.overscroll-behavior-x.overscroll-behavior-y.padding.padding-block.padding-block-end.padding-block-start.padding-bottom.padding-inline.padding-inline-end.padding-inline-start.padding-left.padding-right.padding-top.page.page-break-after.page-break-before.page-break-inside.paint-order.pause.pause-after.pause-before.perspective.perspective-origin.place-content.place-items.place-self.pointer-events.position.position-anchor.position-visibility.print-color-adjust.quotes.r.resize.rest.rest-after.rest-before.right.rotate.row-gap.ruby-align.ruby-position.scale.scroll-behavior.scroll-margin.scroll-margin-block.scroll-margin-block-end.scroll-margin-block-start.scroll-margin-bottom.scroll-margin-inline.scroll-margin-inline-end.scroll-margin-inline-start.scroll-margin-left.scroll-margin-right.scroll-margin-top.scroll-padding.scroll-padding-block.scroll-padding-block-end.scroll-padding-block-start.scroll-padding-bottom.scroll-padding-inline.scroll-padding-inline-end.scroll-padding-inline-start.scroll-padding-left.scroll-padding-right.scroll-padding-top.scroll-snap-align.scroll-snap-stop.scroll-snap-type.scroll-timeline.scroll-timeline-axis.scroll-timeline-name.scrollbar-color.scrollbar-gutter.scrollbar-width.shape-image-threshold.shape-margin.shape-outside.shape-rendering.speak.speak-as.src.stop-color.stop-opacity.stroke.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke-width.tab-size.table-layout.text-align.text-align-all.text-align-last.text-anchor.text-combine-upright.text-decoration.text-decoration-color.text-decoration-line.text-decoration-skip.text-decoration-skip-ink.text-decoration-style.text-decoration-thickness.text-emphasis.text-emphasis-color.text-emphasis-position.text-emphasis-style.text-indent.text-justify.text-orientation.text-overflow.text-rendering.text-shadow.text-size-adjust.text-transform.text-underline-offset.text-underline-position.text-wrap.text-wrap-mode.text-wrap-style.timeline-scope.top.touch-action.transform.transform-box.transform-origin.transform-style.transition.transition-behavior.transition-delay.transition-duration.transition-property.transition-timing-function.translate.unicode-bidi.user-modify.user-select.vector-effect.vertical-align.view-timeline.view-timeline-axis.view-timeline-inset.view-timeline-name.view-transition-name.visibility.voice-balance.voice-duration.voice-family.voice-pitch.voice-range.voice-rate.voice-stress.voice-volume.white-space.white-space-collapse.widows.width.will-change.word-break.word-spacing.word-wrap.writing-mode.x.y.z-index.zoom`.split(`.`).sort().reverse();function re(e){let t=e.regex,n=F(e),r={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},i=/@-?\w[\w]*(-\w+)*/,a=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:`CSS`,case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:`from to`},classNameAliases:{keyframePosition:`selector-tag`},contains:[n.BLOCK_COMMENT,r,n.CSS_NUMBER_MODE,{className:`selector-id`,begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:`selector-class`,begin:`\\.[a-zA-Z-][a-zA-Z0-9_-]*`,relevance:0},n.ATTRIBUTE_SELECTOR_MODE,{className:`selector-pseudo`,variants:[{begin:`:(`+ee.join(`|`)+`)`},{begin:`:(:)?(`+te.join(`|`)+`)`}]},n.CSS_VARIABLE,{className:`attribute`,begin:`\\b(`+ne.join(`|`)+`)\\b`},{begin:/:/,end:/[;}{]/,contains:[n.BLOCK_COMMENT,n.HEXCOLOR,n.IMPORTANT,n.CSS_NUMBER_MODE,...a,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:`url data-uri`},contains:[...a,{className:`string`,begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},n.FUNCTION_DISPATCH]},{begin:t.lookahead(/@/),end:`[{;]`,relevance:0,illegal:/:/,contains:[{className:`keyword`,begin:i},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:`and or not only`,attribute:z.join(` `)},contains:[{begin:/[a-z-]+(?=:)/,className:`attribute`},...a,n.CSS_NUMBER_MODE]}]},{className:`selector-tag`,begin:`\\b(`+R.join(`|`)+`)\\b`}]}}function ie(e){let t=e.regex;return{name:`Diff`,aliases:[`patch`],contains:[{className:`meta`,relevance:10,match:t.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:`comment`,variants:[{begin:t.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:`addition`,begin:/^\+/,end:/$/},{className:`deletion`,begin:/^-/,end:/$/},{className:`addition`,begin:/^!/,end:/$/}]}}function ae(e){let t={keyword:[`break`,`case`,`chan`,`const`,`continue`,`default`,`defer`,`else`,`fallthrough`,`for`,`func`,`go`,`goto`,`if`,`import`,`interface`,`map`,`package`,`range`,`return`,`select`,`struct`,`switch`,`type`,`var`],type:[`bool`,`byte`,`complex64`,`complex128`,`error`,`float32`,`float64`,`int8`,`int16`,`int32`,`int64`,`string`,`uint8`,`uint16`,`uint32`,`uint64`,`int`,`uint`,`uintptr`,`rune`],literal:[`true`,`false`,`iota`,`nil`],built_in:[`append`,`cap`,`close`,`complex`,`copy`,`imag`,`len`,`make`,`new`,`panic`,`print`,`println`,`real`,`recover`,`delete`]};return{name:`Go`,aliases:[`golang`],keywords:t,illegal:`</`,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:`string`,variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:`number`,variants:[{match:/-?\b0[xX]\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\d(_?\d)*i?/,relevance:0},{match:/-?\b0[xX](_?[a-fA-F0-9])+((\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b0[oO](_?[0-7])*i?/,relevance:0},{match:/-?\.\d(_?\d)*([eE][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b\d(_?\d)*(\.(\d(_?\d)*)?)?([eE][+-]?\d(_?\d)*)?i?/,relevance:0}]},{begin:/:=/},{className:`function`,beginKeywords:`func`,end:`\\s*(\\{|$)`,excludeEnd:!0,contains:[e.TITLE_MODE,{className:`params`,begin:/\(/,end:/\)/,endsParent:!0,keywords:t,illegal:/["']/}]}]}}function oe(e){let t=e.regex;return{name:`GraphQL`,aliases:[`gql`],case_insensitive:!0,disableAutodetect:!1,keywords:{keyword:[`query`,`mutation`,`subscription`,`type`,`input`,`schema`,`directive`,`interface`,`union`,`scalar`,`fragment`,`enum`,`on`],literal:[`true`,`false`,`null`]},contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{scope:`punctuation`,match:/[.]{3}/,relevance:0},{scope:`punctuation`,begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:`variable`,begin:/\$/,end:/\W/,excludeEnd:!0,relevance:0},{scope:`meta`,match:/@\w+/,excludeEnd:!0},{scope:`symbol`,begin:t.concat(/[_A-Za-z][_0-9A-Za-z]*/,t.lookahead(/\s*:/)),relevance:0}],illegal:[/[;<']/,/BEGIN/]}}function B(e){let t=e.regex,n={className:`number`,relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]},r=e.COMMENT();r.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];let i={className:`variable`,variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},a={className:`literal`,begin:/\bon|off|true|false|yes|no\b/},o={className:`string`,contains:[e.BACKSLASH_ESCAPE],variants:[{begin:`'''`,end:`'''`,relevance:10},{begin:`"""`,end:`"""`,relevance:10},{begin:`"`,end:`"`},{begin:`'`,end:`'`}]},s={begin:/\[/,end:/\]/,contains:[r,a,i,o,n,`self`],relevance:0},c=t.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{name:`TOML, also INI`,aliases:[`toml`],case_insensitive:!0,illegal:/\S/,contains:[r,{className:`section`,begin:/\[+/,end:/\]+/},{begin:t.concat(c,`(\\s*\\.\\s*`,c,`)*`,t.lookahead(/\s*=\s*[^#\s]/)),className:`attr`,starts:{end:/$/,contains:[r,s,a,i,o,n]}}]}}var V=`[0-9](_*[0-9])*`,H=`\\.(${V})`,U=`[0-9a-fA-F](_*[0-9a-fA-F])*`,se={className:`number`,variants:[{begin:`(\\b(${V})((${H})|\\.)?|(${H}))[eE][+-]?(${V})[fFdD]?\\b`},{begin:`\\b(${V})((${H})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${H})[fFdD]?\\b`},{begin:`\\b(${V})[fFdD]\\b`},{begin:`\\b0[xX]((${U})\\.?|(${U})?\\.(${U}))[pP][+-]?(${V})[fFdD]?\\b`},{begin:`\\b(0|[1-9](_*[0-9])*)[lL]?\\b`},{begin:`\\b0[xX](${U})[lL]?\\b`},{begin:`\\b0(_*[0-7])*[lL]?\\b`},{begin:`\\b0[bB][01](_*[01])*[lL]?\\b`}],relevance:0};function ce(e,t,n){return n===-1?``:e.replace(t,r=>ce(e,t,n-1))}function le(e){let t=e.regex,n=`[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*`,r=n+ce(`(?:<`+n+`~~~(?:\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*~~~)*>)?`,/~~~/g,2),i={keyword:`synchronized.abstract.private.var.static.if.const .for.while.strictfp.finally.protected.import.native.final.void.enum.else.break.transient.catch.instanceof.volatile.case.assert.package.default.public.try.switch.continue.throws.protected.public.private.module.requires.exports.do.sealed.yield.permits.goto.when`.split(`.`),literal:[`false`,`true`,`null`],type:[`char`,`boolean`,`long`,`float`,`int`,`byte`,`short`,`double`],built_in:[`super`,`this`]},a={className:`meta`,begin:`@`+n,contains:[{begin:/\(/,end:/\)/,contains:[`self`]}]},o={className:`params`,begin:/\(/,end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:`Java`,aliases:[`jsp`],keywords:i,illegal:/<\/|#/,contains:[e.COMMENT(`/\\*\\*`,`\\*/`,{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:`doctag`,begin:`@[A-Za-z]+`}]}),{begin:/import java\.[a-z]+\./,keywords:`import`,relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:`string`,contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,n],className:{1:`keyword`,3:`title.class`}},{match:/non-sealed/,scope:`keyword`},{begin:[t.concat(/(?!else)/,n),/\s+/,n,/\s+/,/=(?!=)/],className:{1:`type`,3:`variable`,5:`operator`}},{begin:[/record/,/\s+/,n],className:{1:`keyword`,3:`title.class`},contains:[o,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:`new throw return else`,relevance:0},{begin:[`(?:`+r+`\\s+)`,e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:`title.function`},keywords:i,contains:[{className:`params`,begin:/\(/,end:/\)/,keywords:i,relevance:0,contains:[a,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,se,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},se,a]}}var ue=`[A-Za-z$_][0-9A-Za-z$_]*`,de=`as.in.of.if.for.while.finally.var.new.function.do.return.void.else.break.catch.instanceof.with.throw.case.default.try.switch.continue.typeof.delete.let.yield.const.class.debugger.async.await.static.import.from.export.extends.using`.split(`.`),fe=[`true`,`false`,`null`,`undefined`,`NaN`,`Infinity`],pe=`Object.Function.Boolean.Symbol.Math.Date.Number.BigInt.String.RegExp.Array.Float32Array.Float64Array.Int8Array.Uint8Array.Uint8ClampedArray.Int16Array.Int32Array.Uint16Array.Uint32Array.BigInt64Array.BigUint64Array.Set.Map.WeakSet.WeakMap.ArrayBuffer.SharedArrayBuffer.Atomics.DataView.JSON.Promise.Generator.GeneratorFunction.AsyncFunction.Reflect.Proxy.Intl.WebAssembly`.split(`.`),me=[`Error`,`EvalError`,`InternalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`],he=[`setInterval`,`setTimeout`,`clearInterval`,`clearTimeout`,`require`,`exports`,`eval`,`isFinite`,`isNaN`,`parseFloat`,`parseInt`,`decodeURI`,`decodeURIComponent`,`encodeURI`,`encodeURIComponent`,`escape`,`unescape`],ge=[`arguments`,`this`,`super`,`console`,`window`,`document`,`localStorage`,`sessionStorage`,`module`,`global`],W=[].concat(he,pe,me);function _e(e){let t=e.regex,n=(e,{after:t})=>{let n=`</`+e[0].slice(1);return e.input.indexOf(n,t)!==-1},r=ue,i={begin:`<>`,end:`</>`},a=/<[A-Za-z0-9\\._:-]+\s*\/>/,o={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,t)=>{let r=e[0].length+e.index,i=e.input[r];if(i===`<`||i===`,`){t.ignoreMatch();return}i===`>`&&(n(e,{after:r})||t.ignoreMatch());let a,o=e.input.substring(r);if(a=o.match(/^\s*=/)){t.ignoreMatch();return}if((a=o.match(/^\s+extends\s+/))&&a.index===0){t.ignoreMatch();return}}},s={$pattern:ue,keyword:de,literal:fe,built_in:W,"variable.language":ge},c=`[0-9](_?[0-9])*`,l=`\\.(${c})`,u=`0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`,d={className:`number`,variants:[{begin:`(\\b(${u})((${l})|\\.)?|(${l}))[eE][+-]?(${c})\\b`},{begin:`\\b(${u})\\b((${l})\\b|\\.)?|(${l})\\b`},{begin:`\\b(0|[1-9](_?[0-9])*)n\\b`},{begin:`\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b`},{begin:`\\b0[bB][0-1](_?[0-1])*n?\\b`},{begin:`\\b0[oO][0-7](_?[0-7])*n?\\b`},{begin:`\\b0[0-7]+n?\\b`}],relevance:0},f={className:`subst`,begin:`\\$\\{`,end:`\\}`,keywords:s,contains:[]},p={begin:".?html`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,f],subLanguage:`xml`}},m={begin:".?css`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,f],subLanguage:`css`}},h={begin:".?gql`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,f],subLanguage:`graphql`}},g={className:`string`,begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,f]},_={className:`comment`,variants:[e.COMMENT(/\/\*\*(?!\/)/,`\\*/`,{relevance:0,contains:[{begin:`(?=@[A-Za-z]+)`,relevance:0,contains:[{className:`doctag`,begin:`@[A-Za-z]+`},{className:`type`,begin:`\\{`,end:`\\}`,excludeEnd:!0,excludeBegin:!0,relevance:0},{className:`variable`,begin:r+`(?=\\s*(-)|$)`,endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},v=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,m,h,g,{match:/\$\d+/},d];f.contains=v.concat({begin:/\{/,end:/\}/,keywords:s,contains:[`self`].concat(v)});let y=[].concat(_,f.contains),b=y.concat([{begin:/(\s*)\(/,end:/\)/,keywords:s,contains:[`self`].concat(y)}]),x={className:`params`,begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:b},S={variants:[{match:[/class/,/\s+/,r,/\s+/,/extends/,/\s+/,t.concat(r,`(`,t.concat(/\./,r),`)*`)],scope:{1:`keyword`,3:`title.class`,5:`keyword`,7:`title.class.inherited`}},{match:[/class/,/\s+/,r],scope:{1:`keyword`,3:`title.class`}}]},C={relevance:0,match:t.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:`title.class`,keywords:{_:[...pe,...me]}},w={label:`use_strict`,className:`meta`,relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},T={variants:[{match:[/function/,/\s+/,r,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:`keyword`,3:`title.function`},label:`func.def`,contains:[x],illegal:/%/},E={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:`variable.constant`};function D(e){return t.concat(`(?!`,e.join(`|`),`)`)}let O={match:t.concat(/\b/,D([...he,`super`,`import`].map(e=>`${e}\\s*\\(`)),r,t.lookahead(/\s*\(/)),className:`title.function`,relevance:0},k={begin:t.concat(/\./,t.lookahead(t.concat(r,/(?![0-9A-Za-z$_(])/))),end:r,excludeBegin:!0,keywords:`prototype`,className:`property`,relevance:0},A={match:[/get|set/,/\s+/,r,/(?=\()/],className:{1:`keyword`,3:`title.function`},contains:[{begin:/\(\)/},x]},j=`(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|`+e.UNDERSCORE_IDENT_RE+`)\\s*=>`,M={match:[/const|var|let/,/\s+/,r,/\s*/,/=\s*/,/(async\s*)?/,t.lookahead(j)],keywords:`async`,className:{1:`keyword`,3:`title.function`},contains:[x]};return{name:`JavaScript`,aliases:[`js`,`jsx`,`mjs`,`cjs`],keywords:s,exports:{PARAMS_CONTAINS:b,CLASS_REFERENCE:C},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:`shebang`,binary:`node`,relevance:5}),w,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,m,h,g,_,{match:/\$\d+/},d,C,{scope:`attr`,match:r+t.lookahead(`:`),relevance:0},M,{begin:`(`+e.RE_STARTERS_RE+`|\\b(case|return|throw)\\b)\\s*`,keywords:`return throw case`,relevance:0,contains:[_,e.REGEXP_MODE,{className:`function`,begin:j,returnBegin:!0,end:`\\s*=>`,contains:[{className:`params`,variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:b}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:i.begin,end:i.end},{match:a},{begin:o.begin,"on:begin":o.isTrulyOpeningTag,end:o.end}],subLanguage:`xml`,contains:[{begin:o.begin,end:o.end,skip:!0,contains:[`self`]}]}]},T,{beginKeywords:`while if switch catch for`},{begin:`\\b(?!function)`+e.UNDERSCORE_IDENT_RE+`\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{`,returnBegin:!0,label:`func.def`,contains:[x,e.inherit(e.TITLE_MODE,{begin:r,className:`title.function`})]},{match:/\.\.\./,relevance:0},k,{match:`\\$`+r,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:`title.function`},contains:[x]},O,E,S,A,{match:/\$[(.]/}]}}function G(e){let t={className:`attr`,begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},n={match:/[{}[\],:]/,className:`punctuation`,relevance:0},r=[`true`,`false`,`null`],i={scope:`literal`,beginKeywords:r.join(` `)};return{name:`JSON`,aliases:[`jsonc`],keywords:{literal:r},contains:[t,n,e.QUOTE_STRING_MODE,i,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:`\\S`}}var K=`[0-9](_*[0-9])*`,q=`\\.(${K})`,J=`[0-9a-fA-F](_*[0-9a-fA-F])*`,ve={className:`number`,variants:[{begin:`(\\b(${K})((${q})|\\.)?|(${q}))[eE][+-]?(${K})[fFdD]?\\b`},{begin:`\\b(${K})((${q})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${q})[fFdD]?\\b`},{begin:`\\b(${K})[fFdD]\\b`},{begin:`\\b0[xX]((${J})\\.?|(${J})?\\.(${J}))[pP][+-]?(${K})[fFdD]?\\b`},{begin:`\\b(0|[1-9](_*[0-9])*)[lL]?\\b`},{begin:`\\b0[xX](${J})[lL]?\\b`},{begin:`\\b0(_*[0-7])*[lL]?\\b`},{begin:`\\b0[bB][01](_*[01])*[lL]?\\b`}],relevance:0};function ye(e){let t={keyword:`abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual`,built_in:`Byte Short Char Int Long Boolean Float Double Void Unit Nothing`,literal:`true false null`},n={className:`keyword`,begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:`symbol`,begin:/@\w+/}]}},r={className:`symbol`,begin:e.UNDERSCORE_IDENT_RE+`@`},i={className:`subst`,begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},a={className:`variable`,begin:`\\$`+e.UNDERSCORE_IDENT_RE},o={className:`string`,variants:[{begin:`"""`,end:`"""(?=[^"])`,contains:[a,i]},{begin:`'`,end:`'`,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:`"`,end:`"`,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,a,i]}]};i.contains.push(o);let s={className:`meta`,begin:`@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*`+e.UNDERSCORE_IDENT_RE+`)?`},c={className:`meta`,begin:`@`+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(o,{className:`string`}),`self`]}]},l=ve,u=e.COMMENT(`/\\*`,`\\*/`,{contains:[e.C_BLOCK_COMMENT_MODE]}),d={variants:[{className:`type`,begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},f=d;return f.variants[1].contains=[d],d.variants[1].contains=[f],{name:`Kotlin`,aliases:[`kt`,`kts`],keywords:t,contains:[e.COMMENT(`/\\*\\*`,`\\*/`,{relevance:0,contains:[{className:`doctag`,begin:`@[A-Za-z]+`}]}),e.C_LINE_COMMENT_MODE,u,n,r,s,c,{className:`function`,beginKeywords:`fun`,end:`[(]|$`,returnBegin:!0,excludeEnd:!0,keywords:t,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+`\\s*\\(`,returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:`type`,begin:/</,end:/>/,keywords:`reified`,relevance:0},{className:`params`,begin:/\(/,end:/\)/,endsParent:!0,keywords:t,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,u],relevance:0},e.C_LINE_COMMENT_MODE,u,s,c,o,e.C_NUMBER_MODE]},u]},{begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{3:`title.class`},keywords:`class interface trait`,end:/[:\{(]|$/,excludeEnd:!0,illegal:`extends implements`,contains:[{beginKeywords:`public protected internal private constructor`},e.UNDERSCORE_TITLE_MODE,{className:`type`,begin:/</,end:/>/,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:`type`,begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},s,c]},o,{className:`meta`,begin:`^#!/usr/bin/env`,end:`$`,illegal:`
|
|
4
4
|
`},l]}}var be=e=>({IMPORTANT:{scope:`meta`,begin:`!important`},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:`number`,begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:`built_in`,begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:`selector-attr`,begin:/\[/,end:/\]/,illegal:`$`,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:`number`,begin:e.NUMBER_RE+`(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?`,relevance:0},CSS_VARIABLE:{className:`attr`,begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),xe=`a.abbr.address.article.aside.audio.b.blockquote.body.button.canvas.caption.cite.code.dd.del.details.dfn.div.dl.dt.em.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hgroup.html.i.iframe.img.input.ins.kbd.label.legend.li.main.mark.menu.nav.object.ol.optgroup.option.p.picture.q.quote.samp.section.select.source.span.strong.summary.sup.table.tbody.td.textarea.tfoot.th.thead.time.tr.ul.var.video`.split(`.`),Se=`defs.g.marker.mask.pattern.svg.switch.symbol.feBlend.feColorMatrix.feComponentTransfer.feComposite.feConvolveMatrix.feDiffuseLighting.feDisplacementMap.feFlood.feGaussianBlur.feImage.feMerge.feMorphology.feOffset.feSpecularLighting.feTile.feTurbulence.linearGradient.radialGradient.stop.circle.ellipse.image.line.path.polygon.polyline.rect.text.use.textPath.tspan.foreignObject.clipPath`.split(`.`),Ce=[...xe,...Se],we=`any-hover.any-pointer.aspect-ratio.color.color-gamut.color-index.device-aspect-ratio.device-height.device-width.display-mode.forced-colors.grid.height.hover.inverted-colors.monochrome.orientation.overflow-block.overflow-inline.pointer.prefers-color-scheme.prefers-contrast.prefers-reduced-motion.prefers-reduced-transparency.resolution.scan.scripting.update.width.min-width.max-width.min-height.max-height`.split(`.`).sort().reverse(),Te=`active.any-link.blank.checked.current.default.defined.dir.disabled.drop.empty.enabled.first.first-child.first-of-type.fullscreen.future.focus.focus-visible.focus-within.has.host.host-context.hover.indeterminate.in-range.invalid.is.lang.last-child.last-of-type.left.link.local-link.not.nth-child.nth-col.nth-last-child.nth-last-col.nth-last-of-type.nth-of-type.only-child.only-of-type.optional.out-of-range.past.placeholder-shown.read-only.read-write.required.right.root.scope.target.target-within.user-invalid.valid.visited.where`.split(`.`).sort().reverse(),Y=[`after`,`backdrop`,`before`,`cue`,`cue-region`,`first-letter`,`first-line`,`grammar-error`,`marker`,`part`,`placeholder`,`selection`,`slotted`,`spelling-error`].sort().reverse(),Ee=`accent-color.align-content.align-items.align-self.alignment-baseline.all.anchor-name.animation.animation-composition.animation-delay.animation-direction.animation-duration.animation-fill-mode.animation-iteration-count.animation-name.animation-play-state.animation-range.animation-range-end.animation-range-start.animation-timeline.animation-timing-function.appearance.aspect-ratio.backdrop-filter.backface-visibility.background.background-attachment.background-blend-mode.background-clip.background-color.background-image.background-origin.background-position.background-position-x.background-position-y.background-repeat.background-size.baseline-shift.block-size.border.border-block.border-block-color.border-block-end.border-block-end-color.border-block-end-style.border-block-end-width.border-block-start.border-block-start-color.border-block-start-style.border-block-start-width.border-block-style.border-block-width.border-bottom.border-bottom-color.border-bottom-left-radius.border-bottom-right-radius.border-bottom-style.border-bottom-width.border-collapse.border-color.border-end-end-radius.border-end-start-radius.border-image.border-image-outset.border-image-repeat.border-image-slice.border-image-source.border-image-width.border-inline.border-inline-color.border-inline-end.border-inline-end-color.border-inline-end-style.border-inline-end-width.border-inline-start.border-inline-start-color.border-inline-start-style.border-inline-start-width.border-inline-style.border-inline-width.border-left.border-left-color.border-left-style.border-left-width.border-radius.border-right.border-right-color.border-right-style.border-right-width.border-spacing.border-start-end-radius.border-start-start-radius.border-style.border-top.border-top-color.border-top-left-radius.border-top-right-radius.border-top-style.border-top-width.border-width.bottom.box-align.box-decoration-break.box-direction.box-flex.box-flex-group.box-lines.box-ordinal-group.box-orient.box-pack.box-shadow.box-sizing.break-after.break-before.break-inside.caption-side.caret-color.clear.clip.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.color-scheme.column-count.column-fill.column-gap.column-rule.column-rule-color.column-rule-style.column-rule-width.column-span.column-width.columns.contain.contain-intrinsic-block-size.contain-intrinsic-height.contain-intrinsic-inline-size.contain-intrinsic-size.contain-intrinsic-width.container.container-name.container-type.content.content-visibility.counter-increment.counter-reset.counter-set.cue.cue-after.cue-before.cursor.cx.cy.direction.display.dominant-baseline.empty-cells.enable-background.field-sizing.fill.fill-opacity.fill-rule.filter.flex.flex-basis.flex-direction.flex-flow.flex-grow.flex-shrink.flex-wrap.float.flood-color.flood-opacity.flow.font.font-display.font-family.font-feature-settings.font-kerning.font-language-override.font-optical-sizing.font-palette.font-size.font-size-adjust.font-smooth.font-smoothing.font-stretch.font-style.font-synthesis.font-synthesis-position.font-synthesis-small-caps.font-synthesis-style.font-synthesis-weight.font-variant.font-variant-alternates.font-variant-caps.font-variant-east-asian.font-variant-emoji.font-variant-ligatures.font-variant-numeric.font-variant-position.font-variation-settings.font-weight.forced-color-adjust.gap.glyph-orientation-horizontal.glyph-orientation-vertical.grid.grid-area.grid-auto-columns.grid-auto-flow.grid-auto-rows.grid-column.grid-column-end.grid-column-start.grid-gap.grid-row.grid-row-end.grid-row-start.grid-template.grid-template-areas.grid-template-columns.grid-template-rows.hanging-punctuation.height.hyphenate-character.hyphenate-limit-chars.hyphens.icon.image-orientation.image-rendering.image-resolution.ime-mode.initial-letter.initial-letter-align.inline-size.inset.inset-area.inset-block.inset-block-end.inset-block-start.inset-inline.inset-inline-end.inset-inline-start.isolation.justify-content.justify-items.justify-self.kerning.left.letter-spacing.lighting-color.line-break.line-height.line-height-step.list-style.list-style-image.list-style-position.list-style-type.margin.margin-block.margin-block-end.margin-block-start.margin-bottom.margin-inline.margin-inline-end.margin-inline-start.margin-left.margin-right.margin-top.margin-trim.marker.marker-end.marker-mid.marker-start.marks.mask.mask-border.mask-border-mode.mask-border-outset.mask-border-repeat.mask-border-slice.mask-border-source.mask-border-width.mask-clip.mask-composite.mask-image.mask-mode.mask-origin.mask-position.mask-repeat.mask-size.mask-type.masonry-auto-flow.math-depth.math-shift.math-style.max-block-size.max-height.max-inline-size.max-width.min-block-size.min-height.min-inline-size.min-width.mix-blend-mode.nav-down.nav-index.nav-left.nav-right.nav-up.none.normal.object-fit.object-position.offset.offset-anchor.offset-distance.offset-path.offset-position.offset-rotate.opacity.order.orphans.outline.outline-color.outline-offset.outline-style.outline-width.overflow.overflow-anchor.overflow-block.overflow-clip-margin.overflow-inline.overflow-wrap.overflow-x.overflow-y.overlay.overscroll-behavior.overscroll-behavior-block.overscroll-behavior-inline.overscroll-behavior-x.overscroll-behavior-y.padding.padding-block.padding-block-end.padding-block-start.padding-bottom.padding-inline.padding-inline-end.padding-inline-start.padding-left.padding-right.padding-top.page.page-break-after.page-break-before.page-break-inside.paint-order.pause.pause-after.pause-before.perspective.perspective-origin.place-content.place-items.place-self.pointer-events.position.position-anchor.position-visibility.print-color-adjust.quotes.r.resize.rest.rest-after.rest-before.right.rotate.row-gap.ruby-align.ruby-position.scale.scroll-behavior.scroll-margin.scroll-margin-block.scroll-margin-block-end.scroll-margin-block-start.scroll-margin-bottom.scroll-margin-inline.scroll-margin-inline-end.scroll-margin-inline-start.scroll-margin-left.scroll-margin-right.scroll-margin-top.scroll-padding.scroll-padding-block.scroll-padding-block-end.scroll-padding-block-start.scroll-padding-bottom.scroll-padding-inline.scroll-padding-inline-end.scroll-padding-inline-start.scroll-padding-left.scroll-padding-right.scroll-padding-top.scroll-snap-align.scroll-snap-stop.scroll-snap-type.scroll-timeline.scroll-timeline-axis.scroll-timeline-name.scrollbar-color.scrollbar-gutter.scrollbar-width.shape-image-threshold.shape-margin.shape-outside.shape-rendering.speak.speak-as.src.stop-color.stop-opacity.stroke.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke-width.tab-size.table-layout.text-align.text-align-all.text-align-last.text-anchor.text-combine-upright.text-decoration.text-decoration-color.text-decoration-line.text-decoration-skip.text-decoration-skip-ink.text-decoration-style.text-decoration-thickness.text-emphasis.text-emphasis-color.text-emphasis-position.text-emphasis-style.text-indent.text-justify.text-orientation.text-overflow.text-rendering.text-shadow.text-size-adjust.text-transform.text-underline-offset.text-underline-position.text-wrap.text-wrap-mode.text-wrap-style.timeline-scope.top.touch-action.transform.transform-box.transform-origin.transform-style.transition.transition-behavior.transition-delay.transition-duration.transition-property.transition-timing-function.translate.unicode-bidi.user-modify.user-select.vector-effect.vertical-align.view-timeline.view-timeline-axis.view-timeline-inset.view-timeline-name.view-transition-name.visibility.voice-balance.voice-duration.voice-family.voice-pitch.voice-range.voice-rate.voice-stress.voice-volume.white-space.white-space-collapse.widows.width.will-change.word-break.word-spacing.word-wrap.writing-mode.x.y.z-index.zoom`.split(`.`).sort().reverse(),De=Te.concat(Y).sort().reverse();function Oe(e){let t=be(e),n=De,r=`[\\w-]+`,i=`(`+r+`|@\\{[\\w-]+\\})`,a=[],o=[],s=function(e){return{className:`string`,begin:`~?`+e+`.*?`+e}},c=function(e,t,n){return{className:e,begin:t,relevance:n}},l={$pattern:/[a-z-]+/,keyword:`and or not only`,attribute:we.join(` `)},u={begin:`\\(`,end:`\\)`,contains:o,keywords:l,relevance:0};o.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s(`'`),s(`"`),t.CSS_NUMBER_MODE,{begin:`(url|data-uri)\\(`,starts:{className:`string`,end:`[\\)\\n]`,excludeEnd:!0}},t.HEXCOLOR,u,c(`variable`,`@@?`+r,10),c(`variable`,`@\\{`+r+`\\}`),c(`built_in`,"~?`[^`]*?`"),{className:`attribute`,begin:r+`\\s*:`,end:`:`,returnBegin:!0,excludeEnd:!0},t.IMPORTANT,{beginKeywords:`and not`},t.FUNCTION_DISPATCH);let d=o.concat({begin:/\{/,end:/\}/,contains:a}),f={beginKeywords:`when`,endsWithParent:!0,contains:[{beginKeywords:`and not`}].concat(o)},p={begin:i+`\\s*:`,returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},t.CSS_VARIABLE,{className:`attribute`,begin:`\\b(`+Ee.join(`|`)+`)\\b`,end:/(?=:)/,starts:{endsWithParent:!0,illegal:`[<=$]`,relevance:0,contains:o}}]},m={className:`keyword`,begin:`@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b`,starts:{end:`[;{}]`,keywords:l,returnEnd:!0,contains:o,relevance:0}},h={className:`variable`,variants:[{begin:`@`+r+`\\s*:`,relevance:15},{begin:`@`+r}],starts:{end:`[;}]`,returnEnd:!0,contains:d}},g={variants:[{begin:`[\\.#:&\\[>]`,end:`[;{}]`},{begin:i,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:`[<='$"]`,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,f,c(`keyword`,`all\\b`),c(`variable`,`@\\{`+r+`\\}`),{begin:`\\b(`+Ce.join(`|`)+`)\\b`,className:`selector-tag`},t.CSS_NUMBER_MODE,c(`selector-tag`,i,0),c(`selector-id`,`#`+i),c(`selector-class`,`\\.`+i,0),c(`selector-tag`,`&`,0),t.ATTRIBUTE_SELECTOR_MODE,{className:`selector-pseudo`,begin:`:(`+Te.join(`|`)+`)`},{className:`selector-pseudo`,begin:`:(:)?(`+Y.join(`|`)+`)`},{begin:/\(/,end:/\)/,relevance:0,contains:d},{begin:`!important`},t.FUNCTION_DISPATCH]},_={begin:`[\\w-]+:(:)?(${n.join(`|`)})`,returnBegin:!0,contains:[g]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,m,h,_,p,g,f,t.FUNCTION_DISPATCH),{name:`Less`,case_insensitive:!0,illegal:`[=>'/<($"]`,contains:a}}function ke(e){let t=`\\[=*\\[`,n=`\\]=*\\]`,r={begin:t,end:n,contains:[`self`]},i=[e.COMMENT(`--(?!`+t+`)`,`$`),e.COMMENT(`--`+t,n,{contains:[r],relevance:10})];return{name:`Lua`,aliases:[`pluto`],keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:`true false nil`,keyword:`and break do else elseif end for goto if in local not or repeat return then until while`,built_in:`_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove`},contains:i.concat([{className:`function`,beginKeywords:`function`,end:`\\)`,contains:[e.inherit(e.TITLE_MODE,{begin:`([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*`}),{className:`params`,begin:`\\(`,endsWithParent:!0,contains:i}].concat(i)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:`string`,begin:t,end:n,contains:[r],relevance:5}])}}function X(e){let t={className:`variable`,variants:[{begin:`\\$\\(`+e.UNDERSCORE_IDENT_RE+`\\)`,contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%<?\^\+\*]/}]},n={className:`string`,begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t]},r={className:`variable`,begin:/\$\([\w-]+\s/,end:/\)/,keywords:{built_in:`subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value`},contains:[t,n]},i={begin:`^`+e.UNDERSCORE_IDENT_RE+`\\s*(?=[:+?]?=)`},a={className:`meta`,begin:/^\.PHONY:/,end:/$/,keywords:{$pattern:/[\.\w]+/,keyword:`.PHONY`}},o={className:`section`,begin:/^[^\s]+:/,end:/$/,contains:[t]};return{name:`Makefile`,aliases:[`mk`,`mak`,`make`],keywords:{$pattern:/[\w-]+/,keyword:`define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath`},contains:[e.HASH_COMMENT_MODE,t,n,r,i,a,o]}}function Ae(e){let t=e.regex,n={begin:/<\/?[A-Za-z_]/,end:`>`,subLanguage:`xml`,relevance:0},r={begin:`^[-\\*]{3,}`,end:`$`},i={className:`code`,variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:`(~{3,})[^~](.|\\n)*?\\1~*[ ]*`},{begin:"```",end:"```+[ ]*$"},{begin:`~~~`,end:`~~~+[ ]*$`},{begin:"`.+?`"},{begin:`(?=^( {4}|\\t))`,contains:[{begin:`^( {4}|\\t)`,end:`(\\n)$`}],relevance:0}]},a={className:`bullet`,begin:`^[ ]*([*+-]|(\\d+\\.))(?=\\s+)`,end:`\\s+`,excludeEnd:!0},o={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:`symbol`,begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:`link`,begin:/:\s*/,end:/$/,excludeBegin:!0}]},s={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:t.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:`string`,relevance:0,begin:`\\[`,end:`\\]`,excludeBegin:!0,returnEnd:!0},{className:`link`,relevance:0,begin:`\\]\\(`,end:`\\)`,excludeBegin:!0,excludeEnd:!0},{className:`symbol`,relevance:0,begin:`\\]\\[`,end:`\\]`,excludeBegin:!0,excludeEnd:!0}]},c={className:`strong`,contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},l={className:`emphasis`,contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},u=e.inherit(c,{contains:[]}),d=e.inherit(l,{contains:[]});c.contains.push(d),l.contains.push(u);let f=[n,s];return[c,l,u,d].forEach(e=>{e.contains=e.contains.concat(f)}),f=f.concat(c,l),{name:`Markdown`,aliases:[`md`,`mkdown`,`mkd`],contains:[{className:`section`,variants:[{begin:`^#{1,6}`,end:`$`,contains:f},{begin:`(?=^.+?\\n[=-]{2,}$)`,contains:[{begin:`^[=-]*$`},{begin:`^`,end:`\\n`,contains:f}]}]},n,a,c,l,{className:`quote`,begin:`^>\\s+`,contains:f,end:`$`},i,r,s,o,{scope:`literal`,match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}function je(e){let t={className:`built_in`,begin:`\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+`},n=/[a-zA-Z@][a-zA-Z0-9_]*/,r={"variable.language":[`this`,`super`],$pattern:n,keyword:`while.export.sizeof.typedef.const.struct.for.union.volatile.static.mutable.if.do.return.goto.enum.else.break.extern.asm.case.default.register.explicit.typename.switch.continue.inline.readonly.assign.readwrite.self.@synchronized.id.typeof.nonatomic.IBOutlet.IBAction.strong.weak.copy.in.out.inout.bycopy.byref.oneway.__strong.__weak.__block.__autoreleasing.@private.@protected.@public.@try.@property.@end.@throw.@catch.@finally.@autoreleasepool.@synthesize.@dynamic.@selector.@optional.@required.@encode.@package.@import.@defs.@compatibility_alias.__bridge.__bridge_transfer.__bridge_retained.__bridge_retain.__covariant.__contravariant.__kindof._Nonnull._Nullable._Null_unspecified.__FUNCTION__.__PRETTY_FUNCTION__.__attribute__.getter.setter.retain.unsafe_unretained.nonnull.nullable.null_unspecified.null_resettable.class.instancetype.NS_DESIGNATED_INITIALIZER.NS_UNAVAILABLE.NS_REQUIRES_SUPER.NS_RETURNS_INNER_POINTER.NS_INLINE.NS_AVAILABLE.NS_DEPRECATED.NS_ENUM.NS_OPTIONS.NS_SWIFT_UNAVAILABLE.NS_ASSUME_NONNULL_BEGIN.NS_ASSUME_NONNULL_END.NS_REFINED_FOR_SWIFT.NS_SWIFT_NAME.NS_SWIFT_NOTHROW.NS_DURING.NS_HANDLER.NS_ENDHANDLER.NS_VALUERETURN.NS_VOIDRETURN`.split(`.`),literal:[`false`,`true`,`FALSE`,`TRUE`,`nil`,`YES`,`NO`,`NULL`],built_in:[`dispatch_once_t`,`dispatch_queue_t`,`dispatch_sync`,`dispatch_async`,`dispatch_once`],type:[`int`,`float`,`char`,`unsigned`,`signed`,`short`,`long`,`double`,`wchar_t`,`unichar`,`void`,`bool`,`BOOL`,`id|0`,`_Bool`]},i={$pattern:n,keyword:[`@interface`,`@class`,`@protocol`,`@implementation`]};return{name:`Objective-C`,aliases:[`mm`,`objc`,`obj-c`,`obj-c++`,`objective-c++`],keywords:r,illegal:`</`,contains:[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:`string`,variants:[{begin:`@"`,end:`"`,illegal:`\\n`,contains:[e.BACKSLASH_ESCAPE]}]},{className:`meta`,begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:`if else elif endif define undef warning error line pragma ifdef ifndef include`},contains:[{begin:/\\\n/,relevance:0},e.inherit(e.QUOTE_STRING_MODE,{className:`string`}),{className:`string`,begin:/<.*?>/,end:/$/,illegal:`\\n`},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:`class`,begin:`(`+i.keyword.join(`|`)+`)\\b`,end:/(\{|$)/,excludeEnd:!0,keywords:i,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:`\\.`+e.UNDERSCORE_IDENT_RE,relevance:0}]}}function Me(e){let t=e.regex,n=`abs.accept.alarm.and.atan2.bind.binmode.bless.break.caller.chdir.chmod.chomp.chop.chown.chr.chroot.class.close.closedir.connect.continue.cos.crypt.dbmclose.dbmopen.defined.delete.die.do.dump.each.else.elsif.endgrent.endhostent.endnetent.endprotoent.endpwent.endservent.eof.eval.exec.exists.exit.exp.fcntl.field.fileno.flock.for.foreach.fork.format.formline.getc.getgrent.getgrgid.getgrnam.gethostbyaddr.gethostbyname.gethostent.getlogin.getnetbyaddr.getnetbyname.getnetent.getpeername.getpgrp.getpriority.getprotobyname.getprotobynumber.getprotoent.getpwent.getpwnam.getpwuid.getservbyname.getservbyport.getservent.getsockname.getsockopt.given.glob.gmtime.goto.grep.gt.hex.if.index.int.ioctl.join.keys.kill.last.lc.lcfirst.length.link.listen.local.localtime.log.lstat.lt.ma.map.method.mkdir.msgctl.msgget.msgrcv.msgsnd.my.ne.next.no.not.oct.open.opendir.or.ord.our.pack.package.pipe.pop.pos.print.printf.prototype.push.q|0.qq.quotemeta.qw.qx.rand.read.readdir.readline.readlink.readpipe.recv.redo.ref.rename.require.reset.return.reverse.rewinddir.rindex.rmdir.say.scalar.seek.seekdir.select.semctl.semget.semop.send.setgrent.sethostent.setnetent.setpgrp.setpriority.setprotoent.setpwent.setservent.setsockopt.shift.shmctl.shmget.shmread.shmwrite.shutdown.sin.sleep.socket.socketpair.sort.splice.split.sprintf.sqrt.srand.stat.state.study.sub.substr.symlink.syscall.sysopen.sysread.sysseek.system.syswrite.tell.telldir.tie.tied.time.times.tr.truncate.uc.ucfirst.umask.undef.unless.unlink.unpack.unshift.untie.until.use.utime.values.vec.wait.waitpid.wantarray.warn.when.while.write.x|0.xor.y|0`.split(`.`),r=/[dualxmsipngr]{0,12}/,i={$pattern:/[\w.]+/,keyword:n.join(` `)},a={className:`subst`,begin:`[$@]\\{`,end:`\\}`,keywords:i},o={begin:/->\{/,end:/\}/},s={scope:`attr`,match:/\s+:\s*\w+(\s*\(.*?\))?/},c={scope:`variable`,variants:[{begin:/\$\d/},{begin:t.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,`(?![A-Za-z])(?![@$%])`)},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[s]},l={className:`number`,variants:[{match:/0?\.[0-9][0-9_]+\b/},{match:/\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/},{match:/\b0[0-7][0-7_]*\b/},{match:/\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/},{match:/\b0b[0-1][0-1_]*\b/}],relevance:0},u=[e.BACKSLASH_ESCAPE,a,c],d=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],f=(e,n,i=`\\1`)=>{let a=i===`\\1`?i:t.concat(i,n);return t.concat(t.concat(`(?:`,e,`)`),n,/(?:\\.|[^\\\/])*?/,a,/(?:\\.|[^\\\/])*?/,i,r)},p=(e,n,i)=>t.concat(t.concat(`(?:`,e,`)`),n,/(?:\\.|[^\\\/])*?/,i,r),m=[c,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),o,{className:`string`,contains:u,variants:[{begin:`q[qwxr]?\\s*\\(`,end:`\\)`,relevance:5},{begin:`q[qwxr]?\\s*\\[`,end:`\\]`,relevance:5},{begin:`q[qwxr]?\\s*\\{`,end:`\\}`,relevance:5},{begin:`q[qwxr]?\\s*\\|`,end:`\\|`,relevance:5},{begin:`q[qwxr]?\\s*<`,end:`>`,relevance:5},{begin:`qw\\s+q`,end:`q`,relevance:5},{begin:`'`,end:`'`,contains:[e.BACKSLASH_ESCAPE]},{begin:`"`,end:`"`},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:`-?\\w+\\s*=>`,relevance:0}]},l,{begin:`(\\/\\/|`+e.RE_STARTERS_RE+`|\\b(split|return|print|reverse|grep)\\b)\\s*`,keywords:`split return print reverse grep`,relevance:0,contains:[e.HASH_COMMENT_MODE,{className:`regexp`,variants:[{begin:f(`s|tr|y`,t.either(...d,{capture:!0}))},{begin:f(`s|tr|y`,`\\(`,`\\)`)},{begin:f(`s|tr|y`,`\\[`,`\\]`)},{begin:f(`s|tr|y`,`\\{`,`\\}`)}],relevance:2},{className:`regexp`,variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:p(`(?:m|qr)?`,/\//,/\//)},{begin:p(`m|qr`,t.either(...d,{capture:!0}),/\1/)},{begin:p(`m|qr`,/\(/,/\)/)},{begin:p(`m|qr`,/\[/,/\]/)},{begin:p(`m|qr`,/\{/,/\}/)}]}]},{className:`function`,beginKeywords:`sub method`,end:`(\\s*\\(.*?\\))?[;{]`,excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE,s]},{className:`class`,beginKeywords:`class`,end:`[;{]`,excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE,s,l]},{begin:`-\\w\\b`,relevance:0},{begin:`^__DATA__$`,end:`^__END__$`,subLanguage:`mojolicious`,contains:[{begin:`^@@.*`,end:`$`,className:`comment`}]}];return a.contains=m,o.contains=m,{name:`Perl`,aliases:[`pl`,`pm`],keywords:i,contains:m}}function Ne(e){let t=e.regex,n=/(?![A-Za-z0-9])(?![$])/,r=t.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,n),i=t.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,n),a=t.concat(/[A-Z]+/,n),o={scope:`variable`,match:`\\$+`+r},s={scope:`meta`,variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},c={scope:`subst`,variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},l=e.inherit(e.APOS_STRING_MODE,{illegal:null}),u=e.inherit(e.QUOTE_STRING_MODE,{illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(c)}),d={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:e.QUOTE_STRING_MODE.contains.concat(c),"on:begin":(e,t)=>{t.data._beginMatch=e[1]||e[2]},"on:end":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}},f=e.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),p=`[
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./chunk-BNv3lrIs.js";var t=e({actions:()=>u,builder:()=>h,builtInBadge:()=>_,card:()=>d,catalog:()=>y,categories:()=>s,confirmDelete:()=>f,default:()=>b,empty:()=>l,errors:()=>m,gallery:()=>o,newLoop:()=>i,newLoopName:()=>p,preview:()=>g,run:()=>v,sections:()=>a,status:()=>c,subtitle:()=>r,title:()=>n}),n=`Loops`,r=`Reusable automation loops — shared across all your projects.`,i=`New loop`,a={drafts:`Drafts`,published:`Published`,templates:`Templates`,builtIn:`Built-in`},o={search:`Search templates…`,noResults:`No templates match your filters.`,clearFilter:`Clear filters`,resultCount_one:`{{count}} template`,resultCount_other:`{{count}} templates`,needsSpec:`Needs spec`,standalone:`Standalone`,needsSpecHint:`Runs on a rail with a dragged spec`,standaloneHint:`Runs standalone — just pick a project`},s={API:`API`,Automation:`Automation`,CI:`CI`,Database:`Database`,Debugging:`Debugging`,DevOps:`DevOps`,Docs:`Docs`,Git:`Git`,Maintenance:`Maintenance`,Performance:`Performance`,Planning:`Planning`,Quality:`Quality`,Review:`Review`,Security:`Security`,Testing:`Testing`},c={draft:`Draft`,published:`Published`,running:`Running`},l={title:`No loops yet`,body:`Create one from scratch or start from a template.`},u={edit:`Edit`,delete:`Delete`,publish:`Publish`,unpublish:`Unpublish`,duplicate:`Duplicate`,use:`Use template`,preview:`Preview`,fork:`Fork to edit`,run:`Run`,export:`Export`,import:`Import`,select:`Select {{name}}`},d={nodes_one:`{{count}} node`,nodes_other:`{{count}} nodes`,usedIn:`In use · {{project}}`},f=`Delete this loop? It will disappear from every rail picker.`,p=`New loop`,m={load:`Failed to load loops`,save:`Failed to save loop`,publishInvalid:`This loop can't be published yet — fix the highlighted issues.`},h={back:`Back to Loops`,save:`Save`,saved:`Loop saved`,publish:`Publish`,published:`Loop published`,addNode:`Add node`,deleteNode:`Delete node`,config:{maxIterations:`Max iterations`,timeout:`Timeout (min)`,maxIterationsHint:`Hard cap on Loop Decider iterations — the loop stops when it's reached even if the goal isn't met. Prevents runaway loops.`,timeoutHint:`Wall-clock limit for the whole run, in minutes. If exceeded, the run is stopped and marked failed — a safety net alongside max iterations.`,maxCost:`Max cost ($)`,maxCostHint:`Optional USD budget for the whole run. Checked BETWEEN steps (a step’s cost is only known once it finishes), so the loop stops before the next step once the total crosses it — may overshoot by one step. For non-Claude providers the cost is an estimate. Empty = no cap.`},nodes:{start:`Start`,"ai-step":`AI Step`,shell:`Shell`,decider:`Loop Decider`,condition:`Condition`,end:`End`},inspector:{selectNode:`Select a node to edit it.`,prompt:`Prompt`,provider:`Provider`,model:`Model`,effort:`Reasoning effort`,command:`Command`,goal:`Goal / stop criteria`,join:`Join`,outcome:`Outcome`,startNote:`The entry point of the loop. Connect it to the first step.`,promptHint:`Click or drag a token to insert it into the prompt.`,tokensSpec:`Spec fields`,tokensJira:`Jira`,tokensCommands:`Commands`,label:`Name`},branch:{continue:`↻ Continue`,stop:`✓ Stop`},edgesHelp:{label:`How steps connect`,body:`Arrows set the run ORDER, not data — boxes have no input ports and edges carry no parameters. Each AI Step automatically resumes its session (full prior context) plus a short summary of previous steps; nothing is wired by hand. The Loop Decider has two outputs: ↻ Continue (goal not met → loop back) and ✓ Stop (goal met → exit).`},arrange:{label:`Arrange`,vertical:`Vertical`,horizontal:`Horizontal`,grid:`Grid`,reset:`Reset`},constants:{label:`Constants`,manage:`Manage constants`,title:`Loop constants`,empty:`No custom constants yet.`,name:`NAME`,value:`value`,add:`Add`,builtinBadge:`Built-in`},paste:{done_one:`Pasted {{count}} step`,done_other:`Pasted {{count}} steps`},problems:{count_one:`{{count}} problem`,count_other:`{{count}} problems`,NO_START:`Add a Start node.`,MULTIPLE_START:`Only one Start node is allowed.`,NO_END:`Add at least one End node.`,ORPHAN:`This step isn't reachable from Start.`,DECIDER_BRANCHES:`Loop Decider needs a Continue and a Stop branch.`,EMPTY_PROMPT:`AI Step has an empty prompt.`,EMPTY_COMMAND:`Shell step has an empty command.`,EMPTY_GOAL:`Loop Decider has no goal.`,DEAD_END:`This step has no outgoing connection.`},preview:{label:`Preview`,title:`Dry-run preview`,sampleNote:`Spec values use sample data; commands and constants resolve exactly as they will at run time.`,empty:`No steps to preview.`,error:`Preview failed`}},g={steps:`Steps`,limits:`{{iterations}} iterations max · {{timeout}} min timeout`,openInBuilder:`Open in builder`,builtin:`Built-in`},_=`Built-in`,v={title:`Run {{name}}`,subtitle:`Launch this loop on a project (no ticket needed).`,project:`Project`,provider:`Provider`,model:`Model`,effort:`Reasoning effort`,execute:`Execute`,noProjects:`No projects available.`,launched:`Running {{name}}`},y=JSON.parse(`{"ship-and-green":{"name":"Ship & Green","description":"Fully autonomous: implement the spec, verify, and refine (fix) on failure — looping verify → fix → verify until everything is green. No human intervention."},"verify-pass":{"name":"Verify Pass","description":"Autonomous verify-and-fix: detect and run the project's build/lint/tests, then refine on failure — verify → fix → verify until green."},"ci-watch":{"name":"CI Watch","description":"Poll CI checks on the open PR (the agent uses the repo's CI tooling) until every check is green."},"lint-and-fix":{"name":"Lint & Fix","description":"The agent detects and runs the project's linter and fixes every issue, iterating until the codebase is clean."},"type-safe":{"name":"Type Safe","description":"The agent detects and runs the project's type checker and resolves every error, iterating until it passes cleanly."},"coverage-climb":{"name":"Coverage Climb","description":"The agent runs the project's coverage tooling and adds focused tests until the thresholds pass."},"build-fix":{"name":"Build Fix","description":"The agent detects and runs the project's production build and fixes compile/bundle errors until it is green."},"deploy-check":{"name":"Deploy Check","description":"The agent polls the deployment/health status (using the project's deploy tooling) until the service reports healthy."},"factory_implement":{"name":"Implement","description":"Fully autonomous: implement the spec, verify, and refine (fix) on failure — looping until all tests pass."},"factory_batch":{"name":"Batch Implement","description":"Batch-implement all the rail's tickets at once, then verify + refine on failure until green."},"factory_ultracode":{"name":"Freestyle","description":"Hands the spec straight to the model with full freedom — no pipeline, it works like a regular coding agent, then verify + refine until green. Claude only."},"autoloop-tdd":{"name":"Autoloop TDD","description":"A strict red-green-refactor cycle for {{spec.title}}: pin down each behavior with a failing test first, write only enough code to turn it green, then tidy up — repeating until the spec is fully covered."},"e2e-until-green":{"name":"E2E Until Green","description":"Run the end-to-end suite for {{spec.title}}, diagnose each failing user-flow, fix the underlying UI or integration defect, and keep cycling until every E2E spec passes."},"flaky-test-triage":{"name":"Flaky Test Triage","description":"Re-run the failing tests around {{spec.title}} several times to separate genuine regressions from intermittent flakes, then repair the real breaks and stabilize or document the flaky ones."},"independent-verifier-pass":{"name":"Independent Verifier Pass","description":"An adversarial verification of {{spec.title}}: re-run build, lint, and tests from scratch, trust only the raw command output (not any prior 'it works' claim), and surface or fix every gap."},"post-edit-test-guard":{"name":"Post-Edit Test Guard","description":"After each batch of edits for {{spec.title}}, immediately run the narrowest set of tests touching the changed files — catching regressions the moment they appear instead of at the end."},"post-merge-regression-guard":{"name":"Post-Merge Regression Guard","description":"Right after a merge or rebase brings other people's work into {{spec.title}}, run the fast smoke suite to catch integration breakage immediately — before any new feature work starts on top of it."},"pre-commit-guard":{"name":"Pre-Commit Guard","description":"A safety gate for {{spec.title}} that intercepts every commit: run the test suite first and refuse to commit while it is red, so broken code never enters history."},"visual-regression-until-match":{"name":"Visual Regression Until Match","description":"Capture visual snapshots of the changed UI, hunt down every unintended pixel diff, and self-correct until the visual suite is green with only deliberate design changes approved."},"format-until-clean":{"name":"Format Until Clean","description":"Apply the project formatter, mop up the handful of style problems it cannot auto-fix, and keep going until a fresh format run leaves the working tree untouched."},"lint-typecheck-fix":{"name":"Lint and Typecheck Fix","description":"Run the linter and the type checker, resolve each reported problem with the smallest possible edit, and loop until both gates come back completely clean."},"a11y-audit-until-clean":{"name":"A11y Audit Until Clean","description":"Run the automated accessibility checks over the changed screens, fix the violations one category at a time, and repeat until the audit comes back with zero issues."},"de-sloppify-pass":{"name":"De-Sloppify Pass","description":"After the feature lands, sweep the diff for leftover slop — debug output, dead branches, sloppy names, bloated functions — clean it up, and prove the cleanup did not break anything."},"fix-ci-until-green":{"name":"Fix CI Until Green","description":"Pull the most recent red CI run on this branch, reproduce the breakage on your machine, patch the real cause, push, and keep cycling until every check reports success."},"pr-babysitter":{"name":"PR Babysitter","description":"On a recurring interval, sweep the open pull requests you are watching and keep each one mergeable: revive red CI, rebase the ones that have fallen behind the base branch, and ping the stale ones — escalating anything a human has to decide."},"pr-watch-loop":{"name":"PR Watch Loop","description":"Poll the pull requests on your watch list at a steady cadence, summarize each one's CI and review health, and either knock out trivial blockers or surface what needs an owner."},"pr-self-review":{"name":"PR Self-Review","description":"Critique your own working diff the way a demanding senior reviewer would, resolve what you find, and re-review until a clean pass turns up nothing critical — before the PR ever leaves your hands."},"spec-first-ship":{"name":"Spec-First Ship","description":"Drive a written requirements checklist to completion one item at a time — each pass implements a single unchecked requirement, proves it, and ticks it off — so the spec is the contract for done."},"dependency-audit-weekly":{"name":"Weekly Dependency Audit","description":"Each week, take stock of which packages have fallen behind, sort them into safe-to-bump versus risky, and hand back a clear upgrade plan you can act on."},"dependency-upgrade-one-by-one":{"name":"Upgrade Dependencies One at a Time","description":"Bump exactly one outdated package per pass, repair whatever the bump breaks, prove the project still works, and commit — far safer than upgrading everything at once."},"knip-until-clean":{"name":"Prune Dead Code Until Clean","description":"Hunt down unreferenced exports, orphaned files, and dependencies nobody imports, remove them safely, and keep going until the dead-code scanner has nothing left to report."},"docs-sync-after-edits":{"name":"Sync Docs to Code Changes","description":"After a round of code edits, track down every doc the changes touched — README, API reference, inline comments — and bring them back in line with how the code actually behaves now."},"security-audit-weekly":{"name":"Weekly Security Audit","description":"Run a weekly vulnerability scan over the dependency tree, triage what turns up by severity and real-world exposure, and hand back a prioritized remediation plan."},"npm-audit-fix-loop":{"name":"Patch Vulnerabilities One at a Time","description":"Clear high and critical dependency advisories deliberately — one fix per pass, each verified against the test suite — instead of a blind force-fix that can quietly break the build."},"api-contract-until-match":{"name":"API Contract Until Match","description":"Drive the implementation until its responses honor the published API contract, closing any gap between what the schema promises and what the handlers actually return."},"openapi-sync-until-valid":{"name":"OpenAPI Sync Until Valid","description":"Keep the OpenAPI document well-formed and faithful to the real route handlers, repairing spec errors and code-vs-doc drift on each pass until the linter is satisfied."},"migration-until-applied":{"name":"Migration Until Applied","description":"Bring the database schema forward cleanly: run the pending migrations, repair any schema or SQL faults they surface, and confirm migration history stays consistent."},"bundle-size-budget":{"name":"Bundle Size Budget","description":"Land the feature without inflating the client bundle past its budget — measure each pass and trim, code-split, or lazy-load until the size gate is green."},"changelog-sync-after-ship":{"name":"Changelog Sync After Ship","description":"After shipping, make sure the changelog tells the user-facing story: review what landed, write Keep-a-Changelog entries, and confirm nothing visible was missed."},"guardrails-learning-loop":{"name":"Guardrails Learning Loop","description":"Keep iterating on the gates until they go green, but every time a check fails the same way twice, write down a guardrail note first so the loop never burns iterations re-attempting an approach that already failed."},"ralph-story-executor":{"name":"Backlog Story Executor","description":"Work a backlog of user stories one at a time with a fresh context each pass: pick the next unfinished story, build only it, prove the project gates stay green, commit, and mark it done before moving on."},"investigation-script-loop":{"name":"Investigation Script Loop","description":"Pin down a bug's true cause empirically: write a tiny disposable script that exercises the suspect behaviour, run it, read the real output, and refine the probe until the output itself proves the root cause."},"reflexion-debug-loop":{"name":"Reflection Debug Loop","description":"Turn a failing test green without thrashing: each time an attempt fails, record a short reflection to disk and consult it before the next try, so the loop never repeats a fix that has already been ruled out."},"merge-conflict-resolver":{"name":"Merge Conflict Resolver","description":"Bring the branch up to date with its target by rebasing, then resolve every conflict file by file while preserving both sides' intent, and prove the result still passes before declaring the branch current."},"staging-smoke-test":{"name":"Staging Smoke Test","description":"After a staging deploy, walk a fixed smoke checklist — auth, the core user paths, and key integrations — fixing the smallest issue each time something breaks and re-running until the whole checklist comes back clean."},"deploy-verification-loop":{"name":"Deploy Verification Loop","description":"After a deploy goes out, poll the health and smoke endpoints on an interval, investigating and fixing or escalating any non-healthy response, and keep checking until every configured endpoint reports success."},"factory_openspec":{"name":"OpenSpec Lifecycle","description":"Ticket-to-archive OpenSpec lifecycle: generate artifacts (opsx:ff) → implement (opsx:apply) → verify (opsx:verify); on FAIL loop back and amend the same change, on PASS archive it unattended."}}`),b={title:n,subtitle:r,newLoop:i,sections:a,gallery:o,categories:s,status:c,empty:l,actions:u,card:d,confirmDelete:f,newLoopName:p,errors:m,builder:h,preview:g,builtInBadge:_,run:v,catalog:y,import:{done_one:`Imported {{count}} loop`,done_other:`Imported {{count}} loops`,skipped_one:`Skipped {{count}} duplicate: {{names}}`,skipped_other:`Skipped {{count}} duplicates: {{names}}`,invalid:`That file isn't a valid loops export.`}};export{t};
|
|
1
|
+
import{r as e}from"./chunk-BNv3lrIs.js";var t=e({actions:()=>u,builder:()=>h,builtInBadge:()=>_,card:()=>d,catalog:()=>y,categories:()=>s,confirmDelete:()=>f,default:()=>b,empty:()=>l,errors:()=>m,gallery:()=>o,newLoop:()=>i,newLoopName:()=>p,preview:()=>g,run:()=>v,sections:()=>a,status:()=>c,subtitle:()=>r,title:()=>n}),n=`Loops`,r=`Reusable automation loops — shared across all your projects.`,i=`New loop`,a={drafts:`Drafts`,published:`Published`,templates:`Templates`,builtIn:`Built-in`},o={search:`Search templates…`,noResults:`No templates match your filters.`,clearFilter:`Clear filters`,resultCount_one:`{{count}} template`,resultCount_other:`{{count}} templates`,needsSpec:`Needs spec`,standalone:`Standalone`,needsSpecHint:`Runs on a rail with a dragged spec`,standaloneHint:`Runs standalone — just pick a project`},s={API:`API`,Automation:`Automation`,CI:`CI`,Database:`Database`,Debugging:`Debugging`,DevOps:`DevOps`,Docs:`Docs`,Git:`Git`,Maintenance:`Maintenance`,Performance:`Performance`,Planning:`Planning`,Quality:`Quality`,Review:`Review`,Security:`Security`,Testing:`Testing`},c={draft:`Draft`,published:`Published`,running:`Running`},l={title:`No loops yet`,body:`Create one from scratch or start from a template.`},u={edit:`Edit`,delete:`Delete`,publish:`Publish`,unpublish:`Unpublish`,duplicate:`Duplicate`,use:`Use template`,preview:`Preview`,fork:`Fork to edit`,run:`Run`,export:`Export`,import:`Import`,select:`Select {{name}}`},d={nodes_one:`{{count}} node`,nodes_other:`{{count}} nodes`,usedIn:`In use · {{project}}`},f=`Delete this loop? It will disappear from every rail picker.`,p=`New loop`,m={load:`Failed to load loops`,save:`Failed to save loop`,publishInvalid:`This loop can't be published yet — fix the highlighted issues.`},h={back:`Back to Loops`,save:`Save`,saved:`Loop saved`,publish:`Publish`,published:`Loop published`,addNode:`Add node`,deleteNode:`Delete node`,config:{maxIterations:`Max iterations`,timeout:`Timeout (min)`,maxIterationsHint:`Hard cap on Loop Decider iterations — the loop stops when it's reached even if the goal isn't met. Prevents runaway loops.`,timeoutHint:`Wall-clock limit for the whole run, in minutes. If exceeded, the run is stopped and marked failed — a safety net alongside max iterations.`,maxCost:`Max cost ($)`,maxCostHint:`Optional USD budget for the whole run. Checked BETWEEN steps (a step’s cost is only known once it finishes), so the loop stops before the next step once the total crosses it — may overshoot by one step. For non-Claude providers the cost is an estimate. Empty = no cap.`},nodes:{start:`Start`,"ai-step":`AI Step`,shell:`Shell`,decider:`Loop Decider`,condition:`Condition`,end:`End`},inspector:{selectNode:`Select a node to edit it.`,prompt:`Prompt`,provider:`Provider`,model:`Model`,effort:`Reasoning effort`,command:`Command`,goal:`Goal / stop criteria`,join:`Join`,outcome:`Outcome`,startNote:`The entry point of the loop. Connect it to the first step.`,promptHint:`Click or drag a token to insert it into the prompt.`,tokensSpec:`Spec fields`,tokensJira:`Jira`,tokensCommands:`Commands`,label:`Name`},branch:{continue:`↻ Continue`,stop:`✓ Stop`},edgesHelp:{label:`How steps connect`,body:`Arrows set the run ORDER, not data — boxes have no input ports and edges carry no parameters. Each AI Step automatically resumes its session (full prior context) plus a short summary of previous steps; nothing is wired by hand. The Loop Decider has two outputs: ↻ Continue (goal not met → loop back) and ✓ Stop (goal met → exit).`},arrange:{label:`Arrange`,vertical:`Vertical`,horizontal:`Horizontal`,grid:`Grid`,reset:`Reset`},constants:{label:`Constants`,manage:`Manage constants`,title:`Loop constants`,empty:`No custom constants yet.`,name:`NAME`,value:`value`,add:`Add`,builtinBadge:`Built-in`},paste:{done_one:`Pasted {{count}} step`,done_other:`Pasted {{count}} steps`},problems:{count_one:`{{count}} problem`,count_other:`{{count}} problems`,NO_START:`Add a Start node.`,MULTIPLE_START:`Only one Start node is allowed.`,NO_END:`Add at least one End node.`,ORPHAN:`This step isn't reachable from Start.`,DECIDER_BRANCHES:`Loop Decider needs a Continue and a Stop branch.`,EMPTY_PROMPT:`AI Step has an empty prompt.`,EMPTY_COMMAND:`Shell step has an empty command.`,EMPTY_GOAL:`Loop Decider has no goal.`,DEAD_END:`This step has no outgoing connection.`},preview:{label:`Preview`,title:`Dry-run preview`,sampleNote:`Spec values use sample data; commands and constants resolve exactly as they will at run time.`,empty:`No steps to preview.`,error:`Preview failed`}},g={steps:`Steps`,limits:`{{iterations}} iterations max · {{timeout}} min timeout`,openInBuilder:`Open in builder`,builtin:`Built-in`},_=`Built-in`,v={title:`Run {{name}}`,subtitle:`Launch this loop on a project (no ticket needed).`,project:`Project`,provider:`Provider`,model:`Model`,effort:`Reasoning effort`,execute:`Execute`,noProjects:`No projects available.`,launched:`Running {{name}}`},y=JSON.parse(`{"ship-and-green":{"name":"Ship & Green","description":"Fully autonomous: implement the spec, verify, and refine (fix) on failure — looping verify → fix → verify until everything is green. No human intervention."},"verify-pass":{"name":"Verify Pass","description":"Autonomous verify-and-fix: detect and run the project's build/lint/tests, then refine on failure — verify → fix → verify until green."},"ci-watch":{"name":"CI Watch","description":"Poll CI checks on the open PR (the agent uses the repo's CI tooling) until every check is green."},"lint-and-fix":{"name":"Lint & Fix","description":"The agent detects and runs the project's linter and fixes every issue, iterating until the codebase is clean."},"type-safe":{"name":"Type Safe","description":"The agent detects and runs the project's type checker and resolves every error, iterating until it passes cleanly."},"coverage-climb":{"name":"Coverage Climb","description":"The agent runs the project's coverage tooling and adds focused tests until the thresholds pass."},"build-fix":{"name":"Build Fix","description":"The agent detects and runs the project's production build and fixes compile/bundle errors until it is green."},"deploy-check":{"name":"Deploy Check","description":"The agent polls the deployment/health status (using the project's deploy tooling) until the service reports healthy."},"factory_implement":{"name":"Implement","description":"Fully autonomous: implement the spec, verify, and refine (fix) on failure — looping until all tests pass."},"factory_batch":{"name":"Batch Implement","description":"Batch-implement all the rail's tickets at once, then verify + refine on failure until green."},"factory_freestyle":{"name":"Freestyle","description":"Hands the spec straight to the model with full freedom — no pipeline, it works like a regular coding agent, then verify + refine until green. Claude only."},"autoloop-tdd":{"name":"Autoloop TDD","description":"A strict red-green-refactor cycle for {{spec.title}}: pin down each behavior with a failing test first, write only enough code to turn it green, then tidy up — repeating until the spec is fully covered."},"e2e-until-green":{"name":"E2E Until Green","description":"Run the end-to-end suite for {{spec.title}}, diagnose each failing user-flow, fix the underlying UI or integration defect, and keep cycling until every E2E spec passes."},"flaky-test-triage":{"name":"Flaky Test Triage","description":"Re-run the failing tests around {{spec.title}} several times to separate genuine regressions from intermittent flakes, then repair the real breaks and stabilize or document the flaky ones."},"independent-verifier-pass":{"name":"Independent Verifier Pass","description":"An adversarial verification of {{spec.title}}: re-run build, lint, and tests from scratch, trust only the raw command output (not any prior 'it works' claim), and surface or fix every gap."},"post-edit-test-guard":{"name":"Post-Edit Test Guard","description":"After each batch of edits for {{spec.title}}, immediately run the narrowest set of tests touching the changed files — catching regressions the moment they appear instead of at the end."},"post-merge-regression-guard":{"name":"Post-Merge Regression Guard","description":"Right after a merge or rebase brings other people's work into {{spec.title}}, run the fast smoke suite to catch integration breakage immediately — before any new feature work starts on top of it."},"pre-commit-guard":{"name":"Pre-Commit Guard","description":"A safety gate for {{spec.title}} that intercepts every commit: run the test suite first and refuse to commit while it is red, so broken code never enters history."},"visual-regression-until-match":{"name":"Visual Regression Until Match","description":"Capture visual snapshots of the changed UI, hunt down every unintended pixel diff, and self-correct until the visual suite is green with only deliberate design changes approved."},"format-until-clean":{"name":"Format Until Clean","description":"Apply the project formatter, mop up the handful of style problems it cannot auto-fix, and keep going until a fresh format run leaves the working tree untouched."},"lint-typecheck-fix":{"name":"Lint and Typecheck Fix","description":"Run the linter and the type checker, resolve each reported problem with the smallest possible edit, and loop until both gates come back completely clean."},"a11y-audit-until-clean":{"name":"A11y Audit Until Clean","description":"Run the automated accessibility checks over the changed screens, fix the violations one category at a time, and repeat until the audit comes back with zero issues."},"de-sloppify-pass":{"name":"De-Sloppify Pass","description":"After the feature lands, sweep the diff for leftover slop — debug output, dead branches, sloppy names, bloated functions — clean it up, and prove the cleanup did not break anything."},"fix-ci-until-green":{"name":"Fix CI Until Green","description":"Pull the most recent red CI run on this branch, reproduce the breakage on your machine, patch the real cause, push, and keep cycling until every check reports success."},"pr-babysitter":{"name":"PR Babysitter","description":"On a recurring interval, sweep the open pull requests you are watching and keep each one mergeable: revive red CI, rebase the ones that have fallen behind the base branch, and ping the stale ones — escalating anything a human has to decide."},"pr-watch-loop":{"name":"PR Watch Loop","description":"Poll the pull requests on your watch list at a steady cadence, summarize each one's CI and review health, and either knock out trivial blockers or surface what needs an owner."},"pr-self-review":{"name":"PR Self-Review","description":"Critique your own working diff the way a demanding senior reviewer would, resolve what you find, and re-review until a clean pass turns up nothing critical — before the PR ever leaves your hands."},"spec-first-ship":{"name":"Spec-First Ship","description":"Drive a written requirements checklist to completion one item at a time — each pass implements a single unchecked requirement, proves it, and ticks it off — so the spec is the contract for done."},"dependency-audit-weekly":{"name":"Weekly Dependency Audit","description":"Each week, take stock of which packages have fallen behind, sort them into safe-to-bump versus risky, and hand back a clear upgrade plan you can act on."},"dependency-upgrade-one-by-one":{"name":"Upgrade Dependencies One at a Time","description":"Bump exactly one outdated package per pass, repair whatever the bump breaks, prove the project still works, and commit — far safer than upgrading everything at once."},"knip-until-clean":{"name":"Prune Dead Code Until Clean","description":"Hunt down unreferenced exports, orphaned files, and dependencies nobody imports, remove them safely, and keep going until the dead-code scanner has nothing left to report."},"docs-sync-after-edits":{"name":"Sync Docs to Code Changes","description":"After a round of code edits, track down every doc the changes touched — README, API reference, inline comments — and bring them back in line with how the code actually behaves now."},"security-audit-weekly":{"name":"Weekly Security Audit","description":"Run a weekly vulnerability scan over the dependency tree, triage what turns up by severity and real-world exposure, and hand back a prioritized remediation plan."},"npm-audit-fix-loop":{"name":"Patch Vulnerabilities One at a Time","description":"Clear high and critical dependency advisories deliberately — one fix per pass, each verified against the test suite — instead of a blind force-fix that can quietly break the build."},"api-contract-until-match":{"name":"API Contract Until Match","description":"Drive the implementation until its responses honor the published API contract, closing any gap between what the schema promises and what the handlers actually return."},"openapi-sync-until-valid":{"name":"OpenAPI Sync Until Valid","description":"Keep the OpenAPI document well-formed and faithful to the real route handlers, repairing spec errors and code-vs-doc drift on each pass until the linter is satisfied."},"migration-until-applied":{"name":"Migration Until Applied","description":"Bring the database schema forward cleanly: run the pending migrations, repair any schema or SQL faults they surface, and confirm migration history stays consistent."},"bundle-size-budget":{"name":"Bundle Size Budget","description":"Land the feature without inflating the client bundle past its budget — measure each pass and trim, code-split, or lazy-load until the size gate is green."},"changelog-sync-after-ship":{"name":"Changelog Sync After Ship","description":"After shipping, make sure the changelog tells the user-facing story: review what landed, write Keep-a-Changelog entries, and confirm nothing visible was missed."},"guardrails-learning-loop":{"name":"Guardrails Learning Loop","description":"Keep iterating on the gates until they go green, but every time a check fails the same way twice, write down a guardrail note first so the loop never burns iterations re-attempting an approach that already failed."},"ralph-story-executor":{"name":"Backlog Story Executor","description":"Work a backlog of user stories one at a time with a fresh context each pass: pick the next unfinished story, build only it, prove the project gates stay green, commit, and mark it done before moving on."},"investigation-script-loop":{"name":"Investigation Script Loop","description":"Pin down a bug's true cause empirically: write a tiny disposable script that exercises the suspect behaviour, run it, read the real output, and refine the probe until the output itself proves the root cause."},"reflexion-debug-loop":{"name":"Reflection Debug Loop","description":"Turn a failing test green without thrashing: each time an attempt fails, record a short reflection to disk and consult it before the next try, so the loop never repeats a fix that has already been ruled out."},"merge-conflict-resolver":{"name":"Merge Conflict Resolver","description":"Bring the branch up to date with its target by rebasing, then resolve every conflict file by file while preserving both sides' intent, and prove the result still passes before declaring the branch current."},"staging-smoke-test":{"name":"Staging Smoke Test","description":"After a staging deploy, walk a fixed smoke checklist — auth, the core user paths, and key integrations — fixing the smallest issue each time something breaks and re-running until the whole checklist comes back clean."},"deploy-verification-loop":{"name":"Deploy Verification Loop","description":"After a deploy goes out, poll the health and smoke endpoints on an interval, investigating and fixing or escalating any non-healthy response, and keep checking until every configured endpoint reports success."},"factory_openspec":{"name":"OpenSpec Lifecycle","description":"Ticket-to-archive OpenSpec lifecycle: generate artifacts (opsx:ff) → implement (opsx:apply) → verify (opsx:verify); on FAIL loop back and amend the same change, on PASS archive it unattended."}}`),b={title:n,subtitle:r,newLoop:i,sections:a,gallery:o,categories:s,status:c,empty:l,actions:u,card:d,confirmDelete:f,newLoopName:p,errors:m,builder:h,preview:g,builtInBadge:_,run:v,catalog:y,import:{done_one:`Imported {{count}} loop`,done_other:`Imported {{count}} loops`,skipped_one:`Skipped {{count}} duplicate: {{names}}`,skipped_other:`Skipped {{count}} duplicates: {{names}}`,invalid:`That file isn't a valid loops export.`}};export{t};
|
|
@@ -1 +1 @@
|
|
|
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_ultracode":{"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};
|
|
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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=`Loops`,t=`Boucles d'automatisation réutilisables — partagées entre tous vos projets.`,n=`Nouvelle boucle`,r={drafts:`Brouillons`,published:`Publiées`,templates:`Modèles`,builtIn:`Intégrés`},i={search:`Rechercher des modèles…`,noResults:`Aucun modèle ne correspond à vos filtres.`,clearFilter:`Effacer les filtres`,resultCount_one:`{{count}} modèle`,resultCount_other:`{{count}} modèles`,needsSpec:`Spec requise`,standalone:`Autonome`,needsSpecHint:`S'exécute sur un rail avec une spec glissée`,standaloneHint:`S'exécute seule — il suffit de choisir un projet`},a={API:`API`,Automation:`Automatisation`,CI:`CI`,Database:`Base de données`,Debugging:`Débogage`,DevOps:`DevOps`,Docs:`Docs`,Git:`Git`,Maintenance:`Maintenance`,Performance:`Performance`,Planning:`Planification`,Quality:`Qualité`,Review:`Revue`,Security:`Sécurité`,Testing:`Tests`},o={draft:`Brouillon`,published:`Publiée`,running:`En cours`},s={title:`Aucune boucle pour l'instant`,body:`Créez-en une de zéro ou partez d'un modèle.`},c={edit:`Modifier`,delete:`Supprimer`,publish:`Publier`,unpublish:`Dépublier`,duplicate:`Dupliquer`,use:`Utiliser le modèle`,preview:`Aperçu`,fork:`Dupliquer pour éditer`,run:`Exécuter`,export:`Exporter`,import:`Importer`,select:`Sélectionner {{name}}`},l={nodes_one:`{{count}} nœud`,nodes_other:`{{count}} nœuds`,usedIn:`En cours d'utilisation · {{project}}`},u=`Supprimer cette boucle ? Elle disparaîtra de tous les sélecteurs de rail.`,d=`Nouvelle boucle`,f={load:`Échec du chargement des boucles`,save:`Échec de l'enregistrement de la boucle`,publishInvalid:`Cette boucle ne peut pas encore être publiée — corrigez les problèmes signalés.`},p={back:`Retour aux boucles`,save:`Enregistrer`,saved:`Boucle enregistrée`,publish:`Publier`,published:`Boucle publiée`,addNode:`Ajouter un nœud`,deleteNode:`Supprimer le nœud`,config:{maxIterations:`Itérations max`,timeout:`Délai (min)`,maxIterationsHint:`Plafond d'itérations du Loop Decider — la boucle s'arrête une fois atteint, même si l'objectif n'est pas rempli. Évite les boucles infinies.`,timeoutHint:`Limite de temps réel pour toute l'exécution, en minutes. Si dépassée, l'exécution est arrêtée et marquée échouée — un filet de sécurité avec le nombre max d'itérations.`,maxCost:`Coût max ($)`,maxCostHint:`Budget USD optionnel pour toute l’exécution. Vérifié ENTRE les étapes (le coût d’une étape n’est connu qu’à sa fin), la boucle s’arrête avant l’étape suivante une fois le total dépassé — peut dépasser d’une étape. Pour les fournisseurs non-Claude, le coût est estimé. Vide = aucune limite.`},nodes:{start:`Début`,"ai-step":`Étape IA`,shell:`Shell`,decider:`Décideur de boucle`,condition:`Condition`,end:`Fin`},inspector:{selectNode:`Sélectionnez un nœud pour le modifier.`,prompt:`Invite`,provider:`Fournisseur`,model:`Modèle`,effort:`Effort de raisonnement`,command:`Commande`,goal:`Objectif / critères d'arrêt`,join:`Jointure`,outcome:`Résultat`,startNote:`Le point d'entrée de la boucle. Connectez-le à la première étape.`,promptHint:`Cliquez ou glissez un jeton pour l'insérer dans le prompt.`,tokensSpec:`Champs du spec`,tokensJira:`Jira`,tokensCommands:`Commandes`,label:`Nom`},branch:{continue:`↻ Continuer`,stop:`✓ Arrêter`},edgesHelp:{label:`Comment les étapes se connectent`,body:`Les flèches définissent l'ORDRE d'exécution, pas les données — les boîtes n'ont pas de ports d'entrée et les arêtes ne transportent aucun paramètre. Chaque AI Step reprend automatiquement sa session (tout le contexte précédent) plus un bref résumé des étapes antérieures ; rien n'est câblé à la main. Le Loop Decider a deux sorties : ↻ Continuer (objectif non atteint → retour en boucle) et ✓ Arrêter (objectif atteint → sortie).`},arrange:{label:`Disposer`,vertical:`Vertical`,horizontal:`Horizontal`,grid:`Grille`,reset:`Réinitialiser`},constants:{label:`Constantes`,manage:`Gérer les constantes`,title:`Constantes du loop`,empty:`Aucune constante personnalisée.`,name:`NOM`,value:`valeur`,add:`Ajouter`,builtinBadge:`Intégrées`},paste:{done_one:`{{count}} étape collée`,done_other:`{{count}} étapes collées`},problems:{count_one:`{{count}} problème`,count_other:`{{count}} problèmes`,NO_START:`Ajoutez un nœud de départ.`,MULTIPLE_START:`Un seul nœud de départ est autorisé.`,NO_END:`Ajoutez au moins un nœud de fin.`,ORPHAN:`Cette étape n'est pas accessible depuis le départ.`,DECIDER_BRANCHES:`Le Loop Decider a besoin d'une branche Continuer et d'une branche Arrêter.`,EMPTY_PROMPT:`L'AI Step a un prompt vide.`,EMPTY_COMMAND:`L'étape Shell a une commande vide.`,EMPTY_GOAL:`Le Loop Decider n'a pas d'objectif.`,DEAD_END:`Cette étape n'a aucune connexion sortante.`},preview:{label:`Aperçu`,title:`Aperçu (dry-run)`,sampleNote:`Les valeurs du spec sont des exemples ; commandes et constantes sont résolues telles qu'à l'exécution.`,empty:`Aucune étape à prévisualiser.`,error:`Échec de l'aperçu`}},m={steps:`Étapes`,limits:`{{iterations}} itérations max · {{timeout}} min de délai`,openInBuilder:`Ouvrir dans le builder`,builtin:`Intégré`},h=`Intégré`,g={title:`Exécuter {{name}}`,subtitle:`Lance ce loop sur un projet (sans ticket).`,project:`Projet`,provider:`Fournisseur`,model:`Modèle`,effort:`Effort de raisonnement`,execute:`Exécuter`,noProjects:`Aucun projet disponible.`,launched:`Exécution de {{name}}`},_=JSON.parse(`{"ship-and-green":{"name":"Ship & Green","description":"Totalement autonome : implémente le spec, vérifie, puis corrige en cas d'échec — en bouclant vérifier → corriger → vérifier jusqu'à ce que tout soit au vert. Aucune intervention humaine."},"verify-pass":{"name":"Passe de vérification","description":"Vérification et correction autonomes : détecte et lance le build/lint/tests du projet, puis corrige en cas d'échec — vérifier → corriger → vérifier jusqu'au vert."},"ci-watch":{"name":"Surveillance CI","description":"Interroge les contrôles CI sur la PR ouverte (l'agent utilise l'outillage CI du dépôt) jusqu'à ce que chaque contrôle soit au vert."},"lint-and-fix":{"name":"Lint & correction","description":"L'agent détecte et lance le linter du projet et corrige chaque problème, en itérant jusqu'à ce que le code soit propre."},"type-safe":{"name":"Types sûrs","description":"L'agent détecte et lance le vérificateur de types du projet et résout chaque erreur, en itérant jusqu'à ce qu'il passe sans accroc."},"coverage-climb":{"name":"Montée de couverture","description":"L'agent lance l'outillage de couverture du projet et ajoute des tests ciblés jusqu'à ce que les seuils soient atteints."},"build-fix":{"name":"Correction de build","description":"L'agent détecte et lance le build de production du projet et corrige les erreurs de compilation/bundle jusqu'à ce qu'il soit au vert."},"deploy-check":{"name":"Contrôle de deploy","description":"L'agent interroge l'état de deploy/santé (à l'aide de l'outillage de deploy du projet) jusqu'à ce que le service se déclare en bonne santé."},"factory_implement":{"name":"Implémenter","description":"Totalement autonome : implémente le spec, vérifie, puis corrige en cas d'échec — en bouclant jusqu'à ce que tous les tests passent."},"factory_batch":{"name":"Implémentation par lots","description":"Implémente d'un coup tous les tickets du rail, puis vérifie et corrige en cas d'échec jusqu'au vert."},"factory_ultracode":{"name":"Freestyle","description":"Confie la spec directement au modèle en toute liberté — sans pipeline, il travaille comme un agent de code classique, puis vérifie + affine jusqu'au vert. Claude uniquement."},"autoloop-tdd":{"name":"Autoloop TDD","description":"Un cycle red-green-refactor strict pour {{spec.title}} : chaque comportement est d'abord verrouillé par un test qui échoue, puis on écrit juste ce qu'il faut de code pour le faire passer au vert, avant de nettoyer — en répétant jusqu'à couvrir entièrement la spec."},"e2e-until-green":{"name":"E2E jusqu'au vert","description":"Lance la suite E2E pour {{spec.title}}, diagnostique chaque parcours utilisateur en échec, corrige le défaut d'UI ou d'intégration sous-jacent, et continue le cycle jusqu'à ce que toutes les specs E2E passent."},"flaky-test-triage":{"name":"Tri des tests instables","description":"Relance plusieurs fois les tests en échec autour de {{spec.title}} pour distinguer les vraies régressions des instabilités passagères, puis répare les vraies casses et stabilise ou documente les tests instables."},"independent-verifier-pass":{"name":"Vérification indépendante","description":"Une vérification adversariale de {{spec.title}} : relance build, lint et tests à zéro, ne fais confiance qu'à la sortie brute des commandes (jamais à un « ça marche » antérieur), et fais remonter ou corrige chaque écart."},"post-edit-test-guard":{"name":"Garde-fou post-édition","description":"Après chaque lot de modifications pour {{spec.title}}, lance aussitôt l'ensemble de tests le plus ciblé touchant les fichiers modifiés — pour attraper les régressions dès leur apparition plutôt qu'à la fin."},"post-merge-regression-guard":{"name":"Garde anti-régression post-merge","description":"Juste après qu'un merge ou un rebase fait entrer le travail des autres dans {{spec.title}}, lance le smoke test rapide pour repérer immédiatement toute casse d'intégration — avant de bâtir de nouvelles fonctionnalités par-dessus."},"pre-commit-guard":{"name":"Garde pré-commit","description":"Un verrou de sécurité pour {{spec.title}} qui intercepte chaque commit : la suite de tests passe d'abord, et le commit est refusé tant qu'elle est au rouge, pour que du code cassé n'entre jamais dans l'historique."},"visual-regression-until-match":{"name":"Régression visuelle jusqu'à correspondance","description":"Capture des instantanés visuels de l'UI modifiée, traque chaque écart de pixels involontaire, et corrige jusqu'à ce que la suite visuelle soit au vert avec uniquement les changements de design approuvés."},"format-until-clean":{"name":"Formater jusqu'au propre","description":"Applique le formateur du projet, règle les quelques problèmes de style qu'il ne peut pas corriger automatiquement, et continue jusqu'à ce qu'un nouveau passage ne touche plus rien dans l'arbre de travail."},"lint-typecheck-fix":{"name":"Corriger lint et typage","description":"Lance le lint et le vérificateur de types, résous chaque problème signalé avec la modification la plus minime possible, et boucle jusqu'à ce que les deux contrôles reviennent parfaitement propres."},"a11y-audit-until-clean":{"name":"Audit a11y jusqu'au propre","description":"Lance les contrôles d'accessibilité automatisés sur les écrans modifiés, corrige les violations catégorie par catégorie, et répète jusqu'à ce que l'audit ne remonte plus aucun problème."},"de-sloppify-pass":{"name":"Passe de nettoyage","description":"Une fois la fonctionnalité livrée, balaie le diff pour traquer les restes négligés — sorties de debug, branches mortes, noms bâclés, fonctions surchargées — nettoie-les, et prouve que le nettoyage n'a rien cassé."},"fix-ci-until-green":{"name":"Réparer la CI jusqu'au vert","description":"Récupère le dernier run CI rouge de cette branche, reproduis la casse en local, corrige la vraie cause, pousse, et continue le cycle jusqu'à ce que tous les contrôles soient au vert."},"pr-babysitter":{"name":"Nounou de PR","description":"À intervalle régulier, passe en revue les pull requests que tu surveilles et garde chacune fusionnable : relance la CI rouge, rebase celles en retard sur la branche de base, et relance celles qui stagnent — en escaladant tout ce qui demande une décision humaine."},"pr-watch-loop":{"name":"Boucle de veille PR","description":"Interroge à cadence régulière les pull requests de ta liste de veille, résume l'état de la CI et de la revue de chacune, puis règle les blocages triviaux ou fais remonter ce qui requiert un responsable."},"pr-self-review":{"name":"Auto-revue de PR","description":"Critique ton propre diff comme le ferait un reviewer senior exigeant, corrige ce que tu trouves, et re-révise jusqu'à ce qu'un passage propre ne remonte plus rien de critique — avant même que la PR ne quitte tes mains."},"spec-first-ship":{"name":"Livrer par la spec","description":"Mène une checklist d'exigences écrite jusqu'au bout, point par point — chaque passe implémente une seule exigence non cochée, la prouve et la coche — pour que la spec soit le contrat du « terminé »."},"dependency-audit-weekly":{"name":"Audit hebdo des dépendances","description":"Chaque semaine, fais le point sur les paquets en retard, trie-les entre mises à jour sûres et risquées, et restitue un plan de montée de version clair et actionnable."},"dependency-upgrade-one-by-one":{"name":"Mettre à jour une dépendance à la fois","description":"Monte exactement un paquet obsolète par passe, répare ce que la montée casse, prouve que le projet fonctionne toujours, et committe — bien plus sûr que de tout mettre à jour d'un coup."},"knip-until-clean":{"name":"Élaguer le code mort jusqu'au propre","description":"Traque les exports non référencés, les fichiers orphelins et les dépendances que personne n'importe, supprime-les en toute sécurité, et continue jusqu'à ce que le scanner de code mort n'ait plus rien à signaler."},"docs-sync-after-edits":{"name":"Synchroniser la doc au code","description":"Après une série de modifications de code, retrouve chaque doc concernée — README, référence API, commentaires inline — et remets-la en phase avec le comportement réel du code."},"security-audit-weekly":{"name":"Audit de sécurité hebdo","description":"Lance chaque semaine un scan de vulnérabilités sur l'arbre des dépendances, trie les résultats par gravité et exposition réelle, et restitue un plan de remédiation priorisé."},"npm-audit-fix-loop":{"name":"Corriger les vulnérabilités une à une","description":"Traite les alertes de dépendances critiques et élevées de manière maîtrisée — une correction par passe, chacune vérifiée contre la suite de tests — plutôt qu'un force-fix aveugle qui peut casser le build en silence."},"api-contract-until-match":{"name":"Contrat API jusqu'à correspondance","description":"Fais évoluer l'implémentation jusqu'à ce que ses réponses respectent le contrat API publié, en comblant tout écart entre ce que le schéma promet et ce que les handlers renvoient réellement."},"openapi-sync-until-valid":{"name":"Synchroniser OpenAPI jusqu'à validité","description":"Maintiens le document OpenAPI bien formé et fidèle aux vrais handlers de routes, en corrigeant les erreurs de spec et les écarts code/doc à chaque passe jusqu'à ce que le lint soit satisfait."},"migration-until-applied":{"name":"Migration jusqu'à application","description":"Fais avancer proprement le schéma de la base : exécute les migrations en attente, répare les défauts de schéma ou de SQL qu'elles révèlent, et confirme que l'historique de migration reste cohérent."},"bundle-size-budget":{"name":"Budget de taille du bundle","description":"Livre la fonctionnalité sans faire dépasser au bundle client son budget — mesure à chaque passe puis élague, découpe le code ou charge à la demande jusqu'à ce que le seuil de taille soit au vert."},"changelog-sync-after-ship":{"name":"Synchroniser le changelog après livraison","description":"Après une livraison, assure-toi que le changelog raconte l'histoire côté utilisateur : passe en revue ce qui a été livré, rédige des entrées au format Keep a Changelog, et confirme que rien de visible n'a été oublié."},"guardrails-learning-loop":{"name":"Boucle d'apprentissage des garde-fous","description":"Itère sur les contrôles jusqu'à les faire passer au vert, mais chaque fois qu'un contrôle échoue deux fois de la même manière, note d'abord un garde-fou pour que la boucle ne gaspille jamais d'itérations à retenter une approche déjà vouée à l'échec."},"ralph-story-executor":{"name":"Exécuteur de stories du backlog","description":"Traite un backlog de user stories une à une avec un contexte neuf à chaque passe : prends la prochaine story inachevée, construis-la seule, prouve que les contrôles du projet restent au vert, committe, et marque-la terminée avant de passer à la suivante."},"investigation-script-loop":{"name":"Boucle de script d'investigation","description":"Cerne empiriquement la vraie cause d'un bug : écris un petit script jetable qui exerce le comportement suspect, lance-le, lis la sortie réelle, et affine la sonde jusqu'à ce que la sortie elle-même prouve la cause racine."},"reflexion-debug-loop":{"name":"Boucle de debug réflexive","description":"Fais passer un test en échec au vert sans tourner en rond : à chaque tentative ratée, note une courte réflexion sur disque et consulte-la avant l'essai suivant, pour que la boucle ne répète jamais une correction déjà écartée."},"merge-conflict-resolver":{"name":"Résolveur de conflits de merge","description":"Mets la branche à jour avec sa cible par un rebase, puis résous chaque fichier en conflit un par un en préservant l'intention des deux côtés, et prouve que le résultat passe toujours avant de déclarer la branche à jour."},"staging-smoke-test":{"name":"Smoke test de staging","description":"Après un déploiement en staging, déroule une checklist de smoke test fixe — auth, parcours utilisateur principaux, intégrations clés — en corrigeant le plus petit problème à chaque casse et en relançant jusqu'à ce que toute la checklist revienne propre."},"deploy-verification-loop":{"name":"Boucle de vérification de déploiement","description":"Une fois le déploiement sorti, interroge les endpoints de santé et de smoke test à intervalle régulier, en investiguant et corrigeant ou escaladant toute réponse non saine, et continue de vérifier jusqu'à ce que chaque endpoint configuré reporte un succès."},"factory_openspec":{"name":"OpenSpec Lifecycle","description":"Cycle OpenSpec du ticket à l'archive : générer les artefacts (opsx:ff) → implémenter (opsx:apply) → vérifier (opsx:verify) ; en cas de FAIL, reboucle et amende le même change ; en cas de PASS, archive sans intervention."}}`),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 importé`,done_other:`{{count}} loops importés`,skipped_one:`{{count}} doublon ignoré : {{names}}`,skipped_other:`{{count}} doublons ignorés : {{names}}`,invalid:`Ce fichier n'est pas un export de loops valide.`}};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
|
+
var e=`Loops`,t=`Boucles d'automatisation réutilisables — partagées entre tous vos projets.`,n=`Nouvelle boucle`,r={drafts:`Brouillons`,published:`Publiées`,templates:`Modèles`,builtIn:`Intégrés`},i={search:`Rechercher des modèles…`,noResults:`Aucun modèle ne correspond à vos filtres.`,clearFilter:`Effacer les filtres`,resultCount_one:`{{count}} modèle`,resultCount_other:`{{count}} modèles`,needsSpec:`Spec requise`,standalone:`Autonome`,needsSpecHint:`S'exécute sur un rail avec une spec glissée`,standaloneHint:`S'exécute seule — il suffit de choisir un projet`},a={API:`API`,Automation:`Automatisation`,CI:`CI`,Database:`Base de données`,Debugging:`Débogage`,DevOps:`DevOps`,Docs:`Docs`,Git:`Git`,Maintenance:`Maintenance`,Performance:`Performance`,Planning:`Planification`,Quality:`Qualité`,Review:`Revue`,Security:`Sécurité`,Testing:`Tests`},o={draft:`Brouillon`,published:`Publiée`,running:`En cours`},s={title:`Aucune boucle pour l'instant`,body:`Créez-en une de zéro ou partez d'un modèle.`},c={edit:`Modifier`,delete:`Supprimer`,publish:`Publier`,unpublish:`Dépublier`,duplicate:`Dupliquer`,use:`Utiliser le modèle`,preview:`Aperçu`,fork:`Dupliquer pour éditer`,run:`Exécuter`,export:`Exporter`,import:`Importer`,select:`Sélectionner {{name}}`},l={nodes_one:`{{count}} nœud`,nodes_other:`{{count}} nœuds`,usedIn:`En cours d'utilisation · {{project}}`},u=`Supprimer cette boucle ? Elle disparaîtra de tous les sélecteurs de rail.`,d=`Nouvelle boucle`,f={load:`Échec du chargement des boucles`,save:`Échec de l'enregistrement de la boucle`,publishInvalid:`Cette boucle ne peut pas encore être publiée — corrigez les problèmes signalés.`},p={back:`Retour aux boucles`,save:`Enregistrer`,saved:`Boucle enregistrée`,publish:`Publier`,published:`Boucle publiée`,addNode:`Ajouter un nœud`,deleteNode:`Supprimer le nœud`,config:{maxIterations:`Itérations max`,timeout:`Délai (min)`,maxIterationsHint:`Plafond d'itérations du Loop Decider — la boucle s'arrête une fois atteint, même si l'objectif n'est pas rempli. Évite les boucles infinies.`,timeoutHint:`Limite de temps réel pour toute l'exécution, en minutes. Si dépassée, l'exécution est arrêtée et marquée échouée — un filet de sécurité avec le nombre max d'itérations.`,maxCost:`Coût max ($)`,maxCostHint:`Budget USD optionnel pour toute l’exécution. Vérifié ENTRE les étapes (le coût d’une étape n’est connu qu’à sa fin), la boucle s’arrête avant l’étape suivante une fois le total dépassé — peut dépasser d’une étape. Pour les fournisseurs non-Claude, le coût est estimé. Vide = aucune limite.`},nodes:{start:`Début`,"ai-step":`Étape IA`,shell:`Shell`,decider:`Décideur de boucle`,condition:`Condition`,end:`Fin`},inspector:{selectNode:`Sélectionnez un nœud pour le modifier.`,prompt:`Invite`,provider:`Fournisseur`,model:`Modèle`,effort:`Effort de raisonnement`,command:`Commande`,goal:`Objectif / critères d'arrêt`,join:`Jointure`,outcome:`Résultat`,startNote:`Le point d'entrée de la boucle. Connectez-le à la première étape.`,promptHint:`Cliquez ou glissez un jeton pour l'insérer dans le prompt.`,tokensSpec:`Champs du spec`,tokensJira:`Jira`,tokensCommands:`Commandes`,label:`Nom`},branch:{continue:`↻ Continuer`,stop:`✓ Arrêter`},edgesHelp:{label:`Comment les étapes se connectent`,body:`Les flèches définissent l'ORDRE d'exécution, pas les données — les boîtes n'ont pas de ports d'entrée et les arêtes ne transportent aucun paramètre. Chaque AI Step reprend automatiquement sa session (tout le contexte précédent) plus un bref résumé des étapes antérieures ; rien n'est câblé à la main. Le Loop Decider a deux sorties : ↻ Continuer (objectif non atteint → retour en boucle) et ✓ Arrêter (objectif atteint → sortie).`},arrange:{label:`Disposer`,vertical:`Vertical`,horizontal:`Horizontal`,grid:`Grille`,reset:`Réinitialiser`},constants:{label:`Constantes`,manage:`Gérer les constantes`,title:`Constantes du loop`,empty:`Aucune constante personnalisée.`,name:`NOM`,value:`valeur`,add:`Ajouter`,builtinBadge:`Intégrées`},paste:{done_one:`{{count}} étape collée`,done_other:`{{count}} étapes collées`},problems:{count_one:`{{count}} problème`,count_other:`{{count}} problèmes`,NO_START:`Ajoutez un nœud de départ.`,MULTIPLE_START:`Un seul nœud de départ est autorisé.`,NO_END:`Ajoutez au moins un nœud de fin.`,ORPHAN:`Cette étape n'est pas accessible depuis le départ.`,DECIDER_BRANCHES:`Le Loop Decider a besoin d'une branche Continuer et d'une branche Arrêter.`,EMPTY_PROMPT:`L'AI Step a un prompt vide.`,EMPTY_COMMAND:`L'étape Shell a une commande vide.`,EMPTY_GOAL:`Le Loop Decider n'a pas d'objectif.`,DEAD_END:`Cette étape n'a aucune connexion sortante.`},preview:{label:`Aperçu`,title:`Aperçu (dry-run)`,sampleNote:`Les valeurs du spec sont des exemples ; commandes et constantes sont résolues telles qu'à l'exécution.`,empty:`Aucune étape à prévisualiser.`,error:`Échec de l'aperçu`}},m={steps:`Étapes`,limits:`{{iterations}} itérations max · {{timeout}} min de délai`,openInBuilder:`Ouvrir dans le builder`,builtin:`Intégré`},h=`Intégré`,g={title:`Exécuter {{name}}`,subtitle:`Lance ce loop sur un projet (sans ticket).`,project:`Projet`,provider:`Fournisseur`,model:`Modèle`,effort:`Effort de raisonnement`,execute:`Exécuter`,noProjects:`Aucun projet disponible.`,launched:`Exécution de {{name}}`},_=JSON.parse(`{"ship-and-green":{"name":"Ship & Green","description":"Totalement autonome : implémente le spec, vérifie, puis corrige en cas d'échec — en bouclant vérifier → corriger → vérifier jusqu'à ce que tout soit au vert. Aucune intervention humaine."},"verify-pass":{"name":"Passe de vérification","description":"Vérification et correction autonomes : détecte et lance le build/lint/tests du projet, puis corrige en cas d'échec — vérifier → corriger → vérifier jusqu'au vert."},"ci-watch":{"name":"Surveillance CI","description":"Interroge les contrôles CI sur la PR ouverte (l'agent utilise l'outillage CI du dépôt) jusqu'à ce que chaque contrôle soit au vert."},"lint-and-fix":{"name":"Lint & correction","description":"L'agent détecte et lance le linter du projet et corrige chaque problème, en itérant jusqu'à ce que le code soit propre."},"type-safe":{"name":"Types sûrs","description":"L'agent détecte et lance le vérificateur de types du projet et résout chaque erreur, en itérant jusqu'à ce qu'il passe sans accroc."},"coverage-climb":{"name":"Montée de couverture","description":"L'agent lance l'outillage de couverture du projet et ajoute des tests ciblés jusqu'à ce que les seuils soient atteints."},"build-fix":{"name":"Correction de build","description":"L'agent détecte et lance le build de production du projet et corrige les erreurs de compilation/bundle jusqu'à ce qu'il soit au vert."},"deploy-check":{"name":"Contrôle de deploy","description":"L'agent interroge l'état de deploy/santé (à l'aide de l'outillage de deploy du projet) jusqu'à ce que le service se déclare en bonne santé."},"factory_implement":{"name":"Implémenter","description":"Totalement autonome : implémente le spec, vérifie, puis corrige en cas d'échec — en bouclant jusqu'à ce que tous les tests passent."},"factory_batch":{"name":"Implémentation par lots","description":"Implémente d'un coup tous les tickets du rail, puis vérifie et corrige en cas d'échec jusqu'au vert."},"factory_freestyle":{"name":"Freestyle","description":"Confie la spec directement au modèle en toute liberté — sans pipeline, il travaille comme un agent de code classique, puis vérifie + affine jusqu'au vert. Claude uniquement."},"autoloop-tdd":{"name":"Autoloop TDD","description":"Un cycle red-green-refactor strict pour {{spec.title}} : chaque comportement est d'abord verrouillé par un test qui échoue, puis on écrit juste ce qu'il faut de code pour le faire passer au vert, avant de nettoyer — en répétant jusqu'à couvrir entièrement la spec."},"e2e-until-green":{"name":"E2E jusqu'au vert","description":"Lance la suite E2E pour {{spec.title}}, diagnostique chaque parcours utilisateur en échec, corrige le défaut d'UI ou d'intégration sous-jacent, et continue le cycle jusqu'à ce que toutes les specs E2E passent."},"flaky-test-triage":{"name":"Tri des tests instables","description":"Relance plusieurs fois les tests en échec autour de {{spec.title}} pour distinguer les vraies régressions des instabilités passagères, puis répare les vraies casses et stabilise ou documente les tests instables."},"independent-verifier-pass":{"name":"Vérification indépendante","description":"Une vérification adversariale de {{spec.title}} : relance build, lint et tests à zéro, ne fais confiance qu'à la sortie brute des commandes (jamais à un « ça marche » antérieur), et fais remonter ou corrige chaque écart."},"post-edit-test-guard":{"name":"Garde-fou post-édition","description":"Après chaque lot de modifications pour {{spec.title}}, lance aussitôt l'ensemble de tests le plus ciblé touchant les fichiers modifiés — pour attraper les régressions dès leur apparition plutôt qu'à la fin."},"post-merge-regression-guard":{"name":"Garde anti-régression post-merge","description":"Juste après qu'un merge ou un rebase fait entrer le travail des autres dans {{spec.title}}, lance le smoke test rapide pour repérer immédiatement toute casse d'intégration — avant de bâtir de nouvelles fonctionnalités par-dessus."},"pre-commit-guard":{"name":"Garde pré-commit","description":"Un verrou de sécurité pour {{spec.title}} qui intercepte chaque commit : la suite de tests passe d'abord, et le commit est refusé tant qu'elle est au rouge, pour que du code cassé n'entre jamais dans l'historique."},"visual-regression-until-match":{"name":"Régression visuelle jusqu'à correspondance","description":"Capture des instantanés visuels de l'UI modifiée, traque chaque écart de pixels involontaire, et corrige jusqu'à ce que la suite visuelle soit au vert avec uniquement les changements de design approuvés."},"format-until-clean":{"name":"Formater jusqu'au propre","description":"Applique le formateur du projet, règle les quelques problèmes de style qu'il ne peut pas corriger automatiquement, et continue jusqu'à ce qu'un nouveau passage ne touche plus rien dans l'arbre de travail."},"lint-typecheck-fix":{"name":"Corriger lint et typage","description":"Lance le lint et le vérificateur de types, résous chaque problème signalé avec la modification la plus minime possible, et boucle jusqu'à ce que les deux contrôles reviennent parfaitement propres."},"a11y-audit-until-clean":{"name":"Audit a11y jusqu'au propre","description":"Lance les contrôles d'accessibilité automatisés sur les écrans modifiés, corrige les violations catégorie par catégorie, et répète jusqu'à ce que l'audit ne remonte plus aucun problème."},"de-sloppify-pass":{"name":"Passe de nettoyage","description":"Une fois la fonctionnalité livrée, balaie le diff pour traquer les restes négligés — sorties de debug, branches mortes, noms bâclés, fonctions surchargées — nettoie-les, et prouve que le nettoyage n'a rien cassé."},"fix-ci-until-green":{"name":"Réparer la CI jusqu'au vert","description":"Récupère le dernier run CI rouge de cette branche, reproduis la casse en local, corrige la vraie cause, pousse, et continue le cycle jusqu'à ce que tous les contrôles soient au vert."},"pr-babysitter":{"name":"Nounou de PR","description":"À intervalle régulier, passe en revue les pull requests que tu surveilles et garde chacune fusionnable : relance la CI rouge, rebase celles en retard sur la branche de base, et relance celles qui stagnent — en escaladant tout ce qui demande une décision humaine."},"pr-watch-loop":{"name":"Boucle de veille PR","description":"Interroge à cadence régulière les pull requests de ta liste de veille, résume l'état de la CI et de la revue de chacune, puis règle les blocages triviaux ou fais remonter ce qui requiert un responsable."},"pr-self-review":{"name":"Auto-revue de PR","description":"Critique ton propre diff comme le ferait un reviewer senior exigeant, corrige ce que tu trouves, et re-révise jusqu'à ce qu'un passage propre ne remonte plus rien de critique — avant même que la PR ne quitte tes mains."},"spec-first-ship":{"name":"Livrer par la spec","description":"Mène une checklist d'exigences écrite jusqu'au bout, point par point — chaque passe implémente une seule exigence non cochée, la prouve et la coche — pour que la spec soit le contrat du « terminé »."},"dependency-audit-weekly":{"name":"Audit hebdo des dépendances","description":"Chaque semaine, fais le point sur les paquets en retard, trie-les entre mises à jour sûres et risquées, et restitue un plan de montée de version clair et actionnable."},"dependency-upgrade-one-by-one":{"name":"Mettre à jour une dépendance à la fois","description":"Monte exactement un paquet obsolète par passe, répare ce que la montée casse, prouve que le projet fonctionne toujours, et committe — bien plus sûr que de tout mettre à jour d'un coup."},"knip-until-clean":{"name":"Élaguer le code mort jusqu'au propre","description":"Traque les exports non référencés, les fichiers orphelins et les dépendances que personne n'importe, supprime-les en toute sécurité, et continue jusqu'à ce que le scanner de code mort n'ait plus rien à signaler."},"docs-sync-after-edits":{"name":"Synchroniser la doc au code","description":"Après une série de modifications de code, retrouve chaque doc concernée — README, référence API, commentaires inline — et remets-la en phase avec le comportement réel du code."},"security-audit-weekly":{"name":"Audit de sécurité hebdo","description":"Lance chaque semaine un scan de vulnérabilités sur l'arbre des dépendances, trie les résultats par gravité et exposition réelle, et restitue un plan de remédiation priorisé."},"npm-audit-fix-loop":{"name":"Corriger les vulnérabilités une à une","description":"Traite les alertes de dépendances critiques et élevées de manière maîtrisée — une correction par passe, chacune vérifiée contre la suite de tests — plutôt qu'un force-fix aveugle qui peut casser le build en silence."},"api-contract-until-match":{"name":"Contrat API jusqu'à correspondance","description":"Fais évoluer l'implémentation jusqu'à ce que ses réponses respectent le contrat API publié, en comblant tout écart entre ce que le schéma promet et ce que les handlers renvoient réellement."},"openapi-sync-until-valid":{"name":"Synchroniser OpenAPI jusqu'à validité","description":"Maintiens le document OpenAPI bien formé et fidèle aux vrais handlers de routes, en corrigeant les erreurs de spec et les écarts code/doc à chaque passe jusqu'à ce que le lint soit satisfait."},"migration-until-applied":{"name":"Migration jusqu'à application","description":"Fais avancer proprement le schéma de la base : exécute les migrations en attente, répare les défauts de schéma ou de SQL qu'elles révèlent, et confirme que l'historique de migration reste cohérent."},"bundle-size-budget":{"name":"Budget de taille du bundle","description":"Livre la fonctionnalité sans faire dépasser au bundle client son budget — mesure à chaque passe puis élague, découpe le code ou charge à la demande jusqu'à ce que le seuil de taille soit au vert."},"changelog-sync-after-ship":{"name":"Synchroniser le changelog après livraison","description":"Après une livraison, assure-toi que le changelog raconte l'histoire côté utilisateur : passe en revue ce qui a été livré, rédige des entrées au format Keep a Changelog, et confirme que rien de visible n'a été oublié."},"guardrails-learning-loop":{"name":"Boucle d'apprentissage des garde-fous","description":"Itère sur les contrôles jusqu'à les faire passer au vert, mais chaque fois qu'un contrôle échoue deux fois de la même manière, note d'abord un garde-fou pour que la boucle ne gaspille jamais d'itérations à retenter une approche déjà vouée à l'échec."},"ralph-story-executor":{"name":"Exécuteur de stories du backlog","description":"Traite un backlog de user stories une à une avec un contexte neuf à chaque passe : prends la prochaine story inachevée, construis-la seule, prouve que les contrôles du projet restent au vert, committe, et marque-la terminée avant de passer à la suivante."},"investigation-script-loop":{"name":"Boucle de script d'investigation","description":"Cerne empiriquement la vraie cause d'un bug : écris un petit script jetable qui exerce le comportement suspect, lance-le, lis la sortie réelle, et affine la sonde jusqu'à ce que la sortie elle-même prouve la cause racine."},"reflexion-debug-loop":{"name":"Boucle de debug réflexive","description":"Fais passer un test en échec au vert sans tourner en rond : à chaque tentative ratée, note une courte réflexion sur disque et consulte-la avant l'essai suivant, pour que la boucle ne répète jamais une correction déjà écartée."},"merge-conflict-resolver":{"name":"Résolveur de conflits de merge","description":"Mets la branche à jour avec sa cible par un rebase, puis résous chaque fichier en conflit un par un en préservant l'intention des deux côtés, et prouve que le résultat passe toujours avant de déclarer la branche à jour."},"staging-smoke-test":{"name":"Smoke test de staging","description":"Après un déploiement en staging, déroule une checklist de smoke test fixe — auth, parcours utilisateur principaux, intégrations clés — en corrigeant le plus petit problème à chaque casse et en relançant jusqu'à ce que toute la checklist revienne propre."},"deploy-verification-loop":{"name":"Boucle de vérification de déploiement","description":"Une fois le déploiement sorti, interroge les endpoints de santé et de smoke test à intervalle régulier, en investiguant et corrigeant ou escaladant toute réponse non saine, et continue de vérifier jusqu'à ce que chaque endpoint configuré reporte un succès."},"factory_openspec":{"name":"OpenSpec Lifecycle","description":"Cycle OpenSpec du ticket à l'archive : générer les artefacts (opsx:ff) → implémenter (opsx:apply) → vérifier (opsx:verify) ; en cas de FAIL, reboucle et amende le même change ; en cas de PASS, archive sans intervention."}}`),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 importé`,done_other:`{{count}} loops importés`,skipped_one:`{{count}} doublon ignoré : {{names}}`,skipped_other:`{{count}} doublons ignorés : {{names}}`,invalid:`Ce fichier n'est pas un export de loops valide.`}};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};
|