kakao-max 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/LICENSE +21 -0
- package/README.md +243 -2
- package/dist/THIRD-PARTY-NOTICES.txt +203 -0
- package/dist/approver.mjs +7754 -0
- package/dist/cli.mjs +8654 -0
- package/dist/connect.mjs +7763 -0
- package/dist/healthcheck.mjs +7733 -0
- package/dist/mcp.mjs +15732 -0
- package/dist/register.mjs +7829 -0
- package/dist/setup-system.mjs +8336 -0
- package/dist/setup.mjs +8665 -0
- package/dist/update-managed.mjs +8914 -0
- package/dist/web-public/app.js +2231 -0
- package/dist/web-public/index.html +533 -0
- package/dist/web-public/style.css +1496 -0
- package/dist/web.mjs +1148 -0
- package/package.json +55 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ziesski
|
|
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,244 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/readme-hero.svg" width="100%" alt="kakao-max — Messaging Agent eXtension. 카카오톡과 AI를 잇는 노란 다람쥐 맥스.">
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<h1 align="center">카카오톡의 가능성을, MAX로.</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
내 AI가 나를 대신해 대화하고, 답장하고, 일을 이어가도록.<br>
|
|
9
|
+
카카오톡을 AI 에이전트에 연결하는 <strong>헤드리스 MCP 서버</strong>.
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<a href="#demo">데모</a> ·
|
|
14
|
+
<a href="#use-cases">사용 장면</a> ·
|
|
15
|
+
<a href="#getting-started">시작하기</a> ·
|
|
16
|
+
<a href="#how-it-works">연결 구조</a> ·
|
|
17
|
+
<a href="#permissions">권한 설계</a> ·
|
|
18
|
+
<a href="#release-status">공개 현황</a> ·
|
|
19
|
+
<a href="#faq">FAQ</a> ·
|
|
20
|
+
<a href="#community">커뮤니티</a>
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
<p align="center">
|
|
24
|
+
<a href="https://open.kakao.com/o/g448E9Ti"><strong>Kakao Max 개발자 모임 참여하기 →</strong></a><br>
|
|
25
|
+
<sub>한국어로 나누는 MCP · AI 에이전트 · 자동화 개발 이야기</sub>
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
> [!WARNING]
|
|
29
|
+
> **비공식 프로젝트입니다.** kakao-max는 Kakao의 공식 제품이 아니며 Kakao와 제휴하거나 승인을 받지 않았습니다.
|
|
30
|
+
> 카카오톡 프로토콜을 직접 구현해 내 계정으로 접속하므로, **계정 이용 제한 등 그 결과의 책임은 사용하는 사람에게 있습니다.**
|
|
31
|
+
> 주로 쓰는 계정이 아닌 별도 계정으로 먼저 시험해 보세요. 받은 대화는 다른 사람의 개인정보이기도 합니다.
|
|
32
|
+
|
|
33
|
+
> [!NOTE]
|
|
34
|
+
> **초기 공개 버전입니다.** 기능별로 실계정에서 확인한 범위(✅)와 단위 테스트만 거친 범위(🟡)를
|
|
35
|
+
> [기능 매트릭스](docs/agent-capability-matrix.md)에 나눠 적었습니다.
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## AI에게, 카카오톡에서 일할 수 있는 손발을.
|
|
39
|
+
|
|
40
|
+
**“내 대신 답장해 줘.” “가능한 시간을 확인해서 약속을 잡아 줘.” “작업이 끝나면 이 방에 알려 줘.”**
|
|
41
|
+
|
|
42
|
+
kakao-max는 내 AI 에이전트가 카카오톡에서 **대화의 맥락을 파악하고, 나를 대신해 답장하고, 다른 도구와 함께 일을 처리하도록** 연결합니다. 대화를 복사해 AI에게 건네고 답변을 다시 붙여 넣던 흐름을, 에이전트가 직접 이어갈 수 있습니다.
|
|
43
|
+
|
|
44
|
+
카카오톡 PC 화면을 켜 두거나 클릭을 자동화할 필요 없이, GUI 없는 서버에서 카카오톡 기능을 MCP 도구로 제공합니다. 어떤 대화에 참여하고 어디까지 맡길지는 사용자가 정합니다.
|
|
45
|
+
|
|
46
|
+
<a id="demo"></a>
|
|
47
|
+
|
|
48
|
+
## 먼저, 짧은 장면 하나: 대화를 읽고 메시지 보내기
|
|
49
|
+
|
|
50
|
+
**“개발자 모임 방의 대화를 요약해서 같은 방에 보내 줘.”**
|
|
51
|
+
|
|
52
|
+
AI가 대화에서 최종 약속을 찾아 요약하고, 실제 카카오톡 대화방에 전송합니다. 왼쪽은 AI 에이전트, 오른쪽은 아이폰의 카카오톡 화면입니다.
|
|
53
|
+
|
|
54
|
+
<p align="center">
|
|
55
|
+
<a href="assets/demos/summarize-demo.mp4">
|
|
56
|
+
<img src="assets/demos/summarize-demo.gif" width="800" alt="kakao-max 실제 동작 데모: AI에 대화 요약을 요청하면 최종 시간과 장소를 정리한 메시지가 아이폰 카카오톡에 도착합니다.">
|
|
57
|
+
</a>
|
|
58
|
+
</p>
|
|
59
|
+
|
|
60
|
+
<p align="center">
|
|
61
|
+
<a href="assets/demos/summarize-demo.mp4"><strong>MP4로 보기 · 12초 →</strong></a><br>
|
|
62
|
+
<sub>시연을 위해 작성한 예시 대화 · 실제 조회 및 전송 · 입력 4배속 / 처리 대기 8배속</sub>
|
|
63
|
+
</p>
|
|
64
|
+
|
|
65
|
+
이 시연에서는 여러 식사 후보와 시간 변경이 포함된 대화에서 **최종 장소인 쌀국수집과 오후 1시 약속**을 정리해 전송했습니다. 요약은 연결된 AI가 수행하고, kakao-max는 대화 조회와 메시지 전송 도구를 제공합니다.
|
|
66
|
+
|
|
67
|
+
이 영상은 **대화 조회 → AI의 판단 → 카카오톡 전송**이라는 기본 흐름을 보여 줍니다. 이 흐름에 내 일정, 업무 도구, 에이전트의 실행 규칙을 연결하면 답장과 일정 조율, 작업 결과 공유로 확장할 수 있습니다.
|
|
68
|
+
|
|
69
|
+
<a id="use-cases"></a>
|
|
70
|
+
|
|
71
|
+
## 카카오톡에서, 에이전트에게 맡길 일들
|
|
72
|
+
|
|
73
|
+
연결한 AI와 도구를 조합해 만들고 싶은 사용 장면입니다. 위 영상에서 확인한 범위는 대화 조회와 요약 메시지 전송이며, 아래 자동화 전체의 동작을 검증한 것은 아닙니다.
|
|
74
|
+
|
|
75
|
+
<table>
|
|
76
|
+
<tr>
|
|
77
|
+
<td width="33%" valign="top">
|
|
78
|
+
|
|
79
|
+
### 나를 대신해 답장
|
|
80
|
+
|
|
81
|
+
“이 방에서 내 도착 시간을 물으면 오후 7시쯤 도착한다고 답해 줘. 다른 질문은 나에게 먼저 물어봐.”
|
|
82
|
+
|
|
83
|
+
대화의 맥락과 내가 정한 조건에 맞춰 소통을 맡깁니다.
|
|
84
|
+
|
|
85
|
+
</td>
|
|
86
|
+
<td width="33%" valign="top">
|
|
87
|
+
|
|
88
|
+
### 대화에서 일정 조율까지
|
|
89
|
+
|
|
90
|
+
“모임에서 나온 후보 시간과 내 캘린더를 비교해서, 가능한 시간을 방에 제안해 줘.”
|
|
91
|
+
|
|
92
|
+
카카오톡과 캘린더 도구를 연결해 대화 속 약속을 구체화합니다.
|
|
93
|
+
|
|
94
|
+
</td>
|
|
95
|
+
<td width="33%" valign="top">
|
|
96
|
+
|
|
97
|
+
### 작업이 끝나면 대화로
|
|
98
|
+
|
|
99
|
+
“배포가 끝나면 결과를 개발자 방에 알려 줘. 실패하면 원인과 확인할 항목도 함께 보내 줘.”
|
|
100
|
+
|
|
101
|
+
다른 도구에서 수행한 일의 결과를 필요한 사람에게 전달합니다.
|
|
102
|
+
|
|
103
|
+
</td>
|
|
104
|
+
</tr>
|
|
105
|
+
</table>
|
|
106
|
+
|
|
107
|
+
**필요할 때 한 번 부탁하거나, 정해 둔 조건에 따라 계속 맡기거나.** kakao-max는 그 작업 흐름의 카카오톡 연결을 담당합니다. 지속적인 자동 응답·예약·이벤트 감지는 연결한 에이전트와 실행 환경에서 구성하고, 캘린더·배포 같은 작업에는 해당 도구를 함께 연결합니다.
|
|
108
|
+
|
|
109
|
+
<a id="getting-started"></a>
|
|
110
|
+
|
|
111
|
+
## 시작은 세 단계로
|
|
112
|
+
|
|
113
|
+
**서버 하나 → 내 AI 연결 → 첫 요청과 권한 확인.** 자세한 순서는 [빠른 시작](docs/QUICKSTART.md)에 있습니다.
|
|
114
|
+
|
|
115
|
+
1. **내 Linux 서버에 설치합니다.** Git으로 받은 체크아웃에서 마법사를 실행합니다.
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
npm ci
|
|
119
|
+
npm run setup
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**새 Linux 서버 설치**를 고르면 환경과 Git 버전을 확인하고, 전용 `kakao-max` 서비스 계정에 설치한 뒤
|
|
123
|
+
휴대폰 카카오톡 승인(또는 4자리 코드)으로 로그인합니다. 내용을 확인하고 승인하면 systemd 서비스로 등록·시작합니다.
|
|
124
|
+
Linux/systemd, Git, sudo, 시스템 경로에 설치된 Node(strip-types와 `node:sqlite` 지원, CI는 Node 22)가 필요합니다.
|
|
125
|
+
2. **내 AI에 연결합니다.** AI를 쓰는 컴퓨터에서 마법사의 **기존 데몬 연결**을 고르면 SSH로 서버의 데몬에 붙는
|
|
126
|
+
MCP 설정을 `~/.config/kakao-max/mcp.json`에 만듭니다. `mcpServers["kakao-max"]` 항목을 AI 클라이언트에 등록하세요.
|
|
127
|
+
서버 코드와 카카오 자격증명은 AI 컴퓨터로 옮기지 않습니다.
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
npm run --silent setup -- --config --ssh <SSH-대상>
|
|
131
|
+
```
|
|
132
|
+
3. **범위를 정하고 요청합니다.** “홍길동에게 내일 3시에 보자고 카톡 보내 줘.” 첫 메시지는 확인 창에서 승인하고,
|
|
133
|
+
“앞으로 묻지 않기”를 고르면 그 방의 후속 전송은 하루 한도 안에서 바로 보냅니다. 대화 조회와 읽음 표시는 전송 허가와 별개로 묻습니다.
|
|
134
|
+
|
|
135
|
+
확인 창은 이를 지원하는 MCP 클라이언트가 필요합니다. 확인한 클라이언트는 [AI 클라이언트 호환](docs/QUICKSTART.md#ai-클라이언트-호환)을,
|
|
136
|
+
확인 창이 없는 클라이언트는 [패스키 승인](docs/runbooks/passkey-approval.md)을 보세요. 설치 단계·경로·권한은
|
|
137
|
+
[설치 운영](docs/runbooks/mcp-setup.md), 방 허가와 운영자 상한은 [방 권한 운영](docs/runbooks/mcp-room-permissions.md)에 있습니다.
|
|
138
|
+
|
|
139
|
+
**[Releases에서 새 소식 확인하기 →](https://github.com/ziesski/kakao-max/releases)**
|
|
140
|
+
|
|
141
|
+
<a id="how-it-works"></a>
|
|
142
|
+
|
|
143
|
+
## AI와 카카오톡 사이, 하나의 브릿지
|
|
144
|
+
|
|
145
|
+
```mermaid
|
|
146
|
+
flowchart LR
|
|
147
|
+
U["당신의 요청"] --> A["AI 애플리케이션 · 에이전트"]
|
|
148
|
+
A <-->|MCP| M["kakao-max"]
|
|
149
|
+
M <--> K["KakaoTalk"]
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
| 역할 | 맡는 일 |
|
|
153
|
+
| :--- | :--- |
|
|
154
|
+
| **당신의 AI** | 대화 맥락을 이해하고, 답변을 작성하고, 다른 도구와 함께 다음 행동을 결정합니다. |
|
|
155
|
+
| **kakao-max** | 권한 범위 안에서 대화를 조회하고, 메시지·사진을 전송하고, 결과를 AI에 전달합니다. |
|
|
156
|
+
| **당신** | 접근할 대화방과 전송 범위를 정하고, 중요한 작업을 승인합니다. |
|
|
157
|
+
|
|
158
|
+
kakao-max는 **셀프호스팅 Linux 데몬**입니다. 카카오톡 계정 연결 하나를 서버의 데몬 하나가 맡고, 에이전트는 SSH로 이어진 MCP를 통해 그 기능을 씁니다. 데몬은 서버 밖에서 접속할 수 없는 loopback 주소에서만 듣습니다.
|
|
159
|
+
|
|
160
|
+
<a id="permissions"></a>
|
|
161
|
+
|
|
162
|
+
## 연결은 편하게. 권한은 분명하게.
|
|
163
|
+
|
|
164
|
+
메신저에는 내 정보와 다른 사람의 대화가 함께 있습니다. kakao-max의 제품 설계는 다음 경계를 중심으로 합니다.
|
|
165
|
+
|
|
166
|
+
| 경계 | 설계 방향 |
|
|
167
|
+
| :--- | :--- |
|
|
168
|
+
| **어디까지 볼 수 있는가** | 대화방별로 에이전트의 내용 접근 범위를 정합니다. |
|
|
169
|
+
| **조회와 읽음 표시** | 내용을 조회하는 권한과 읽음 표시를 보내는 권한을 별도로 다룹니다. |
|
|
170
|
+
| **어디에 보낼 수 있는가** | 메시지·사진 전송은 사람이 부여한 방별 권한 안에서 수행합니다. |
|
|
171
|
+
| **언제 다시 확인하는가** | 영향이 큰 작업은 개별 사람 확인 절차를 거칩니다. |
|
|
172
|
+
| **무엇을 지시로 보는가** | 받은 메시지는 데이터로 취급하며, 그 안의 문장이 작업 지시가 되지 않도록 경계를 둡니다. |
|
|
173
|
+
|
|
174
|
+
도구별 권한과 승인 절차는 [도구·권한 계약](docs/tool-contract.md)에, 실계정 검증 결과는 [기능 매트릭스](docs/agent-capability-matrix.md)에 있습니다.
|
|
175
|
+
|
|
176
|
+
<a id="release-status"></a>
|
|
177
|
+
|
|
178
|
+
## 지금 이 저장소에는
|
|
179
|
+
|
|
180
|
+
| 들어 있는 것 | 아직 없는 것 |
|
|
181
|
+
| :--- | :--- |
|
|
182
|
+
| LOCO 프로토콜·로그인·기기 등록, 계정 데몬과 MCP 서버, CLI | 일반 사용자용 업데이트·삭제 명령 |
|
|
183
|
+
| 기본 도구 16개와 선택 묶음 `chats`·`friends`·`events`·`vault` | 확인 창 없는 클라이언트의 기본 승인 경로(패스키는 선택 설정) |
|
|
184
|
+
| Linux 설치 마법사, SSH 연결 설정, 진단·인증 복구 | 톡서랍 백업 연동(개발 저장소에서 보류 중) |
|
|
185
|
+
| 단위·격리 통합 테스트와 [기능 매트릭스](docs/agent-capability-matrix.md) | macOS·Windows 데몬의 OS 사용자 확인([나만 쓰는 컴퓨터에서만](docs/QUICKSTART.md#같은-서버의-다른-사용자)) |
|
|
186
|
+
|
|
187
|
+
개발 저장소의 전체 이력을 복제하는 대신, 공개에 적합한 코드를 선별해 옮겼습니다.
|
|
188
|
+
|
|
189
|
+
<a id="faq"></a>
|
|
190
|
+
|
|
191
|
+
## 자주 묻는 질문
|
|
192
|
+
|
|
193
|
+
<details>
|
|
194
|
+
<summary><strong>지금 설치해서 사용할 수 있나요?</strong></summary>
|
|
195
|
+
|
|
196
|
+
네. Linux 서버에서 [시작은 세 단계로](#getting-started)를 따르세요. 초기 공개 버전이므로 별도 계정으로 먼저 시험하고, 기능별 검증 범위는 [기능 매트릭스](docs/agent-capability-matrix.md)를 확인하세요.
|
|
197
|
+
|
|
198
|
+
</details>
|
|
199
|
+
|
|
200
|
+
<details>
|
|
201
|
+
<summary><strong>어떤 AI와 연결하나요?</strong></summary>
|
|
202
|
+
|
|
203
|
+
MCP를 지원하는 AI 애플리케이션과 에이전트가 연결 대상입니다. 승인 확인 창 지원은 클라이언트마다 다르며, 실제로 확인한 범위는 [AI 클라이언트 호환](docs/QUICKSTART.md#ai-클라이언트-호환)에 있습니다.
|
|
204
|
+
|
|
205
|
+
</details>
|
|
206
|
+
|
|
207
|
+
<details>
|
|
208
|
+
<summary><strong>AI 모델도 포함하나요? 대화는 어디로 전달되나요?</strong></summary>
|
|
209
|
+
|
|
210
|
+
kakao-max가 맡는 역할은 카카오톡 도구를 제공하는 서버입니다. 요청을 해석하고 결과를 정리하는 AI는 연결한 클라이언트에서 사용합니다. 허용된 조회 결과는 그 클라이언트에 전달되며, 이후 데이터 처리는 사용하는 클라이언트와 모델 제공자의 설정·정책에 따라 달라집니다.
|
|
211
|
+
|
|
212
|
+
</details>
|
|
213
|
+
|
|
214
|
+
<details>
|
|
215
|
+
<summary><strong>오픈소스 라이선스는 무엇인가요?</strong></summary>
|
|
216
|
+
|
|
217
|
+
[MIT 라이선스](LICENSE)입니다. 보안 문제는 [SECURITY.md](SECURITY.md), 기여 방법은 [CONTRIBUTING.md](CONTRIBUTING.md)를 보세요.
|
|
218
|
+
|
|
219
|
+
</details>
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
<a id="community"></a>
|
|
223
|
+
|
|
224
|
+
## 함께 만드는 kakao-max
|
|
225
|
+
|
|
226
|
+
카카오톡에서 나를 대신해 소통하는 에이전트와 일상·업무 자동화를 함께 만들어 갈 한국어 개발자 모임입니다. 처음 시작하는 분도, 직접 도구를 만드는 분도 환영합니다.
|
|
227
|
+
|
|
228
|
+
**[Kakao Max 개발자 모임 — 오픈채팅 참여하기 →](https://open.kakao.com/o/g448E9Ti)**
|
|
229
|
+
|
|
230
|
+
- **질문과 도움:** MCP·AI 에이전트 개발 질문과 설치·연결 경험을 나눠요.
|
|
231
|
+
- **활용 사례:** 만들고 싶은 자동화와 직접 만든 작업 흐름을 소개해 주세요.
|
|
232
|
+
- **아이디어와 피드백:** 필요한 기능과 개발 방향을 함께 이야기해요.
|
|
233
|
+
|
|
234
|
+
대화 캡처나 로그를 공유할 때는 이름·전화번호·인증정보 등 개인정보를 가려 주세요. 이 모임은 Kakao와 무관한 독립 개발자 커뮤니티입니다.
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
<p align="center">
|
|
239
|
+
<img src="assets/max.svg" width="80" alt="맥스 다람쥐"><br>
|
|
240
|
+
<strong>맥스(MAX)</strong> — 카카오톡과 AI 사이를 달리는 전령 다람쥐.<br>
|
|
241
|
+
<sub>Bring KakaoTalk to your AI agents through a headless MCP server.</sub>
|
|
242
|
+
</p>
|
|
243
|
+
|
|
244
|
+
kakao-max는 Kakao의 공식 제품이 아니며, Kakao와 제휴하거나 승인을 받은 프로젝트가 아닙니다. KakaoTalk 및 관련 상표의 권리는 각 권리자에게 있습니다.
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
The bundles in this directory include bson 6.10.4 (Apache-2.0), https://github.com/mongodb/js-bson
|
|
2
|
+
|
|
3
|
+
Apache License
|
|
4
|
+
Version 2.0, January 2004
|
|
5
|
+
http://www.apache.org/licenses/
|
|
6
|
+
|
|
7
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
8
|
+
|
|
9
|
+
1. Definitions.
|
|
10
|
+
|
|
11
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
12
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
13
|
+
|
|
14
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
15
|
+
the copyright owner that is granting the License.
|
|
16
|
+
|
|
17
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
18
|
+
other entities that control, are controlled by, or are under common
|
|
19
|
+
control with that entity. For the purposes of this definition,
|
|
20
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
21
|
+
direction or management of such entity, whether by contract or
|
|
22
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
23
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
24
|
+
|
|
25
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
26
|
+
exercising permissions granted by this License.
|
|
27
|
+
|
|
28
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
29
|
+
including but not limited to software source code, documentation
|
|
30
|
+
source, and configuration files.
|
|
31
|
+
|
|
32
|
+
"Object" form shall mean any form resulting from mechanical
|
|
33
|
+
transformation or translation of a Source form, including but
|
|
34
|
+
not limited to compiled object code, generated documentation,
|
|
35
|
+
and conversions to other media types.
|
|
36
|
+
|
|
37
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
38
|
+
Object form, made available under the License, as indicated by a
|
|
39
|
+
copyright notice that is included in or attached to the work
|
|
40
|
+
(an example is provided in the Appendix below).
|
|
41
|
+
|
|
42
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
43
|
+
form, that is based on (or derived from) the Work and for which the
|
|
44
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
45
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
46
|
+
of this License, Derivative Works shall not include works that remain
|
|
47
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
48
|
+
the Work and Derivative Works thereof.
|
|
49
|
+
|
|
50
|
+
"Contribution" shall mean any work of authorship, including
|
|
51
|
+
the original version of the Work and any modifications or additions
|
|
52
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
53
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
54
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
55
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
56
|
+
means any form of electronic, verbal, or written communication sent
|
|
57
|
+
to the Licensor or its representatives, including but not limited to
|
|
58
|
+
communication on electronic mailing lists, source code control systems,
|
|
59
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
60
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
61
|
+
excluding communication that is conspicuously marked or otherwise
|
|
62
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
63
|
+
|
|
64
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
65
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
66
|
+
subsequently incorporated within the Work.
|
|
67
|
+
|
|
68
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
69
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
70
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
71
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
72
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
73
|
+
Work and such Derivative Works in Source or Object form.
|
|
74
|
+
|
|
75
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
76
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
77
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
78
|
+
(except as stated in this section) patent license to make, have made,
|
|
79
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
80
|
+
where such license applies only to those patent claims licensable
|
|
81
|
+
by such Contributor that are necessarily infringed by their
|
|
82
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
83
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
84
|
+
institute patent litigation against any entity (including a
|
|
85
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
86
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
87
|
+
or contributory patent infringement, then any patent licenses
|
|
88
|
+
granted to You under this License for that Work shall terminate
|
|
89
|
+
as of the date such litigation is filed.
|
|
90
|
+
|
|
91
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
92
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
93
|
+
modifications, and in Source or Object form, provided that You
|
|
94
|
+
meet the following conditions:
|
|
95
|
+
|
|
96
|
+
(a) You must give any other recipients of the Work or
|
|
97
|
+
Derivative Works a copy of this License; and
|
|
98
|
+
|
|
99
|
+
(b) You must cause any modified files to carry prominent notices
|
|
100
|
+
stating that You changed the files; and
|
|
101
|
+
|
|
102
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
103
|
+
that You distribute, all copyright, patent, trademark, and
|
|
104
|
+
attribution notices from the Source form of the Work,
|
|
105
|
+
excluding those notices that do not pertain to any part of
|
|
106
|
+
the Derivative Works; and
|
|
107
|
+
|
|
108
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
109
|
+
distribution, then any Derivative Works that You distribute must
|
|
110
|
+
include a readable copy of the attribution notices contained
|
|
111
|
+
within such NOTICE file, excluding those notices that do not
|
|
112
|
+
pertain to any part of the Derivative Works, in at least one
|
|
113
|
+
of the following places: within a NOTICE text file distributed
|
|
114
|
+
as part of the Derivative Works; within the Source form or
|
|
115
|
+
documentation, if provided along with the Derivative Works; or,
|
|
116
|
+
within a display generated by the Derivative Works, if and
|
|
117
|
+
wherever such third-party notices normally appear. The contents
|
|
118
|
+
of the NOTICE file are for informational purposes only and
|
|
119
|
+
do not modify the License. You may add Your own attribution
|
|
120
|
+
notices within Derivative Works that You distribute, alongside
|
|
121
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
122
|
+
that such additional attribution notices cannot be construed
|
|
123
|
+
as modifying the License.
|
|
124
|
+
|
|
125
|
+
You may add Your own copyright statement to Your modifications and
|
|
126
|
+
may provide additional or different license terms and conditions
|
|
127
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
128
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
129
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
130
|
+
the conditions stated in this License.
|
|
131
|
+
|
|
132
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
133
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
134
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
135
|
+
this License, without any additional terms or conditions.
|
|
136
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
137
|
+
the terms of any separate license agreement you may have executed
|
|
138
|
+
with Licensor regarding such Contributions.
|
|
139
|
+
|
|
140
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
141
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
142
|
+
except as required for reasonable and customary use in describing the
|
|
143
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
144
|
+
|
|
145
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
146
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
147
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
148
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
149
|
+
implied, including, without limitation, any warranties or conditions
|
|
150
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
151
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
152
|
+
appropriateness of using or redistributing the Work and assume any
|
|
153
|
+
risks associated with Your exercise of permissions under this License.
|
|
154
|
+
|
|
155
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
156
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
157
|
+
unless required by applicable law (such as deliberate and grossly
|
|
158
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
159
|
+
liable to You for damages, including any direct, indirect, special,
|
|
160
|
+
incidental, or consequential damages of any character arising as a
|
|
161
|
+
result of this License or out of the use or inability to use the
|
|
162
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
163
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
164
|
+
other commercial damages or losses), even if such Contributor
|
|
165
|
+
has been advised of the possibility of such damages.
|
|
166
|
+
|
|
167
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
168
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
169
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
170
|
+
or other liability obligations and/or rights consistent with this
|
|
171
|
+
License. However, in accepting such obligations, You may act only
|
|
172
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
173
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
174
|
+
defend, and hold each Contributor harmless for any liability
|
|
175
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
176
|
+
of your accepting any such warranty or additional liability.
|
|
177
|
+
|
|
178
|
+
END OF TERMS AND CONDITIONS
|
|
179
|
+
|
|
180
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
181
|
+
|
|
182
|
+
To apply the Apache License to your work, attach the following
|
|
183
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
184
|
+
replaced with your own identifying information. (Don't include
|
|
185
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
186
|
+
comment syntax for the file format. We also recommend that a
|
|
187
|
+
file or class name and description of purpose be included on the
|
|
188
|
+
same "printed page" as the copyright notice for easier
|
|
189
|
+
identification within third-party archives.
|
|
190
|
+
|
|
191
|
+
Copyright [yyyy] [name of copyright owner]
|
|
192
|
+
|
|
193
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
194
|
+
you may not use this file except in compliance with the License.
|
|
195
|
+
You may obtain a copy of the License at
|
|
196
|
+
|
|
197
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
198
|
+
|
|
199
|
+
Unless required by applicable law or agreed to in writing, software
|
|
200
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
201
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
202
|
+
See the License for the specific language governing permissions and
|
|
203
|
+
limitations under the License.
|