dsh-llm-codebuddy-power 1.0.0 → 1.3.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/LICENSE +22 -22
- package/README.md +84 -66
- package/README.zh.md +84 -66
- package/cordis.patch.yml +7 -7
- package/icon.svg +6 -0
- package/lib/cli-login.js +113 -110
- package/lib/client.js +491 -410
- package/lib/index.js +439 -273
- package/lib/types/adapter.d.ts +7 -1
- package/lib/types/auth-service.d.ts +68 -22
- package/lib/types/cli/login.d.ts +1 -2
- package/lib/types/client/AccountSwitcher.d.ts +1 -2
- package/lib/types/client/CodeBuddySection.d.ts +17 -12
- package/lib/types/client/TurnCreditPill.d.ts +5 -4
- package/lib/types/client/index.d.ts +6 -6
- package/lib/types/client/locales.d.ts +6 -4
- package/lib/types/client/store.d.ts +19 -13
- package/lib/types/client/wire.d.ts +20 -3
- package/lib/types/constants.d.ts +15 -0
- package/lib/types/index.d.ts +44 -22
- package/lib/types/prefs.d.ts +17 -13
- package/lib/types/serialize.d.ts +19 -10
- package/lib/types/session-store.d.ts +1 -1
- package/lib/types/session.d.ts +59 -29
- package/lib/types/settings.d.ts +10 -7
- package/lib/types/storage.d.ts +6 -13
- package/lib/types/usage.d.ts +4 -2
- package/package.json +37 -30
- package/lib/types/client/UsageIndicator.d.ts +0 -21
- package/lib/types/client/poll.d.ts +0 -19
- package/lib/types/credit-store.d.ts +0 -25
- package/lib/types/selection.d.ts +0 -35
package/LICENSE
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 pgnqukezrdxmhjso
|
|
4
|
-
Copyright (c) 2026 Shatyuka
|
|
5
|
-
|
|
6
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
-
in the Software without restriction, including without limitation the rights
|
|
9
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
-
furnished to do so, subject to the following conditions:
|
|
12
|
-
|
|
13
|
-
The above copyright notice and this permission notice shall be included in all
|
|
14
|
-
copies or substantial portions of the Software.
|
|
15
|
-
|
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 pgnqukezrdxmhjso
|
|
4
|
+
Copyright (c) 2026 Shatyuka
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,66 +1,84 @@
|
|
|
1
|
-
# dsh-llm-codebuddy-power
|
|
2
|
-
|
|
3
|
-
 [](https://www.npmjs.com/package/dsh-llm-codebuddy-power)
|
|
4
|
-
|
|
5
|
-
[中文](./README.zh.md)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Design document: [design/en/current.md](design/en/current.md).
|
|
10
|
-
|
|
11
|
-
## Install
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
dsh plugin --profile web add dsh-llm-codebuddy-power
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**Installing through GitHub is not supported.**
|
|
18
|
-
|
|
19
|
-
## Features
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
1
|
+
# dsh-llm-codebuddy-power
|
|
2
|
+
|
|
3
|
+
 [](https://www.npmjs.com/package/dsh-llm-codebuddy-power)
|
|
4
|
+
|
|
5
|
+
[中文](./README.zh.md)
|
|
6
|
+
|
|
7
|
+
A full-featured CodeBuddy (WorkBuddy) provider plugin.
|
|
8
|
+
|
|
9
|
+
Design document: [design/en/current.md](design/en/current.md).
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
dsh plugin --profile web add dsh-llm-codebuddy-power
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Installing through GitHub is not supported.**
|
|
18
|
+
|
|
19
|
+
## Features
|
|
20
|
+
|
|
21
|
+
**Models and chat**
|
|
22
|
+
|
|
23
|
+
- Every model CodeBuddy offers, ready to switch between at any time
|
|
24
|
+
- Model panel: each model's promotions, subscription, credit multiplier, and discounted price at a glance; hover or tap for details, set how hard the model thinks, and adjust the context window and maximum output
|
|
25
|
+
- Image input: models that accept images take a pasted or attached picture
|
|
26
|
+
|
|
27
|
+
**Image generation**
|
|
28
|
+
|
|
29
|
+
- Let the model draw from chat, and click a result to open it full size
|
|
30
|
+
|
|
31
|
+
**Accounts**
|
|
32
|
+
|
|
33
|
+
- Sign in through the browser, no API key needed
|
|
34
|
+
- Keep several accounts signed in at once, each conversation using its own
|
|
35
|
+
- Manage accounts on the Plugins page: drag to reorder and sign out one or many
|
|
36
|
+
- Switch the current conversation's account from the composer
|
|
37
|
+
|
|
38
|
+
**Usage**
|
|
39
|
+
|
|
40
|
+
- Allowance ring: this account's usage with main and gifted allowances pooled, and the remaining gift shown in the centre
|
|
41
|
+
- Per-turn credits at the end of every reply; hover to see which account paid and that turn's request ID, and click to copy the full ID
|
|
42
|
+
|
|
43
|
+
**Preferences**
|
|
44
|
+
|
|
45
|
+
- Whether to show the allowance ring, the low-allowance alert percentage, and whether minimal-mode sessions get the draw tool
|
|
46
|
+
|
|
47
|
+
**Command line**
|
|
48
|
+
|
|
49
|
+
- `codebuddy-power` manages accounts from a terminal
|
|
50
|
+
|
|
51
|
+
## Usage examples
|
|
52
|
+
|
|
53
|
+
Web: open **Plugins** in the sidebar and open the **dsh-llm-codebuddy-power** card, then click **Sign in** to add an account; the copy button beside it puts the sign-in link on the clipboard instead of opening it, for completing sign-in in another browser or on another machine. Drag a badge to reorder the list and sign an account out with **Multi-select**; the account button in the composer switches the current conversation's account, and a conversation keeps the account it first used until you switch it again.
|
|
54
|
+
|
|
55
|
+
CLI:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
dsh plugin --profile web codebuddy-power # sign in through the browser and append an account
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### CLI arguments
|
|
62
|
+
|
|
63
|
+
| Argument | Description | Type | Required |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| `--status` | List every account by index, and show the model list | boolean | no |
|
|
66
|
+
| `--logout <account>` | Sign out the given account (`<account>` is a uid, index, or nickname) | string | no |
|
|
67
|
+
| `--logout --all` | Sign out every account | boolean | no |
|
|
68
|
+
| `--no-open` | Only print the sign-in link, do not open a browser | boolean | no |
|
|
69
|
+
| `--help` / `-h` | Print usage | boolean | no |
|
|
70
|
+
|
|
71
|
+
## dsh version used for development
|
|
72
|
+
|
|
73
|
+
- dsh version used for development: `0.1.7-rc.2`. `@deepseek-ai/dsh-*` dependencies use `workspace:^`.
|
|
74
|
+
|
|
75
|
+
## Secondary development
|
|
76
|
+
|
|
77
|
+
- The plugin must stay at a `packages/<group>/` path inside the dsh checkout: its `tsconfig*.json` files extend the dsh repository's `tsconfig.base*.json`, so moving it outside the checkout breaks the build.
|
|
78
|
+
- Local build: `pnpm --filter dsh-llm-codebuddy-power build` (`tsc -b` + `tsdown`, artifacts under `lib/`).
|
|
79
|
+
|
|
80
|
+
-----
|
|
81
|
+
|
|
82
|
+
## Runtime invariant
|
|
83
|
+
|
|
84
|
+
No runtime invariant companion is published: everything this plugin registers leaves with the plugin itself, and it owns no cross-event durable relation that needs an independent check and no second data source to compare against.
|
package/README.zh.md
CHANGED
|
@@ -1,66 +1,84 @@
|
|
|
1
|
-
# dsh-llm-codebuddy-power
|
|
2
|
-
|
|
3
|
-
 [](https://www.npmjs.com/package/dsh-llm-codebuddy-power)
|
|
4
|
-
|
|
5
|
-
[English](./README.md)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
设计文档:[design/zh/current.md](design/zh/current.md)。
|
|
10
|
-
|
|
11
|
-
## 安装
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
dsh plugin --profile web add dsh-llm-codebuddy-power
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**不支持通过 GitHub 安装。**
|
|
18
|
-
|
|
19
|
-
## 功能
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
1
|
+
# dsh-llm-codebuddy-power
|
|
2
|
+
|
|
3
|
+
 [](https://www.npmjs.com/package/dsh-llm-codebuddy-power)
|
|
4
|
+
|
|
5
|
+
[English](./README.md)
|
|
6
|
+
|
|
7
|
+
功能齐全的 CodeBuddy(WorkBuddy)提供者插件。
|
|
8
|
+
|
|
9
|
+
设计文档:[design/zh/current.md](design/zh/current.md)。
|
|
10
|
+
|
|
11
|
+
## 安装
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
dsh plugin --profile web add dsh-llm-codebuddy-power
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**不支持通过 GitHub 安装。**
|
|
18
|
+
|
|
19
|
+
## 功能
|
|
20
|
+
|
|
21
|
+
**模型与对话**
|
|
22
|
+
|
|
23
|
+
- 提供 CodeBuddy 的全部模型,随时切换
|
|
24
|
+
- 模型面板:一眼看清每个模型的促销、订阅、积分倍率与折后价;悬停或点按看详情,可设置模型的思考程度,也可调整上下文窗口与最大输出
|
|
25
|
+
- 图片输入:支持图片的模型可接收粘贴或挂载的图片
|
|
26
|
+
|
|
27
|
+
**画图**
|
|
28
|
+
|
|
29
|
+
- 在对话中让模型画图,点击生成的图片可查看大图
|
|
30
|
+
|
|
31
|
+
**账号**
|
|
32
|
+
|
|
33
|
+
- 浏览器登录,无需 API key
|
|
34
|
+
- 可同时登录多个账号,每个会话各用一个
|
|
35
|
+
- 插件页管理账号:拖拽排序、退出单个或多个
|
|
36
|
+
- 对话框输入区即可切换当前会话的账号
|
|
37
|
+
|
|
38
|
+
**额度**
|
|
39
|
+
|
|
40
|
+
- 额度圆环:把主额度与赠送额度合并显示该账号的用量,圆环中心显示剩余赠送量
|
|
41
|
+
- 每轮积分:每条回复末尾显示该轮消耗,悬停可见花的是哪个账号与该轮请求 ID,点击可复制完整请求 ID
|
|
42
|
+
|
|
43
|
+
**偏好**
|
|
44
|
+
|
|
45
|
+
- 是否显示额度圆环、余量告警百分比、极简模式会话是否出现画图工具
|
|
46
|
+
|
|
47
|
+
**命令行**
|
|
48
|
+
|
|
49
|
+
- `codebuddy-power` 在终端里管理账号
|
|
50
|
+
|
|
51
|
+
## 使用示例
|
|
52
|
+
|
|
53
|
+
Web:打开侧边栏的 **插件**,点开 **dsh-llm-codebuddy-power** 卡片,点击 **登录** 可追加一个账号;旁边的复制按钮把登录链接放进剪贴板而不打开它,用于在别的浏览器或别的机器上完成登录。拖拽徽章可调整顺序,退出账号用 **多选**;对话框输入区的账号按钮可为当前会话单独切换,且会话会保持它首次使用的账号,直到再次切换。
|
|
54
|
+
|
|
55
|
+
CLI:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
dsh plugin --profile web codebuddy-power # 浏览器登录并追加一个账号
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### CLI 参数
|
|
62
|
+
|
|
63
|
+
| 参数名 | 说明 | 类型 | 必填 |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| `--status` | 按序号列出全部账号,并显示模型列表 | 布尔 | 否 |
|
|
66
|
+
| `--logout <账号>` | 退出指定账号(`<账号>` 为 uid、序号或昵称) | 字符串 | 否 |
|
|
67
|
+
| `--logout --all` | 退出全部账号 | 布尔 | 否 |
|
|
68
|
+
| `--no-open` | 仅打印登录链接,不打开浏览器 | 布尔 | 否 |
|
|
69
|
+
| `--help` / `-h` | 显示用法 | 布尔 | 否 |
|
|
70
|
+
|
|
71
|
+
## 构建时使用的 dsh 版本
|
|
72
|
+
|
|
73
|
+
- 构建时使用的 dsh 版本:`0.1.7-rc.2`;`@deepseek-ai/dsh-*` 依赖使用 `workspace:^`。
|
|
74
|
+
|
|
75
|
+
## 二次开发说明
|
|
76
|
+
|
|
77
|
+
- 插件必须位于 dsh 检出内的 `packages/<组>/` 路径下:插件的 `tsconfig*.json` 依赖 dsh 仓库的 `tsconfig.base*.json`,移出检出目录会无法构建。
|
|
78
|
+
- 本地构建:`pnpm --filter dsh-llm-codebuddy-power build`(`tsc -b` + `tsdown`,产物在 `lib/`)。
|
|
79
|
+
|
|
80
|
+
-----
|
|
81
|
+
|
|
82
|
+
## 运行时 invariant
|
|
83
|
+
|
|
84
|
+
不发布 `./invariant` companion:本插件注册的一切都随插件自身一起释放,也不持有需要独立校验的跨事件持久关系,没有可供交叉比对的第二数据源。
|
package/cordis.patch.yml
CHANGED
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
# below declares `inject: ['llm']` in code, so Cordis mounts it once the `llm`
|
|
11
11
|
# service from dsh-base is up, regardless of where this row sits.
|
|
12
12
|
#
|
|
13
|
-
# Config is omitted deliberately —
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
13
|
+
# Config is omitted deliberately — the connection fields all have defaults that
|
|
14
|
+
# reach the public CodeBuddy service. There is no credential field by design;
|
|
15
|
+
# sign in through this plugin's card on the Web sidebar's Plugins page, or
|
|
16
|
+
# `dsh plugin --profile web codebuddy-power`.
|
|
17
17
|
#
|
|
18
|
-
# The `showUsage`, `dangerPct` and `drawToolInMinimal` fields are
|
|
19
|
-
#
|
|
20
|
-
#
|
|
18
|
+
# The `showUsage`, `dangerPct` and `drawToolInMinimal` fields are volatile, so
|
|
19
|
+
# that same Plugins-page card reads and writes them through the settings
|
|
20
|
+
# form; a write lands back in this row's config.
|
|
21
21
|
#
|
|
22
22
|
# To pin a different endpoint, sizing, or preference default, override this row
|
|
23
23
|
# by id from your profile's own cordis.patch.yml, for example:
|
package/icon.svg
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<rect width="40" height="40" rx="8.63158" fill="#6C4DFF" />
|
|
3
|
+
<path d="M30.5918 3.12856C30.984 2.77679 31.0078 2.7632 31.2955 2.74593C31.7615 2.71193 32.1882 2.93586 32.9147 3.59728C34.6119 5.13959 36.9755 8.30995 38.4449 11.0177L39.0125 12.0691L39.8143 12.4677C40.5885 12.8589 41.8587 13.6611 42.389 14.0913C42.6286 14.2894 42.6626 14.2934 42.912 14.1964C44.0375 13.7583 45.6494 14.3393 47.0714 15.7033C48.3516 16.9303 49.5781 19.0269 50.0478 20.7767C50.1164 21.0582 50.2074 21.6636 50.2405 22.1144C50.3477 23.6973 49.84 24.9617 48.8624 25.5341C48.6628 25.6493 48.6492 25.6807 48.6548 26.1783C48.6998 28.5492 48.0606 30.9165 46.7768 33.2244C45.3276 35.8156 42.7467 38.496 39.2544 41.0214C37.3789 42.3862 32.9421 44.9717 30.9361 45.8792C26.1304 48.0428 22.278 48.8718 18.9316 48.4618C16.9356 48.22 14.6761 47.4417 13.3392 46.5373C12.9873 46.294 12.9318 46.2791 12.6629 46.3561C11.2318 46.7671 9.35752 45.9219 7.76528 44.1544C7.13027 43.448 6.10508 41.7136 5.77273 40.7853C5.00409 38.6128 5.15721 36.6516 6.18105 35.4808C6.44522 35.1797 6.4538 35.1667 6.39603 34.6598C6.30065 33.8298 6.25703 32.6017 6.30061 31.809L6.33535 31.0683L5.22371 29.1019C3.50212 26.0386 2.40857 23.4663 1.98661 21.501C1.76389 20.4233 1.77734 19.9446 2.05091 19.5908C2.21741 19.3773 2.76347 19.1568 3.42155 19.0352C5.07869 18.7442 8.69327 19.0065 12.7142 19.7165L13.1316 19.789L14.0497 18.977C15.5733 17.6274 16.5858 16.8705 18.4518 15.707C20.3967 14.4901 22.5922 13.4895 25.064 12.6968L25.8564 12.4423L26.2926 11.2974C27.8535 7.17701 29.452 4.13917 30.5918 3.12856ZM17.5169 24.2439C15.7528 25.2625 14.8705 25.7716 14.2223 26.3423C11.5975 28.6536 10.6172 32.3151 11.7346 35.6292C12.0106 36.4475 12.5193 37.3301 13.5378 39.0941C14.5563 40.8582 15.0662 41.7401 15.637 42.3882C17.9483 45.0128 21.6091 45.9938 24.923 44.8764C25.7414 44.6004 26.6233 44.0909 28.3875 43.0724L38.5362 37.213C40.3004 36.1945 41.1826 35.6854 41.8308 35.1147C44.4555 32.8034 45.4363 29.1426 44.319 25.8286C44.043 25.0103 43.5343 24.1277 42.5158 22.3637C41.4974 20.5997 40.9873 19.7177 40.4166 19.0696C38.1053 16.4448 34.4441 15.4631 31.1301 16.5806C30.3118 16.8565 29.4297 17.3661 27.6656 18.3846L17.5169 24.2439Z" fill="white" />
|
|
4
|
+
<rect x="18.4944" y="31.334" width="4.00904" height="8.32646" rx="2.00452" transform="rotate(-30 18.4944 31.334)" fill="white" />
|
|
5
|
+
<rect x="29.311" y="25.0898" width="4.00904" height="8.32646" rx="2.00452" transform="rotate(-30 29.311 25.0898)" fill="white" />
|
|
6
|
+
</svg>
|