@agents-uni/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/DESIGN.md +283 -0
  2. package/LICENSE +21 -0
  3. package/README.en.md +589 -0
  4. package/README.md +589 -0
  5. package/dist/bridge/config-sync.d.ts +24 -0
  6. package/dist/bridge/config-sync.d.ts.map +1 -0
  7. package/dist/bridge/config-sync.js +39 -0
  8. package/dist/bridge/config-sync.js.map +1 -0
  9. package/dist/bridge/index.d.ts +7 -0
  10. package/dist/bridge/index.d.ts.map +1 -0
  11. package/dist/bridge/index.js +7 -0
  12. package/dist/bridge/index.js.map +1 -0
  13. package/dist/bridge/openclaw-adapter.d.ts +49 -0
  14. package/dist/bridge/openclaw-adapter.d.ts.map +1 -0
  15. package/dist/bridge/openclaw-adapter.js +151 -0
  16. package/dist/bridge/openclaw-adapter.js.map +1 -0
  17. package/dist/bridge/soul-generator.d.ts +34 -0
  18. package/dist/bridge/soul-generator.d.ts.map +1 -0
  19. package/dist/bridge/soul-generator.js +149 -0
  20. package/dist/bridge/soul-generator.js.map +1 -0
  21. package/dist/bridge/task-dispatcher.d.ts +107 -0
  22. package/dist/bridge/task-dispatcher.d.ts.map +1 -0
  23. package/dist/bridge/task-dispatcher.js +217 -0
  24. package/dist/bridge/task-dispatcher.js.map +1 -0
  25. package/dist/bridge/uni-registry.d.ts +82 -0
  26. package/dist/bridge/uni-registry.d.ts.map +1 -0
  27. package/dist/bridge/uni-registry.js +261 -0
  28. package/dist/bridge/uni-registry.js.map +1 -0
  29. package/dist/bridge/workspace-io.d.ts +64 -0
  30. package/dist/bridge/workspace-io.d.ts.map +1 -0
  31. package/dist/bridge/workspace-io.js +99 -0
  32. package/dist/bridge/workspace-io.js.map +1 -0
  33. package/dist/cli/commands/deploy.d.ts +6 -0
  34. package/dist/cli/commands/deploy.d.ts.map +1 -0
  35. package/dist/cli/commands/deploy.js +48 -0
  36. package/dist/cli/commands/deploy.js.map +1 -0
  37. package/dist/cli/commands/init.d.ts +2 -0
  38. package/dist/cli/commands/init.d.ts.map +1 -0
  39. package/dist/cli/commands/init.js +137 -0
  40. package/dist/cli/commands/init.js.map +1 -0
  41. package/dist/cli/commands/inspect.d.ts +4 -0
  42. package/dist/cli/commands/inspect.d.ts.map +1 -0
  43. package/dist/cli/commands/inspect.js +77 -0
  44. package/dist/cli/commands/inspect.js.map +1 -0
  45. package/dist/cli/commands/validate.d.ts +2 -0
  46. package/dist/cli/commands/validate.d.ts.map +1 -0
  47. package/dist/cli/commands/validate.js +30 -0
  48. package/dist/cli/commands/validate.js.map +1 -0
  49. package/dist/cli/commands/visualize.d.ts +2 -0
  50. package/dist/cli/commands/visualize.d.ts.map +1 -0
  51. package/dist/cli/commands/visualize.js +69 -0
  52. package/dist/cli/commands/visualize.js.map +1 -0
  53. package/dist/cli/index.d.ts +6 -0
  54. package/dist/cli/index.d.ts.map +1 -0
  55. package/dist/cli/index.js +132 -0
  56. package/dist/cli/index.js.map +1 -0
  57. package/dist/core/agent-registry.d.ts +37 -0
  58. package/dist/core/agent-registry.d.ts.map +1 -0
  59. package/dist/core/agent-registry.js +97 -0
  60. package/dist/core/agent-registry.js.map +1 -0
  61. package/dist/core/event-bus.d.ts +34 -0
  62. package/dist/core/event-bus.d.ts.map +1 -0
  63. package/dist/core/event-bus.js +96 -0
  64. package/dist/core/event-bus.js.map +1 -0
  65. package/dist/core/index.d.ts +8 -0
  66. package/dist/core/index.d.ts.map +1 -0
  67. package/dist/core/index.js +8 -0
  68. package/dist/core/index.js.map +1 -0
  69. package/dist/core/permission-matrix.d.ts +35 -0
  70. package/dist/core/permission-matrix.d.ts.map +1 -0
  71. package/dist/core/permission-matrix.js +95 -0
  72. package/dist/core/permission-matrix.js.map +1 -0
  73. package/dist/core/relationship-graph.d.ts +50 -0
  74. package/dist/core/relationship-graph.d.ts.map +1 -0
  75. package/dist/core/relationship-graph.js +150 -0
  76. package/dist/core/relationship-graph.js.map +1 -0
  77. package/dist/core/resource-pool.d.ts +48 -0
  78. package/dist/core/resource-pool.d.ts.map +1 -0
  79. package/dist/core/resource-pool.js +205 -0
  80. package/dist/core/resource-pool.js.map +1 -0
  81. package/dist/core/state-machine.d.ts +47 -0
  82. package/dist/core/state-machine.d.ts.map +1 -0
  83. package/dist/core/state-machine.js +110 -0
  84. package/dist/core/state-machine.js.map +1 -0
  85. package/dist/core/universe.d.ts +38 -0
  86. package/dist/core/universe.d.ts.map +1 -0
  87. package/dist/core/universe.js +101 -0
  88. package/dist/core/universe.js.map +1 -0
  89. package/dist/dashboard/api.d.ts +10 -0
  90. package/dist/dashboard/api.d.ts.map +1 -0
  91. package/dist/dashboard/api.js +237 -0
  92. package/dist/dashboard/api.js.map +1 -0
  93. package/dist/dashboard/index.d.ts +3 -0
  94. package/dist/dashboard/index.d.ts.map +1 -0
  95. package/dist/dashboard/index.js +3 -0
  96. package/dist/dashboard/index.js.map +1 -0
  97. package/dist/dashboard/server.d.ts +31 -0
  98. package/dist/dashboard/server.d.ts.map +1 -0
  99. package/dist/dashboard/server.js +44 -0
  100. package/dist/dashboard/server.js.map +1 -0
  101. package/dist/dashboard/templates.d.ts +47 -0
  102. package/dist/dashboard/templates.d.ts.map +1 -0
  103. package/dist/dashboard/templates.js +1481 -0
  104. package/dist/dashboard/templates.js.map +1 -0
  105. package/dist/evolution/index.d.ts +5 -0
  106. package/dist/evolution/index.d.ts.map +1 -0
  107. package/dist/evolution/index.js +5 -0
  108. package/dist/evolution/index.js.map +1 -0
  109. package/dist/evolution/memory-consolidator.d.ts +28 -0
  110. package/dist/evolution/memory-consolidator.d.ts.map +1 -0
  111. package/dist/evolution/memory-consolidator.js +84 -0
  112. package/dist/evolution/memory-consolidator.js.map +1 -0
  113. package/dist/evolution/performance-tracker.d.ts +29 -0
  114. package/dist/evolution/performance-tracker.d.ts.map +1 -0
  115. package/dist/evolution/performance-tracker.js +90 -0
  116. package/dist/evolution/performance-tracker.js.map +1 -0
  117. package/dist/evolution/promotion-engine.d.ts +32 -0
  118. package/dist/evolution/promotion-engine.d.ts.map +1 -0
  119. package/dist/evolution/promotion-engine.js +117 -0
  120. package/dist/evolution/promotion-engine.js.map +1 -0
  121. package/dist/evolution/relationship-evolver.d.ts +40 -0
  122. package/dist/evolution/relationship-evolver.d.ts.map +1 -0
  123. package/dist/evolution/relationship-evolver.js +105 -0
  124. package/dist/evolution/relationship-evolver.js.map +1 -0
  125. package/dist/index.d.ts +20 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +23 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/schema/index.d.ts +13 -0
  130. package/dist/schema/index.d.ts.map +1 -0
  131. package/dist/schema/index.js +18 -0
  132. package/dist/schema/index.js.map +1 -0
  133. package/dist/schema/universe.schema.json +214 -0
  134. package/dist/spec/compiler.d.ts +16 -0
  135. package/dist/spec/compiler.d.ts.map +1 -0
  136. package/dist/spec/compiler.js +26 -0
  137. package/dist/spec/compiler.js.map +1 -0
  138. package/dist/spec/index.d.ts +4 -0
  139. package/dist/spec/index.d.ts.map +1 -0
  140. package/dist/spec/index.js +4 -0
  141. package/dist/spec/index.js.map +1 -0
  142. package/dist/spec/parser.d.ts +11 -0
  143. package/dist/spec/parser.d.ts.map +1 -0
  144. package/dist/spec/parser.js +89 -0
  145. package/dist/spec/parser.js.map +1 -0
  146. package/dist/spec/validator.d.ts +9 -0
  147. package/dist/spec/validator.d.ts.map +1 -0
  148. package/dist/spec/validator.js +105 -0
  149. package/dist/spec/validator.js.map +1 -0
  150. package/dist/types/agent.d.ts +56 -0
  151. package/dist/types/agent.d.ts.map +1 -0
  152. package/dist/types/agent.js +8 -0
  153. package/dist/types/agent.js.map +1 -0
  154. package/dist/types/event.d.ts +34 -0
  155. package/dist/types/event.d.ts.map +1 -0
  156. package/dist/types/event.js +11 -0
  157. package/dist/types/event.js.map +1 -0
  158. package/dist/types/governance.d.ts +48 -0
  159. package/dist/types/governance.d.ts.map +1 -0
  160. package/dist/types/governance.js +9 -0
  161. package/dist/types/governance.js.map +1 -0
  162. package/dist/types/index.d.ts +9 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/index.js +9 -0
  165. package/dist/types/index.js.map +1 -0
  166. package/dist/types/memory.d.ts +73 -0
  167. package/dist/types/memory.d.ts.map +1 -0
  168. package/dist/types/memory.js +9 -0
  169. package/dist/types/memory.js.map +1 -0
  170. package/dist/types/protocol.d.ts +48 -0
  171. package/dist/types/protocol.d.ts.map +1 -0
  172. package/dist/types/protocol.js +9 -0
  173. package/dist/types/protocol.js.map +1 -0
  174. package/dist/types/relationship.d.ts +40 -0
  175. package/dist/types/relationship.d.ts.map +1 -0
  176. package/dist/types/relationship.js +9 -0
  177. package/dist/types/relationship.js.map +1 -0
  178. package/dist/types/resource.d.ts +52 -0
  179. package/dist/types/resource.d.ts.map +1 -0
  180. package/dist/types/resource.js +9 -0
  181. package/dist/types/resource.js.map +1 -0
  182. package/dist/types/universe.d.ts +71 -0
  183. package/dist/types/universe.d.ts.map +1 -0
  184. package/dist/types/universe.js +9 -0
  185. package/dist/types/universe.js.map +1 -0
  186. package/package.json +68 -0
package/DESIGN.md ADDED
@@ -0,0 +1,283 @@
1
+ # agents-uni-core 设计文档
2
+
3
+ > 核心使命:提升生产力的同时,我们需要的是更优秀的生产关系。
4
+
5
+ ## 一、设计哲学
6
+
7
+ ### 为什么需要 agents-uni-core?
8
+
9
+ 当前的多 Agent 框架(CrewAI、AutoGen、MetaGPT)解决的是**生产力**问题——如何让 Agent 完成任务。但它们忽略了一个关键维度:**生产关系**——Agent 之间如何组织、协作、竞争、进化。
10
+
11
+ 人类社会用了数千年才发展出复杂的组织形态:官僚制、公司制、军队、合伙制。这些不是随意发明的,而是在特定约束条件下演化出的**最优生产关系**。agents-uni-core 的核心洞见是:
12
+
13
+ > Agent 社会也需要精心设计的生产关系,而不仅仅是把一堆 Agent 扔在一起。
14
+
15
+ ### 三个核心隐喻
16
+
17
+ 1. **Universe(宇宙)**:一个自洽的 Agent 社会,有自己的规则、角色、关系和演化逻辑
18
+ 2. **Constitution(宪法)**:用 YAML 描述的组织规范,定义了宇宙的"物理定律"
19
+ 3. **Evolution(演化)**:组织不是静态的,它通过绩效反馈不断调整结构
20
+
21
+ ## 二、架构总览
22
+
23
+ ```
24
+ ┌─────────────────────────────────────────────────────┐
25
+ │ Universe (容器) │
26
+ │ │
27
+ │ ┌──────────┐ ┌──────────────┐ ┌────────────────┐ │
28
+ │ │ Agent │ │ Relationship │ │ Permission │ │
29
+ │ │ Registry │←→│ Graph │←→│ Matrix │ │
30
+ │ └────┬─────┘ └──────┬───────┘ └───────┬────────┘ │
31
+ │ │ │ │ │
32
+ │ ┌────┴─────┐ ┌──────┴───────┐ ┌───────┴────────┐ │
33
+ │ │ State │ │ Resource │ │ Event │ │
34
+ │ │ Machine │ │ Pool │ │ Bus │ │
35
+ │ └──────────┘ └──────────────┘ └────────────────┘ │
36
+ │ │
37
+ │ ┌───────────────── Evolution ──────────────────────┐ │
38
+ │ │ PerformanceTracker → PromotionEngine │ │
39
+ │ │ MemoryConsolidator → RelationshipEvolver │ │
40
+ │ └──────────────────────────────────────────────────┘ │
41
+ └─────────────────────────────────────────────────────┘
42
+ ↕ ↕
43
+ ┌───────────┐ ┌───────────┐
44
+ │ Spec │ │ Bridge │
45
+ │ (YAML → │ │ (→ Open │
46
+ │ Universe)│ │ Claw) │
47
+ └───────────┘ └───────────┘
48
+ ```
49
+
50
+ ## 三、核心抽象
51
+
52
+ ### 3.1 Agent 与 Role
53
+
54
+ ```
55
+ Agent = 一个具体的行动者("张三")
56
+ Role = 一个抽象的位置("财务总监")
57
+ ```
58
+
59
+ Agent 占据 Role,Role 定义了权限和职责。同一个 Role 可以有多个 Agent(如"工程师"),同一个 Agent 可以迁移到不同 Role(晋升/降级)。
60
+
61
+ **关键设计**:Agent 有 `traits`(特质),Role 有 `duties`(职责)。二者解耦使得组织重构时不需要重新定义 Agent。
62
+
63
+ ### 3.2 Relationship Graph
64
+
65
+ 关系不是简单的上下级,而是一个**加权有向图**:
66
+
67
+ - **supervises / reports_to**:管理关系
68
+ - **collaborates**:平级协作
69
+ - **competes**:竞争关系
70
+ - **advises**:顾问关系
71
+ - **audits**:审计/监督
72
+
73
+ 每条关系有 `weight`(强度 0-1),weight 会随交互历史动态变化。这使得"信任"成为可量化、可演化的组织属性。
74
+
75
+ ### 3.3 Permission Matrix
76
+
77
+ 权限不是布尔值,而是一个三维矩阵:**谁(agentId/roleId)** × **动作(execute/review/delegate/veto/allocate)** × **目标(agentId/*)**
78
+
79
+ ```yaml
80
+ permissions:
81
+ - role: reviewer
82
+ action: veto
83
+ target: "*" # 可以否决任何人
84
+ - agent: agent-001
85
+ action: delegate
86
+ target: team-alpha # 只能委派给特定团队
87
+ ```
88
+
89
+ ### 3.4 State Machine(协议引擎)
90
+
91
+ 组织的工作流程通过有限状态机定义:
92
+
93
+ ```yaml
94
+ protocols:
95
+ - name: code-review
96
+ states:
97
+ - id: submitted
98
+ type: initial
99
+ - id: reviewing
100
+ transitions:
101
+ - to: approved
102
+ requiredRole: senior-dev
103
+ - to: rejected
104
+ requiredRole: senior-dev
105
+ guard: "score < 0.6"
106
+ - id: approved
107
+ type: terminal
108
+ ```
109
+
110
+ **关键设计**:转换(transition)可以有 `requiredRole`(角色门控)和 `guard`(条件守卫),使得工作流既有制度约束又有灵活性。
111
+
112
+ ### 3.5 Resource Pool
113
+
114
+ 资源是组织激励的核心工具:
115
+
116
+ | 类型 | 说明 | 示例 |
117
+ |------|------|------|
118
+ | finite | 用完即止 | 预算、API 配额 |
119
+ | renewable | 定期补充 | 月薪、计算资源 |
120
+ | shared | 共享不消耗 | 知识库、文档 |
121
+
122
+ 分配策略决定了组织的激励结构:
123
+
124
+ - **equal**:平均分配(适合协作型组织)
125
+ - **hierarchy**:按等级分配(适合官僚型组织)
126
+ - **merit**:按绩效分配(适合竞争型组织)
127
+ - **competitive**:竞标/拍卖(适合市场型组织)
128
+
129
+ ### 3.6 Event Bus
130
+
131
+ 所有状态变更都通过事件总线广播:
132
+
133
+ ```
134
+ agent.registered → 新成员加入
135
+ agent.promoted → 晋升事件
136
+ relationship.formed → 新关系建立
137
+ resource.allocated → 资源分配
138
+ protocol.transition → 工作流状态变更
139
+ ```
140
+
141
+ 事件系统使得演化引擎可以**被动观察**组织行为,而不需要侵入核心逻辑。
142
+
143
+ ## 四、演化引擎
144
+
145
+ ### 设计理念
146
+
147
+ 组织不应该是静态的。agents-uni-core 内置了四个演化模块:
148
+
149
+ 1. **PerformanceTracker**:记录每个 Agent 的多维绩效(质量、速度、协作、创新)
150
+ 2. **PromotionEngine**:基于绩效阈值自动产生晋升/降级/停职建议
151
+ 3. **RelationshipEvolver**:根据协作/竞争历史自动调整关系权重
152
+ 4. **MemoryConsolidator**:提取组织级的经验教训,形成组织记忆
153
+
154
+ ### 演化循环
155
+
156
+ ```
157
+ 绩效数据 → 绩效追踪 → 晋升决策 → 角色变更
158
+ ↑ ↓
159
+ └──── 关系演化 ← 事件流 ← 组织记忆 ←─┘
160
+ ```
161
+
162
+ 这个循环使得组织可以自我优化:高绩效 Agent 获得更多资源和更高职位,低绩效 Agent 被降级或淘汰,关系网络随时间演化出最优结构。
163
+
164
+ ## 五、规范描述体系(Universe Spec)
165
+
166
+ ### 与 OpenClaw 的对比
167
+
168
+ | 维度 | OpenClaw SOUL.md | Universe Spec |
169
+ |------|------------------|---------------|
170
+ | 粒度 | 单个 Agent | 整个组织 |
171
+ | 关注点 | Agent 的身份和能力 | Agent 之间的关系和规则 |
172
+ | 格式 | Markdown | YAML (可编程) |
173
+ | 动态性 | 静态定义 | 可演化 |
174
+ | 互操作 | Agent 运行时 | 生成 SOUL.md → OpenClaw |
175
+
176
+ ### Spec 结构
177
+
178
+ ```yaml
179
+ universe:
180
+ name: "my-org"
181
+ type: "corporation" # corporation | government | military | flat | competitive
182
+
183
+ agents: [...] # 角色定义
184
+ governance: {...} # 治理规则
185
+ protocols: [...] # 工作流定义
186
+ resources: [...] # 资源定义
187
+ evolution: {...} # 演化配置
188
+ ```
189
+
190
+ ### 五种内置模板
191
+
192
+ | 模板 | 适用场景 | 治理模式 |
193
+ |------|----------|----------|
194
+ | **competitive** | 赛马/竞标 | 裁判制 + ELO 排名 |
195
+ | **government** | 审批流/官僚制 | 三权分立 + 封驳 |
196
+ | **corporation** | 敏捷团队 | CTO 决策 + Sprint |
197
+ | **flat** | 平等协作 | 民主投票 |
198
+ | **military** | 执行导向 | 单一指挥链 |
199
+
200
+ ## 六、OpenClaw Bridge
201
+
202
+ agents-uni-core 不替代 OpenClaw,而是**在其之上**增加组织层:
203
+
204
+ ```
205
+ Universe Spec (YAML)
206
+ ↓ compile
207
+ Universe Instance (运行时)
208
+ ↓ generate
209
+ SOUL.md × N (每个 Agent 一份)
210
+ ↓ deploy
211
+ OpenClaw Workspaces (Agent 执行环境)
212
+ ```
213
+
214
+ Bridge 模块生成的 SOUL.md 包含:
215
+ - Agent 的角色和职责(从 Role 提取)
216
+ - 与其他 Agent 的关系描述(从 Graph 提取)
217
+ - 权限约束(从 Permission Matrix 提取)
218
+ - 行为特质(从 Agent traits 提取)
219
+
220
+ ## 七、create-uni 脚手架
221
+
222
+ ```bash
223
+ npx create-uni my-project
224
+ # 或
225
+ npx create-uni my-project --template competitive
226
+ ```
227
+
228
+ 脚手架生成:
229
+ ```
230
+ my-project/
231
+ ├── universe.yaml # 组织规范
232
+ ├── package.json # 项目依赖
233
+ ├── data/ # 运行时数据
234
+ └── README.md # 项目说明
235
+ ```
236
+
237
+ ## 八、CLI 工具
238
+
239
+ ```bash
240
+ uni validate universe.yaml # 验证规范
241
+ uni visualize universe.yaml # ASCII 可视化
242
+ uni inspect universe.yaml # 详细检视
243
+ uni deploy universe.yaml # 部署到 OpenClaw
244
+ uni init # 交互式初始化
245
+ ```
246
+
247
+ ## 九、设计决策记录
248
+
249
+ ### D1: 为什么用 YAML 而非 JSON?
250
+
251
+ YAML 支持注释、多行字符串、锚点引用,更适合人类编写和维护组织规范。JSON Schema 仍用于机器验证。
252
+
253
+ ### D2: 为什么 Relationship 是有向图而非无向图?
254
+
255
+ 因为现实中的关系不是对称的:"A 信任 B"不意味着"B 信任 A"。有向图保留了这种不对称性。
256
+
257
+ ### D3: 为什么内置演化引擎而非外部插件?
258
+
259
+ 演化是组织的核心特性,不是可选功能。将其内置确保每个 Universe 都有自我优化的能力,避免"设计好组织就不管了"的反模式。
260
+
261
+ ### D4: 为什么不直接管理 Agent 执行?
262
+
263
+ agents-uni-core 是**组织层**而非**执行层**。Agent 的实际执行由 OpenClaw 或其他运行时处理。这种分离使得组织定义可以独立于具体的 LLM 框架。
264
+
265
+ ### D5: 为什么资源有 decay(衰减)?
266
+
267
+ 衰减模拟了现实中的"用进废退"——不使用的权力会逐渐减弱,不维护的关系会逐渐疏远。这迫使 Agent 持续活跃才能保持资源优势。
268
+
269
+ ## 十、设计灵感
270
+
271
+ agents-uni-core 的设计灵感来源于人类组织形态的演化历史:
272
+
273
+ - 唐代三省六部制 → `government` 模板的权力制衡理念
274
+ - 现代公司制 → `corporation` 模板的敏捷管理理念
275
+ - 军事指挥链 → `military` 模板的单一指挥理念
276
+ - 开源社区 → `flat` 模板的民主协作理念
277
+ - 体育赛事 → `competitive` 模板的赛马竞技理念
278
+
279
+ 核心突破:
280
+ - 支持多种组织形态,而非绑定单一模式
281
+ - 内置演化引擎,组织结构可以自适应优化
282
+ - 资源竞争机制,用经济手段驱动 Agent 行为
283
+ - 关系动态演化,信任和竞争随时间自然演变
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 agents-uni
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.