@rt-tools/agent-kit 0.11.0 → 0.13.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/assets/checks/board-runs.github.mjs +87 -0
- package/assets/checks/board.github.mjs +0 -40
- package/assets/checks/check-board.github.mjs +39 -8
- package/assets/checks/check-file-size.mjs +19 -4
- package/assets/checks/check-schema-drift.mjs +28 -5
- package/assets/checks/check-state-next.mjs +10 -2
- package/assets/checks/rt-kit-checks.config.mjs +28 -2
- package/assets/commands/feedback.md +8 -0
- package/assets/defaults/project.sh +59 -6
- package/assets/defaults/turn-map.md +8 -6
- package/assets/hooks/browser-guard-device-id.sh +3 -1
- package/assets/hooks/browser-guard-no-asking.sh +3 -1
- package/assets/hooks/browser-guard-no-other-drivers.sh +6 -4
- package/assets/hooks/browser-guard-require-select.sh +4 -2
- package/assets/hooks/claim-guard.sh +3 -1
- package/assets/hooks/conscience-guard.sh +3 -1
- package/assets/hooks/dev-server-guard.sh +6 -4
- package/assets/hooks/dispatch.sh +69 -0
- package/assets/hooks/docs-guard.sh +6 -4
- package/assets/hooks/exam-guard.sh +5 -3
- package/assets/hooks/git-guard-delivery-folder.sh +99 -0
- package/assets/hooks/git-guard-delivery-signature.sh +10 -4
- package/assets/hooks/git-guard-delivery.sh +58 -74
- package/assets/hooks/git-guard-main.sh +6 -4
- package/assets/hooks/git-guard-push-tests.sh +8 -6
- package/assets/hooks/grill-gate.sh +4 -2
- package/assets/hooks/handoff-entry-guard.sh +4 -2
- package/assets/hooks/handoff-write.sh +27 -6
- package/assets/hooks/hook-input.sh +77 -0
- package/assets/hooks/lint-after-edit.sh +5 -3
- package/assets/hooks/override-write-guard.sh +107 -0
- package/assets/hooks/postmortem-guard.sh +3 -1
- package/assets/hooks/proposal-guard.sh +3 -1
- package/assets/hooks/prose-style-guard.sh +5 -3
- package/assets/hooks/qa-dataid-guard.sh +4 -2
- package/assets/hooks/rerun-guard.sh +6 -4
- package/assets/hooks/reuse-first-guard.sh +5 -3
- package/assets/hooks/rule-article.sh +99 -0
- package/assets/hooks/rule-source-guard.sh +126 -0
- package/assets/hooks/skill-gate-rearm.sh +3 -1
- package/assets/hooks/skill-gate.sh +23 -2
- package/assets/hooks/skill-loaded.sh +3 -1
- package/assets/hooks/sql-guard-request.sh +2 -1
- package/assets/hooks/sql-guard.sh +4 -2
- package/assets/hooks/task-flow-guard.sh +24 -4
- package/assets/hooks/turn-exit-guard.sh +59 -17
- package/assets/hooks/waiting-turn-guard.sh +3 -1
- package/assets/hooks/window-fill-guard.sh +6 -4
- package/assets/laws/work-conduct.md +5 -9
- package/assets/patterns/dependencies-upgrade.md +1 -1
- package/assets/patterns/doc-style-write.md +3 -3
- package/assets/patterns/git-workflow-commit.azure.md +2 -202
- package/assets/patterns/git-workflow-commit.github.md +2 -258
- package/assets/patterns/git-workflow-commit.gitlab.md +1 -217
- package/assets/patterns/git-workflow-docker.md +3 -3
- package/assets/patterns/git-workflow-merge.md +3 -2
- package/assets/patterns/git-workflow-migration.md +3 -3
- package/assets/patterns/git-workflow-pr.azure.md +224 -0
- package/assets/patterns/git-workflow-pr.github.md +280 -0
- package/assets/patterns/git-workflow-pr.gitlab.md +240 -0
- package/assets/patterns/git-workflow-restart.md +3 -3
- package/assets/patterns/git-workflow-secrets.md +3 -3
- package/assets/patterns/task-flow-archive.md +195 -0
- package/assets/patterns/task-flow-close.md +72 -240
- package/assets/patterns/task-flow-handoff.md +4 -4
- package/assets/patterns/task-flow-resume.md +5 -3
- package/assets/pitfalls/agent-kit.md +80 -0
- package/assets/pitfalls/doc-style.md +80 -0
- package/assets/pitfalls/git-workflow.azure.md +50 -0
- package/assets/pitfalls/git-workflow.github.md +78 -0
- package/assets/pitfalls/git-workflow.gitlab.md +49 -0
- package/assets/pitfalls/spec-driven.md +36 -0
- package/assets/pitfalls/styling-bem.md +45 -0
- package/assets/pitfalls/task-flow.md +62 -0
- package/assets/pitfalls/testing.md +70 -0
- package/assets/rules/deploy-flow.azure.md +114 -0
- package/assets/rules/deploy-flow.github.md +122 -0
- package/assets/rules/deploy-flow.gitlab.md +116 -0
- package/assets/rules/doc-style.md +25 -76
- package/assets/rules/git-workflow.azure.md +6 -92
- package/assets/rules/git-workflow.github.md +20 -128
- package/assets/rules/git-workflow.gitlab.md +6 -93
- package/assets/rules/spec-driven.md +39 -30
- package/assets/rules/styling-bem.md +20 -39
- package/assets/rules/task-flow.md +56 -222
- package/assets/rules/testing.md +3 -64
- package/assets/rules/turn-conduct.md +210 -0
- package/assets/rules/typescript-conventions.md +15 -0
- package/assets/skills/agent-kit.md +67 -89
- package/assets/templates/pitfalls.md +10 -0
- package/assets/templates/proposal.md +16 -1
- package/assets/templates/rule.md +5 -3
- package/bin/agent-kit.d.ts.map +1 -1
- package/bin/agent-kit.js +1 -42
- package/bin/agent-kit.js.map +1 -1
- package/lib/assets.d.ts.map +1 -1
- package/lib/assets.js +6 -1
- package/lib/assets.js.map +1 -1
- package/lib/cascade.d.ts.map +1 -1
- package/lib/cascade.js +19 -1
- package/lib/cascade.js.map +1 -1
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +1 -0
- package/lib/commands.js.map +1 -1
- package/lib/config.d.ts +16 -1
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +8 -0
- package/lib/config.js.map +1 -1
- package/lib/hooks-map.d.ts +13 -0
- package/lib/hooks-map.d.ts.map +1 -1
- package/lib/hooks-map.js +33 -1
- package/lib/hooks-map.js.map +1 -1
- package/lib/proposals.d.ts +5 -1
- package/lib/proposals.d.ts.map +1 -1
- package/lib/proposals.js +74 -5
- package/lib/proposals.js.map +1 -1
- package/lib/ship.d.ts +1 -2
- package/lib/ship.d.ts.map +1 -1
- package/lib/ship.js +0 -54
- package/lib/ship.js.map +1 -1
- package/lib/shipment.d.ts.map +1 -1
- package/lib/shipment.fixture.d.ts +39 -0
- package/lib/shipment.fixture.d.ts.map +1 -0
- package/lib/shipment.fixture.js +99 -0
- package/lib/shipment.fixture.js.map +1 -0
- package/lib/shipment.js +59 -7
- package/lib/shipment.js.map +1 -1
- package/package.json +1 -1
- package/rt-tools-agent-kit-0.13.0.tgz +0 -0
- package/assets/commands/agent-kit-digest.md +0 -89
- package/assets/commands/rules-review.md +0 -98
- package/assets/patterns/cargo-triage-mark.md +0 -119
- package/assets/rules/cargo-triage.md +0 -126
- package/lib/cargo-state.d.ts +0 -62
- package/lib/cargo-state.d.ts.map +0 -1
- package/lib/cargo-state.js +0 -118
- package/lib/cargo-state.js.map +0 -1
- package/rt-tools-agent-kit-0.11.0.tgz +0 -0
package/lib/cargo-state.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cargo-state.js","sourceRoot":"","sources":["../../../projects/agent-kit/src/lib/cargo-state.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAA0E,MAAM,YAAY,CAAC;AAGxI,0FAA0F;AAC1F,MAAM,OAAO,GAAW,CAAC,CAAC;AAE1B,qDAAqD;AACrD,MAAM,CAAC,MAAM,eAAe,GAAW,cAAc,CAAC;AAEtD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,aAAa,GAAW,YAAY,CAAC;AAElD,mDAAmD;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAW,OAAO,CAAC;AAExC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAW,WAAW,CAAC;AAkChD,sEAAsE;AACtE,SAAS,UAAU,CAAC,IAAY;IAC5B,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,OAAO,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,OAAO,CACnB,IAAuB,EACvB,KAAa,EACb,WAAgC,EAAE,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;IAEnE,MAAM,KAAK,GAAsB,EAAE,CAAC;IAEpC,KAAK,IAAI,EAAE,GAAW,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,GAA2B,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAW,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAEvC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,qFAAqF;YACrF,kFAAkF;YAClF,2BAA2B;YAC3B,KAAK,CAAC,IAAI,CAAC;gBACP,IAAI;gBACJ,GAAG;gBACH,KAAK;gBACL,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClF,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,sBAAsB;AACtB,SAAS,OAAO,CAAC,GAAG,KAAwB;IACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,uEAAuE;AACvE,SAAS,QAAQ,CAAC,KAAiC,EAAE,KAAa;IAC9D,MAAM,WAAW,GAAW,KAAK,CAAC,MAAM,CAAC,CAAC,GAAoB,EAAW,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,MAAM,CAAC;IAE9G,OAAO,MAAM,KAAK,eAAe,WAAW,iBAAiB,KAAK,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;AAC9F,CAAC;AAED,sFAAsF;AACtF,MAAM,YAAY,GAAqC;IACnD,OAAO,EAAE,2BAA2B;IACpC,SAAS,EAAE,8BAA8B;IACzC,aAAa,EAAE,sCAAsC;IACrD,gBAAgB,EAAE,gDAAgD;IAClE,oBAAoB,EAAE,yCAAyC;IAC/D,uBAAuB,EAAE,mDAAmD;CAC/E,CAAC;AAEF,4DAA4D;AAC5D,SAAS,UAAU,CAAC,IAAY,EAAE,GAAW,EAAE,MAAc;IACzD,MAAM,GAAG,GAAW,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;IAEnD,OAAO,KAAK,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,IAAI,GAAG,MAAM,GAAG,EAAE,CAAC;AACnF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAqB;IAC5C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC,cAAc,OAAO,CAAC,KAAK,aAAa,EAAE,WAAW,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,OAAO,CACV,4CAA4C,EAC5C,uBAAuB,eAAe,mCAAmC,aAAa,qBAAqB,CAC9G,CAAC;IACN,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,OAAO,CACV,oDAAoD,EACpD,yFAAyF,CAC5F,CAAC;IACN,CAAC;IAED,MAAM,IAAI,GAAoB;QAC1B,MAAM,EAAE,oBAAoB;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;KACvB,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO;YACH,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC,eAAe,OAAO,CAAC,MAAM,YAAY,OAAO,CAAC,IAAI,GAAG,EAAE,KAAK,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;SACnH,CAAC;IACN,CAAC;IAED,MAAM,MAAM,GAAY,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAEhF,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,YAAY,MAAM,CAAC,MAAM,IAAI,WAAW,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAwB,MAAM,CAAC,QAAQ,CAAC;IACvE,MAAM,OAAO,GAAW,cAAc,OAAO,gBAAgB,IAAI,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC;IAE7F,OAAO;QACH,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,KAAK,EAAE;YACH,cAAc,OAAO,CAAC,MAAM,YAAY,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;YAClE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAkD,EAAU,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;SAC3H;KACJ,CAAC;AACN,CAAC","sourcesContent":["/**\n * Отметка состояния груза: команда, которой исполнитель двигает свои записи в приёме.\n *\n * Разбор доводов и сборка пакета отделены от самого запроса нарочно — тем же приёмом, что и\n * отправка груза: спека подставляет двойник вызова и никуда не стучится, а всё, что можно\n * отбить до сети, отбивается до сети. Незнакомое состояние и вызов без записей — промахи\n * исполнителя, и запрос по ним не уходит вовсе.\n */\nimport { CARGO_SCHEMA_VERSION, CARGO_STATES, ICargoStateAccepted, ICargoStateBody, ICargoStateItem, TCargoStateKind } from './cargo.js';\nimport { IOutcomeOfCommand } from './commands.js';\n\n/** Код возврата у всего, что не легло: отбитая строка кончает команду ненулевым кодом. */\nconst REFUSED: number = 1;\n\n/** Довод, которым называется разбор происшествия. */\nexport const POSTMORTEM_FLAG: string = '--postmortem';\n\n/** Довод, которым называется предложение. */\nexport const PROPOSAL_FLAG: string = '--proposal';\n\n/** Довод текста починки: чем недочёт исправлен. */\nexport const FIX_FLAG: string = '--fix';\n\n/**\n * Довод версии выпуска: в какой версии искать фикс.\n *\n * Назван по выпуску, а не по версии: `--version` у команды строки запуска читается как «покажи\n * свою версию», и заняв его под другое, пакет получил бы две разные вещи под одним словом.\n */\nexport const RELEASE_FLAG: string = '--release';\n\n/** Что приём ответил на правку состояния. Отказ — такой же ответ, как принятое. */\nexport interface IMarked {\n readonly ok: boolean;\n /** Код ответа. Ноль — приём не ответил вовсе: не дозвонились, оборвалось, вышло время. */\n readonly status: number;\n readonly said: string;\n /** Ответ приёма. Пусто у отказа: два числа и отбитые строки он называет только у принятого. */\n readonly accepted: ICargoStateAccepted | null;\n}\n\n/** Чем отметка ходит в приём. Двойник в спеке — того же вида. */\nexport type TMarkCall = (intake: string, token: string, body: ICargoStateBody) => Promise<IMarked>;\n\n/** Приложенные к строке значения: что едет вместе с состоянием. */\nexport interface ICargoStateAttached {\n /** Чем недочёт исправлен. Пустая строка — довода не было. */\n readonly fixNote: string;\n /** В какой версии искать фикс. Пустая строка — довода не было. */\n readonly releaseVersion: string;\n}\n\n/** Всё, что отметке нужно знать: куда, чем представиться и что отмечать. */\nexport interface IMarkOptions {\n readonly intake: string;\n readonly tree: string;\n readonly token: string;\n readonly state: string;\n readonly items: readonly ICargoStateItem[];\n readonly dryRun: boolean;\n readonly call: TMarkCall;\n}\n\n/** Род записи по доводу, которым её назвали. Не наш довод — пусто. */\nfunction kindOfFlag(flag: string): TCargoStateKind | null {\n if (flag === POSTMORTEM_FLAG) {\n return 'postmortem';\n }\n\n return flag === PROPOSAL_FLAG ? 'proposal' : null;\n}\n\n/** Записи, названные доводами строки запуска: род у каждой свой, порядок — как их назвали. */\nexport function itemsOf(\n argv: readonly string[],\n state: string,\n attached: ICargoStateAttached = { fixNote: '', releaseVersion: '' }\n): readonly ICargoStateItem[] {\n const items: ICargoStateItem[] = [];\n\n for (let at: number = 0; at < argv.length; at += 1) {\n const kind: TCargoStateKind | null = kindOfFlag(argv[at]);\n const key: string = argv[at + 1] ?? '';\n\n if (kind && key && !key.startsWith('--')) {\n // Приложенное значение едет полем строки, а не своим вызовом: отметка одна, и все её\n // записи чинились одним разбором либо уехали одним выпуском — второго значения на\n // тот же вызов не задаётся\n items.push({\n kind,\n key,\n state,\n ...(attached.fixNote ? { fixNote: attached.fixNote } : {}),\n ...(attached.releaseVersion ? { releaseVersion: attached.releaseVersion } : {}),\n });\n }\n }\n\n return items;\n}\n\n/** Отказ строками. */\nfunction refusal(...lines: readonly string[]): IOutcomeOfCommand {\n return { code: REFUSED, lines: [...lines] };\n}\n\n/** Пакет одной строкой: её читает человек перед тем, как отправить. */\nfunction describe(items: readonly ICargoStateItem[], state: string): string {\n const postmortems: number = items.filter((one: ICargoStateItem): boolean => one.kind === 'postmortem').length;\n\n return `в «${state}»: разборов ${postmortems}, предложений ${items.length - postmortems}`;\n}\n\n/** Причина отбоя словами человека: их шесть, и по каждой видно, что делать дальше. */\nconst DENIAL_WORDS: Readonly<Record<string, string>> = {\n missing: 'такой записи у дерева нет',\n forbidden: 'переход не разрешён порядком',\n 'no-fix-note': 'переход в починку без довода `--fix`',\n 'extra-fix-note': 'довод `--fix` приехал не с переходом в починку',\n 'no-release-version': 'переход в выпуск без довода `--release`',\n 'extra-release-version': 'довод `--release` приехал не с переходом в выпуск',\n};\n\n/** Отбитая строка человеку: род, ключ и причина словами. */\nfunction deniedLine(kind: string, key: string, denial: string): string {\n const why: string = DENIAL_WORDS[denial] ?? denial;\n\n return ` ${kind === 'postmortem' ? 'разбор' : 'предложение'} ${key} — ${why}`;\n}\n\n/**\n * Отметить записи дерева названным состоянием.\n *\n * Порядок отказов не случаен: сперва то, что видно без сети, — незнакомое состояние, пустой\n * вызов, отсутствующий токен, — и только потом запрос. Холостой ход стоит последним из них:\n * он показывает собранный пакет, а собрать его можно лишь после того, как доводы сошлись.\n */\nexport async function mark(options: IMarkOptions): Promise<IOutcomeOfCommand> {\n if (!CARGO_STATES.includes(options.state)) {\n return refusal(`состояния «${options.state}» не бывает`, `бывают: ${CARGO_STATES.join(', ')}`);\n }\n\n if (options.items.length === 0) {\n return refusal(\n 'отмечать нечего: ни одной записи в доводах',\n `разбор называется \\`${POSTMORTEM_FLAG} <имя файла>\\`, предложение — \\`${PROPOSAL_FLAG} <признак текста>\\``\n );\n }\n\n if (!options.token) {\n return refusal(\n 'токена дерева нет: отметка осталась неотправленной',\n 'дерево заводится командой `enroll` — по коду приглашения либо токеном из админки приёма'\n );\n }\n\n const body: ICargoStateBody = {\n schema: CARGO_SCHEMA_VERSION,\n tree: options.tree,\n items: options.items,\n };\n\n if (options.dryRun) {\n return {\n code: 0,\n lines: [`уехало бы в ${options.intake}, дерево ${options.tree}:`, ` ${describe(options.items, options.state)}`],\n };\n }\n\n const marked: IMarked = await options.call(options.intake, options.token, body);\n\n if (!marked.ok || !marked.accepted) {\n return refusal(`${options.intake} ответил ${marked.status || 'молчанием'} — ${marked.said}`);\n }\n\n const { changed, same, denied }: ICargoStateAccepted = marked.accepted;\n const counted: string = `переведено ${changed}, уже стояло ${same}, отбито ${denied.length}`;\n\n return {\n code: denied.length ? REFUSED : 0,\n lines: [\n `отмечено в ${options.intake}, дерево ${options.tree}: ${counted}`,\n ...denied.map((one: { kind: string; key: string; denial: string }): string => deniedLine(one.kind, one.key, one.denial)),\n ],\n };\n}\n"]}
|
|
Binary file
|