subagent-extension-for-codex 0.0.0-stage → 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.
- package/.agents/plugins/marketplace.json +16 -0
- package/LICENSE +21 -0
- package/README.md +228 -2
- package/assets/brand/brand-glyph-animated.svg +89 -0
- package/assets/brand/brand-glyph-black.svg +21 -0
- package/assets/brand/brand-glyph-dark.svg +21 -0
- package/assets/brand/brand-glyph-light.svg +21 -0
- package/assets/brand/brand-glyph-white.svg +21 -0
- package/assets/brand/brand-icon-color.svg +22 -0
- package/assets/brand/brand-icon-dark.svg +22 -0
- package/assets/brand/brand-icon-light.svg +22 -0
- package/assets/icons/alert-triangle.svg +14 -0
- package/assets/icons/arrows-horizontal.svg +15 -0
- package/assets/icons/bug.svg +16 -0
- package/assets/icons/check.svg +13 -0
- package/assets/icons/chevron-down.svg +13 -0
- package/assets/icons/circle.svg +13 -0
- package/assets/icons/clipboard-check.svg +16 -0
- package/assets/icons/clock.svg +14 -0
- package/assets/icons/close.svg +13 -0
- package/assets/icons/code.svg +15 -0
- package/assets/icons/copy.svg +15 -0
- package/assets/icons/diff-search.svg +17 -0
- package/assets/icons/dot.svg +21 -0
- package/assets/icons/enter.svg +3 -0
- package/assets/icons/expand.svg +15 -0
- package/assets/icons/eye-off.svg +16 -0
- package/assets/icons/eye.svg +15 -0
- package/assets/icons/flask.svg +15 -0
- package/assets/icons/git-merge.svg +18 -0
- package/assets/icons/glasses.svg +17 -0
- package/assets/icons/grip-vertical-double.svg +10 -0
- package/assets/icons/grip-vertical.svg +7 -0
- package/assets/icons/handoff.svg +15 -0
- package/assets/icons/help.svg +15 -0
- package/assets/icons/info.svg +14 -0
- package/assets/icons/inspector-panel.svg +16 -0
- package/assets/icons/minus.svg +13 -0
- package/assets/icons/more-circle.svg +18 -0
- package/assets/icons/more-horizontal.svg +13 -0
- package/assets/icons/more-vertical.svg +13 -0
- package/assets/icons/paper-plane.svg +13 -0
- package/assets/icons/pause.svg +13 -0
- package/assets/icons/pencil-simple.svg +15 -0
- package/assets/icons/pencil.svg +15 -0
- package/assets/icons/play.svg +13 -0
- package/assets/icons/plus.svg +13 -0
- package/assets/icons/quiet-constellation.svg +43 -0
- package/assets/icons/refresh.svg +15 -0
- package/assets/icons/reply.svg +3 -0
- package/assets/icons/search.svg +14 -0
- package/assets/icons/settings.svg +15 -0
- package/assets/icons/shield-check.svg +15 -0
- package/assets/icons/stop-solid.svg +11 -0
- package/assets/icons/stop.svg +13 -0
- package/assets/icons/task-card.svg +15 -0
- package/assets/icons/task-details.svg +15 -0
- package/assets/icons/triangle-down.svg +13 -0
- package/assets/icons/user-round.svg +14 -0
- package/assets/icons/worker.svg +15 -0
- package/dist/THIRD_PARTY_LICENSES.txt +3141 -0
- package/dist/app.html +8245 -0
- package/dist/app.html.THIRD_PARTY_LICENSES.txt +2609 -0
- package/dist/bundle/chunks/chunk-5TX3SEV2.js +20032 -0
- package/dist/bundle/chunks/chunk-5TX3SEV2.js.map +6 -0
- package/dist/bundle/chunks/chunk-KFBRPWLR.js +8670 -0
- package/dist/bundle/chunks/chunk-KFBRPWLR.js.map +6 -0
- package/dist/bundle/chunks/chunk-L3PORPD3.js +450 -0
- package/dist/bundle/chunks/chunk-L3PORPD3.js.map +6 -0
- package/dist/bundle/chunks/chunk-LZFYKJ4Y.js +12780 -0
- package/dist/bundle/chunks/chunk-LZFYKJ4Y.js.map +6 -0
- package/dist/bundle/chunks/v4-LDJUK5DU.js +524 -0
- package/dist/bundle/chunks/v4-LDJUK5DU.js.map +6 -0
- package/dist/bundle/main.js +74756 -0
- package/dist/bundle/main.js.map +6 -0
- package/dist/bundle/projects-cli.js +44 -0
- package/dist/bundle/projects-cli.js.map +6 -0
- package/dist/bundle/stdio.js +9549 -0
- package/dist/bundle/stdio.js.map +6 -0
- package/dist/main.js +15 -0
- package/dist/projects-cli.js +15 -0
- package/dist/stdio.js +15 -0
- package/mcp.json +10 -0
- package/migrations/20261103045721_initial/migration.sql +73 -0
- package/migrations/20261103045721_initial/snapshot.json +615 -0
- package/package.json +17 -4
- package/plugin.json +27 -0
- package/skills/delegation/SKILL.md +65 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Shemar Lindie
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,229 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/readme-banner-dark.svg">
|
|
4
|
+
<img src="docs/assets/readme-banner-light.svg" width="400" alt="Subagent Extension for Codex">
|
|
5
|
+
</picture>
|
|
6
|
+
</p>
|
|
2
7
|
|
|
3
|
-
|
|
8
|
+
<p align="center">Delegate to Claude without leaving Codex.</p>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<a href="#install">Install</a>  · 
|
|
12
|
+
<a href="#start-a-task">Start a task</a>  · 
|
|
13
|
+
<a href="#documentation">Documentation</a>  · 
|
|
14
|
+
<a href="https://github.com/user-attachments/assets/94f0c927-e352-460e-bda1-da6856e45371">Demo video</a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
<p align="center">
|
|
18
|
+
<a href="https://github.com/shemarlindie/subagent-extension-for-codex/actions/workflows/ci.yml"><img src="https://github.com/shemarlindie/subagent-extension-for-codex/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
19
|
+
<img src="https://img.shields.io/badge/status-early%20release-orange" alt="Status: early release">
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
> _Prompt: Chat, build something that lets Claude keep you in line._
|
|
23
|
+
|
|
24
|
+
Delegate tasks to Claude from Codex through a local MCP service, then follow,
|
|
25
|
+
steer and review them in the Delegated Work panel. Claude runs through the
|
|
26
|
+
Claude Agent SDK and the Claude Code harness.
|
|
27
|
+
|
|
28
|
+
And yes, some of us still use Codex.
|
|
29
|
+
|
|
30
|
+
<picture>
|
|
31
|
+
<source media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/a6e2ad47-1b51-46f4-a5f7-8d3d1c01efc4">
|
|
32
|
+
<img width="1440" alt="Codex delegates a task to Claude and follows it in the Delegated Work panel" src="https://github.com/user-attachments/assets/4b2f34ec-a922-4446-8c51-9bd5b90575ba">
|
|
33
|
+
</picture>
|
|
34
|
+
|
|
35
|
+
**Is this allowed?** Yes, when you run it on your own computer for your own
|
|
36
|
+
work. It uses your local copy of Claude Code and your own sign-in, and it never
|
|
37
|
+
collects or stores your Claude credentials. Anthropic's
|
|
38
|
+
[usage policy for Claude Code and the Agent SDK](https://code.claude.com/docs/en/legal-and-compliance#usage-policy)
|
|
39
|
+
covers this kind of individual use.
|
|
40
|
+
|
|
41
|
+
<!-- prettier-ignore -->
|
|
42
|
+
> [!NOTE]
|
|
43
|
+
> This is an early release. Expect rough edges, and settings or behavior may
|
|
44
|
+
> change between versions. Please report problems in
|
|
45
|
+
> [Issues](https://github.com/shemarlindie/subagent-extension-for-codex/issues).
|
|
46
|
+
|
|
47
|
+
## Install
|
|
48
|
+
|
|
49
|
+
You need:
|
|
50
|
+
|
|
51
|
+
- [Claude Code](https://code.claude.com/docs/en/setup) 2.1.285 or later, signed
|
|
52
|
+
in. Run `claude` once and complete sign-in. See
|
|
53
|
+
[Claude Code CLI](docs/claude-cli.md) for how the extension finds it.
|
|
54
|
+
- Node.js 24 or later, with npm, on the `PATH` Codex starts with. Codex
|
|
55
|
+
downloads the plugin with npm.
|
|
56
|
+
- Git.
|
|
57
|
+
- Codex CLI 0.162.1 or later, or a Codex desktop app with plugin marketplaces.
|
|
58
|
+
CI installs the plugin with 0.162.1, and older builds are untested.
|
|
59
|
+
|
|
60
|
+
macOS is the primary platform. CI runs the full test suite on macOS and Linux.
|
|
61
|
+
Windows CI covers builds, plugin installation, packaged-service checks and
|
|
62
|
+
settings file exports.
|
|
63
|
+
|
|
64
|
+
Add the marketplace, then install the plugin:
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
codex plugin marketplace add shemarlindie/subagent-extension-for-codex
|
|
68
|
+
codex plugin add subagent-extension-for-codex@shemarlindie
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
After the first command, the plugin also appears in the Plugins directory of the
|
|
72
|
+
Codex desktop app. You can also ask Codex to install it: _"Install the Codex
|
|
73
|
+
plugin subagent-extension-for-codex from the marketplace at
|
|
74
|
+
github.com/shemarlindie/subagent-extension-for-codex."_
|
|
75
|
+
|
|
76
|
+
Then approve a Git repository root with at least one commit. Use **Add chat
|
|
77
|
+
project** in a chat's Delegated Work panel, or **Manage projects… → Add
|
|
78
|
+
project** in the global panel. The plugin starts its local service the first
|
|
79
|
+
time Codex connects.
|
|
80
|
+
|
|
81
|
+
While the service runs, you can also use the standalone console at
|
|
82
|
+
`http://127.0.0.1:17317`. If that port is taken, see
|
|
83
|
+
[Service address](docs/configuration.md#service-address) to find the console.
|
|
84
|
+
Sign in with the token in
|
|
85
|
+
`~/.local/share/subagent-extension-for-codex/admin-token`. Treat the token as a
|
|
86
|
+
credential and keep it out of chats and commits.
|
|
87
|
+
|
|
88
|
+
Claude uses the host's Claude Code credentials. By default, it also loads user,
|
|
89
|
+
project and local settings, including instructions, skills, hooks and MCP
|
|
90
|
+
servers. The extension doesn't manage provider credentials. Read
|
|
91
|
+
[Configuration and permissions](docs/configuration.md) before changing execution
|
|
92
|
+
authority or session restrictions.
|
|
93
|
+
|
|
94
|
+
## Start a task
|
|
95
|
+
|
|
96
|
+
Start a task in any of these ways:
|
|
97
|
+
|
|
98
|
+
1. **Ask Codex.** Describe the work in a chat, for example _"Have Claude review
|
|
99
|
+
my uncommitted changes."_ Codex starts the task and, when the host supports
|
|
100
|
+
it, opens Delegated Work on the task's Chat.
|
|
101
|
+
2. **Open the chat's panel.** Ask Codex to open Delegated Work. The panel lists
|
|
102
|
+
the chat's tasks and offers **Add chat project** when the chat's repository
|
|
103
|
+
isn't approved yet.
|
|
104
|
+
3. **Use the sidebar.** In the Codex desktop app, select **Delegated Work** in
|
|
105
|
+
the sidebar to see tasks from every chat. **New task** starts one there.
|
|
106
|
+
|
|
107
|
+
Before you start:
|
|
108
|
+
|
|
109
|
+
- Tasks work in your checkout by default, including uncommitted changes. A
|
|
110
|
+
worktree keeps a task's changes separate but isn't a security sandbox. The
|
|
111
|
+
service never merges changes.
|
|
112
|
+
- The researcher, reviewer and security reviewer profiles only inspect by
|
|
113
|
+
default.
|
|
114
|
+
- Usage and billing follow your Claude Code sign-in. A set `ANTHROPIC_API_KEY`
|
|
115
|
+
takes priority over a subscription login. Shown costs are estimates at API
|
|
116
|
+
list prices, and cost limits apply to these estimates. See
|
|
117
|
+
[authentication](https://code.claude.com/docs/en/authentication) and
|
|
118
|
+
[costs](https://code.claude.com/docs/en/costs).
|
|
119
|
+
|
|
120
|
+
See [How tasks run](docs/panel-guide.md#how-tasks-run) for details.
|
|
121
|
+
|
|
122
|
+
## Update
|
|
123
|
+
|
|
124
|
+
Codex checks the marketplace when it starts and installs new releases on its
|
|
125
|
+
own. To check now:
|
|
126
|
+
|
|
127
|
+
```sh
|
|
128
|
+
codex plugin marketplace upgrade shemarlindie
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
The new version takes over from the running service once its running turns
|
|
132
|
+
finish, and queued tasks carry over. See
|
|
133
|
+
[Updates and service handoff](docs/task-continuation.md#updates-and-service-handoff).
|
|
134
|
+
Startup backs up the database before applying migrations. See
|
|
135
|
+
[Restore a backup](docs/database.md#restore-a-backup).
|
|
136
|
+
|
|
137
|
+
To pin a version, add the marketplace at its release tag. A tag never moves, so
|
|
138
|
+
Codex keeps that version:
|
|
139
|
+
|
|
140
|
+
```sh
|
|
141
|
+
codex plugin marketplace remove shemarlindie
|
|
142
|
+
codex plugin marketplace add shemarlindie/subagent-extension-for-codex@v0.1.0
|
|
143
|
+
codex plugin add subagent-extension-for-codex@shemarlindie
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
To follow new releases again, remove the marketplace and add it without a tag.
|
|
147
|
+
|
|
148
|
+
Prereleases such as `v0.2.0-beta.1` are marked as prereleases on GitHub, and the
|
|
149
|
+
repository's marketplace never lists them. To try one, add the marketplace at
|
|
150
|
+
its tag.
|
|
151
|
+
|
|
152
|
+
## Uninstall
|
|
153
|
+
|
|
154
|
+
```sh
|
|
155
|
+
codex plugin remove subagent-extension-for-codex@shemarlindie
|
|
156
|
+
codex plugin marketplace remove shemarlindie
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
The service exits once Codex stops the plugin and its tasks finish. To stop it
|
|
160
|
+
sooner, run
|
|
161
|
+
`kill "$(cat ~/.local/share/subagent-extension-for-codex/service.pid)"`, which
|
|
162
|
+
interrupts running turns.
|
|
163
|
+
|
|
164
|
+
Tasks, settings and worktrees stay in
|
|
165
|
+
`~/.local/share/subagent-extension-for-codex`. Delete that directory to remove
|
|
166
|
+
them. Branches that tasks created stay in their repositories.
|
|
167
|
+
|
|
168
|
+
## Troubleshooting
|
|
169
|
+
|
|
170
|
+
| Symptom | Fix |
|
|
171
|
+
| ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
172
|
+
| `needs Node.js 24 or later` in Codex's MCP log | Install Node.js 24 or later and make it the first `node` on the `PATH` Codex starts with. |
|
|
173
|
+
| Tools report the service is unavailable | Read the [service logs](docs/logging.md#diagnose-a-problem), starting with `service.jsonl` and `service.log` in the data directory. |
|
|
174
|
+
| `A different extension service … is running` | Another service owns the data directory or port, for example a development checkout. Stop it, or give development its own data and port. |
|
|
175
|
+
| `Port … is already in use` | Choose a free port or remove the address override. See [Service address](docs/configuration.md#service-address). |
|
|
176
|
+
| Claude tasks can't start | The panel shows a readiness message above the task list. [Claude Code CLI](docs/claude-cli.md) explains fixes. |
|
|
177
|
+
|
|
178
|
+
To connect a checkout over stdio or Streamable HTTP instead of installing the
|
|
179
|
+
plugin, see
|
|
180
|
+
[Connect Codex from a checkout](docs/development.md#connect-codex-from-a-checkout).
|
|
181
|
+
|
|
182
|
+
## Documentation
|
|
183
|
+
|
|
184
|
+
Before working on the codebase, read in this order:
|
|
185
|
+
|
|
186
|
+
1. [Architecture](docs/architecture.md) for runtime ownership and code
|
|
187
|
+
boundaries.
|
|
188
|
+
2. [Local development](docs/development.md#choosing-a-development-tool) for
|
|
189
|
+
choosing a development tool, and its [checks](docs/development.md#checks).
|
|
190
|
+
3. The guide for the area you are changing, listed below.
|
|
191
|
+
|
|
192
|
+
### Use and operate the extension
|
|
193
|
+
|
|
194
|
+
| Task | Guide |
|
|
195
|
+
| ------------------------------------------------------ | ---------------------------------------------- |
|
|
196
|
+
| Start, recover, back up or continue tasks | [Task continuation](docs/task-continuation.md) |
|
|
197
|
+
| Configure permissions, budgets and repository access | [Configuration](docs/configuration.md) |
|
|
198
|
+
| Delegate and review work in Codex or the console | [Panel guide](docs/panel-guide.md) |
|
|
199
|
+
| Diagnose service errors, authentication or performance | [Logging and diagnostics](docs/logging.md) |
|
|
200
|
+
| Diagnose Claude executable readiness | [Claude Code CLI](docs/claude-cli.md) |
|
|
201
|
+
|
|
202
|
+
### Develop and verify changes
|
|
203
|
+
|
|
204
|
+
| Task | Guide |
|
|
205
|
+
| ------------------------------------------------------------- | ------------------------------------------------------------ |
|
|
206
|
+
| Report a problem or propose a change | [Contributing](CONTRIBUTING.md) |
|
|
207
|
+
| Report a security problem | [Security policy](SECURITY.md) |
|
|
208
|
+
| Follow contribution and documentation conventions | [Agent instructions](AGENTS.md) |
|
|
209
|
+
| Understand runtime ownership and system boundaries | [Architecture](docs/architecture.md) |
|
|
210
|
+
| Build, test, connect or preview the extension | [Local development](docs/development.md) |
|
|
211
|
+
| Change React components, styling and client state | [Panel architecture](docs/panel-architecture.md) |
|
|
212
|
+
| Check UI layouts and behavior in the browser | [UI verification](docs/ui-verification.md) |
|
|
213
|
+
| Exercise fixture worker task behavior without model calls | [Fixture scenarios](docs/fixture-scenarios.md) |
|
|
214
|
+
| Change storage, migrations or transactions | [Database and migrations](docs/database.md) |
|
|
215
|
+
| Qualify Claude CLI/SDK updates or run authenticated scenarios | [Claude execution verification](docs/claude-verification.md) |
|
|
216
|
+
| Capture the README's showcase images and video | [Showcase captures](docs/showcase.md) |
|
|
217
|
+
| Publish a release or maintain the CI runner | [Releasing and CI](docs/releasing.md) |
|
|
218
|
+
|
|
219
|
+
### Integrate providers and hosts
|
|
220
|
+
|
|
221
|
+
| Task | Guide |
|
|
222
|
+
| ------------------------------------------------ | ---------------------------------------------- |
|
|
223
|
+
| Implement provider execution and task policy | [Provider contract](docs/provider-contract.md) |
|
|
224
|
+
| Change MCP tools, user authority or panel inputs | [MCP reference](docs/mcp-reference.md) |
|
|
225
|
+
| Integrate project/chat context and host delivery | [Host capabilities](docs/host-capabilities.md) |
|
|
226
|
+
|
|
227
|
+
## License
|
|
228
|
+
|
|
229
|
+
MIT. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
width="64"
|
|
4
|
+
height="64"
|
|
5
|
+
viewBox="9 7.75 46 46"
|
|
6
|
+
fill="currentColor"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
role="img"
|
|
9
|
+
aria-labelledby="glyph-title"
|
|
10
|
+
>
|
|
11
|
+
<title id="glyph-title">Bot with orbiting dots</title>
|
|
12
|
+
<style>
|
|
13
|
+
:root {
|
|
14
|
+
color: #353535;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.eyes {
|
|
18
|
+
transform-box: fill-box;
|
|
19
|
+
transform-origin: center;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
23
|
+
.eyes {
|
|
24
|
+
animation: blink 5s ease-in-out infinite;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@supports (offset-path: path("M0 0L1 1")) {
|
|
28
|
+
.orbit-dot {
|
|
29
|
+
transform: none;
|
|
30
|
+
offset-path: path("M13 16a19 5.25 0 1 1 38 0a19 5.25 0 1 1-38 0");
|
|
31
|
+
offset-rotate: 0deg;
|
|
32
|
+
animation: orbit 8s linear infinite;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.orbit-dot:nth-child(2) {
|
|
36
|
+
offset-distance: 35%;
|
|
37
|
+
animation-delay: -2.8s;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.orbit-dot:nth-child(3) {
|
|
41
|
+
offset-distance: 55%;
|
|
42
|
+
animation-delay: -4.4s;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@keyframes orbit {
|
|
48
|
+
from {
|
|
49
|
+
offset-distance: 0%;
|
|
50
|
+
}
|
|
51
|
+
to {
|
|
52
|
+
offset-distance: 100%;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@keyframes blink {
|
|
57
|
+
0%,
|
|
58
|
+
91%,
|
|
59
|
+
100% {
|
|
60
|
+
transform: scaleY(1);
|
|
61
|
+
}
|
|
62
|
+
95% {
|
|
63
|
+
transform: scaleY(0.1);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@media (prefers-color-scheme: dark) {
|
|
68
|
+
:root {
|
|
69
|
+
color: #f5f5f5;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
</style>
|
|
73
|
+
<g stroke="none">
|
|
74
|
+
<!-- Keep the dots visible when motion styles are unavailable or disabled. -->
|
|
75
|
+
<g class="orbit-dot" transform="translate(13 15)"><circle r="3" /></g>
|
|
76
|
+
<g class="orbit-dot" transform="translate(44 11)"><circle r="2.5" /></g>
|
|
77
|
+
<g class="orbit-dot" transform="translate(53 20)"><circle r="2" /></g>
|
|
78
|
+
</g>
|
|
79
|
+
<g
|
|
80
|
+
fill="none"
|
|
81
|
+
stroke-width="4"
|
|
82
|
+
stroke-linecap="round"
|
|
83
|
+
stroke-linejoin="round"
|
|
84
|
+
>
|
|
85
|
+
<rect x="17" y="24" width="30" height="27" rx="9" />
|
|
86
|
+
<path d="M32 18V24" />
|
|
87
|
+
<path class="eyes" d="M25 36H28M36 36H39" />
|
|
88
|
+
</g>
|
|
89
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
width="64"
|
|
4
|
+
height="64"
|
|
5
|
+
viewBox="10 7.75 46 46"
|
|
6
|
+
fill="#000000"
|
|
7
|
+
stroke="#000000"
|
|
8
|
+
>
|
|
9
|
+
<g
|
|
10
|
+
fill="none"
|
|
11
|
+
stroke-width="4"
|
|
12
|
+
stroke-linecap="round"
|
|
13
|
+
stroke-linejoin="round"
|
|
14
|
+
>
|
|
15
|
+
<rect x="17" y="24" width="30" height="27" rx="9" />
|
|
16
|
+
<path d="M25 36H28M36 36H39M32 18V24" />
|
|
17
|
+
</g>
|
|
18
|
+
<circle cx="13" cy="15" r="3" stroke="none" />
|
|
19
|
+
<circle cx="44" cy="11" r="2.5" stroke="none" />
|
|
20
|
+
<circle cx="54" cy="20" r="2" stroke="none" />
|
|
21
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
width="64"
|
|
4
|
+
height="64"
|
|
5
|
+
viewBox="10 7.75 46 46"
|
|
6
|
+
fill="#353535"
|
|
7
|
+
stroke="#353535"
|
|
8
|
+
>
|
|
9
|
+
<g
|
|
10
|
+
fill="none"
|
|
11
|
+
stroke-width="4"
|
|
12
|
+
stroke-linecap="round"
|
|
13
|
+
stroke-linejoin="round"
|
|
14
|
+
>
|
|
15
|
+
<rect x="17" y="24" width="30" height="27" rx="9" />
|
|
16
|
+
<path d="M25 36H28M36 36H39M32 18V24" />
|
|
17
|
+
</g>
|
|
18
|
+
<circle cx="13" cy="15" r="3" stroke="none" />
|
|
19
|
+
<circle cx="44" cy="11" r="2.5" stroke="none" />
|
|
20
|
+
<circle cx="54" cy="20" r="2" stroke="none" />
|
|
21
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
width="64"
|
|
4
|
+
height="64"
|
|
5
|
+
viewBox="10 7.75 46 46"
|
|
6
|
+
fill="#f5f5f5"
|
|
7
|
+
stroke="#f5f5f5"
|
|
8
|
+
>
|
|
9
|
+
<g
|
|
10
|
+
fill="none"
|
|
11
|
+
stroke-width="4"
|
|
12
|
+
stroke-linecap="round"
|
|
13
|
+
stroke-linejoin="round"
|
|
14
|
+
>
|
|
15
|
+
<rect x="17" y="24" width="30" height="27" rx="9" />
|
|
16
|
+
<path d="M25 36H28M36 36H39M32 18V24" />
|
|
17
|
+
</g>
|
|
18
|
+
<circle cx="13" cy="15" r="3" stroke="none" />
|
|
19
|
+
<circle cx="44" cy="11" r="2.5" stroke="none" />
|
|
20
|
+
<circle cx="54" cy="20" r="2" stroke="none" />
|
|
21
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
width="64"
|
|
4
|
+
height="64"
|
|
5
|
+
viewBox="10 7.75 46 46"
|
|
6
|
+
fill="#ffffff"
|
|
7
|
+
stroke="#ffffff"
|
|
8
|
+
>
|
|
9
|
+
<g
|
|
10
|
+
fill="none"
|
|
11
|
+
stroke-width="4"
|
|
12
|
+
stroke-linecap="round"
|
|
13
|
+
stroke-linejoin="round"
|
|
14
|
+
>
|
|
15
|
+
<rect x="17" y="24" width="30" height="27" rx="9" />
|
|
16
|
+
<path d="M25 36H28M36 36H39M32 18V24" />
|
|
17
|
+
</g>
|
|
18
|
+
<circle cx="13" cy="15" r="3" stroke="none" />
|
|
19
|
+
<circle cx="44" cy="11" r="2.5" stroke="none" />
|
|
20
|
+
<circle cx="54" cy="20" r="2" stroke="none" />
|
|
21
|
+
</svg>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
width="64"
|
|
4
|
+
height="64"
|
|
5
|
+
viewBox="0 0 64 64"
|
|
6
|
+
>
|
|
7
|
+
<rect width="64" height="64" rx="14" fill="#3a7ca5" />
|
|
8
|
+
<g fill="#ffffff" stroke="#ffffff">
|
|
9
|
+
<g
|
|
10
|
+
fill="none"
|
|
11
|
+
stroke-width="4"
|
|
12
|
+
stroke-linecap="round"
|
|
13
|
+
stroke-linejoin="round"
|
|
14
|
+
>
|
|
15
|
+
<rect x="17" y="24" width="30" height="27" rx="9" />
|
|
16
|
+
<path d="M25 36H28M36 36H39M32 18V24" />
|
|
17
|
+
</g>
|
|
18
|
+
<circle cx="13" cy="15" r="3" stroke="none" />
|
|
19
|
+
<circle cx="44" cy="11" r="2.5" stroke="none" />
|
|
20
|
+
<circle cx="54" cy="20" r="2" stroke="none" />
|
|
21
|
+
</g>
|
|
22
|
+
</svg>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
width="64"
|
|
4
|
+
height="64"
|
|
5
|
+
viewBox="0 0 64 64"
|
|
6
|
+
>
|
|
7
|
+
<rect width="64" height="64" rx="14" fill="#252525" />
|
|
8
|
+
<g fill="#f5f5f5" stroke="#f5f5f5">
|
|
9
|
+
<g
|
|
10
|
+
fill="none"
|
|
11
|
+
stroke-width="4"
|
|
12
|
+
stroke-linecap="round"
|
|
13
|
+
stroke-linejoin="round"
|
|
14
|
+
>
|
|
15
|
+
<rect x="17" y="24" width="30" height="27" rx="9" />
|
|
16
|
+
<path d="M25 36H28M36 36H39M32 18V24" />
|
|
17
|
+
</g>
|
|
18
|
+
<circle cx="13" cy="15" r="3" stroke="none" />
|
|
19
|
+
<circle cx="44" cy="11" r="2.5" stroke="none" />
|
|
20
|
+
<circle cx="54" cy="20" r="2" stroke="none" />
|
|
21
|
+
</g>
|
|
22
|
+
</svg>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
width="64"
|
|
4
|
+
height="64"
|
|
5
|
+
viewBox="0 0 64 64"
|
|
6
|
+
>
|
|
7
|
+
<rect width="64" height="64" rx="14" fill="#f0f0f0" />
|
|
8
|
+
<g fill="#404040" stroke="#404040">
|
|
9
|
+
<g
|
|
10
|
+
fill="none"
|
|
11
|
+
stroke-width="4"
|
|
12
|
+
stroke-linecap="round"
|
|
13
|
+
stroke-linejoin="round"
|
|
14
|
+
>
|
|
15
|
+
<rect x="17" y="24" width="30" height="27" rx="9" />
|
|
16
|
+
<path d="M25 36H28M36 36H39M32 18V24" />
|
|
17
|
+
</g>
|
|
18
|
+
<circle cx="13" cy="15" r="3" stroke="none" />
|
|
19
|
+
<circle cx="44" cy="11" r="2.5" stroke="none" />
|
|
20
|
+
<circle cx="54" cy="20" r="2" stroke="none" />
|
|
21
|
+
</g>
|
|
22
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
viewBox="0 0 24 24"
|
|
4
|
+
width="24"
|
|
5
|
+
height="24"
|
|
6
|
+
fill="none"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
stroke-width="3"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
>
|
|
12
|
+
<path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"></path>
|
|
13
|
+
<path d="M12 9.75v3M12 16.75h0.01"></path>
|
|
14
|
+
</svg>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
viewBox="0 0 24 24"
|
|
4
|
+
width="24"
|
|
5
|
+
height="24"
|
|
6
|
+
fill="none"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
stroke-width="2.427"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
>
|
|
12
|
+
<path
|
|
13
|
+
d="M1.213 5.258h21.573m0 0-4.045-4.045m4.045 4.045-4.045 4.045M22.787 18.742H1.213m0 0 4.045-4.045m-4.045 4.045 4.045 4.045"
|
|
14
|
+
></path>
|
|
15
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
viewBox="0 0 24 24"
|
|
4
|
+
width="24"
|
|
5
|
+
height="24"
|
|
6
|
+
fill="none"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
stroke-width="1.846"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
>
|
|
12
|
+
<rect x="5.846" y="4.615" width="12.308" height="17.231" rx="6.154"></rect>
|
|
13
|
+
<path
|
|
14
|
+
d="m7.077 0.923 2.462 3.692m7.385-3.692-2.462 3.692M8.308 8.308h7.385M12 8.308v13.538M2.154 5.846l3.692 3.692m16-3.692-3.692 3.692M0.923 13.231h4.923m12.308 0h4.923M2.154 20.615l3.692-3.692m16 3.692-3.692-3.692"
|
|
15
|
+
></path>
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
viewBox="0 0 24 24"
|
|
4
|
+
width="24"
|
|
5
|
+
height="24"
|
|
6
|
+
fill="none"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
stroke-width="4.235"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
>
|
|
12
|
+
<path d="M2.118 13.412l5.647 5.647L21.882 4.941"></path>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
viewBox="0 0 24 24"
|
|
4
|
+
width="24"
|
|
5
|
+
height="24"
|
|
6
|
+
fill="none"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
stroke-width="3.429"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
>
|
|
12
|
+
<path d="M1.714 6.857l10.286 10.286 10.286-10.286"></path>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
viewBox="0 0 24 24"
|
|
4
|
+
width="24"
|
|
5
|
+
height="24"
|
|
6
|
+
fill="none"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
stroke-width="3.429"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
>
|
|
12
|
+
<circle cx="12" cy="12" r="10.286"></circle>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
viewBox="0 0 24 24"
|
|
4
|
+
width="24"
|
|
5
|
+
height="24"
|
|
6
|
+
fill="none"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
stroke-width="2.128"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
>
|
|
12
|
+
<rect x="7.862" y="1.064" width="8.276" height="4.729" rx="1.773"></rect>
|
|
13
|
+
<path
|
|
14
|
+
d="M7.862 3.429H4.906a2.365 2.365 0 0 0-2.365 2.365V20.571a2.365 2.365 0 0 0 2.365 2.365h14.187a2.365 2.365 0 0 0 2.365-2.365V5.793a2.365 2.365 0 0 0-2.365-2.365h-2.956M7.271 13.478l2.956 2.956 5.911-5.911M7.271 19.389h9.458"
|
|
15
|
+
></path>
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
viewBox="0 0 24 24"
|
|
4
|
+
width="24"
|
|
5
|
+
height="24"
|
|
6
|
+
fill="none"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
stroke-width="3.429"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
>
|
|
12
|
+
<circle cx="12" cy="12" r="10.286"></circle>
|
|
13
|
+
<path d="M12 7.429v4.571l3.429 2.286"></path>
|
|
14
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
viewBox="0 0 24 24"
|
|
4
|
+
width="24"
|
|
5
|
+
height="24"
|
|
6
|
+
fill="none"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
stroke-width="4.8"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
>
|
|
12
|
+
<path d="M2.4 2.4l19.2 19.2M21.6 2.4L2.4 21.6"></path>
|
|
13
|
+
</svg>
|