Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
172 commits
Select commit Hold shift + click to select a range
c10796e
Update README.md
moazbuilds Oct 10, 2025
c5ec6e1
refactor(engines): remove profile parameter from engine interfaces an…
moazbuilds Oct 10, 2025
ad075cd
chore: bump version to 0.2.3
moazbuilds Oct 10, 2025
3246e3c
refactor(workflows): reorganize tracking functions and update plan/ar…
moazbuilds Oct 11, 2025
872f85b
feat(workflows): add fallback agent support for incomplete steps
moazbuilds Oct 11, 2025
3314eb4
feat(workflows): add fallback agents and increase timeout to 30 minutes
moazbuilds Oct 11, 2025
49af87a
fix: correct task_fallback path and template variable names
moazbuilds Oct 11, 2025
82fd532
docs(templates): add codemachine workflow and agent templates
moazbuilds Oct 11, 2025
967f5ba
refactor(agents): reorganize agent prompts and update workflow config…
moazbuilds Oct 11, 2025
2810377
feat(loop): make trigger optional and control behavior via config file
moazbuilds Oct 11, 2025
c9b1430
docs(task-validation): update output format template with clearer ins…
moazbuilds Oct 11, 2025
6ec254d
feat(workflows): add resume from last incomplete step
moazbuilds Oct 12, 2025
89aec15
feat(workflows): improve step tracking with resume from first incompl…
moazbuilds Oct 12, 2025
fcd528d
feat: update version to 0.3.0 and improve workflow execution
moazbuilds Oct 13, 2025
1ab3240
refactor(workflows): make loop handling async and improve error logging
moazbuilds Oct 13, 2025
39358ae
feat(cli): add update notifier and dim color to palette
moazbuilds Oct 13, 2025
7bf8ee9
Create LICENSE
moazbuilds Oct 13, 2025
fee1cf4
docs: add contributing guide
moazbuilds Oct 13, 2025
0c922b5
refactor(codemachine): simplify agent config and workflow engine sett…
moazbuilds Oct 13, 2025
6986d41
Merge branch 'main' of https://github.com/Mo33aazz/codemachine
moazbuilds Oct 13, 2025
4e1535f
docs: update readme content and remove docs from gitignore
moazbuilds Oct 13, 2025
21558b7
docs: improve readability of README section header
moazbuilds Oct 13, 2025
a5089b6
docs: update plan artifacts directory path in templates
moazbuilds Oct 14, 2025
2446926
chore: bump version to 0.3.1
moazbuilds Oct 14, 2025
94964e8
refactor(engines): remove outdated profile-based authentication and l…
moazbuilds Oct 15, 2025
5269fc7
refactor(workflows): remove force option from workflow execution
moazbuilds Oct 15, 2025
57a41f4
feat(cli): add --spec flag for global CLI usage
moazbuilds Oct 15, 2025
79c9586
refactor(workspace): rename fallback directory to prompt for clarity
moazbuilds Oct 15, 2025
dcdfbba
feat(workflows): add trigger behavior support for dynamic agent execu…
moazbuilds Oct 15, 2025
106d00e
refactor(memory): change memory system to write-only across all execu…
moazbuilds Oct 17, 2025
608ceca
chore: reorganize docs structure and remove unused templates
moazbuilds Oct 17, 2025
97d400c
docs: add documentation files and images for codemachine
moazbuilds Oct 17, 2025
2950124
docs: restructure documentation and move images to root docs folder
moazbuilds Oct 18, 2025
896e81f
feat(telemetry): add telemetry capture and logging for engine executions
moazbuilds Oct 18, 2025
3a65287
feat(execution): integrate prompt processing across execution pipeline
moazbuilds Oct 19, 2025
dae9cc7
feat(ui): add workflow UI components and state management
moazbuilds Oct 19, 2025
be71b91
feat(ui): integrate workflow UI with execution flow
moazbuilds Oct 19, 2025
0ecb736
feat(ui): improve terminal UI with scrollable components and console …
moazbuilds Oct 19, 2025
afcdf89
refactor(ui): remove ScrollBox dependency and simplify layout components
moazbuilds Oct 20, 2025
c01058f
refactor(ui): remove failed and paused states, simplify status handling
moazbuilds Oct 20, 2025
6e5b9fe
feat: add test workflow agents and improve UI components
moazbuilds Oct 20, 2025
7529f4f
feat(workflow): add support for aborting workflow steps
moazbuilds Oct 20, 2025
b2e5ccc
feat(ui): add loop round indicator to agent display
moazbuilds Oct 20, 2025
2d2353c
feat(workflow): implement per-agent output buffers
moazbuilds Oct 20, 2025
6cd2184
style(ui): improve UI components styling and remove debug logs
moazbuilds Oct 20, 2025
4e93fa2
fix(ui): ensure unique keys for agent nodes in AgentTimeline component
SoyHub Oct 20, 2025
8ca0d1f
refactor(workflows): update test w
moazbuilds Oct 20, 2025
17a2a76
Merge pull request #7 from moazbuilds/ui-implementation-fix-flashing
SoyHub Oct 20, 2025
105848f
fix(workflow): add step tracking to agents in workflow execution
SoyHub Oct 20, 2025
c139964
refactor(config): simplify agent prompt paths by removing path module…
moazbuilds Oct 20, 2025
6cb0fb1
Merge remote-tracking branch 'origin/ui-implementation-fix-step-id' i…
moazbuilds Oct 21, 2025
7d7a0eb
refactor(engine): replace hardcoded engine types with EngineType
moazbuilds Oct 21, 2025
15b0622
refactor(workflow): simplify workflow state tracking and agent execution
moazbuilds Oct 21, 2025
e390815
fix(workflow): prevent duplicate agent entries in workflow execution
moazbuilds Oct 21, 2025
e318200
refactor(ui): remove auto-scroll and scroll position functionality
moazbuilds Oct 21, 2025
e7abdf6
feat(ui): add height utils and terminal resize hook
moazbuilds Oct 21, 2025
6726375
feat(agents): add comprehensive agent monitoring and orchestration sy…
moazbuilds Oct 21, 2025
3ef679d
feat(orchestration): enhance agent orchestration with parent context …
moazbuilds Oct 21, 2025
e120a72
feat(monitoring): add PID tracking and real-time agent validation
moazbuilds Oct 21, 2025
7e2b10a
feat(monitoring): add sub-agent support and multi-process safety
moazbuilds Oct 21, 2025
b3879c9
feat(ui): add monitoring agent sync to workflow UI
moazbuilds Oct 21, 2025
d652596
refactor(orchestration): remove redundant session monitoring
moazbuilds Oct 21, 2025
fc48afd
feat(ui): add log viewer and navigation improvements
moazbuilds Oct 21, 2025
eaabcc4
feat(workflow): add log streaming support for sub-agents
moazbuilds Oct 22, 2025
9cacf2b
feat(workflow): add workflow status tracking and UI enhancements
moazbuilds Oct 22, 2025
0d0448d
feat(ui): implement two-stage Ctrl+C handling for graceful workflow exit
moazbuilds Oct 22, 2025
e0f04e0
refactor(ui): centralize Ctrl+C handling and simplify workflow status…
moazbuilds Oct 22, 2025
7cca0da
refactor(ui): adjust padding and height calculations for better layout
moazbuilds Oct 22, 2025
21cbade
feat(terminal): add comprehensive terminal clearing utility
moazbuilds Oct 22, 2025
a2255fe
feat(ui): add text wrapping and width calculations for output window
moazbuilds Oct 22, 2025
47fd9d5
refactor(ui): remove in-memory output buffering and switch to log fil…
moazbuilds Oct 22, 2025
be3fe9f
feat(log-stream): add connecting state and retry logic for agent logs
moazbuilds Oct 22, 2025
baa5d73
feat(ui): change completed status icon from checkmark to filled circle
moazbuilds Oct 22, 2025
ec4bc2e
feat(WorkflowDashboard): make panel widths dynamic based on terminal …
moazbuilds Oct 22, 2025
891dce1
style(ui): adjust padding in component headers for consistency
moazbuilds Oct 22, 2025
9c90247
style(ui): improve selected item visibility in agent components
moazbuilds Oct 22, 2025
b10438d
fix(useLogStream): increase retry timeout from 10 to 30 seconds
moazbuilds Oct 22, 2025
1f21dfb
feat(ui): implement smooth scrolling for agent timeline
moazbuilds Oct 22, 2025
3c1bffa
feat(workflow): add loop iteration support and runtime tracking
moazbuilds Oct 22, 2025
62dabb1
feat(monitoring): add execution history tracking and UI
moazbuilds Oct 22, 2025
2f80528
feat(ui): improve history view navigation and add scroll position per…
moazbuilds Oct 22, 2025
b7a55a1
fix(LogViewer): simplify close shortcut to only use escape key
moazbuilds Oct 22, 2025
f970ee2
fix(workflow-ui): use unique agent IDs for UI
moazbuilds Oct 22, 2025
a18fde7
fix(session-shell): improve workflow start behavior and error handling
moazbuilds Oct 22, 2025
1bf0818
feat(cli): add Ink-powered interactive session shell UI
moazbuilds Oct 23, 2025
4c6645b
feat(workspace): add agent template mirroring support
moazbuilds Oct 23, 2025
c90ed66
feat(orchestration): enhance agent execution with input files and tai…
moazbuilds Oct 25, 2025
ee7a2de
refactor(agents): restructure agent execution and coordination systems
moazbuilds Oct 25, 2025
543836b
feat(coordinator): improve command parsing with quote-aware splitting
moazbuilds Oct 25, 2025
0fd35c8
feat(coordinator): add support for path placeholders and execution de…
moazbuilds Oct 25, 2025
d5d66e2
refactor(architecture): update architecture agent template with detai…
moazbuilds Oct 25, 2025
41ea059
feat(workflows): add checkpoint behavior support
moazbuilds Oct 25, 2025
348997e
feat(ui): add ui integration for agent monitoring
moazbuilds Oct 25, 2025
e04cb09
feat(workflow): add checkpoint system for manual review
moazbuilds Oct 25, 2025
80de561
feat(ui,workflows): add UI steps and timeline\n\n- Add resolveUI glob…
moazbuilds Oct 25, 2025
00eb96e
feat(workflow): add support for UI elements in workflow timeline
moazbuilds Oct 25, 2025
ca912fa
refactor(navigation): split navigation and rendering logic for timeli…
moazbuilds Oct 25, 2025
f56ae96
fix(telemetry): calculate total input tokens by including cached tokens
moazbuilds Oct 25, 2025
9ba847f
fix(WorkflowDashboard): ignore keyboard inputs when history or log vi…
moazbuilds Oct 25, 2025
908ad19
fix(WorkflowUIState): set startTime when agent status changes to running
moazbuilds Oct 25, 2025
b3120c4
fix(ui): add version counter to fix agent ID mapping race condition
moazbuilds Oct 25, 2025
0cbe6eb
feat(ui): improve agent connection handling and UI responsiveness
moazbuilds Oct 25, 2025
5864f7b
refactor(workspace): improve agent template mirroring and prompt orde…
moazbuilds Oct 25, 2025
09429f7
feat(workflows): update dev workflow and add new agents
moazbuilds Oct 25, 2025
d279d59
chore(deps): normalize peer metadata in lockfile
bahyali Oct 26, 2025
fd2afaf
fix(ui): viewport vertical size error
bahyali Oct 26, 2025
2da375b
chore: fix npm run dev and add react-devtools
bahyali Oct 26, 2025
4537eb1
feat(ui): prevent auto-scroll when updating visible item count
moazbuilds Oct 26, 2025
140c019
feat(workflows): add 'stop' action to loop behavior and improve type …
moazbuilds Oct 26, 2025
510a7d3
feat(architecture): add comprehensive architecture sub-agents and wor…
moazbuilds Oct 27, 2025
de10555
perf: optimize performance with caching and batch updates
moazbuilds Oct 27, 2025
048b9d0
perf(ui): optimize polling and rendering performance
moazbuilds Oct 27, 2025
f1285fc
perf(ui): replace individual spinners with shared spinner context
moazbuilds Oct 27, 2025
7f5bc2f
feat(logging): implement structured output formatting system
moazbuilds Oct 27, 2025
8e281b0
feat(execution): show command execution start markers immediately
moazbuilds Oct 27, 2025
a34d3a5
docs: fix logical operator in blueprint orchestrator instructions
moazbuilds Oct 27, 2025
5288430
feat(codex): add status message during turn processing
moazbuilds Oct 28, 2025
86ea277
refactor(monitoring): improve log formatting and version management
moazbuilds Oct 31, 2025
7a043e7
feat(logger): improve agent log header formatting with chalk
moazbuilds Oct 31, 2025
04af04b
refactor(formatters): replace chalk with marker system for bold text
moazbuilds Oct 31, 2025
886f707
feat(workflows): add specifications-indexer agent and update workflow
moazbuilds Nov 3, 2025
f7931ec
refactor(workflows): restructure workflow templates and update codema…
moazbuilds Nov 3, 2025
476cc7f
docs(planning-agent): add project scale classification guidelines
moazbuilds Nov 3, 2025
d92ab44
feat(agents): add engine tracking and update agent protocols
moazbuilds Nov 3, 2025
1df1a54
feat(telemetry): add cached tokens calculation and display
moazbuilds Nov 3, 2025
1a970be
refactor(architecture): update agent protocols and simplify config
moazbuilds Nov 3, 2025
35d71d2
refactor(agents): update agent protocols and improve task extraction …
moazbuilds Nov 4, 2025
508727e
refactor(workflows): reorder execution steps and update runtime scrip…
moazbuilds Nov 4, 2025
b9d8eac
feat(architecture): add ui/ux architect role and update agent execution
moazbuilds Nov 4, 2025
ea2bf72
feat{tests}: fix and update tests
moazbuilds Nov 4, 2025
f31a737
chore: remove comment about ignoring folders starting with .tmp in .g…
Oct 20, 2025
8294965
chore: add comment to clarify ignoring folders starting with .tmp in …
SoyHub Oct 20, 2025
54ced09
feat: add CCR (Claude Code Router) engine support
apraditya Oct 27, 2025
fc966bd
test: add comprehensive test suite for CCR engine
apraditya Oct 27, 2025
12c2a2b
feat: add permission bypass flags to CCR engine
apraditya Oct 27, 2025
76362f4
feat(ccr): improve ccr authentication handling and user guidance
moazbuilds Nov 4, 2025
271752d
refactor(execution): improve prompt formatting and output display
moazbuilds Nov 4, 2025
70bac1f
fix(process): improve process cleanup and signal handling
moazbuilds Nov 4, 2025
0fb8772
refactor(sub-agents): standardize engine configuration and update readme
moazbuilds Nov 4, 2025
8c96bb6
docs: update demo gif path with cache-busting parameter
moazbuilds Nov 4, 2025
e49630c
docs: update README demo gif path and cursor cli support status
moazbuilds Nov 4, 2025
edbaed6
test(ccr-engine): update expected output in test case
moazbuilds Nov 4, 2025
e8cbd12
fix(monitoring): replace 'any' type with 'string' for process.emit
moazbuilds Nov 4, 2025
d3e666b
feat(cursor): add Grok model support and improve status handling
moazbuilds Nov 5, 2025
6dc1793
feat(monitoring): make registry operations async with file locking
moazbuilds Nov 5, 2025
9509116
docs: update contextual information in runtime preparation agent
moazbuilds Nov 5, 2025
0057c98
chore: bump version to 0.4.1
moazbuilds Nov 5, 2025
ffcbbf2
refactor(monitoring): remove unused fs import from registryLock
moazbuilds Nov 5, 2025
8828b34
fix(monitoring): use correct type for process.emit in cleanup
moazbuilds Nov 5, 2025
3806191
refactor(sub-agents): remove redundant engine field from agent configs
moazbuilds Nov 5, 2025
afb1284
docs: update git-commit-workflow.md with additional gitignore rules
moazbuilds Nov 5, 2025
69b5628
refactor(workflow): update step engines and models
moazbuilds Nov 5, 2025
aa49bdc
fix(registryLock): ensure file exists before locking to prevent corru…
moazbuilds Nov 5, 2025
34f65e5
fix(registry): prevent race conditions in registry file handling
moazbuilds Nov 5, 2025
7c402cd
chore: bump version to 0.4.2
moazbuilds Nov 5, 2025
c052a43
refactor(workflow): update engine configurations in codemachine workflow
moazbuilds Nov 5, 2025
b0e9a74
feat(ui): display loop progress with task completion status
moazbuilds Nov 5, 2025
3559da7
feat(claude): add analyzing status message on session init…
moazbuilds Nov 5, 2025
860e9a2
chore: bump version to 0.4.3
moazbuilds Nov 6, 2025
1063df6
docs(anchor-insertion): update anchor insertion protocol with detaile…
moazbuilds Nov 7, 2025
a2d26e4
refactor: improve argument handling and update eslint config
moazbuilds Nov 7, 2025
a66a005
feat: add OpenCode CLI as first-class engine integration
Nov 8, 2025
0d0ef24
feat(opencode): improve auth flow and xdg compliance
moazbuilds Nov 8, 2025
8d419e6
fix(process): ensure proper cleanup of child processes on abort
moazbuilds Nov 8, 2025
26f53e6
Merge pull request #23 from TheMightyDman/main
moazbuilds Nov 8, 2025
61af6b4
refactor(telemetry): implement provider-specific telemetry parsers
moazbuilds Nov 8, 2025
ee6653d
fix(opencode): merge process.env with provided env in resolveRunnerEnv
moazbuilds Nov 8, 2025
dbbb010
refactor(engines): update engine names to be more descriptive
moazbuilds Nov 8, 2025
230ceaa
refactor(ccr): simplify ccr auth handling by using .enable marker
moazbuilds Nov 8, 2025
b032d4c
refactor(telemetry): improve type safety in telemetry parsers
moazbuilds Nov 8, 2025
b77062d
chore: bump version to 0.5.0
moazbuilds Nov 8, 2025
242b9ee
feat(deployment): add VPS monitoring scripts and documentation
Nov 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,20 @@ dist/
coverage/
.DS_Store
reports/
docs/*

package-lock.json

# Ignore specific dotfiles/folders
.codemachine
.codemachine/memory
.env
.env.example
.npmrc

# Ignore folders starting with .tmp
.tmp*
.tmp*
.vscode
.codemachine/logs
.codemachine/prompts
.codemachine/agents
.codemachine/template.json
104 changes: 104 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Contributing to CodeMachine

First off, thank you for considering contributing to CodeMachine! It's people like you that make CodeMachine such a great tool.

We welcome contributions in various forms, including but not limited to:
- New features and enhancements
- Bug fixes
- Documentation improvements
- New templates and workflows

This document focuses on creating new templates and workflows.

## Getting Started

1. **Fork the repository** on GitHub.
2. **Clone your fork** to your local machine.
3. **Install the dependencies**:
```bash
npm install
```
4. **Build the project**:
```bash
npm run build
```
5. **Link the package**: To test your changes globally, use `npm link`:
```bash
npm link
```

## The Config Directory

The `config` directory is the heart of CodeMachine's configuration. It's where you define agents, modules, and placeholders that can be used in your workflows and templates. Understanding this directory is crucial for customizing and extending CodeMachine.

Here's a breakdown of the files in the `config` directory:

- `main.agents.js`: Defines the main agents that can be used as steps in a workflow.
- `sub.agents.js`: Defines the sub-agents that can be used for parallel execution within a workflow.
- `modules.js`: Defines special modules that can be used as steps in a workflow. Modules can have custom behaviors, such as looping.
- `placeholders.js`: Defines placeholders that can be used in your prompt templates. This allows you to inject dynamic content into your prompts.

By modifying these files, you can add new agents, create custom modules, and define your own placeholders to tailor CodeMachine to your specific needs.



Prompt templates are essential for guiding the behavior of the AI agents. They are located in the `prompts/templates` directory.

### Template Structure

The `prompts/templates` directory is organized into subdirectories, each representing a different template set. For example, the `codemachine` directory contains the templates for the core CodeMachine workflow.

Each template is a Markdown file (`.md`) that defines the prompt for a specific agent. The file name corresponds to the agent's ID. For example, `01-architecture-agent.md` is the template for the `architecture-agent`.

### Creating a New Template

1. **Choose a template set**: Decide which template set your new template belongs to, or create a new directory if needed.
2. **Create a new Markdown file**: The file name should be descriptive of the agent's purpose.
3. **Write the template**: The content of the file should be a clear and concise prompt that guides the agent's behavior. You can use placeholders in the format `{{placeholder_name}}` to insert dynamic content. The available placeholders are defined in the `config/placeholders.js` file.

## Creating Workflows

Workflows define the sequence of steps and agents that are executed to achieve a specific goal. They are located in the `templates/workflows` directory.

### Workflow Structure

A workflow is a JavaScript file that exports a workflow definition object. The object has the following properties:

- `name`: The name of the workflow.
- `steps`: An array of steps to be executed in sequence.
- `subAgentIds`: An array of sub-agent IDs that can be used in the workflow.

### Creating a New Workflow

1. **Create a new JavaScript file** in the `templates/workflows` directory. The file name should be descriptive of the workflow's purpose (e.g., `my-new-workflow.workflow.js`).
2. **Define the workflow object**: Create a JavaScript object with the `name`, `steps`, and `subAgentIds` properties.
3. **Define the steps**: Each step is an object that defines the agent to be executed and its parameters. You can use the `resolveStep`, `resolveModule`, and `resolveFolder` functions to create steps. These functions load agents, modules, and folders defined in the `config` directory.

- `resolveStep(agentId, parameters)`: Loads a main agent defined in `config/main.agents.js`.
- `resolveModule(moduleId, parameters)`: Loads a module defined in `config/modules.js`.
- `resolveFolder(folderId, parameters)`: Loads a folder of agents defined in `config/main.agents.js`. This is useful for applying the same parameters to a group of agents.
4. **Add sub-agents**: If your workflow uses sub-agents, add their IDs to the `subAgentIds` array.

### Example Workflow

Here is an example of a simple workflow:

```javascript
export default {
name: 'My New Workflow',
steps: [
resolveStep('my-agent', { /* parameters */ }),
resolveModule('my-module', { /* parameters */ }),
],
subAgentIds: ['my-sub-agent'],
};
```

## Submitting Changes

1. **Create a new branch** for your changes.
2. **Commit your changes** with a clear and descriptive commit message.
3. **Push your changes** to your fork on GitHub.
4. **Create a pull request** to the main repository.

We will review your pull request as soon as possible. Thank you for your contribution!
201 changes: 201 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.

"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:

(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and

(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.

You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Loading