@emaxe/oa 0.1.0 → 0.2.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/CHANGELOG.md ADDED
@@ -0,0 +1,31 @@
1
+ # Changelog
2
+
3
+ All notable changes to the `@emaxe/oa` package will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ **[English](CHANGELOG.md)** | **[Русский](CHANGELOG.ru.md)**
9
+
10
+ ---
11
+
12
+ ## [0.2.0] - 2026-09-11
13
+
14
+ ### Added
15
+ - **OAuth Device Flow**: Added `oa login` command enabling interactive device authentication with code verification and browser activation.
16
+ - **Verification Command**: Added `oa whoami` command to check current credentials, active server, organization, and token expiration.
17
+ - **Enhanced Share Options**: Added `--password` and `--expires` flags to `oa push` and `oa share` for secure, time-limited artifact sharing.
18
+ - **Automatic Format Detection**: Automatic inference of artifact kind (`html`, `markdown`, `mermaid`, `svg`) based on file extension.
19
+ - **Artifact Management**: Added `oa rm` and `oa unshare` commands.
20
+ - **Bilingual Documentation**: Added English and Russian READMEs and Changelogs.
21
+
22
+ ### Changed
23
+ - **Package Name**: Renamed npm package to [`@emaxe/oa`](https://www.npmjs.com/package/@emaxe/oa).
24
+ - **Global Flag**: Ensured all commands support `--json` for scripting and agent pipeline compatibility.
25
+
26
+ ---
27
+
28
+ ## [0.1.0] - 2026-09-10
29
+
30
+ ### Added
31
+ - Initial CLI release supporting artifact push, list, and get operations.
@@ -0,0 +1,31 @@
1
+ # История изменений (Changelog)
2
+
3
+ Все заметные изменения пакета `@emaxe/oa` документируются в этом файле.
4
+
5
+ Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/),
6
+ и проект придерживается [Семантического версионирования](https://semver.org/lang/ru/).
7
+
8
+ **[English](CHANGELOG.md)** | **[Русский](CHANGELOG.ru.md)**
9
+
10
+ ---
11
+
12
+ ## [0.2.0] - 2026-09-11
13
+
14
+ ### Добавлено
15
+ - **OAuth Device Flow**: Добавлена команда `oa login` для интерактивной авторизации устройства через браузер с короткими кодами активации.
16
+ - **Команда проверки статуса**: Добавлена команда `oa whoami` для проверки действующих ключей, адреса сервера, организации и срока действия токена.
17
+ - **Расширенные опции шеринга**: Поддержка параметров `--password` и `--expires` в командах `oa push` и `oa share` для создания защищенных паролем и временных ссылок.
18
+ - **Автоопределение типа файла**: Автоматическое определение формата артефакта (`html`, `markdown`, `mermaid`, `svg`) по расширению файла.
19
+ - **Управление артефактами**: Добавлены команды удаления артефакта `oa rm` и отзыва ссылки `oa unshare`.
20
+ - **Двуязычная документация**: Добавлены русская и английская версии README и истории изменений.
21
+
22
+ ### Изменено
23
+ - **Имя пакета**: Пакет переименован в [`@emaxe/oa`](https://www.npmjs.com/package/@emaxe/oa) в реестре npm.
24
+ - **Флаг JSON**: Все команды поддерживают флаг `--json` для интеграции в скрипты и пайплайны агентов.
25
+
26
+ ---
27
+
28
+ ## [0.1.0] - 2026-09-10
29
+
30
+ ### Добавлено
31
+ - Начальный релиз CLI с поддержкой команд `push`, `list` и `get`.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 emaxe
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,34 +1,166 @@
1
- # open-artifacts
1
+ # @emaxe/oa
2
2
 
3
- CLI for [Open Artifacts](https://github.com/emaxe/open-artifacts) — a self-hosted, open
4
- alternative to Claude Artifacts. Publish HTML, Markdown, Mermaid, or SVG content to your own
5
- instance and get back a shareable link, from any AI agent or script.
3
+ <p align="left">
4
+ <a href="https://www.npmjs.com/package/@emaxe/oa"><img src="https://img.shields.io/npm/v/@emaxe/oa.svg?color=blue&logo=npm" alt="npm version"></a>
5
+ <a href="https://www.npmjs.com/package/@emaxe/oa"><img src="https://img.shields.io/npm/dm/@emaxe/oa.svg?color=blue&logo=npm" alt="npm downloads"></a>
6
+ <a href="https://github.com/emaxe/open-artifacts"><img src="https://img.shields.io/badge/GitHub-emaxe%2Fopen--artifacts-blue?logo=github" alt="GitHub Repository"></a>
7
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
8
+ <a href="https://nodejs.org/"><img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg?logo=node.js" alt="Node.js"></a>
9
+ <a href="https://skills.sh/emaxe/open-artifacts"><img src="https://skills.sh/b/emaxe/open-artifacts" alt="skills.sh"></a>
10
+ </p>
11
+
12
+ **[English](README.md)** | **[Русский](README.ru.md)** | **[Changelog](CHANGELOG.md)** | **[История изменений](CHANGELOG.ru.md)**
13
+
14
+ Official CLI for [Open Artifacts](https://github.com/emaxe/open-artifacts) — a self-hosted, open-source alternative to Claude Artifacts. Publish HTML applications, Markdown documents, Mermaid diagrams, or vector SVG files from your terminal, scripts, or AI agent sessions and get back an interactive, shareable preview URL.
15
+
16
+ ---
17
+
18
+ ### Topics & Tags
19
+ `ai-agents` • `artifacts` • `claude-artifacts` • `claude` • `mcp` • `model-context-protocol` • `self-hosted` • `cli` • `open-artifacts` • `developer-tools`
20
+
21
+ ---
22
+
23
+ ## Installation
6
24
 
7
25
  ```bash
26
+ # Global installation (recommended):
8
27
  npm install -g @emaxe/oa
28
+
29
+ # Or run directly without installing:
30
+ npx @emaxe/oa --help
31
+ ```
32
+
33
+ ---
34
+
35
+ ## Quick Start
36
+
37
+ ### 1. Authenticate
38
+
39
+ Connect to your Open Artifacts server using the interactive OAuth Device Flow:
40
+
41
+ ```bash
42
+ oa login --server https://artifacts.your-company.com
43
+ ```
44
+
45
+ The CLI outputs a short code (e.g. `ABCD-1234`) and an activation link. Open the link in your browser, select your organization, and approve access. Credentials are saved locally to `~/.config/open-artifacts/credentials.json` (`600` permissions).
46
+
47
+ Verify your session at any time:
48
+
49
+ ```bash
50
+ oa whoami
51
+ ```
52
+
53
+ ### 2. Publish Content
54
+
55
+ ```bash
56
+ # Publish an HTML file and get a public shareable URL:
57
+ oa push report.html --title "Quarterly Financials" --share
58
+
59
+ # Publish a Markdown summary:
60
+ oa push summary.md --title "Meeting Minutes" --share
61
+
62
+ # Render a Mermaid flowchart:
63
+ oa push architecture.mmd --title "Service Architecture" --share
64
+
65
+ # Upload an SVG vector graphic:
66
+ oa push diagram.svg --title "Database Schema" --share
67
+ ```
68
+
69
+ ---
70
+
71
+ ## Command Reference
72
+
73
+ ### `oa login`
74
+ Authorizes the CLI with an Open Artifacts server using the OAuth device flow.
75
+
76
+ ```bash
77
+ oa login [options]
78
+ --server <url> Open Artifacts server URL (default: "http://localhost:3000")
79
+ --name <name> Agent or client name to register
80
+ --scopes <scopes> Comma-separated list of scopes (default: "artifacts:read,artifacts:write,shares:write")
9
81
  ```
10
82
 
11
- ## Usage
83
+ ### `oa whoami`
84
+ Displays current credentials, server endpoint, organization ID, and token expiration.
85
+
86
+ ### `oa push <file>`
87
+ Creates a new artifact or updates an existing one from a local file.
88
+
89
+ ```bash
90
+ oa push <file> [options]
91
+ --title <title> Artifact title (defaults to filename)
92
+ --kind <kind> Content type: html | markdown | mermaid | svg (auto-detected if omitted)
93
+ --id <id> Update an existing artifact instead of creating a new one
94
+ --share Automatically generate a public share link
95
+ --password <pass> Protect the share link with a password (implies --share)
96
+ --expires <ttl> Share expiration: 1h, 1d, 7d, 30d (implies --share)
97
+ --message <msg> Version commit message
98
+ --json Output result as JSON
99
+ ```
100
+
101
+ ### `oa list`
102
+ Lists all artifacts in your active organization.
103
+
104
+ ```bash
105
+ oa list [--json]
106
+ ```
107
+
108
+ ### `oa get <artifact-id>`
109
+ Retrieves artifact metadata or downloads raw content to a file.
110
+
111
+ ```bash
112
+ oa get <artifact-id> [-o output-file] [--json]
113
+ ```
114
+
115
+ ### `oa rm <artifact-id>`
116
+ Soft-deletes an artifact.
117
+
118
+ ```bash
119
+ oa rm <artifact-id> [--json]
120
+ ```
121
+
122
+ ### `oa share <artifact-id>`
123
+ Generates a new shareable link for an existing artifact.
124
+
125
+ ```bash
126
+ oa share <artifact-id> [options]
127
+ --password <pass> Password protect the link
128
+ --expires <ttl> Link expiration duration (e.g. 1h, 1d, 7d, 30d)
129
+ --json Output share metadata as JSON
130
+ ```
131
+
132
+ ### `oa unshare <share-id>`
133
+ Revokes an active share link immediately.
134
+
135
+ ```bash
136
+ oa unshare <share-id> [--json]
137
+ ```
138
+
139
+ ---
140
+
141
+ ## Non-Interactive & CI Environments
142
+
143
+ For CI/CD pipelines, headless scripts, or background agent environments, you can bypass the device flow by setting environment variables:
12
144
 
13
145
  ```bash
14
- oa login --server https://artifacts.your-company.com # one-time device-flow authorization
15
- oa push report.html --title "Q3 Report" --share # publish + print a share URL
16
- oa list # see what you've published
17
- oa get <artifact-id> -o report.html # fetch content back
18
- oa share <artifact-id> --password "..." --expires 7d # a password-protected, expiring link
146
+ export OA_SERVER="https://artifacts.your-company.com"
147
+ export OA_TOKEN="oa_live_xxxxxxxxxxxxxxxxxxxxxxxx"
19
148
  ```
20
149
 
21
- Every command supports `--json` for machine-readable output. Run `oa --help` or `oa <command>
22
- --help` for the full option list.
150
+ Generate agent API tokens directly in the Open Artifacts web dashboard under **Team > Agents**.
151
+
152
+ ---
23
153
 
24
- Credentials are saved to `~/.config/open-artifacts/credentials.json` (mode `600`) after `oa
25
- login`. Alternatively, set `OA_TOKEN` (and `OA_SERVER`) as environment variables to skip the
26
- device flow entirely useful for CI or non-interactive agents that already have a key.
154
+ ## AI Agent Integration
155
+
156
+ This CLI is designed to be invoked by LLM coding agents (Claude Code, Cursor, Windsurf, Codex, Antigravity, OpenCode). You can install the pre-configured skill via [skills.sh](https://skills.sh/emaxe/open-artifacts):
157
+
158
+ ```bash
159
+ npx skills add emaxe/open-artifacts
160
+ ```
27
161
 
28
- This CLI requires an Open Artifacts server to talk to — see the
29
- [main repository](https://github.com/emaxe/open-artifacts) for how to self-host one via Docker
30
- Compose.
162
+ ---
31
163
 
32
164
  ## License
33
165
 
34
- MIT
166
+ MIT © [emaxe](https://github.com/emaxe)
package/README.ru.md ADDED
@@ -0,0 +1,166 @@
1
+ # @emaxe/oa
2
+
3
+ <p align="left">
4
+ <a href="https://www.npmjs.com/package/@emaxe/oa"><img src="https://img.shields.io/npm/v/@emaxe/oa.svg?color=blue&logo=npm" alt="npm version"></a>
5
+ <a href="https://www.npmjs.com/package/@emaxe/oa"><img src="https://img.shields.io/npm/dm/@emaxe/oa.svg?color=blue&logo=npm" alt="npm downloads"></a>
6
+ <a href="https://github.com/emaxe/open-artifacts"><img src="https://img.shields.io/badge/GitHub-emaxe%2Fopen--artifacts-blue?logo=github" alt="GitHub Repository"></a>
7
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
8
+ <a href="https://nodejs.org/"><img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg?logo=node.js" alt="Node.js"></a>
9
+ <a href="https://skills.sh/emaxe/open-artifacts"><img src="https://skills.sh/b/emaxe/open-artifacts" alt="skills.sh"></a>
10
+ </p>
11
+
12
+ **[English](README.md)** | **[Русский](README.ru.md)** | **[Changelog](CHANGELOG.md)** | **[История изменений](CHANGELOG.ru.md)**
13
+
14
+ Официальная консольная утилита (CLI) для [Open Artifacts](https://github.com/emaxe/open-artifacts) — открытой альтернативы Claude Artifacts. Позволяет публиковать веб-приложения на HTML, документы Markdown, диаграммы Mermaid или векторную графику SVG из терминала, скриптов или диалогов с AI-агентами, получая в ответ интерактивную публичную ссылку.
15
+
16
+ ---
17
+
18
+ ### Топики и теги
19
+ `ai-agents` • `artifacts` • `claude-artifacts` • `claude` • `mcp` • `model-context-protocol` • `self-hosted` • `cli` • `open-artifacts` • `developer-tools`
20
+
21
+ ---
22
+
23
+ ## Установка
24
+
25
+ ```bash
26
+ # Глобальная установка (рекомендуется):
27
+ npm install -g @emaxe/oa
28
+
29
+ # Или запуск без установки:
30
+ npx @emaxe/oa --help
31
+ ```
32
+
33
+ ---
34
+
35
+ ## Быстрый старт
36
+
37
+ ### 1. Авторизация
38
+
39
+ Подключитесь к вашему серверу Open Artifacts через удобный интерактивный OAuth Device Flow:
40
+
41
+ ```bash
42
+ oa login --server https://artifacts.your-company.com
43
+ ```
44
+
45
+ Утилита сгенерирует короткий код подтверждения (например, `ABCD-1234`) и ссылку на страницу активации. Перейдите по ссылке, выберите организацию и разрешите доступ. Токен сохранится локально в `~/.config/open-artifacts/credentials.json` с правами `600`.
46
+
47
+ Проверить статус сессии в любой момент:
48
+
49
+ ```bash
50
+ oa whoami
51
+ ```
52
+
53
+ ### 2. Публикация файлов
54
+
55
+ ```bash
56
+ # Опубликовать HTML-страницу и получить публичную ссылку:
57
+ oa push report.html --title "Финансовый отчет" --share
58
+
59
+ # Опубликовать документ Markdown:
60
+ oa push summary.md --title "Протокол встречи" --share
61
+
62
+ # Отрендерить диаграмму Mermaid:
63
+ oa push architecture.mmd --title "Архитектура сервиса" --share
64
+
65
+ # Загрузить векторный файл SVG:
66
+ oa push diagram.svg --title "Схема базы данных" --share
67
+ ```
68
+
69
+ ---
70
+
71
+ ## Справочник команд
72
+
73
+ ### `oa login`
74
+ Авторизация CLI на сервере Open Artifacts по протоколу OAuth Device Flow.
75
+
76
+ ```bash
77
+ oa login [options]
78
+ --server <url> URL сервера Open Artifacts (по умолчанию: "http://localhost:3000")
79
+ --name <name> Имя регистрируемого агента
80
+ --scopes <scopes> Список запрашиваемых прав через запятую (по умолчанию: "artifacts:read,artifacts:write,shares:write")
81
+ ```
82
+
83
+ ### `oa whoami`
84
+ Показывает текущие учетные данные, адрес сервера, идентификатор организации и статус токена.
85
+
86
+ ### `oa push <file>`
87
+ Создает новый артефакт или обновляет существующий из локального файла.
88
+
89
+ ```bash
90
+ oa push <file> [options]
91
+ --title <title> Название артефакта (по умолчанию: имя файла)
92
+ --kind <kind> Тип контента: html | markdown | mermaid | svg (определяется автоматически)
93
+ --id <id> ID существующего артефакта для создания новой версии
94
+ --share Сразу сгенерировать публичную ссылку
95
+ --password <pass> Защитить ссылку паролем (включает --share)
96
+ --expires <ttl> Срок действия ссылки: 1h, 1d, 7d, 30d (включает --share)
97
+ --message <msg> Сообщение версии
98
+ --json Вывод результата в формате JSON
99
+ ```
100
+
101
+ ### `oa list`
102
+ Выводит список всех артефактов в текущей организации.
103
+
104
+ ```bash
105
+ oa list [--json]
106
+ ```
107
+
108
+ ### `oa get <artifact-id>`
109
+ Показывает информацию об артефакте или скачивает его содержимое в файл.
110
+
111
+ ```bash
112
+ oa get <artifact-id> [-o output-file] [--json]
113
+ ```
114
+
115
+ ### `oa rm <artifact-id>`
116
+ Удаляет артефакт в архив.
117
+
118
+ ```bash
119
+ oa rm <artifact-id> [--json]
120
+ ```
121
+
122
+ ### `oa share <artifact-id>`
123
+ Создает ссылку для совместного доступа к артефакту.
124
+
125
+ ```bash
126
+ oa share <artifact-id> [options]
127
+ --password <pass> Защитить ссылку паролем
128
+ --expires <ttl> Срок действия ссылки (например: 1h, 1d, 7d, 30d)
129
+ --json Вывод информации о ссылке в формате JSON
130
+ ```
131
+
132
+ ### `oa unshare <share-id>`
133
+ Мгновенно отзывает выданную ссылку.
134
+
135
+ ```bash
136
+ oa unshare <share-id> [--json]
137
+ ```
138
+
139
+ ---
140
+
141
+ ## Использование в CI/CD и неинтерактивных средах
142
+
143
+ Для автоматических пайплайнов или фоновых скриптов можно передать параметры через переменные окружения, минуя Device Flow:
144
+
145
+ ```bash
146
+ export OA_SERVER="https://artifacts.your-company.com"
147
+ export OA_TOKEN="oa_live_xxxxxxxxxxxxxxxxxxxxxxxx"
148
+ ```
149
+
150
+ Токены агентов создаются в панели управления Open Artifacts в разделе **Команда > Агенты**.
151
+
152
+ ---
153
+
154
+ ## Интеграция с AI-агентами
155
+
156
+ Утилита оптимизирована для взаимодействия с современными AI-агентами (Claude Code, Cursor, Windsurf, Codex, Antigravity, OpenCode). Установите готовый скилл через [skills.sh](https://skills.sh/emaxe/open-artifacts):
157
+
158
+ ```bash
159
+ npx skills add emaxe/open-artifacts
160
+ ```
161
+
162
+ ---
163
+
164
+ ## Лицензия
165
+
166
+ MIT © [emaxe](https://github.com/emaxe)
@@ -0,0 +1,27 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { inferKind } from "../commands/artifacts.js";
3
+ describe("inferKind", () => {
4
+ it("recognizes markdown extensions", () => {
5
+ expect(inferKind("report.md")).toBe("markdown");
6
+ expect(inferKind("report.markdown")).toBe("markdown");
7
+ });
8
+ it("recognizes svg", () => {
9
+ expect(inferKind("logo.svg")).toBe("svg");
10
+ });
11
+ it("recognizes mermaid extensions", () => {
12
+ expect(inferKind("diagram.mmd")).toBe("mermaid");
13
+ expect(inferKind("diagram.mermaid")).toBe("mermaid");
14
+ });
15
+ it("defaults to html for .html and unrecognized extensions", () => {
16
+ expect(inferKind("page.html")).toBe("html");
17
+ expect(inferKind("notes.txt")).toBe("html");
18
+ expect(inferKind("no-extension")).toBe("html");
19
+ });
20
+ it("is case-insensitive", () => {
21
+ expect(inferKind("REPORT.MD")).toBe("markdown");
22
+ });
23
+ it("only looks at the extension, ignoring directories in the path", () => {
24
+ expect(inferKind("/tmp/my.markdown.folder/report.svg")).toBe("svg");
25
+ });
26
+ });
27
+ //# sourceMappingURL=inferKind.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inferKind.test.js","sourceRoot":"","sources":["../../src/__tests__/inferKind.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { API_KEY_SCOPES, isValidScope } from "../scopes.js";
3
+ describe("isValidScope", () => {
4
+ it("accepts every known scope", () => {
5
+ for (const scope of API_KEY_SCOPES) {
6
+ expect(isValidScope(scope)).toBe(true);
7
+ }
8
+ });
9
+ it("rejects unknown scopes", () => {
10
+ expect(isValidScope("artifacts:admin")).toBe(false);
11
+ expect(isValidScope("")).toBe(false);
12
+ });
13
+ });
14
+ //# sourceMappingURL=scopes.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopes.test.js","sourceRoot":"","sources":["../../src/__tests__/scopes.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5D,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { extname, basename } from "node:path";
3
3
  import { requireCredentials } from "../config.js";
4
4
  import { makeClient, CliApiError } from "../client.js";
5
- function inferKind(filePath) {
5
+ export function inferKind(filePath) {
6
6
  const ext = extname(filePath).toLowerCase();
7
7
  if (ext === ".md" || ext === ".markdown")
8
8
  return "markdown";
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/commands/artifacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/commands/artifacts.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import { login } from "./commands/login.js";
5
5
  import { listCommand, pushCommand, getCommand, rmCommand } from "./commands/artifacts.js";
6
6
  import { shareCommand, unshareCommand, whoamiCommand } from "./commands/share.js";
7
7
  const program = new Command();
8
- program.name("oa").description("CLI for Open Artifacts — self-hosted artifact hosting for AI agents").version("0.1.0");
8
+ program.name("oa").description("CLI for Open Artifacts — self-hosted artifact hosting for AI agents").version("0.2.0");
9
9
  program
10
10
  .command("login")
11
11
  .description("Authorize this device via OAuth device flow and save credentials")
package/package.json CHANGED
@@ -1,10 +1,21 @@
1
1
  {
2
2
  "name": "@emaxe/oa",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "CLI for Open Artifacts — publish HTML/Markdown/Mermaid/SVG content to a self-hosted artifact host and get back a shareable link.",
5
- "keywords": ["ai-agents", "artifacts", "self-hosted", "cli", "mcp", "claude"],
5
+ "keywords": [
6
+ "ai-agents",
7
+ "artifacts",
8
+ "claude-artifacts",
9
+ "claude",
10
+ "mcp",
11
+ "model-context-protocol",
12
+ "self-hosted",
13
+ "cli",
14
+ "open-artifacts",
15
+ "developer-tools"
16
+ ],
6
17
  "license": "MIT",
7
- "author": "",
18
+ "author": "emaxe",
8
19
  "homepage": "https://github.com/emaxe/open-artifacts#readme",
9
20
  "repository": {
10
21
  "type": "git",
@@ -19,7 +30,12 @@
19
30
  "node": ">=20"
20
31
  },
21
32
  "files": [
22
- "dist"
33
+ "dist",
34
+ "README.md",
35
+ "README.ru.md",
36
+ "CHANGELOG.md",
37
+ "CHANGELOG.ru.md",
38
+ "LICENSE"
23
39
  ],
24
40
  "bin": {
25
41
  "oa": "dist/index.js"