editmamei 0.17.2 → 0.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +81 -29
- package/NOTICES.md +3 -42
- package/README.md +2 -2
- package/dist/bin/editmamei-core-darwin-arm64 +0 -0
- package/dist/bin/editmamei-core-darwin-x64 +0 -0
- package/dist/bin/editmamei-core-win-x64.exe +0 -0
- package/dist/cli/help.js +1 -1
- package/dist/core/server.js +6 -2
- package/dist/core/settings.js +24 -0
- package/dist/telemetry/client.js +5 -1
- package/dist/telemetry/events.js +12 -0
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/LICENSE
CHANGED
|
@@ -1,29 +1,81 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
to
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
1
|
+
Editmamei License Agreement
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 EMBD Artifacts LLC. All rights reserved.
|
|
4
|
+
|
|
5
|
+
This License Agreement (the "Agreement") governs your use of the Editmamei
|
|
6
|
+
software distributed in this package — including the command-line interface,
|
|
7
|
+
the Model Context Protocol (MCP) server, the bundled engine binaries, and all
|
|
8
|
+
accompanying files (collectively, the "Software"). By installing, copying, or
|
|
9
|
+
using the Software, you agree to be bound by this Agreement. If you do not
|
|
10
|
+
agree, do not install or use the Software.
|
|
11
|
+
|
|
12
|
+
1. License grant.
|
|
13
|
+
Subject to your compliance with this Agreement, EMBD Artifacts LLC grants
|
|
14
|
+
you a personal, worldwide, royalty-free, non-exclusive, non-transferable,
|
|
15
|
+
and revocable license to install and use the Software, at no charge, on
|
|
16
|
+
devices you own or control, for your own personal or commercial
|
|
17
|
+
photo-editing work.
|
|
18
|
+
|
|
19
|
+
2. Paid features.
|
|
20
|
+
Some features (the "Pro" features) are not included in the no-charge license
|
|
21
|
+
granted above and require a separate paid license. Access to Pro features is
|
|
22
|
+
governed by the additional terms presented at the time of purchase. Nothing
|
|
23
|
+
in this Agreement grants any right to Pro features without a valid paid
|
|
24
|
+
license.
|
|
25
|
+
|
|
26
|
+
3. Restrictions.
|
|
27
|
+
Except as expressly permitted in Section 1, or to the extent a restriction
|
|
28
|
+
below is prohibited by applicable law, you may not:
|
|
29
|
+
(a) copy (other than a reasonable number of backup copies), publish,
|
|
30
|
+
distribute, sublicense, rent, lease, lend, or sell the Software;
|
|
31
|
+
(b) modify, adapt, translate, or create derivative works of the Software;
|
|
32
|
+
(c) reverse engineer, decompile, or disassemble the Software, or otherwise
|
|
33
|
+
attempt to derive its source code or underlying ideas;
|
|
34
|
+
(d) remove, obscure, or alter any copyright, trademark, or other proprietary
|
|
35
|
+
notice in the Software or this Agreement; or
|
|
36
|
+
(e) circumvent, disable, or interfere with any licensing, entitlement, or
|
|
37
|
+
technical protection measure, including to access Pro features without a
|
|
38
|
+
valid paid license.
|
|
39
|
+
|
|
40
|
+
4. Ownership.
|
|
41
|
+
The Software is licensed, not sold. EMBD Artifacts LLC and its licensors
|
|
42
|
+
retain all right, title, and interest in and to the Software, including all
|
|
43
|
+
intellectual property rights. All rights not expressly granted in this
|
|
44
|
+
Agreement are reserved.
|
|
45
|
+
|
|
46
|
+
5. Third-party components.
|
|
47
|
+
The Software incorporates components provided by third parties under their
|
|
48
|
+
own licenses. Those licenses continue to apply to the corresponding
|
|
49
|
+
components and, in the event of a conflict, govern those components only.
|
|
50
|
+
Required attributions and notices are reproduced in the accompanying
|
|
51
|
+
NOTICES.md file; the full license text for each dependency ships with that
|
|
52
|
+
dependency through the npm package manager (see node_modules/<package>/
|
|
53
|
+
after install).
|
|
54
|
+
|
|
55
|
+
6. Term and termination.
|
|
56
|
+
This Agreement is effective until terminated. The license granted in
|
|
57
|
+
Section 1 terminates automatically, without notice, if you breach any term
|
|
58
|
+
of this Agreement. Upon termination you must cease all use of the Software
|
|
59
|
+
and delete all copies in your possession or control. Sections 3 through 9
|
|
60
|
+
survive termination.
|
|
61
|
+
|
|
62
|
+
7. Disclaimer of warranty.
|
|
63
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
64
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
65
|
+
FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
|
|
66
|
+
|
|
67
|
+
8. Limitation of liability.
|
|
68
|
+
IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES, OR
|
|
69
|
+
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE,
|
|
70
|
+
ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
71
|
+
DEALINGS IN THE SOFTWARE.
|
|
72
|
+
|
|
73
|
+
9. General.
|
|
74
|
+
This Agreement is the entire agreement between you and EMBD Artifacts LLC
|
|
75
|
+
regarding the Software and supersedes any prior or contemporaneous
|
|
76
|
+
understanding. If any provision is held unenforceable, the remaining
|
|
77
|
+
provisions remain in full force and effect. A failure to enforce any
|
|
78
|
+
provision is not a waiver of it.
|
|
79
|
+
|
|
80
|
+
For commercial licensing, redistribution rights, or other inquiries, contact:
|
|
81
|
+
support@editmamei.com
|
package/NOTICES.md
CHANGED
|
@@ -31,9 +31,9 @@ npx license-checker --production --out THIRD_PARTY_LICENSES.txt
|
|
|
31
31
|
|
|
32
32
|
### License Summary
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
The runtime dependency closure resolves under MIT, Apache-2.0, ISC,
|
|
35
|
+
BSD-2-Clause, BSD-3-Clause, Python-2.0, BlueOak-1.0.0, and 0BSD — all
|
|
36
|
+
permissive and compatible with redistribution.
|
|
37
37
|
|
|
38
38
|
### Apache-2.0 NOTICE Files
|
|
39
39
|
|
|
@@ -56,42 +56,3 @@ and interoperability.
|
|
|
56
56
|
All other trademarks are the property of their respective owners.
|
|
57
57
|
|
|
58
58
|
---
|
|
59
|
-
|
|
60
|
-
## Initial Architecture Acknowledgment
|
|
61
|
-
|
|
62
|
-
Editmamei's initial project scaffolding — the MCP stdio server pattern, the
|
|
63
|
-
Windows/macOS platform-executor split, and several tool-category file layouts
|
|
64
|
-
— was derived from **photoshop-mcp** by Ali Sait Teke
|
|
65
|
-
(https://github.com/alisaitteke/photoshop-mcp), distributed under the MIT
|
|
66
|
-
License. Editmamei has since been substantially rewritten and extended: the
|
|
67
|
-
ExtendScript wrapper contract, the tool surface (~80 tools across 17
|
|
68
|
-
categories), the test suite, the templates and telemetry systems, the
|
|
69
|
-
Community/Pro edition build pipeline, and the broader distribution
|
|
70
|
-
architecture are original to this project.
|
|
71
|
-
|
|
72
|
-
The original MIT license terms are reproduced below and continue to apply to
|
|
73
|
-
those portions of the software derived from the upstream project.
|
|
74
|
-
|
|
75
|
-
```
|
|
76
|
-
MIT License
|
|
77
|
-
|
|
78
|
-
Copyright (c) 2026 Ali Sait Teke
|
|
79
|
-
|
|
80
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
81
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
82
|
-
in the Software without restriction, including without limitation the rights
|
|
83
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
84
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
85
|
-
furnished to do so, subject to the following conditions:
|
|
86
|
-
|
|
87
|
-
The above copyright notice and this permission notice shall be included in
|
|
88
|
-
all copies or substantial portions of the Software.
|
|
89
|
-
|
|
90
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
91
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
92
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
93
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
94
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
95
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
96
|
-
THE SOFTWARE.
|
|
97
|
-
```
|
package/README.md
CHANGED
|
@@ -67,7 +67,7 @@ When your AI assistant needs to see the result — to verify an edit, say — Ed
|
|
|
67
67
|
|
|
68
68
|
## Installation
|
|
69
69
|
|
|
70
|
-
End users install from npm — see the public install guide at [editmamei-ce/docs/installation.md](https://github.com/editmamei/editmamei-
|
|
70
|
+
End users install from npm — see the public install guide at [editmamei-ce/docs/installation.md](https://github.com/editmamei/editmamei-wiki/blob/main/docs/installation.md):
|
|
71
71
|
|
|
72
72
|
```bash
|
|
73
73
|
npm install -g editmamei
|
|
@@ -324,7 +324,7 @@ Every tool follows the same shape so MCP clients (and the LLMs they host) can pl
|
|
|
324
324
|
- **Output schemas + `structuredContent`** are returned on every call. The LLM can program against parsed JSON without string-parsing.
|
|
325
325
|
- **Context tracking**: tools that change _what is active_ or _what exists_ include `context: getContextInfo()` in their structured response (active document, active layer, selection state). Pure setters/filters/selectors are exempt — the LLM's mental model of "what's active" is preserved.
|
|
326
326
|
- **Escape hatch**: `photoshop_execute_script` is tagged `destructiveHint + openWorldHint` and its description leads with "ESCAPE HATCH — prefer a dedicated tool when one exists." As of 2026-05-31 it ships in **Pro only** — see [docs/20260531-tool-removals.md](docs/20260531-tool-removals.md) for the tier-flip rationale.
|
|
327
|
-
- **Editions**: every tool is classified `community` or `pro` in [src/core/tool-tiers.ts](src/core/tool-tiers.ts) (Pro: `photoshop_get_histogram`, `photoshop_select_subject`, `photoshop_select_sky`, `photoshop_template_create_evidence`, `photoshop_template_save`, `photoshop_template_delete`, `photoshop_execute_script`; all others community). The CE bundle excludes Pro tools at build time; runtime registration enforces the same gate as defense-in-depth. The user-facing Pro/CE split is at [editmamei-ce/docs/pro-features.md](https://github.com/editmamei/editmamei-
|
|
327
|
+
- **Editions**: every tool is classified `community` or `pro` in [src/core/tool-tiers.ts](src/core/tool-tiers.ts) (Pro: `photoshop_get_histogram`, `photoshop_select_subject`, `photoshop_select_sky`, `photoshop_template_create_evidence`, `photoshop_template_save`, `photoshop_template_delete`, `photoshop_execute_script`; all others community). The CE bundle excludes Pro tools at build time; runtime registration enforces the same gate as defense-in-depth. The user-facing Pro/CE split is at [editmamei-ce/docs/pro-features.md](https://github.com/editmamei/editmamei-wiki/blob/main/docs/pro-features.md).
|
|
328
328
|
|
|
329
329
|
### Connection & Discovery
|
|
330
330
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/cli/help.js
CHANGED
|
@@ -41,6 +41,6 @@ Examples:
|
|
|
41
41
|
Per-user data and session logs live in ~/.editmamei/; uninstall preserves them.
|
|
42
42
|
|
|
43
43
|
Docs: https://editmamei.com/docs
|
|
44
|
-
Issues: https://github.com/editmamei/editmamei-
|
|
44
|
+
Issues: https://github.com/editmamei/editmamei-wiki/issues
|
|
45
45
|
`);
|
|
46
46
|
}
|
package/dist/core/server.js
CHANGED
|
@@ -8,7 +8,7 @@ import { EDITION } from '../edition.js';
|
|
|
8
8
|
import { VERSION } from '../version.js';
|
|
9
9
|
import { Session } from './session.js';
|
|
10
10
|
import { SessionLog, classifyError } from '../utils/session-log.js';
|
|
11
|
-
import { loadSettings } from './settings.js';
|
|
11
|
+
import { loadSettings, applyTelemetryEnvOverrides } from './settings.js';
|
|
12
12
|
import { TelemetryClient } from '../telemetry/client.js';
|
|
13
13
|
import { join, dirname } from 'node:path';
|
|
14
14
|
import { pathToFileURL } from 'node:url';
|
|
@@ -55,7 +55,11 @@ export class EditmameiServer {
|
|
|
55
55
|
this.sessionLog = new SessionLog(this.session.getSessionId());
|
|
56
56
|
this.logger.info(`Session ${this.session.getSessionId()} → ${this.sessionLog.path}`);
|
|
57
57
|
const { settings, created } = loadSettings();
|
|
58
|
-
|
|
58
|
+
const effectiveSettings = applyTelemetryEnvOverrides(settings);
|
|
59
|
+
this.telemetry = new TelemetryClient({
|
|
60
|
+
settings: effectiveSettings,
|
|
61
|
+
getPsVersion: () => this.psVersion,
|
|
62
|
+
});
|
|
59
63
|
if (created)
|
|
60
64
|
this.logger.info(FIRST_RUN_DISCLOSURE);
|
|
61
65
|
warnLogScriptOnErrorOnce(this.logger);
|
package/dist/core/settings.js
CHANGED
|
@@ -78,6 +78,30 @@ export function loadSettings(opts = {}) {
|
|
|
78
78
|
return { settings: defaults(mintInstallId()), created: false };
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
+
function parseBoolEnv(v) {
|
|
82
|
+
if (v === undefined)
|
|
83
|
+
return undefined;
|
|
84
|
+
const s = v.trim().toLowerCase();
|
|
85
|
+
if (s === 'true' || s === '1')
|
|
86
|
+
return true;
|
|
87
|
+
if (s === 'false' || s === '0')
|
|
88
|
+
return false;
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
export function applyTelemetryEnvOverrides(settings, env = process.env) {
|
|
92
|
+
const usage = parseBoolEnv(env.EDITMAMEI_TELEMETRY_USAGE);
|
|
93
|
+
const diagnostics = parseBoolEnv(env.EDITMAMEI_TELEMETRY_DIAGNOSTICS);
|
|
94
|
+
if (usage === undefined && diagnostics === undefined)
|
|
95
|
+
return settings;
|
|
96
|
+
return {
|
|
97
|
+
...settings,
|
|
98
|
+
telemetry: {
|
|
99
|
+
...settings.telemetry,
|
|
100
|
+
usage: usage ?? settings.telemetry.usage,
|
|
101
|
+
diagnostics: diagnostics ?? settings.telemetry.diagnostics,
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
81
105
|
export function saveSettings(settings, opts = {}) {
|
|
82
106
|
const path = settingsPath(opts);
|
|
83
107
|
const dir = dirname(path);
|
package/dist/telemetry/client.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Logger } from '../utils/logger.js';
|
|
2
2
|
import { EDITION } from '../edition.js';
|
|
3
3
|
import { VERSION } from '../version.js';
|
|
4
|
-
import { buildDiagnosticEvent, buildSessionSummary, buildUsageEvent, dayBucket, isContentSafe, PS_VERSION_UNKNOWN, } from './events.js';
|
|
4
|
+
import { buildDiagnosticEvent, buildSessionStart, buildSessionSummary, buildUsageEvent, dayBucket, isContentSafe, PS_VERSION_UNKNOWN, } from './events.js';
|
|
5
5
|
import { sanitizeMessage, sanitizeSnippet, sanitizeStderrTail } from './sanitize.js';
|
|
6
6
|
import { httpTransport, resolveEndpoint } from './transport.js';
|
|
7
7
|
import { appendOutboxSync, clearOutbox, clearSessionState, readOutbox, readSessionState, writeSessionStateSync, } from './outbox.js';
|
|
@@ -55,6 +55,10 @@ export class TelemetryClient {
|
|
|
55
55
|
return;
|
|
56
56
|
this.timer = setInterval(() => void this.flush(), this.flushIntervalMs);
|
|
57
57
|
this.timer.unref?.();
|
|
58
|
+
if (this.settings.telemetry.usage) {
|
|
59
|
+
this.enqueue(buildSessionStart(this.dims, this.now()));
|
|
60
|
+
void this.flush();
|
|
61
|
+
}
|
|
58
62
|
}
|
|
59
63
|
recordCall(call) {
|
|
60
64
|
if (!this.active || !this.settings.telemetry.usage)
|
package/dist/telemetry/events.js
CHANGED
|
@@ -45,6 +45,18 @@ export function buildSessionSummary(dims, summary, now) {
|
|
|
45
45
|
any_failures: summary.any_failures,
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
|
+
export function buildSessionStart(dims, now) {
|
|
49
|
+
return {
|
|
50
|
+
v: TELEMETRY_SCHEMA_VERSION,
|
|
51
|
+
type: 'session_start',
|
|
52
|
+
install_id: dims.install_id,
|
|
53
|
+
ts_bucket: dayBucket(now),
|
|
54
|
+
editmamei_version: dims.editmamei_version,
|
|
55
|
+
edition: dims.edition,
|
|
56
|
+
platform: dims.platform,
|
|
57
|
+
ps_version: psVersionOf(dims),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
48
60
|
export function buildDiagnosticEvent(dims, diag, now) {
|
|
49
61
|
return {
|
|
50
62
|
v: TELEMETRY_SCHEMA_VERSION,
|
package/dist/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '0.17.
|
|
1
|
+
export const VERSION = '0.17.3';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "editmamei",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.3",
|
|
4
4
|
"description": "Editmamei — Unlock Photoshop with natural-language photo editing (Community Edition)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"homepage": "https://editmamei.com",
|
|
36
36
|
"bugs": {
|
|
37
|
-
"url": "https://github.com/editmamei/editmamei-
|
|
37
|
+
"url": "https://github.com/editmamei/editmamei-wiki/issues"
|
|
38
38
|
},
|
|
39
39
|
"engines": {
|
|
40
40
|
"node": ">=20.0.0"
|