xtrm-tools 0.5.30 → 0.5.31
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/.claude-plugin/plugin.json +1 -1
- package/README.md +117 -78
- package/cli/package.json +1 -1
- package/config/pi/extensions/lsp-bootstrap/index.ts +88 -0
- package/config/pi/extensions/lsp-bootstrap/package.json +17 -0
- package/config/pi/install-schema.json +1 -0
- package/package.json +1 -1
- package/plugins/xtrm-tools/.claude-plugin/plugin.json +1 -1
- /package/plugins/xtrm-tools/skills/{using-TDD → using-tdd}/SKILL.md +0 -0
- /package/skills/{using-TDD → using-tdd}/SKILL.md +0 -0
package/README.md
CHANGED
|
@@ -1,8 +1,52 @@
|
|
|
1
1
|
# XTRM-Tools
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**xtrm** (`xt`) is an agentic workflow system that turns Claude Code and Pi into disciplined, self-managing development agents. Every session is structured, every change is tracked, and every agent knows exactly what to do next.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
### Beads — issue tracking built for agents
|
|
6
|
+
|
|
7
|
+
[Beads](https://github.com/Jaggerxtrm/beads) is a Dolt-backed issue tracker designed for agentic workflows. Issues are first-class citizens: agents claim them before editing, close them before committing, and carry context forward across sessions and machines via persistent memory. The full `bd` CLI is available inside every session — `bd ready`, `bd update <id> --claim`, `bd close <id>`, `bd remember`.
|
|
8
|
+
|
|
9
|
+
### Hooks — enforcement gates that run automatically
|
|
10
|
+
|
|
11
|
+
A policy compiler produces hooks for both Claude Code and Pi from a single source. These gates enforce the workflow without relying on the agent to remember: the **Edit gate** blocks writes without an active claim, the **Commit gate** blocks `git commit` until the issue is closed, the **Stop gate** checks for unclosed work at session end, and the **Memory gate** prompts the agent to persist insights before exiting. Quality gates run ESLint, tsc, ruff, and mypy automatically on every file save.
|
|
12
|
+
|
|
13
|
+
### Skills — reusable agent behaviors
|
|
14
|
+
|
|
15
|
+
A library of composable skills covers the full development lifecycle: session management (`using-xtrm`), structured planning (`planning`), test coverage strategy (`test-planning`), autonomous session close (`xt-end`), PR queue management (`xt-merge`), documentation maintenance (`documenting`), and domain expertise (backend, devops, security, data science). Skills are injected into the agent context on demand and work identically in Claude Code and Pi.
|
|
16
|
+
|
|
17
|
+
### Planning mode
|
|
18
|
+
|
|
19
|
+
The `planning` skill generates a structured issue board from any spec or idea — epics, tasks, dependencies, test coverage annotations — using `bd create` in parallel. Agents can pick up and continue planned work across sessions with full context. GitNexus impact analysis and Serena code intelligence are integrated into the planning flow so blast radius is assessed before a single line is written.
|
|
20
|
+
|
|
21
|
+
### Statusline
|
|
22
|
+
|
|
23
|
+
A live statusline renders in every Claude Code session: active claim, open issue count, model, context window health (color-coded truecolor gradient), and token usage — all in a single line below the prompt. No configuration required after `xtrm install`.
|
|
24
|
+
|
|
25
|
+
### Specialists *(upcoming)*
|
|
26
|
+
|
|
27
|
+
Native integration with the [specialists](https://github.com/Jaggerxtrm/specialists) framework — spawning purpose-built sub-agents for parallel workloads, code review, and long-running background tasks directly from within a session.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
**Version 0.5.30** | [Complete Guide](XTRM-GUIDE.md) | [Changelog](CHANGELOG.md)
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Documentation
|
|
36
|
+
|
|
37
|
+
| Doc | Contents |
|
|
38
|
+
|-----|----------|
|
|
39
|
+
| [XTRM-GUIDE.md](XTRM-GUIDE.md) | Complete reference — architecture, concepts, full workflow |
|
|
40
|
+
| [docs/hooks.md](docs/hooks.md) | All hooks — event wiring, gate logic, order, authoring |
|
|
41
|
+
| [docs/policies.md](docs/policies.md) | Policy system — compiler, schema, Claude/Pi parity |
|
|
42
|
+
| [docs/skills.md](docs/skills.md) | Skills catalog — all skills, categories, how they load |
|
|
43
|
+
| [docs/pi-extensions.md](docs/pi-extensions.md) | Pi extensions — managed sync, authoring, parity notes |
|
|
44
|
+
| [docs/worktrees.md](docs/worktrees.md) | xt worktrees — `xt claude/pi`, `xt end`, isolation model |
|
|
45
|
+
| [docs/mcp-servers.md](docs/mcp-servers.md) | MCP servers — gitnexus, github-grep, deepwiki, official plugins |
|
|
46
|
+
| [docs/cli-architecture.md](docs/cli-architecture.md) | CLI internals — install flow, diff/sync engine, config merge |
|
|
47
|
+
| [docs/project-skills.md](docs/project-skills.md) | Project-scoped skills — install, layout, Pi/Claude symlinks |
|
|
48
|
+
| [docs/testing.md](docs/testing.md) | Live testing checklist — integration, gates, worktree flows |
|
|
49
|
+
| [CHANGELOG.md](CHANGELOG.md) | Full version history |
|
|
6
50
|
|
|
7
51
|
---
|
|
8
52
|
|
|
@@ -17,7 +61,7 @@ xtrm install
|
|
|
17
61
|
|
|
18
62
|
# Verify
|
|
19
63
|
claude plugin list
|
|
20
|
-
# → xtrm-tools@xtrm-tools Version: 0.5.
|
|
64
|
+
# → xtrm-tools@xtrm-tools Version: 0.5.30 Status: enabled
|
|
21
65
|
```
|
|
22
66
|
|
|
23
67
|
**One-line run:**
|
|
@@ -41,52 +85,78 @@ npx -y github:Jaggerxtrm/xtrm-tools install
|
|
|
41
85
|
|
|
42
86
|
### Skills
|
|
43
87
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
88
|
+
Skills are organized into two categories: **xtrm workflow** skills built specifically for the xtrm stack, and **general-purpose** expert skills that work in any project.
|
|
89
|
+
|
|
90
|
+
#### xtrm Workflow Skills
|
|
91
|
+
|
|
92
|
+
These skills implement the xtrm-specific development workflow — session management, issue tracking, planning, quality, and documentation patterns.
|
|
93
|
+
|
|
94
|
+
| Skill | Purpose |
|
|
95
|
+
|-------|---------|
|
|
96
|
+
| `using-xtrm` | Session operating manual — when to use which tool |
|
|
97
|
+
| `using-quality-gates` | Quality gate workflow — TDD guard, lint/typecheck cycle |
|
|
98
|
+
| `using-serena-lsp` | Code exploration and surgical edits via Serena LSP |
|
|
99
|
+
| `using-tdd` | Test-driven development with 80%+ coverage enforcement |
|
|
100
|
+
| `using-service-skills` | Service catalog discovery and expert persona activation |
|
|
101
|
+
| `xt-end` | Autonomous session close — rebase, push, PR, cleanup |
|
|
102
|
+
| `xt-merge` | FIFO PR merge queue for xt worktree sessions |
|
|
103
|
+
| `planning` | Structured issue board from any spec, with phases and deps |
|
|
104
|
+
| `test-planning` | Test coverage planning alongside implementation work |
|
|
105
|
+
| `delegating` | Cost-optimized task delegation to background agents |
|
|
106
|
+
| `orchestrating-agents` | Multi-model orchestration (Gemini, Qwen handshake) |
|
|
107
|
+
| `documenting` | SSOT doc maintenance with drift detection |
|
|
108
|
+
| `sync-docs` | Doc audit and structural sync across a sprint |
|
|
109
|
+
| `skill-creator` | Create, improve, and evaluate skills |
|
|
110
|
+
| `find-skills` | Discover and install skills on demand |
|
|
111
|
+
| `creating-service-skills` | Generate operational service skill packages |
|
|
112
|
+
| `scoping-service-skills` | Task intake and service routing |
|
|
113
|
+
| `updating-service-skills` | Detect drift and sync expert persona docs |
|
|
114
|
+
| `prompt-improving` | Apply Claude XML best practices to prompts |
|
|
115
|
+
|
|
116
|
+
#### General-Purpose Expert Skills
|
|
117
|
+
|
|
118
|
+
Domain expert skills that can be used in any project, independent of the xtrm workflow.
|
|
119
|
+
|
|
120
|
+
| Skill | Purpose |
|
|
121
|
+
|-------|---------|
|
|
122
|
+
| `senior-backend` | NodeJS, Express, Go, Python, Postgres, REST/GraphQL |
|
|
123
|
+
| `senior-devops` | CI/CD, infrastructure as code, cloud platforms |
|
|
124
|
+
| `senior-security` | AppSec, pen testing, threat modeling, crypto |
|
|
125
|
+
| `senior-data-scientist` | Statistics, ML, A/B testing, causal inference |
|
|
126
|
+
| `docker-expert` | Multi-stage builds, Compose, container security |
|
|
127
|
+
| `python-testing` | pytest, TDD, fixtures, mocking, coverage |
|
|
128
|
+
| `hook-development` | PreToolUse/PostToolUse hook authoring |
|
|
129
|
+
| `clean-code` | Pragmatic coding standards, no over-engineering |
|
|
130
|
+
| `gitnexus-exploring` | Navigate unfamiliar code via knowledge graph |
|
|
131
|
+
| `gitnexus-impact-analysis` | Blast radius before making code changes |
|
|
132
|
+
| `gitnexus-debugging` | Trace bugs through call chains |
|
|
133
|
+
| `gitnexus-refactoring` | Plan safe refactors via dependency mapping |
|
|
134
|
+
| `obsidian-cli` | Interact with Obsidian vaults via CLI |
|
|
63
135
|
|
|
64
136
|
---
|
|
65
137
|
|
|
66
138
|
## Policy System
|
|
67
139
|
|
|
68
|
-
Policies are the
|
|
69
|
-
|
|
70
|
-
### Policy Files
|
|
140
|
+
Policies in `policies/` are the single source of truth for all enforcement rules. They compile to both Claude hooks and Pi extensions.
|
|
71
141
|
|
|
72
142
|
| Policy | Runtime | Purpose |
|
|
73
143
|
|--------|---------|---------|
|
|
74
|
-
| `session-flow.json` | both | Claim sync, stop gate, `xt end` reminder |
|
|
75
144
|
| `beads.json` | both | Issue tracking gates |
|
|
76
|
-
| `
|
|
145
|
+
| `session-flow.json` | both | Claim sync, stop gate, `xt end` reminder |
|
|
146
|
+
| `quality-gates.json` | both | Linting/typechecking on file edits |
|
|
77
147
|
| `quality-gates-env.json` | both | Warns if tsc/ruff/eslint missing at session start |
|
|
78
|
-
| `using-xtrm.json` | claude | Injects using-xtrm session manual at SessionStart |
|
|
79
148
|
| `gitnexus.json` | claude | Knowledge graph enrichment |
|
|
80
|
-
| `
|
|
149
|
+
| `using-xtrm.json` | claude | Injects session manual at SessionStart |
|
|
150
|
+
| `worktree-boundary.json` | claude | Blocks edits outside active worktree |
|
|
81
151
|
| `service-skills.json` | pi | Territory-based skill activation |
|
|
82
152
|
|
|
83
|
-
### Compiler
|
|
84
|
-
|
|
85
153
|
```bash
|
|
86
154
|
node scripts/compile-policies.mjs # Generate hooks.json
|
|
87
155
|
node scripts/compile-policies.mjs --check # CI drift detection
|
|
88
156
|
```
|
|
89
157
|
|
|
158
|
+
See [docs/policies.md](docs/policies.md) for full schema and authoring reference.
|
|
159
|
+
|
|
90
160
|
---
|
|
91
161
|
|
|
92
162
|
## CLI Commands
|
|
@@ -98,75 +168,46 @@ xtrm <command> [options]
|
|
|
98
168
|
| Command | Description |
|
|
99
169
|
|---------|-------------|
|
|
100
170
|
| `install` | Install plugin + beads + gitnexus (interactive target selection) |
|
|
101
|
-
| `init` | Initialize project
|
|
171
|
+
| `init` | Initialize project (bd, gitnexus, service-registry) |
|
|
102
172
|
| `status` | Read-only diff view |
|
|
103
173
|
| `clean` | Remove orphaned hooks |
|
|
104
174
|
| `end` | Close worktree session: rebase, push, PR, cleanup |
|
|
105
175
|
| `worktree list` | List all active `xt/*` worktrees |
|
|
106
|
-
| `worktree clean` | Remove worktrees
|
|
176
|
+
| `worktree clean` | Remove merged worktrees |
|
|
107
177
|
| `claude` | Launch Claude Code in a sandboxed worktree |
|
|
108
|
-
| `pi` | Launch Pi in a sandboxed worktree
|
|
178
|
+
| `pi` | Launch Pi in a sandboxed worktree |
|
|
109
179
|
| `docs show` | Display frontmatter for README, CHANGELOG, docs/*.md |
|
|
110
|
-
| `debug` | Watch
|
|
180
|
+
| `debug` | Watch hook and bd lifecycle events in real time |
|
|
111
181
|
|
|
112
|
-
|
|
182
|
+
**Flags:** `--yes / -y` (non-interactive), `--dry-run` (preview), `--prune` (force-replace hooks)
|
|
113
183
|
|
|
114
|
-
-
|
|
115
|
-
- Extensions from `config/pi/extensions/<name>/` are synced to `~/.pi/agent/extensions/<name>/` and loaded by Pi auto-discovery.
|
|
116
|
-
- Managed extensions are not re-registered with `pi install -l` (prevents duplicate command/flag/shortcut registration conflicts).
|
|
117
|
-
- `custom-footer` now mirrors Claude statusline information density with a two-line parity layout (session metadata + claim/open issue row), while remaining compatible with `pi-dex` footer refresh behavior.
|
|
118
|
-
|
|
119
|
-
### Flags
|
|
120
|
-
|
|
121
|
-
| Flag | Description |
|
|
122
|
-
|------|-------------|
|
|
123
|
-
| `--yes`, `-y` | Non-interactive mode |
|
|
124
|
-
| `--dry-run` | Preview only |
|
|
125
|
-
| `--prune` | Force-replace hooks |
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## Hooks Reference
|
|
130
|
-
|
|
131
|
-
Beads gates: **Edit** (claim required), **Commit** (close issue first), **Stop** (unclosed check), **Memory** (persist insights).
|
|
132
|
-
|
|
133
|
-
See [docs/hooks.md](docs/hooks.md) for full reference.
|
|
184
|
+
See [docs/cli-architecture.md](docs/cli-architecture.md) for internals.
|
|
134
185
|
|
|
135
186
|
---
|
|
136
187
|
|
|
137
188
|
## MCP Servers
|
|
138
189
|
|
|
139
|
-
Configured in `.mcp.json` (xtrm-managed only):
|
|
140
|
-
|
|
141
190
|
| Server | Purpose |
|
|
142
191
|
|--------|---------|
|
|
143
192
|
| `gitnexus` | Knowledge graph |
|
|
144
193
|
| `github-grep` | Code search |
|
|
145
|
-
| `deepwiki` |
|
|
194
|
+
| `deepwiki` | Repository documentation |
|
|
195
|
+
|
|
196
|
+
Official Claude plugins installed by `xtrm install`: `serena`, `context7`, `github`, `ralph-loop`.
|
|
146
197
|
|
|
147
|
-
|
|
148
|
-
- `serena@claude-plugins-official`
|
|
149
|
-
- `context7@claude-plugins-official`
|
|
150
|
-
- `github@claude-plugins-official`
|
|
151
|
-
- `ralph-loop@claude-plugins-official`
|
|
198
|
+
See [docs/mcp-servers.md](docs/mcp-servers.md) for configuration details.
|
|
152
199
|
|
|
153
200
|
---
|
|
154
201
|
|
|
155
202
|
## Issue Tracking (Beads)
|
|
156
203
|
|
|
157
204
|
```bash
|
|
158
|
-
bd ready
|
|
159
|
-
bd update <id> --claim
|
|
160
|
-
bd close <id> --reason "Done"
|
|
205
|
+
bd ready # Find unblocked work
|
|
206
|
+
bd update <id> --claim # Claim an issue
|
|
207
|
+
bd close <id> --reason "Done" # Close when done
|
|
161
208
|
```
|
|
162
209
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
## Documentation
|
|
166
|
-
|
|
167
|
-
- **[XTRM-GUIDE.md](XTRM-GUIDE.md)** — Complete reference guide
|
|
168
|
-
- **[CHANGELOG.md](CHANGELOG.md)** — Full version history
|
|
169
|
-
- **[ROADMAP.md](ROADMAP.md)** — Planned features
|
|
210
|
+
See [XTRM-GUIDE.md](XTRM-GUIDE.md) for the full `bd` command reference.
|
|
170
211
|
|
|
171
212
|
---
|
|
172
213
|
|
|
@@ -174,15 +215,13 @@ bd close <id> --reason "Done" # Close when done
|
|
|
174
215
|
|
|
175
216
|
| Version | Date | Highlights |
|
|
176
217
|
|---------|------|------------|
|
|
218
|
+
| 0.5.30 | 2026-03-22 | Fix statusline on fresh installs; `xt end --dry-run` |
|
|
177
219
|
| 0.5.29 | 2026-03-22 | Statusline truecolor gradient; `--no-verify` autocommit; xt-merge skill |
|
|
178
220
|
| 0.5.24 | 2026-03-21 | Hash-based docs drift detection; CLI docs cleanup |
|
|
179
|
-
| 0.5.20 | 2026-03-21 | `xtrm docs show
|
|
180
|
-
| 0.5.10 | 2026-03-21 | Install cleanup; Qwen/Gemini dead code removed |
|
|
221
|
+
| 0.5.20 | 2026-03-21 | `xtrm docs show`; worktree-boundary hook; statusline injection |
|
|
181
222
|
|
|
182
223
|
See [CHANGELOG.md](CHANGELOG.md) for full history.
|
|
183
224
|
|
|
184
225
|
---
|
|
185
226
|
|
|
186
|
-
## License
|
|
187
|
-
|
|
188
227
|
MIT License
|
package/cli/package.json
CHANGED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
2
|
+
import { spawnSync, execSync } from "node:child_process";
|
|
3
|
+
import * as fs from "node:fs";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
|
|
6
|
+
interface LspTarget {
|
|
7
|
+
/** Marker files that indicate this language is in use */
|
|
8
|
+
markers: string[];
|
|
9
|
+
/** Binary to check in PATH */
|
|
10
|
+
bin: string;
|
|
11
|
+
/** npm packages to install globally if bin is missing */
|
|
12
|
+
npmPackages: string[];
|
|
13
|
+
/** Human-readable label */
|
|
14
|
+
label: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const TARGETS: LspTarget[] = [
|
|
18
|
+
{
|
|
19
|
+
label: "TypeScript/JavaScript",
|
|
20
|
+
markers: ["tsconfig.json", "package.json"],
|
|
21
|
+
bin: "typescript-language-server",
|
|
22
|
+
npmPackages: ["typescript-language-server", "typescript"],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
label: "Python",
|
|
26
|
+
markers: ["pyproject.toml", "requirements.txt", "setup.py"],
|
|
27
|
+
bin: "pyright-langserver",
|
|
28
|
+
npmPackages: ["pyright"],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
label: "Vue",
|
|
32
|
+
markers: ["vue.config.js", "vite.config.ts", "vite.config.js"],
|
|
33
|
+
bin: "vue-language-server",
|
|
34
|
+
npmPackages: ["@vue/language-server"],
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
label: "Svelte",
|
|
38
|
+
markers: ["svelte.config.js", "svelte.config.ts"],
|
|
39
|
+
bin: "svelteserver",
|
|
40
|
+
npmPackages: ["svelte-language-server"],
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
function isInPath(bin: string): boolean {
|
|
45
|
+
try {
|
|
46
|
+
execSync(`which ${bin}`, { stdio: "pipe" });
|
|
47
|
+
return true;
|
|
48
|
+
} catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function detectTargets(cwd: string): LspTarget[] {
|
|
54
|
+
return TARGETS.filter(target =>
|
|
55
|
+
target.markers.some(marker => fs.existsSync(path.join(cwd, marker)))
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function installPackages(packages: string[], ctx: any): void {
|
|
60
|
+
const r = spawnSync("npm", ["install", "-g", ...packages], {
|
|
61
|
+
encoding: "utf8",
|
|
62
|
+
stdio: "pipe",
|
|
63
|
+
});
|
|
64
|
+
if (r.status !== 0) {
|
|
65
|
+
ctx.ui.notify(`lsp-bootstrap: failed to install ${packages.join(" ")} — run manually: npm install -g ${packages.join(" ")}`, "warning");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export default function register(api: ExtensionAPI) {
|
|
70
|
+
api.on("session_start", async (ctx: any) => {
|
|
71
|
+
const cwd = process.cwd();
|
|
72
|
+
const detected = detectTargets(cwd);
|
|
73
|
+
if (detected.length === 0) return;
|
|
74
|
+
|
|
75
|
+
const toInstall = detected.filter(t => !isInPath(t.bin));
|
|
76
|
+
if (toInstall.length === 0) return;
|
|
77
|
+
|
|
78
|
+
for (const target of toInstall) {
|
|
79
|
+
ctx.ui.notify(`lsp-bootstrap: installing ${target.label} language server (${target.npmPackages.join(", ")})…`, "info");
|
|
80
|
+
installPackages(target.npmPackages, ctx);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const installed = toInstall.filter(t => isInPath(t.bin)).map(t => t.label);
|
|
84
|
+
if (installed.length > 0) {
|
|
85
|
+
ctx.ui.notify(`lsp-bootstrap: ready — ${installed.join(", ")}`, "info");
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xtrm/pi-lsp-bootstrap",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "xtrm Pi extension: auto-install LSP server binaries based on detected project type",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": "./index.ts"
|
|
8
|
+
},
|
|
9
|
+
"keywords": [
|
|
10
|
+
"pi",
|
|
11
|
+
"extension",
|
|
12
|
+
"xtrm",
|
|
13
|
+
"lsp"
|
|
14
|
+
],
|
|
15
|
+
"author": "xtrm",
|
|
16
|
+
"license": "MIT"
|
|
17
|
+
}
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|