crewly 1.9.0 → 1.10.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 (131) hide show
  1. package/config/roles/orchestrator/prompt.md +20 -2
  2. package/config/skills/agent/core/get-sops/SKILL.md +6 -2
  3. package/config/skills/agent/core/get-sops/execute.sh +26 -1
  4. package/config/skills/agent/core/get-team-norms/SKILL.md +69 -0
  5. package/config/skills/agent/core/update-sop/SKILL.md +73 -0
  6. package/config/skills/agent/core/update-sop/execute.sh +115 -0
  7. package/config/skills/agent/core/update-team-norm/SKILL.md +67 -0
  8. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +2 -0
  9. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  10. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +50 -1
  11. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  12. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +2 -0
  13. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -1
  14. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +6 -2
  15. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -1
  16. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  17. package/dist/backend/backend/src/controllers/slack/slack.controller.js +10 -0
  18. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
  20. package/dist/backend/backend/src/controllers/system/system.controller.js +2 -1
  21. package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
  22. package/dist/backend/backend/src/controllers/team/team.controller.d.ts +17 -0
  23. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  24. package/dist/backend/backend/src/controllers/team/team.controller.js +32 -0
  25. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  26. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +45 -0
  27. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
  28. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +364 -46
  29. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
  30. package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -1
  31. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +9 -1
  32. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -1
  33. package/dist/backend/backend/src/index.d.ts.map +1 -1
  34. package/dist/backend/backend/src/index.js +44 -70
  35. package/dist/backend/backend/src/index.js.map +1 -1
  36. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  37. package/dist/backend/backend/src/routes/api.routes.js +12 -6
  38. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  39. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +13 -4
  40. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  41. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +47 -11
  42. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  43. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts +28 -0
  44. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts.map +1 -1
  45. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js +49 -0
  46. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js.map +1 -1
  47. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +60 -2
  48. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  49. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +93 -3
  50. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  51. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts +25 -0
  52. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -1
  53. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js +33 -0
  54. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -1
  55. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +28 -0
  56. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
  57. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +48 -0
  58. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
  59. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
  60. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  61. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +30 -0
  62. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  63. package/dist/backend/backend/src/services/chat-v2/types.d.ts +14 -0
  64. package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
  65. package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
  66. package/dist/backend/backend/src/services/index.d.ts +0 -1
  67. package/dist/backend/backend/src/services/index.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/index.js +0 -1
  69. package/dist/backend/backend/src/services/index.js.map +1 -1
  70. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.d.ts +26 -108
  71. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.d.ts.map +1 -1
  72. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.js +26 -214
  73. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.js.map +1 -1
  74. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +11 -0
  75. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  76. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +36 -0
  77. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  78. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +10 -0
  79. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +21 -0
  81. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  82. package/dist/backend/backend/src/services/slack/slack.service.d.ts +12 -0
  83. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/slack/slack.service.js +53 -1
  85. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  86. package/dist/backend/backend/src/services/sop/sop.service.d.ts +10 -0
  87. package/dist/backend/backend/src/services/sop/sop.service.d.ts.map +1 -1
  88. package/dist/backend/backend/src/services/sop/sop.service.js +71 -10
  89. package/dist/backend/backend/src/services/sop/sop.service.js.map +1 -1
  90. package/dist/backend/backend/src/services/wiki/sop-catalog.service.d.ts +83 -0
  91. package/dist/backend/backend/src/services/wiki/sop-catalog.service.d.ts.map +1 -0
  92. package/dist/backend/backend/src/services/wiki/sop-catalog.service.js +185 -0
  93. package/dist/backend/backend/src/services/wiki/sop-catalog.service.js.map +1 -0
  94. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -1
  95. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +12 -0
  96. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -1
  97. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.d.ts +43 -0
  98. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.d.ts.map +1 -0
  99. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.js +67 -0
  100. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.js.map +1 -0
  101. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +79 -19
  102. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  103. package/dist/backend/backend/src/services/wiki/wiki-search.service.js +275 -106
  104. package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  105. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
  106. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +13 -0
  107. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
  108. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts +13 -0
  109. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
  110. package/dist/backend/backend/src/services/workflow/cron-task.service.js +43 -3
  111. package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
  112. package/dist/backend/backend/src/types/sop.types.d.ts +7 -0
  113. package/dist/backend/backend/src/types/sop.types.d.ts.map +1 -1
  114. package/dist/backend/backend/src/types/sop.types.js.map +1 -1
  115. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +7 -0
  116. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  117. package/dist/backend/backend/src/types/v2/work-item.types.js +1 -1
  118. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  119. package/dist/cli/backend/src/types/sop.types.d.ts +7 -0
  120. package/dist/cli/backend/src/types/sop.types.d.ts.map +1 -1
  121. package/dist/cli/backend/src/types/sop.types.js.map +1 -1
  122. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +7 -0
  123. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  124. package/dist/cli/backend/src/types/v2/work-item.types.js +1 -1
  125. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  126. package/frontend/dist/assets/index-4099a91c.js +4961 -0
  127. package/frontend/dist/assets/index-44266b5d.css +42 -0
  128. package/frontend/dist/index.html +2 -2
  129. package/package.json +1 -1
  130. package/frontend/dist/assets/index-068bb4f6.css +0 -42
  131. package/frontend/dist/assets/index-c24ceb15.js +0 -4960
@@ -37,6 +37,21 @@ When a user says "implement X" or "fix X" — this means: find the right agent a
37
37
 
38
38
  The owner hired you to deliver results, not to narrate progress or ask permission for every step. Unless the owner explicitly pauses you or asks for approval mode, you operate in **Silent Mode**.
39
39
 
40
+ > ## ⛔ APPROVAL BOUNDARY — read this before you dispatch anything
41
+ >
42
+ > Silent / Autonomous Mode governs **HOW already-approved work proceeds** — it is NOT a license to **start new committed work**. Two action classes:
43
+ >
44
+ > - **Continuation (autonomous OK):** advancing a goal/project the owner has ALREADY approved — assign the next task, re-prompt an idle agent, route an approved OKR's KRs, course-correct. No permission needed.
45
+ > - **Commitment (ALWAYS needs explicit approval, regardless of mode):** **launching a team / spinning up or waking agents for a new project / starting a multi-step production pipeline**, creating a team or project, changing OKRs, irreversible or money-spending actions. These require an explicit **affirmative directive** before you dispatch.
46
+ >
47
+ > **A QUESTION IS NEVER APPROVAL.** "是否需要启动团队?" / "should we…?" / "帮我看看…" / "can you check…" / "你觉得呢?" are **decision REQUESTS** — you answer them and then **WAIT**. Approval is an explicit affirmative token the owner sends *after* your proposal: **启动 / 开始 / go / do it / 批准 / 同意 / proceed**. If you cannot quote the exact approving message, you do **NOT** have approval — treat it as **PENDING** and do not dispatch.
48
+ >
49
+ > **NEVER fabricate approval.** Do not write "已批准 / 已拍板 / Steve approved / user confirmed" in any WorkItem title, message, brief, or task unless you can cite the specific approving message (who said it, when). If you cannot, the WorkItem must say approval is **PENDING owner sign-off**.
50
+ >
51
+ > **Honor stand-downs.** If the owner says "我来做就好 / 你先不管 / I'll handle it / leave it / 不用了" → that goal is **PARKED**. Do not dispatch or wake agents on it until the owner **re-engages with an affirmative directive**. A later *question* about the parked topic does NOT un-park it.
52
+ >
53
+ > **Verification = run the tool, then quote it.** Never assert a file's existence, size, or path ("已验证 48MB", "文件在 ~/Movies/…") — or any other checkable fact — without an actual tool call (`ls`/`stat`/`find`) **in the same turn**, and quote its output. If you have not run the check, say "not yet verified" — never "已验证".
54
+
40
55
  **In Silent Mode you:**
41
56
  - **Drive work forward autonomously.** Delegate, monitor, re-prompt idle agents, retry blocked ones, reschedule stuck work. Use the trigger/cron/follow-up infrastructure. Do not wait for the owner to tell you to move the next step.
42
57
  - **Do NOT surface internal team chatter.** If Ella and Luna are negotiating a handoff, or an agent is mid-retry, the owner does not see that. It stays inside the team.
@@ -320,7 +335,7 @@ If a `watch:` or `fallback:` for the same delegatee already exists, do NOT add a
320
335
 
321
336
  ## Autonomous Mode — Default ON
322
337
 
323
- **Autonomous Mode is ON by default** (see "Silent by Default" above). The owner hired you to deliver results you drive work forward without asking permission for every step. The orchestrator only leaves Autonomous Mode when the user explicitly opts into Approval Mode — e.g. "暂停 / 让我批准每一步 / ask first / approve each step".
338
+ **Autonomous Mode is ON by default** (see "Silent by Default" above) but it ONLY covers **continuation of work the owner has already approved** (see the **⛔ APPROVAL BOUNDARY**). It is NOT permission to launch a new team/project/pipeline or otherwise take a commitment-class action; those always need an explicit affirmative directive first. You drive *approved* work forward without asking permission for every step. The orchestrator only leaves Autonomous Mode (for continuation) when the user explicitly opts into Approval Mode — e.g. "暂停 / 让我批准每一步 / ask first / approve each step".
324
339
 
325
340
  ### Agent Context & Resource Management
326
341
 
@@ -338,11 +353,14 @@ The user's goal/OKR is a standing order. You don't need permission to:
338
353
  - Route OKR key results to the appropriate Team Lead for task decomposition
339
354
  - Monitor progress and course-correct
340
355
 
341
- You DO need permission to:
356
+ You DO need permission to (see the **⛔ APPROVAL BOUNDARY** at the top — these are commitment-class actions; a question never grants this permission):
357
+ - **Launch a team / wake or spin up agents for a NEW project, or start a multi-step production pipeline** (this is the #1 thing owners do NOT expect you to do on your own)
342
358
  - Change the OKRs themselves
343
359
  - Create new teams or projects
344
360
  - Make architectural decisions not covered by the OKR
345
361
 
362
+ Autonomous Mode being ON does **not** waive these — it only lets you continue work the owner already approved. The first launch of any team/project/pipeline for a new goal requires an explicit affirmative directive (启动 / go / 开始), not a question and not your own inference.
363
+
346
364
  **Continuous Execution Protocol (only when Autonomous Mode is ON):**
347
365
 
348
366
  The execution loop is driven by **scheduled checks** — a system-level mechanism that reliably keeps work moving regardless of orchestrator state (restarts, context loss, etc.).
@@ -47,13 +47,17 @@ Query standard operating procedures (SOPs) relevant to your current context or t
47
47
  | `context` | Yes | Description of what you need SOPs for (e.g., `"deploying to production"`) |
48
48
  | `category` | No | Filter by SOP category (e.g., `"deployment"`, `"testing"`, `"code-review"`) |
49
49
  | `role` | No | Filter by role relevance (e.g., `"developer"`, `"qa"`) |
50
+ | `sessionName` | No | Your session name. Lets the skill resolve your team and ALSO return your team's own installed/custom SOPs (the ones authored via `update-sop` / the wiki). |
51
+ | `teamId` | No | Explicit team id (skips the sessionName lookup). |
52
+
53
+ The result includes both the global SOPs and — when your team is resolved — a **Team SOPs** section from your team's library (`~/.crewly/teams/<id>/sops/`), so SOPs your team authored are actually visible here.
50
54
 
51
55
  ## Example
52
56
 
53
57
  ```bash
54
- bash config/skills/agent/get-sops/execute.sh '{"context":"deploying a new backend service","category":"deployment","role":"developer"}'
58
+ bash config/skills/agent/core/get-sops/execute.sh '{"context":"publishing an XHS post","category":"marketing","sessionName":"crewly-marketing-ella"}'
55
59
  ```
56
60
 
57
61
  ## Output
58
62
 
59
- JSON with matching SOPs including their titles, content, and applicability metadata.
63
+ JSON with matching SOPs including their titles, content, and applicability metadata, plus a Team SOPs section when a team is resolved.
@@ -12,13 +12,38 @@ require_param "context" "$CONTEXT"
12
12
 
13
13
  CATEGORY=$(printf '%s' "$INPUT" | jq -r '.category // empty')
14
14
  ROLE=$(printf '%s' "$INPUT" | jq -r '.role // empty')
15
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
16
+ SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
17
+
18
+ # Resolve teamId so the backend can also surface THIS team's installed/custom
19
+ # SOP library (~/.crewly/teams/<id>/sops/), not just the global store.
20
+ CREWLY_HOME="${HOME}/.crewly"
21
+ resolve_team_id() {
22
+ local session="${1:-${CREWLY_SESSION_NAME:-}}"
23
+ [ -z "$session" ] && return 1
24
+ local teams_dir="${CREWLY_HOME}/teams"
25
+ [ ! -d "$teams_dir" ] && return 1
26
+ for config in "$teams_dir"/*/config.json; do
27
+ [ -f "$config" ] || continue
28
+ if [ "$(jq -r --arg s "$session" '.members[]? | select(.sessionName == $s) | "found"' "$config" 2>/dev/null | head -1)" = "found" ]; then
29
+ basename "$(dirname "$config")"
30
+ return 0
31
+ fi
32
+ done
33
+ return 1
34
+ }
35
+ if [ -z "$TEAM_ID" ]; then
36
+ TEAM_ID=$(resolve_team_id "$SESSION_NAME" || true)
37
+ fi
15
38
 
16
39
  BODY=$(jq -n \
17
40
  --arg context "$CONTEXT" \
18
41
  --arg category "$CATEGORY" \
19
42
  --arg role "$ROLE" \
43
+ --arg teamId "$TEAM_ID" \
20
44
  '{context: $context} +
21
45
  (if $category != "" then {category: $category} else {} end) +
22
- (if $role != "" then {role: $role} else {} end)')
46
+ (if $role != "" then {role: $role} else {} end) +
47
+ (if $teamId != "" then {teamId: $teamId} else {} end)')
23
48
 
24
49
  api_call POST "/system/sops/query" "$BODY"
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: Get Team Norms
3
+ description: Read your team's norms (operating agreements — canDelegate, escalation, rules of engagement) relevant to the current moment.
4
+ version: 1.0.0
5
+ category: system
6
+ skillType: claude-skill
7
+ assignableRoles:
8
+ - developer
9
+ - qa
10
+ - tpm
11
+ - designer
12
+ - frontend-developer
13
+ - backend-developer
14
+ - fullstack-dev
15
+ - qa-engineer
16
+ - product-manager
17
+ - architect
18
+ - generalist
19
+ - team-leader
20
+ - sales
21
+ - support
22
+ triggers:
23
+ - get team norms
24
+ - team norms
25
+ - rules of engagement
26
+ - can i delegate
27
+ - escalation policy
28
+ tags:
29
+ - system
30
+ - norms
31
+ - governance
32
+ - team
33
+ execution:
34
+ type: script
35
+ script:
36
+ file: execute.sh
37
+ interpreter: bash
38
+ timeoutMs: 15000
39
+ ---
40
+
41
+ # Get Team Norms
42
+
43
+ Read your **team norms** — the team's own operating agreement: who may delegate
44
+ to whom (`canDelegate`), role conventions, escalation paths, decision rights,
45
+ and rules of engagement. Norms are team-specific and authored by the team
46
+ (by the owner in the wiki, or proposed by agents via `update-team-norm`).
47
+
48
+ Norms differ from SOPs: a **SOP** is a reusable procedure ("how to do task X");
49
+ a **norm** is "how THIS team operates together." Consult norms before acting on
50
+ anything governance-related — delegating, escalating, deciding scope.
51
+
52
+ ## Parameters
53
+
54
+ | Parameter | Required | Description |
55
+ |-----------|----------|-------------|
56
+ | `trigger` | No | Filter to norms relevant to a moment (e.g. `"before_commit"`, `"before_delegate"`). Omit to read all. |
57
+ | `teamId` | No | Team to read. Defaults to the team resolved from your `sessionName`. |
58
+ | `sessionName` | No | Your session name, used to resolve the team when `teamId` is omitted. |
59
+
60
+ ## Example
61
+
62
+ ```bash
63
+ bash config/skills/agent/core/get-team-norms/execute.sh '{"trigger":"before_delegate"}'
64
+ ```
65
+
66
+ ## Output
67
+
68
+ JSON `{ success, count, data: [{ normId, title, trigger, content, updatedBy, updatedAt }] }`.
69
+ Returns an empty list if the team has no norms yet.
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: Update SOP
3
+ description: Author or update a custom SOP (a reusable procedure / playbook) for your team.
4
+ version: 1.0.0
5
+ category: system
6
+ skillType: claude-skill
7
+ assignableRoles:
8
+ - team-leader
9
+ - tpm
10
+ - product-manager
11
+ - architect
12
+ - generalist
13
+ - developer
14
+ - qa
15
+ - qa-engineer
16
+ - backend-developer
17
+ - frontend-developer
18
+ - fullstack-dev
19
+ triggers:
20
+ - update sop
21
+ - write a sop
22
+ - document the procedure
23
+ - create a playbook
24
+ - standardize how we
25
+ tags:
26
+ - system
27
+ - sops
28
+ - procedures
29
+ - team
30
+ execution:
31
+ type: script
32
+ script:
33
+ file: execute.sh
34
+ interpreter: bash
35
+ timeoutMs: 15000
36
+ ---
37
+
38
+ # Update SOP
39
+
40
+ Create or update a **custom SOP** for your team — a reusable procedure /
41
+ playbook for *how to do a class of work* (e.g. "publishing an XHS post",
42
+ "running a release"). The SOP is written into the team's own SOP store
43
+ (`~/.crewly/teams/<id>/sops/`) and surfaces in the wiki under the team's
44
+ **SOPs** folder, alongside SOPs installed from the catalog. The owner can edit
45
+ it in the wiki UI.
46
+
47
+ Use this for durable, repeatable procedures — not one-off task notes (use the
48
+ wiki/memory) and not team governance rules (those are **team norms** — use
49
+ `update-team-norm`). Prefer installing an existing catalog SOP when one fits;
50
+ author a custom SOP only when the team needs something the catalog lacks.
51
+
52
+ ## Parameters
53
+
54
+ | Parameter | Required | Description |
55
+ |-----------|----------|-------------|
56
+ | `sopId` | Yes | Stable kebab-case id / filename, e.g. `"xhs-posting"`. |
57
+ | `content` | Yes | The SOP body (markdown). The steps/procedure. |
58
+ | `title` | No | Human title, e.g. `"XHS Posting Checklist"`. Required when creating. |
59
+ | `category` | No | Optional sub-folder, e.g. `"common"`, `"marketing"`. |
60
+ | `append` | No | `"true"` to append to an existing SOP instead of overwriting. |
61
+ | `teamId` | No | Team to write to. Defaults to the team resolved from `sessionName`. |
62
+ | `sessionName` | No | Your session name, used to resolve the team when `teamId` is omitted. |
63
+ | `updatedBy` | No | Who authored the change (your agent/session name). |
64
+
65
+ ## Example
66
+
67
+ ```bash
68
+ bash config/skills/agent/core/update-sop/execute.sh '{"sopId":"xhs-posting","title":"XHS Posting Checklist","category":"marketing","content":"1. Draft hook.\n2. Add 3-5 tags.\n3. Post 7-9pm."}'
69
+ ```
70
+
71
+ ## Output
72
+
73
+ JSON `{ success, action: "created" | "updated", sopId, title, category, path, relativePath }`.
@@ -0,0 +1,115 @@
1
+ #!/bin/bash
2
+ # Create or update a team's custom SOP.
3
+ # Writes to ~/.crewly/teams/{teamId}/sops/[{category}/]{sopId}.md
4
+ # (the per-team installed/custom SOP store the wiki surfaces under sop/).
5
+ set -euo pipefail
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ source "${SCRIPT_DIR}/../../_common/lib.sh"
8
+
9
+ CREWLY_HOME="${HOME}/.crewly"
10
+
11
+ INPUT=$(read_json_input "${1:-}")
12
+ [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"sopId\":\"xhs-posting\",\"title\":\"XHS Posting\",\"content\":\"...\",\"category\":\"common\"}'"
13
+
14
+ SOP_ID=$(printf '%s' "$INPUT" | jq -r '.sopId // empty')
15
+ TITLE=$(printf '%s' "$INPUT" | jq -r '.title // empty')
16
+ CATEGORY=$(printf '%s' "$INPUT" | jq -r '.category // empty')
17
+ CONTENT=$(printf '%s' "$INPUT" | jq -r '.content // empty')
18
+ APPEND=$(printf '%s' "$INPUT" | jq -r '.append // "false"')
19
+ TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
20
+ SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
21
+ UPDATED_BY=$(printf '%s' "$INPUT" | jq -r '.updatedBy // empty')
22
+
23
+ require_param "sopId" "$SOP_ID"
24
+ require_param "content" "$CONTENT"
25
+
26
+ # Sanitize id/category to safe path segments (no traversal, no slashes).
27
+ SOP_ID=$(printf '%s' "$SOP_ID" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9._-]/-/g; s/^-*//; s/-*$//')
28
+ CATEGORY=$(printf '%s' "$CATEGORY" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9_-]/-/g; s/^-*//; s/-*$//')
29
+ [ -z "$SOP_ID" ] && error_exit "sopId resolved to empty after sanitization"
30
+
31
+ # Resolve teamId: explicit param > lookup by sessionName > CREWLY_SESSION_NAME env
32
+ resolve_team_id() {
33
+ local session="${1:-${CREWLY_SESSION_NAME:-}}"
34
+ [ -z "$session" ] && return 1
35
+ local teams_dir="${CREWLY_HOME}/teams"
36
+ [ ! -d "$teams_dir" ] && return 1
37
+ for config in "$teams_dir"/*/config.json; do
38
+ [ -f "$config" ] || continue
39
+ local found
40
+ found=$(jq -r --arg s "$session" '.members[]? | select(.sessionName == $s) | "found"' "$config" 2>/dev/null | head -1)
41
+ if [ "$found" = "found" ]; then
42
+ basename "$(dirname "$config")"
43
+ return 0
44
+ fi
45
+ done
46
+ return 1
47
+ }
48
+
49
+ if [ -z "$TEAM_ID" ]; then
50
+ TEAM_ID=$(resolve_team_id "$SESSION_NAME") || error_exit "Could not resolve teamId. Provide teamId or sessionName."
51
+ fi
52
+
53
+ SOPS_DIR="${CREWLY_HOME}/teams/${TEAM_ID}/sops"
54
+ if [ -n "$CATEGORY" ]; then
55
+ SOPS_DIR="${SOPS_DIR}/${CATEGORY}"
56
+ REL_PATH="sop/${CATEGORY}/${SOP_ID}.md"
57
+ else
58
+ REL_PATH="sop/${SOP_ID}.md"
59
+ fi
60
+ mkdir -p "$SOPS_DIR"
61
+
62
+ SOP_FILE="${SOPS_DIR}/${SOP_ID}.md"
63
+ TODAY=$(date +%Y-%m-%d)
64
+ ACTION="created"
65
+
66
+ if [ -f "$SOP_FILE" ]; then
67
+ ACTION="updated"
68
+ EXISTING_TITLE=$(sed -n '/^---$/,/^---$/{ /^---$/d; s/^title: *//p; }' "$SOP_FILE" | head -1)
69
+ EXISTING_UPDATED_BY=$(sed -n '/^---$/,/^---$/{ /^---$/d; s/^updatedBy: *//p; }' "$SOP_FILE" | head -1)
70
+ [ -z "$TITLE" ] && TITLE="$EXISTING_TITLE"
71
+ [ -z "$UPDATED_BY" ] && UPDATED_BY="$EXISTING_UPDATED_BY"
72
+
73
+ if [ "$APPEND" = "true" ]; then
74
+ EXISTING_CONTENT=""
75
+ FM_DONE=false
76
+ FM_COUNT=0
77
+ while IFS= read -r line || [ -n "$line" ]; do
78
+ if [ "$line" = "---" ]; then
79
+ FM_COUNT=$((FM_COUNT + 1))
80
+ if [ "$FM_COUNT" -ge 2 ]; then
81
+ FM_DONE=true
82
+ continue
83
+ fi
84
+ elif [ "$FM_DONE" = true ]; then
85
+ EXISTING_CONTENT="${EXISTING_CONTENT}${line}
86
+ "
87
+ fi
88
+ done < "$SOP_FILE"
89
+ EXISTING_CONTENT=$(echo "$EXISTING_CONTENT" | sed '/./,$!d')
90
+ CONTENT="${EXISTING_CONTENT}
91
+ ${CONTENT}"
92
+ fi
93
+ else
94
+ [ -z "$TITLE" ] && error_exit "title is required when creating a new SOP"
95
+ fi
96
+
97
+ {
98
+ echo "---"
99
+ echo "title: ${TITLE}"
100
+ [ -n "$CATEGORY" ] && echo "category: ${CATEGORY}"
101
+ [ -n "$UPDATED_BY" ] && echo "updatedBy: ${UPDATED_BY}"
102
+ echo "updatedAt: ${TODAY}"
103
+ echo "---"
104
+ echo ""
105
+ echo "$CONTENT"
106
+ } > "$SOP_FILE"
107
+
108
+ jq -n \
109
+ --arg sopId "$SOP_ID" \
110
+ --arg title "$TITLE" \
111
+ --arg category "$CATEGORY" \
112
+ --arg action "$ACTION" \
113
+ --arg path "$SOP_FILE" \
114
+ --arg relativePath "$REL_PATH" \
115
+ '{success: true, action: $action, sopId: $sopId, title: $title, category: $category, path: $path, relativePath: $relativePath}'
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: Update Team Norm
3
+ description: Propose or update a team norm (an operating agreement — canDelegate, escalation, rules of engagement) for your team.
4
+ version: 1.0.0
5
+ category: system
6
+ skillType: claude-skill
7
+ assignableRoles:
8
+ - team-leader
9
+ - tpm
10
+ - product-manager
11
+ - architect
12
+ - generalist
13
+ - developer
14
+ - qa
15
+ triggers:
16
+ - update team norm
17
+ - propose a norm
18
+ - set a team rule
19
+ - we should always
20
+ - going forward the team should
21
+ tags:
22
+ - system
23
+ - norms
24
+ - governance
25
+ - team
26
+ execution:
27
+ type: script
28
+ script:
29
+ file: execute.sh
30
+ interpreter: bash
31
+ timeoutMs: 15000
32
+ ---
33
+
34
+ # Update Team Norm
35
+
36
+ Create or update a **team norm** — a durable operating agreement for your team
37
+ (who may delegate to whom, escalation paths, decision rights, rules of
38
+ engagement, recurring conventions). Use this when a lasting team-wide rule
39
+ emerges that future work should follow — not for one-off task notes (use the
40
+ wiki/memory for those) and not for reusable procedures (those are SOPs).
41
+
42
+ Norms you write land in the team's norm store and surface in the wiki under the
43
+ team's **Team Norms** folder, where the owner can review and edit them. Treat
44
+ this as *proposing* a norm: keep it concise, state the rule and when it applies.
45
+
46
+ ## Parameters
47
+
48
+ | Parameter | Required | Description |
49
+ |-----------|----------|-------------|
50
+ | `normId` | Yes | Stable kebab-case id / filename, e.g. `"code-commit"`, `"delegation"`. |
51
+ | `content` | Yes | The norm body (markdown). State the rule and its rationale. |
52
+ | `title` | No | Human title, e.g. `"Code Commit Norm"`. |
53
+ | `trigger` | No | When this norm applies, e.g. `"before_commit"`, `"before_delegate"`. |
54
+ | `append` | No | `"true"` to append to an existing norm instead of overwriting. |
55
+ | `teamId` | No | Team to write to. Defaults to the team resolved from `sessionName`. |
56
+ | `sessionName` | No | Your session name, used to resolve the team when `teamId` is omitted. |
57
+ | `updatedBy` | No | Who authored the change (your agent/session name). |
58
+
59
+ ## Example
60
+
61
+ ```bash
62
+ bash config/skills/agent/core/update-team-norm/execute.sh '{"normId":"delegation","title":"Delegation","trigger":"before_delegate","content":"Leads may delegate to their own team only; cross-team work goes through the orchestrator."}'
63
+ ```
64
+
65
+ ## Output
66
+
67
+ JSON `{ success, action: "created" | "updated", normId, path }`.
@@ -113,6 +113,8 @@ export interface ChatV2ControllerHandlers {
113
113
  listMessages: (req: Request, res: Response) => void;
114
114
  sendMessage: (req: Request, res: Response) => void | Promise<void>;
115
115
  ensureDmChannel: (req: Request, res: Response) => void;
116
+ ensureTeamChannel: (req: Request, res: Response) => void;
117
+ createHuddle: (req: Request, res: Response) => void;
116
118
  listAgents: (req: Request, res: Response) => void | Promise<void>;
117
119
  getAgentPresence: (req: Request, res: Response) => void | Promise<void>;
118
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chat-v2.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/chat-v2/chat-v2.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-v2.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/chat-v2/chat-v2.controller.ts"],"names":[],"mappings":"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"}
@@ -371,7 +371,14 @@ export function createChatV2Controller(service, deps = {}) {
371
371
  // -------- post-ack realtime side-effects --------
372
372
  const { gateway, dispatcher } = resolveDeps();
373
373
  try {
374
- if (gateway && channelForDispatch) {
374
+ // Broadcast the persisted row to the channel's WS subscribers. This
375
+ // must NOT depend on `channelForDispatch`: that lookup uses the
376
+ // sender's principal, and an AGENT reply (via reply-channel) whose
377
+ // principal doesn't match the channel owner resolves it to null —
378
+ // which previously suppressed the agent reply's realtime fan-out,
379
+ // leaving the chat UI stuck on "thinking" until a reload. The
380
+ // broadcast only needs the already-persisted message + its channel.
381
+ if (gateway) {
375
382
  gateway.broadcast(persisted.channelId, buildMessageEvent(persisted.channelId, persisted));
376
383
  }
377
384
  }
@@ -427,6 +434,48 @@ export function createChatV2Controller(service, deps = {}) {
427
434
  });
428
435
  res.status(created ? 201 : 200).json({ success: true, data: channel });
429
436
  }),
437
+ /**
438
+ * POST /channels/team/ensure
439
+ *
440
+ * Find-or-create the canonical channel for a team. Backs the
441
+ * consolidated team-chat deep-link (`/team-chat?team=<id>`) so opening
442
+ * a team's workspace always lands on a real channel even if none was
443
+ * created manually.
444
+ *
445
+ * Status code:
446
+ * - 200 when the team already had a channel
447
+ * - 201 when a new channel was created
448
+ */
449
+ ensureTeamChannel: (req, res) => runHandler(res, () => {
450
+ const principal = principalFromRequest(req);
451
+ const body = req.body ?? {};
452
+ const { channel, created } = service.ensureTeamChannel({
453
+ teamId: body.teamId,
454
+ name: body.name,
455
+ purpose: body.purpose,
456
+ principal,
457
+ });
458
+ res.status(created ? 201 : 200).json({ success: true, data: channel });
459
+ }),
460
+ /**
461
+ * POST /channels/huddle
462
+ *
463
+ * Create an ad-hoc multi-agent group chat ("拉群"). Body:
464
+ * `{ name, memberSessions: string[], purpose? }`. Messages posted to
465
+ * the resulting `type='huddle'` channel fan out to every member agent
466
+ * via the dispatcher's huddle-broadcast strategy.
467
+ */
468
+ createHuddle: (req, res) => runHandler(res, () => {
469
+ const principal = principalFromRequest(req);
470
+ const body = req.body ?? {};
471
+ const channel = service.createHuddle({
472
+ name: body.name,
473
+ purpose: body.purpose,
474
+ memberSessions: Array.isArray(body.memberSessions) ? body.memberSessions : [],
475
+ principal,
476
+ });
477
+ res.status(201).json({ success: true, data: channel });
478
+ }),
430
479
  /**
431
480
  * GET /agents
432
481
  *
@@ -1 +1 @@
1
- {"version":3,"file":"chat-v2.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/chat-v2/chat-v2.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-v2.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/chat-v2/chat-v2.controller.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,8 @@ import { type ChatV2ControllerDeps } from './chat-v2.controller.js';
17
17
  * - `GET /channels`
18
18
  * - `POST /channels`
19
19
  * - `POST /channels/dm/ensure` — find-or-create DM channel for an agent
20
+ * - `POST /channels/team/ensure` — find-or-create the canonical team channel
21
+ * - `POST /channels/huddle` — create an ad-hoc multi-agent group chat
20
22
  * - `GET /channels/:id`
21
23
  * - `DELETE /channels/:id`
22
24
  * - `GET /channels/:id/messages`
@@ -1 +1 @@
1
- {"version":3,"file":"chat-v2.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/chat-v2/chat-v2.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CAmBR"}
1
+ {"version":3,"file":"chat-v2.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/chat-v2/chat-v2.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CAqBR"}
@@ -17,6 +17,8 @@ import { createChatV2Controller, } from './chat-v2.controller.js';
17
17
  * - `GET /channels`
18
18
  * - `POST /channels`
19
19
  * - `POST /channels/dm/ensure` — find-or-create DM channel for an agent
20
+ * - `POST /channels/team/ensure` — find-or-create the canonical team channel
21
+ * - `POST /channels/huddle` — create an ad-hoc multi-agent group chat
20
22
  * - `GET /channels/:id`
21
23
  * - `DELETE /channels/:id`
22
24
  * - `GET /channels/:id/messages`
@@ -33,9 +35,11 @@ export function createChatV2Router(service, deps = {}) {
33
35
  const handlers = createChatV2Controller(service, deps);
34
36
  router.get('/channels', requireAuth, handlers.listChannels);
35
37
  router.post('/channels', requireAuth, handlers.createChannel);
36
- // `/channels/dm/ensure` must precede `/channels/:id` matchers so Express
37
- // doesn't bind `:id = 'dm'` here.
38
+ // `/channels/dm/ensure` and `/channels/team/ensure` must precede the
39
+ // `/channels/:id` matchers so Express doesn't bind `:id = 'dm'`/`'team'`.
38
40
  router.post('/channels/dm/ensure', requireAuth, handlers.ensureDmChannel);
41
+ router.post('/channels/team/ensure', requireAuth, handlers.ensureTeamChannel);
42
+ router.post('/channels/huddle', requireAuth, handlers.createHuddle);
39
43
  router.get('/channels/:id', requireAuth, handlers.getChannel);
40
44
  router.delete('/channels/:id', requireAuth, handlers.archiveChannel);
41
45
  router.get('/channels/:id/messages', requireAuth, handlers.listMessages);
@@ -1 +1 @@
1
- {"version":3,"file":"chat-v2.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/chat-v2/chat-v2.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAE1E,OAAO,EACL,sBAAsB,GAEvB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAsB,EACtB,OAA6B,EAAE;IAE/B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEvD,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC9D,yEAAyE;IACzE,kCAAkC;IAClC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC1E,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC9D,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAErE,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACzE,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEzE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,WAAW,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAEzE,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"chat-v2.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/chat-v2/chat-v2.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAE1E,OAAO,EACL,sBAAsB,GAEvB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAsB,EACtB,OAA6B,EAAE;IAE/B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEvD,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC9D,qEAAqE;IACrE,0EAA0E;IAC1E,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC1E,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC9E,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC9D,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAErE,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACzE,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEzE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,WAAW,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAEzE,OAAO,MAAM,CAAC;AAChB,CAAC"}