@revisium/orchestrator 0.1.0-alpha.9 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +143 -157
  2. package/control-plane/default-playbook/catalog/pipelines.json +217 -8
  3. package/control-plane/default-playbook/package.json +1 -1
  4. package/control-plane/default-playbook/prompts/developer.md +1 -0
  5. package/control-plane/default-playbook/prompts/triager.md +3 -0
  6. package/dist/api/graphql-api/graphql-ws/subscription-mappers.js +3 -0
  7. package/dist/api/graphql-api/graphql-ws/subscription-mappers.js.map +1 -1
  8. package/dist/api/graphql-api/pr/inputs/pr-readiness.input.js +6 -0
  9. package/dist/api/graphql-api/pr/inputs/pr-readiness.input.js.map +1 -1
  10. package/dist/api/graphql-api/pr/model/pr-readiness.model.js +30 -0
  11. package/dist/api/graphql-api/pr/model/pr-readiness.model.js.map +1 -1
  12. package/dist/api/graphql-api/runs/inputs/create-run.input.js +6 -0
  13. package/dist/api/graphql-api/runs/inputs/create-run.input.js.map +1 -1
  14. package/dist/api/graphql-api/runs/model/run.model.js +6 -0
  15. package/dist/api/graphql-api/runs/model/run.model.js.map +1 -1
  16. package/dist/api/graphql-api/share/model/issue-ref.model.js +53 -0
  17. package/dist/api/graphql-api/share/model/issue-ref.model.js.map +1 -0
  18. package/dist/control-plane/bootstrap.js +14 -1
  19. package/dist/control-plane/bootstrap.js.map +1 -1
  20. package/dist/control-plane/client-transport.js +1 -1
  21. package/dist/control-plane/client-transport.js.map +1 -1
  22. package/dist/control-plane/default-playbook-policy.js +593 -0
  23. package/dist/control-plane/default-playbook-policy.js.map +1 -0
  24. package/dist/control-plane/seed-default-playbook.js +77 -8
  25. package/dist/control-plane/seed-default-playbook.js.map +1 -1
  26. package/dist/e2e/kit/agents.js +15 -21
  27. package/dist/e2e/kit/agents.js.map +1 -1
  28. package/dist/e2e/kit/assertions.js +12 -8
  29. package/dist/e2e/kit/assertions.js.map +1 -1
  30. package/dist/e2e/kit/fake-integrator.js +11 -2
  31. package/dist/e2e/kit/fake-integrator.js.map +1 -1
  32. package/dist/e2e/kit/git-target-repo.js +1 -1
  33. package/dist/engine/dbos.service.js +3 -0
  34. package/dist/engine/dbos.service.js.map +1 -1
  35. package/dist/features/pr/queries/impl/get-pr-readiness.query.js.map +1 -1
  36. package/dist/features/runs/commands/impl/create-run.command.js.map +1 -1
  37. package/dist/features/runs/queries/handlers/runs-query.handlers.js +1 -0
  38. package/dist/features/runs/queries/handlers/runs-query.handlers.js.map +1 -1
  39. package/dist/mcp/mcp-capabilities.js +14 -1
  40. package/dist/mcp/mcp-capabilities.js.map +1 -1
  41. package/dist/mcp/mcp-facade.service.js +306 -11
  42. package/dist/mcp/mcp-facade.service.js.map +1 -1
  43. package/dist/mcp/mcp-tools.js +41 -14
  44. package/dist/mcp/mcp-tools.js.map +1 -1
  45. package/dist/observability/activity-signal.js +107 -0
  46. package/dist/observability/activity-signal.js.map +1 -0
  47. package/dist/observability/index.js +1 -0
  48. package/dist/observability/index.js.map +1 -1
  49. package/dist/pipeline/data-driven-task.workflow.js +482 -40
  50. package/dist/pipeline/data-driven-task.workflow.js.map +1 -1
  51. package/dist/pipeline/pipeline.service.js +195 -101
  52. package/dist/pipeline/pipeline.service.js.map +1 -1
  53. package/dist/pipeline/route-contract.js +4 -3
  54. package/dist/pipeline/route-contract.js.map +1 -1
  55. package/dist/pipeline-core/kit/fixtures.js +72 -21
  56. package/dist/pipeline-core/kit/fixtures.js.map +1 -1
  57. package/dist/playbook/import-mapper.js +8 -1
  58. package/dist/playbook/import-mapper.js.map +1 -1
  59. package/dist/poller/pr-readiness-core.js +299 -28
  60. package/dist/poller/pr-readiness-core.js.map +1 -1
  61. package/dist/revisium/playbooks.service.js +17 -2
  62. package/dist/revisium/playbooks.service.js.map +1 -1
  63. package/dist/revisium/run.service.js +1 -0
  64. package/dist/revisium/run.service.js.map +1 -1
  65. package/dist/run/append-event.js +8 -5
  66. package/dist/run/append-event.js.map +1 -1
  67. package/dist/run/create-run.js +5 -1
  68. package/dist/run/create-run.js.map +1 -1
  69. package/dist/run/inspect-run.js +10 -3
  70. package/dist/run/inspect-run.js.map +1 -1
  71. package/dist/run/issue-ref.js +88 -0
  72. package/dist/run/issue-ref.js.map +1 -0
  73. package/dist/runners/claude-code.service.js +2 -2
  74. package/dist/runners/claude-code.service.js.map +1 -1
  75. package/dist/runners/codex.service.js +2 -2
  76. package/dist/runners/codex.service.js.map +1 -1
  77. package/dist/runners/integrator-branch-naming.js +13 -8
  78. package/dist/runners/integrator-branch-naming.js.map +1 -1
  79. package/dist/runners/integrator.js +254 -89
  80. package/dist/runners/integrator.js.map +1 -1
  81. package/dist/runners/worktree.service.js +2 -2
  82. package/dist/runners/worktree.service.js.map +1 -1
  83. package/dist/task-control-plane/pr-readiness.service.js +15 -13
  84. package/dist/task-control-plane/pr-readiness.service.js.map +1 -1
  85. package/dist/task-control-plane/run-watch.service.js +234 -3
  86. package/dist/task-control-plane/run-watch.service.js.map +1 -1
  87. package/dist/task-control-plane/task-control-plane-api.service.js +272 -25
  88. package/dist/task-control-plane/task-control-plane-api.service.js.map +1 -1
  89. package/dist/worker/artifact-store.js +21 -3
  90. package/dist/worker/artifact-store.js.map +1 -1
  91. package/dist/worker/build-context.js +19 -3
  92. package/dist/worker/build-context.js.map +1 -1
  93. package/dist/worker/claude-code-runner.js +76 -15
  94. package/dist/worker/claude-code-runner.js.map +1 -1
  95. package/dist/worker/codex-runner.js +40 -13
  96. package/dist/worker/codex-runner.js.map +1 -1
  97. package/dist/worker/process-executor.js +149 -20
  98. package/dist/worker/process-executor.js.map +1 -1
  99. package/dist/worker/runner-common.js +29 -0
  100. package/dist/worker/runner-common.js.map +1 -1
  101. package/dist/worker/runner.js +16 -1
  102. package/dist/worker/runner.js.map +1 -1
  103. package/package.json +1 -1
@@ -23,11 +23,11 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
23
23
  import { Injectable, Inject } from '@nestjs/common';
24
24
  import { join } from 'node:path';
25
25
  import { createClaudeCodeRunner } from '../worker/claude-code-runner.js';
26
+ import { DEFAULT_RUNNER_WALL_CLOCK_LIMIT_MS } from '../worker/process-executor.js';
26
27
  import { createArtifactStore } from '../worker/artifact-store.js';
27
28
  import { RunService } from '../revisium/run.service.js';
28
29
  import { PROCESS_EXECUTOR } from './tokens.js';
29
30
  import { getConfig } from '../config.js';
30
- const DEFAULT_TIMEOUT_MS = 600_000;
31
31
  let ClaudeCodeService = class ClaudeCodeService {
32
32
  runService;
33
33
  runner;
@@ -36,7 +36,7 @@ let ClaudeCodeService = class ClaudeCodeService {
36
36
  this.runner = createClaudeCodeRunner({
37
37
  executor,
38
38
  resolveCwd: this.runService.makeResolveCwd(),
39
- timeoutMs: DEFAULT_TIMEOUT_MS,
39
+ timeoutMs: DEFAULT_RUNNER_WALL_CLOCK_LIMIT_MS,
40
40
  artifactStore: createArtifactStore(join(getConfig().dataDir, 'run-artifacts')),
41
41
  });
42
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.service.js","sourceRoot":"","sources":["../../src/runners/claude-code.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAGzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAG5B,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAMT;IALF,MAAM,CAAW;IAElC,YAC4B,QAAyB,EAElC,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;QAEvC,IAAI,CAAC,MAAM,GAAG,sBAAsB,CAAC;YACnC,QAAQ;YACR,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;YAC5C,SAAS,EAAE,kBAAkB;YAC7B,aAAa,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,GAAG,GAAa,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC7C,CAAA;AAlBY,iBAAiB;IAD7B,UAAU,EAAE;IAKR,WAAA,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACxB,WAAA,MAAM,CAAC,UAAU,CAAC,CAAA;+CACU,UAAU;GAN9B,iBAAiB,CAkB7B"}
1
+ {"version":3,"file":"claude-code.service.js","sourceRoot":"","sources":["../../src/runners/claude-code.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,EAAE,kCAAkC,EAAwB,MAAM,+BAA+B,CAAC;AACzG,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGlC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAMT;IALF,MAAM,CAAW;IAElC,YAC4B,QAAyB,EAElC,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;QAEvC,IAAI,CAAC,MAAM,GAAG,sBAAsB,CAAC;YACnC,QAAQ;YACR,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;YAC5C,SAAS,EAAE,kCAAkC;YAC7C,aAAa,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,GAAG,GAAa,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC7C,CAAA;AAlBY,iBAAiB;IAD7B,UAAU,EAAE;IAKR,WAAA,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACxB,WAAA,MAAM,CAAC,UAAU,CAAC,CAAA;+CACU,UAAU;GAN9B,iBAAiB,CAkB7B"}
@@ -24,8 +24,8 @@ import { getConfig } from '../config.js';
24
24
  import { RunService } from '../revisium/run.service.js';
25
25
  import { createArtifactStore } from '../worker/artifact-store.js';
26
26
  import { createCodexRunner } from '../worker/codex-runner.js';
27
+ import { DEFAULT_RUNNER_WALL_CLOCK_LIMIT_MS } from '../worker/process-executor.js';
27
28
  import { PROCESS_EXECUTOR } from './tokens.js';
28
- const DEFAULT_TIMEOUT_MS = 600_000;
29
29
  let CodexService = class CodexService {
30
30
  runService;
31
31
  runner;
@@ -34,7 +34,7 @@ let CodexService = class CodexService {
34
34
  this.runner = createCodexRunner({
35
35
  executor,
36
36
  resolveCwd: this.runService.makeResolveCwd(),
37
- timeoutMs: DEFAULT_TIMEOUT_MS,
37
+ timeoutMs: DEFAULT_RUNNER_WALL_CLOCK_LIMIT_MS,
38
38
  artifactStore: createArtifactStore(join(getConfig().dataDir, 'run-artifacts')),
39
39
  });
40
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codex.service.js","sourceRoot":"","sources":["../../src/runners/codex.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAG5B,IAAM,YAAY,GAAlB,MAAM,YAAY;IAMJ;IALF,MAAM,CAAW;IAElC,YAC4B,QAAyB,EAElC,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;QAEvC,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC;YAC9B,QAAQ;YACR,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;YAC5C,SAAS,EAAE,kBAAkB;YAC7B,aAAa,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,GAAG,GAAa,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC7C,CAAA;AAlBY,YAAY;IADxB,UAAU,EAAE;IAKR,WAAA,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACxB,WAAA,MAAM,CAAC,UAAU,CAAC,CAAA;+CACU,UAAU;GAN9B,YAAY,CAkBxB"}
1
+ {"version":3,"file":"codex.service.js","sourceRoot":"","sources":["../../src/runners/codex.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,kCAAkC,EAAwB,MAAM,+BAA+B,CAAC;AAEzG,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGxC,IAAM,YAAY,GAAlB,MAAM,YAAY;IAMJ;IALF,MAAM,CAAW;IAElC,YAC4B,QAAyB,EAElC,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;QAEvC,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC;YAC9B,QAAQ;YACR,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;YAC5C,SAAS,EAAE,kCAAkC;YAC7C,aAAa,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,GAAG,GAAa,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC7C,CAAA;AAlBY,YAAY;IADxB,UAAU,EAAE;IAKR,WAAA,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACxB,WAAA,MAAM,CAAC,UAAU,CAAC,CAAA;+CACU,UAAU;GAN9B,YAAY,CAkBxB"}
@@ -1,10 +1,3 @@
1
- /**
2
- * integrator-branch-naming — deterministic feature-branch naming from a task.
3
- *
4
- * `branchName` is the contract between the worktree manager and the integrator (plan 0017): the
5
- * worktree is created already checked out on the SAME branch the integrator commits/pushes on, so the
6
- * two must derive an identical name from (taskId, title). Lifted from integrator.ts.
7
- */
8
1
  const SLUG_MAX = 40;
9
2
  function slugify(text) {
10
3
  return text
@@ -23,11 +16,23 @@ function shortId(taskId) {
23
16
  const tail = taskId.slice(taskId.lastIndexOf('_') + 1); // lastIndexOf -1 → whole id (no underscore)
24
17
  return slugify(tail) || slugify(taskId) || 'task';
25
18
  }
19
+ function issueBoundSlug(title, issueRef) {
20
+ const issueSlug = `issue-${issueRef.number}`;
21
+ const titleSlug = slugify(title);
22
+ if (!titleSlug)
23
+ return issueSlug;
24
+ const titleMax = Math.max(0, SLUG_MAX - issueSlug.length - 1);
25
+ const titlePart = titleSlug.slice(0, titleMax).replace(/-+$/, '');
26
+ return titlePart ? `${issueSlug}-${titlePart}` : issueSlug;
27
+ }
26
28
  /** Derive deterministic feature branch name from taskId + title. Exported so the worktree manager
27
29
  * checks out the SAME branch the integrator commits/pushes on (plan 0017). */
28
- export function branchName(taskId, title) {
30
+ export function branchName(taskId, title, issueRef) {
29
31
  const id = shortId(taskId);
30
32
  const slug = slugify(title);
33
+ if (issueRef) {
34
+ return `feat/${id}-${issueBoundSlug(title, issueRef)}`;
35
+ }
31
36
  return slug ? `feat/${id}-${slug}` : `feat/${id}`; // drop empty slug so no trailing '-'
32
37
  }
33
38
  /** The `feat/<shortId>-` prefix shared by every branch `branchName(taskId, *)` can produce.
@@ -1 +1 @@
1
- {"version":3,"file":"integrator-branch-naming.js","sourceRoot":"","sources":["../../src/runners/integrator-branch-naming.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;SAC/B,IAAI,CAAC,GAAG,CAAC;SACT,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,mFAAmF;AAC5G,CAAC;AAED,wEAAwE;AACxE,oFAAoF;AACpF,+FAA+F;AAC/F,SAAS,OAAO,CAAC,MAAc;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,4CAA4C;IACpG,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AACpD,CAAC;AAED;+EAC+E;AAC/E,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,KAAa;IACtD,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,qCAAqC;AAC1F,CAAC;AAED;;iBAEiB;AACjB,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,QAAQ,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"integrator-branch-naming.js","sourceRoot":"","sources":["../../src/runners/integrator-branch-naming.ts"],"names":[],"mappings":"AASA,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;SAC/B,IAAI,CAAC,GAAG,CAAC;SACT,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,mFAAmF;AAC5G,CAAC;AAED,wEAAwE;AACxE,oFAAoF;AACpF,+FAA+F;AAC/F,SAAS,OAAO,CAAC,MAAc;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,4CAA4C;IACpG,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AACpD,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,QAAkB;IACvD,MAAM,SAAS,GAAG,SAAS,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAClE,OAAO,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED;+EAC+E;AAC/E,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,KAAa,EAAE,QAAmB;IAC3E,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,EAAE,IAAI,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;IACzD,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,qCAAqC;AAC1F,CAAC;AAED;;iBAEiB;AACjB,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,QAAQ,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;AACpC,CAAC"}