emdash-emit 0.1.0 → 0.1.2
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/README.md +22 -18
- package/dist/bin/emit.d.ts.map +1 -1
- package/dist/bin/emit.js +2 -1
- package/dist/bin/emit.js.map +1 -1
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +1 -0
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/client/mapper.d.ts.map +1 -1
- package/dist/client/mapper.js +21 -13
- package/dist/client/mapper.js.map +1 -1
- package/dist/db/cache.d.ts +14 -0
- package/dist/db/cache.d.ts.map +1 -1
- package/dist/db/cache.js +73 -0
- package/dist/db/cache.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/sync/bylines.d.ts +23 -0
- package/dist/sync/bylines.d.ts.map +1 -0
- package/dist/sync/bylines.js +112 -0
- package/dist/sync/bylines.js.map +1 -0
- package/dist/sync/new.d.ts +3 -0
- package/dist/sync/new.d.ts.map +1 -1
- package/dist/sync/new.js +11 -1
- package/dist/sync/new.js.map +1 -1
- package/dist/sync/orchestrator.d.ts.map +1 -1
- package/dist/sync/orchestrator.js +11 -0
- package/dist/sync/orchestrator.js.map +1 -1
- package/dist/sync/pull.d.ts.map +1 -1
- package/dist/sync/pull.js +24 -1
- package/dist/sync/pull.js.map +1 -1
- package/dist/sync/push.d.ts.map +1 -1
- package/dist/sync/push.js +81 -12
- package/dist/sync/push.js.map +1 -1
- package/dist/utils/version.d.ts +5 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +43 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -183,15 +183,12 @@ Add your EmDash instance credentials to the global profile registry:
|
|
|
183
183
|
emit profile add my-blog \
|
|
184
184
|
--origin https://your-blog.example.com \
|
|
185
185
|
--token <your-personal-access-token> \
|
|
186
|
-
--workspace /path/to/local/blog-repo
|
|
187
|
-
--active
|
|
188
|
-
|
|
186
|
+
--workspace /path/to/local/blog-repo
|
|
189
187
|
```
|
|
190
188
|
|
|
191
189
|
* `--origin`: The base URL of your EmDash Cloudflare Workers instance.
|
|
192
190
|
* `--token`: Your Personal Access Token (PAT) generated from the EmDash dashboard.
|
|
193
191
|
* `--workspace`: The local directory where articles and assets will be synchronized.
|
|
194
|
-
* `--active`: Immediately marks this profile as the default.
|
|
195
192
|
|
|
196
193
|
> [!NOTE]
|
|
197
194
|
> Profiles are securely stored with `0600` permissions at `~/.config/emit/profiles.yaml` (on macOS / Linux) or `%USERPROFILE%\.config\emit\profiles.yaml` (on Windows).
|
|
@@ -203,27 +200,32 @@ Navigate to your local repository directory and initialize it:
|
|
|
203
200
|
```bash
|
|
204
201
|
cd /path/to/local/blog-repo
|
|
205
202
|
emit init
|
|
206
|
-
|
|
207
203
|
```
|
|
208
204
|
|
|
209
205
|
This creates the `.emit/` directory with a default `config.json` and initializes the local baseline cache SQLite database (`.emit/cache.db`).
|
|
210
206
|
|
|
211
|
-
### 3. Multi-Site Management
|
|
207
|
+
### 3. Multi-Site Management (Directory-Driven & Zero Friction)
|
|
212
208
|
|
|
213
|
-
|
|
209
|
+
Emit is designed from the ground up for authors who manage multiple blogs or environments (e.g. personal blog, company blog, staging site).
|
|
214
210
|
|
|
215
|
-
|
|
216
|
-
# List all registered profiles
|
|
217
|
-
emit profile list
|
|
211
|
+
Because each profile records its own `--workspace` directory, **you never have to manually switch global "active" sites**. Emit resolves the target site automatically based on where you are:
|
|
218
212
|
|
|
219
|
-
|
|
220
|
-
|
|
213
|
+
```bash
|
|
214
|
+
# Register personal blog
|
|
215
|
+
emit profile add personal --origin https://personal.example.com --token <pat-1> --workspace ~/blogs/personal
|
|
221
216
|
|
|
222
|
-
#
|
|
223
|
-
emit profile
|
|
217
|
+
# Register company blog
|
|
218
|
+
emit profile add work --origin https://blog.company.example.com --token <pat-2> --workspace ~/blogs/work
|
|
224
219
|
|
|
220
|
+
# List all registered profiles
|
|
221
|
+
emit profile list
|
|
225
222
|
```
|
|
226
223
|
|
|
224
|
+
**How Automatic Profile Resolution Works:**
|
|
225
|
+
1. **Directory-Driven Auto Detection (Recommended)**: When you `cd ~/blogs/personal` and run `emit pull`, `emit push`, or launch an AI agent, Emit detects your current folder and automatically uses the `personal` profile. When you `cd ~/blogs/work`, it seamlessly connects to `work`.
|
|
226
|
+
2. **Explicit Profile Flag**: You can explicitly specify `--profile <name>` (or pass `profile: "<name>"` in MCP) from any directory to override automatic detection.
|
|
227
|
+
3. **Ambiguity Safeguard**: If you run a command outside of any registered workspace and omit `--profile`, Emit aborts with an `AmbiguousProfileError` instead of guessing or silently pushing to the wrong site.
|
|
228
|
+
|
|
227
229
|
### 4. Recommended `.gitignore`
|
|
228
230
|
|
|
229
231
|
When tracking your local blog repository with Git, use the following recommended `.gitignore` configuration:
|
|
@@ -433,18 +435,20 @@ emit init [--origin <url>]
|
|
|
433
435
|
Manage connection profiles across multiple EmDash instances.
|
|
434
436
|
|
|
435
437
|
```bash
|
|
436
|
-
# List all profiles
|
|
438
|
+
# List all configured profiles and their workspace directories
|
|
437
439
|
emit profile list
|
|
438
440
|
|
|
439
441
|
# Add or update a profile
|
|
440
|
-
emit profile add <name> --origin <url> [--token <pat>] [--workspace <path>]
|
|
442
|
+
emit profile add <name> --origin <url> [--token <pat>] [--workspace <path>]
|
|
441
443
|
|
|
442
|
-
#
|
|
443
|
-
emit profile
|
|
444
|
+
# Show currently resolved profile for this directory
|
|
445
|
+
emit profile current
|
|
444
446
|
|
|
445
447
|
# Remove a profile
|
|
446
448
|
emit profile remove <name>
|
|
447
449
|
|
|
450
|
+
# (Optional) Set a fallback default profile for when operating outside any workspace
|
|
451
|
+
emit profile use <name>
|
|
448
452
|
```
|
|
449
453
|
|
|
450
454
|
---
|
package/dist/bin/emit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/bin/emit.ts"],"names":[],"mappings":";AAwBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/bin/emit.ts"],"names":[],"mappings":";AAwBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,OAAO,SAAgB,CAAC;AAyBrC,wBAAgB,MAAM,CAAC,IAAI,WAAe,GAAG,IAAI,CAEhD"}
|
package/dist/bin/emit.js
CHANGED
|
@@ -28,11 +28,12 @@ import { registerNewCommand } from '../cli/commands/new.js';
|
|
|
28
28
|
import { registerPullCommands } from '../cli/commands/pull.js';
|
|
29
29
|
import { registerPushCommand } from '../cli/commands/push.js';
|
|
30
30
|
import { registerStatusInitCommands } from '../cli/commands/status.js';
|
|
31
|
+
import { getPackageVersion } from '../utils/version.js';
|
|
31
32
|
export const program = new Command();
|
|
32
33
|
program
|
|
33
34
|
.name('emit')
|
|
34
35
|
.description('AI-First Local Workspace & Sync Tool for EmDash (Cloudflare Workers + D1)')
|
|
35
|
-
.version(
|
|
36
|
+
.version(getPackageVersion());
|
|
36
37
|
const resolveContext = createCliContextResolver();
|
|
37
38
|
// Register modular commands
|
|
38
39
|
registerProfileCommands(program);
|
package/dist/bin/emit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/bin/emit.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/bin/emit.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAErC,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,2EAA2E,CAAC;KACxF,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAEhC,MAAM,cAAc,GAAG,wBAAwB,EAAE,CAAC;AAElD,4BAA4B;AAC5B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,kBAAkB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAC5C,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAC9C,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAC7C,0BAA0B,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAEpD,WAAW;AACX,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,0EAA0E,CAAC;KACvF,MAAM,CAAC,wBAAwB,EAAE,6BAA6B,CAAC;KAC/D,MAAM,CAAC,KAAK,EAAE,OAA+B,EAAE,EAAE;IAChD,MAAM,YAAY,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEL,MAAM,UAAU,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IACxC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,4CAA4C;AAC5C,MAAM,iBAAiB,GACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACf,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAEtC,IAAI,iBAAiB,EAAE,CAAC;IACtB,MAAM,EAAE,CAAC;AACX,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,kBAAkB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,kBAAkB,GAAG,IAAI,CA2B7F"}
|
package/dist/cli/commands/new.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,cAAkC;IACrF,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,qBAAqB,EAAE,eAAe,CAAC;SAC9C,MAAM,CAAC,+BAA+B,EAAE,yCAAyC,CAAC;SAClF,MAAM,CAAC,uBAAuB,EAAE,mCAAmC,CAAC;SACpE,MAAM,CAAC,sBAAsB,EAAE,8CAA8C,CAAC;SAC9E,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC;QACtE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;QAE1D,MAAM,GAAG,GAAG,qBAAqB,CAAC;YAChC,IAAI;YACJ,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU;YACV,MAAM;YACN,aAAa,EAAE,GAAG,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,cAAkC;IACrF,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,qBAAqB,EAAE,eAAe,CAAC;SAC9C,MAAM,CAAC,+BAA+B,EAAE,yCAAyC,CAAC;SAClF,MAAM,CAAC,uBAAuB,EAAE,mCAAmC,CAAC;SACpE,MAAM,CAAC,sBAAsB,EAAE,8CAA8C,CAAC;SAC9E,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC;QACtE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;QAE1D,MAAM,GAAG,GAAG,qBAAqB,CAAC;YAChC,IAAI;YACJ,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU;YACV,MAAM;YACN,aAAa,EAAE,GAAG,CAAC,IAAI;YACvB,KAAK,EAAE,GAAG,CAAC,KAAK;SACjB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,uCAAuC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../src/client/mapper.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,aAAa,GACtB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../src/client/mapper.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,aAAa,GACtB,oBAAoB,CAmDtB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,CAAC,EAAE,aAAa,GACtB;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CA4EzD"}
|
package/dist/client/mapper.js
CHANGED
|
@@ -38,14 +38,9 @@ export function localToApiPayload(parsed, rev, options) {
|
|
|
38
38
|
},
|
|
39
39
|
_rev: rev,
|
|
40
40
|
};
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
else if (frontmatter.status === 'draft') {
|
|
46
|
-
// If explicitly set to draft, we can send draft or omit
|
|
47
|
-
// (Omission maintains draft/staging mode on remote)
|
|
48
|
-
}
|
|
41
|
+
// Note: In EmDash, publishing/unpublishing is performed via dedicated
|
|
42
|
+
// /publish and /unpublish endpoints rather than in PUT payloads.
|
|
43
|
+
// We omit status here to comply with EmDash PUT endpoint validation.
|
|
49
44
|
if (frontmatter.publishedAt !== undefined) {
|
|
50
45
|
payload.publishedAt = frontmatter.publishedAt;
|
|
51
46
|
}
|
|
@@ -58,12 +53,21 @@ export function localToApiPayload(parsed, rev, options) {
|
|
|
58
53
|
image: frontmatter.seo.image ?? null,
|
|
59
54
|
};
|
|
60
55
|
}
|
|
61
|
-
if (frontmatter.bylines && frontmatter.bylines
|
|
56
|
+
if (frontmatter.bylines !== undefined && Array.isArray(frontmatter.bylines)) {
|
|
62
57
|
const slugMap = options?.bylineSlugToId || {};
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
58
|
+
const validBylines = [];
|
|
59
|
+
for (const slug of frontmatter.bylines) {
|
|
60
|
+
const mappedId = slugMap[slug];
|
|
61
|
+
if (mappedId) {
|
|
62
|
+
validBylines.push({ bylineId: mappedId, roleLabel: null });
|
|
63
|
+
}
|
|
64
|
+
else if (/^[0-9A-Za-z_-]{16,36}$/.test(slug)) {
|
|
65
|
+
validBylines.push({ bylineId: slug, roleLabel: null });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (validBylines.length > 0 || frontmatter.bylines.length === 0) {
|
|
69
|
+
payload.bylines = validBylines;
|
|
70
|
+
}
|
|
67
71
|
}
|
|
68
72
|
return payload;
|
|
69
73
|
}
|
|
@@ -117,6 +121,10 @@ export function apiResponseToLocal(raw, options) {
|
|
|
117
121
|
if (slugOrId)
|
|
118
122
|
bylines = [idMap[slugOrId] || slugOrId];
|
|
119
123
|
}
|
|
124
|
+
if (bylines.length === 0 && item.primaryBylineId && typeof item.primaryBylineId === 'string') {
|
|
125
|
+
const slugOrId = item.primaryBylineId;
|
|
126
|
+
bylines = [idMap[slugOrId] || slugOrId];
|
|
127
|
+
}
|
|
120
128
|
const frontmatter = {
|
|
121
129
|
id,
|
|
122
130
|
slug,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../src/client/mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAkB,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA6BlE;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAsB,EACtB,GAAW,EACX,OAAuB;IAEvB,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAErC,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAyB;QACpC,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,IAAI,EAAE;YACJ,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,OAAO,EAAE,MAAM;SAChB;QACD,IAAI,EAAE,GAAG;KACV,CAAC;IAEF,
|
|
1
|
+
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../src/client/mapper.ts"],"names":[],"mappings":"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"}
|
package/dist/db/cache.d.ts
CHANGED
|
@@ -26,6 +26,14 @@ export interface SyncState {
|
|
|
26
26
|
slug: string;
|
|
27
27
|
lastSyncedAt: number;
|
|
28
28
|
}
|
|
29
|
+
export interface BylineRecord {
|
|
30
|
+
id: string;
|
|
31
|
+
slug: string;
|
|
32
|
+
displayName: string;
|
|
33
|
+
isGuest?: boolean;
|
|
34
|
+
rawJson?: string;
|
|
35
|
+
updatedAt?: number;
|
|
36
|
+
}
|
|
29
37
|
export declare class CacheDatabase {
|
|
30
38
|
private db;
|
|
31
39
|
constructor(dbPath: string);
|
|
@@ -41,6 +49,12 @@ export declare class CacheDatabase {
|
|
|
41
49
|
deleteSyncState(id: string): void;
|
|
42
50
|
getAllSyncStates(): SyncState[];
|
|
43
51
|
deleteEntry(id: string): void;
|
|
52
|
+
saveBylines(bylines: BylineRecord[], pruneMissing?: boolean): void;
|
|
53
|
+
getBylines(): BylineRecord[];
|
|
54
|
+
getBylineMaps(): {
|
|
55
|
+
slugToId: Record<string, string>;
|
|
56
|
+
idToSlug: Record<string, string>;
|
|
57
|
+
};
|
|
44
58
|
close(): void;
|
|
45
59
|
}
|
|
46
60
|
//# sourceMappingURL=cache.d.ts.map
|
package/dist/db/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/db/cache.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAe;IAEzB,YAAY,MAAM,EAAE,MAAM,EAOzB;IAED,OAAO,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/db/cache.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAe;IAEzB,YAAY,MAAM,EAAE,MAAM,EAOzB;IAED,OAAO,CAAC,IAAI;IA+DL,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAyBzC;IAEM,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAe9C;IAEM,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAkBrD;IAIM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAmBpD;IAEM,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAYtD;IAIM,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAqB3C;IAEM,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAahD;IAEM,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAa5D;IAEM,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAGvC;IAEM,gBAAgB,IAAI,SAAS,EAAE,CAYrC;IAEM,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAInC;IAIM,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,YAAY,UAAQ,GAAG,IAAI,CAwCtE;IAEM,UAAU,IAAI,YAAY,EAAE,CAWlC;IAEM,aAAa,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAW7F;IAEM,KAAK,IAAI,IAAI,CAEnB;CACF"}
|
package/dist/db/cache.js
CHANGED
|
@@ -74,6 +74,18 @@ export class CacheDatabase {
|
|
|
74
74
|
last_synced_at INTEGER NOT NULL
|
|
75
75
|
);
|
|
76
76
|
CREATE INDEX IF NOT EXISTS idx_sync_state_file_path ON sync_state (local_file_path);
|
|
77
|
+
`);
|
|
78
|
+
// 4. bylines table: local cache for author/byline resolution
|
|
79
|
+
this.db.exec(`
|
|
80
|
+
CREATE TABLE IF NOT EXISTS bylines (
|
|
81
|
+
id TEXT PRIMARY KEY,
|
|
82
|
+
slug TEXT NOT NULL UNIQUE,
|
|
83
|
+
display_name TEXT NOT NULL,
|
|
84
|
+
is_guest INTEGER NOT NULL DEFAULT 0,
|
|
85
|
+
raw_json TEXT NOT NULL DEFAULT '{}',
|
|
86
|
+
updated_at INTEGER NOT NULL
|
|
87
|
+
);
|
|
88
|
+
CREATE INDEX IF NOT EXISTS idx_bylines_slug ON bylines (slug);
|
|
77
89
|
`);
|
|
78
90
|
}
|
|
79
91
|
// --- entries operations ---
|
|
@@ -223,6 +235,67 @@ export class CacheDatabase {
|
|
|
223
235
|
this.db.prepare('DELETE FROM base_snapshots WHERE id = ?').run(id);
|
|
224
236
|
this.db.prepare('DELETE FROM sync_state WHERE id = ?').run(id);
|
|
225
237
|
}
|
|
238
|
+
// --- bylines operations ---
|
|
239
|
+
saveBylines(bylines, pruneMissing = false) {
|
|
240
|
+
if (bylines.length === 0 && !pruneMissing)
|
|
241
|
+
return;
|
|
242
|
+
const stmt = this.db.prepare(`
|
|
243
|
+
INSERT INTO bylines (id, slug, display_name, is_guest, raw_json, updated_at)
|
|
244
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
245
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
246
|
+
slug = excluded.slug,
|
|
247
|
+
display_name = excluded.display_name,
|
|
248
|
+
is_guest = excluded.is_guest,
|
|
249
|
+
raw_json = excluded.raw_json,
|
|
250
|
+
updated_at = excluded.updated_at
|
|
251
|
+
`);
|
|
252
|
+
const now = Math.floor(Date.now() / 1000);
|
|
253
|
+
this.db.exec('BEGIN TRANSACTION;');
|
|
254
|
+
try {
|
|
255
|
+
if (pruneMissing) {
|
|
256
|
+
const activeIds = new Set(bylines.map((b) => b.id));
|
|
257
|
+
const existing = this.getBylines();
|
|
258
|
+
const deleteStmt = this.db.prepare('DELETE FROM bylines WHERE id = ?');
|
|
259
|
+
for (const ex of existing) {
|
|
260
|
+
if (!activeIds.has(ex.id)) {
|
|
261
|
+
deleteStmt.run(ex.id);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
for (const b of bylines) {
|
|
266
|
+
stmt.run(b.id, b.slug, b.displayName, b.isGuest ? 1 : 0, b.rawJson || '{}', b.updatedAt || now);
|
|
267
|
+
}
|
|
268
|
+
this.db.exec('COMMIT;');
|
|
269
|
+
}
|
|
270
|
+
catch (err) {
|
|
271
|
+
this.db.exec('ROLLBACK;');
|
|
272
|
+
throw err;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
getBylines() {
|
|
276
|
+
const stmt = this.db.prepare('SELECT * FROM bylines ORDER BY slug ASC');
|
|
277
|
+
const rows = stmt.all();
|
|
278
|
+
return rows.map((r) => ({
|
|
279
|
+
id: String(r.id),
|
|
280
|
+
slug: String(r.slug),
|
|
281
|
+
displayName: String(r.display_name),
|
|
282
|
+
isGuest: Boolean(r.is_guest),
|
|
283
|
+
rawJson: String(r.raw_json),
|
|
284
|
+
updatedAt: Number(r.updated_at),
|
|
285
|
+
}));
|
|
286
|
+
}
|
|
287
|
+
getBylineMaps() {
|
|
288
|
+
const bylines = this.getBylines();
|
|
289
|
+
const slugToId = {};
|
|
290
|
+
const idToSlug = {};
|
|
291
|
+
for (const b of bylines) {
|
|
292
|
+
if (b.slug && b.id) {
|
|
293
|
+
slugToId[b.slug] = b.id;
|
|
294
|
+
idToSlug[b.id] = b.slug;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return { slugToId, idToSlug };
|
|
298
|
+
}
|
|
226
299
|
close() {
|
|
227
300
|
this.db.close();
|
|
228
301
|
}
|
package/dist/db/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/db/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/db/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export * from './sync/pull.js';
|
|
|
16
16
|
export * from './sync/push.js';
|
|
17
17
|
export * from './sync/status.js';
|
|
18
18
|
export * from './sync/taxonomies.js';
|
|
19
|
+
export * from './sync/bylines.js';
|
|
19
20
|
export * from './utils/config.js';
|
|
20
21
|
export * from './utils/frontmatter.js';
|
|
21
22
|
export * from './utils/profile.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsBA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,SAAS,GACf,MAAM,qBAAqB,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsBA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,SAAS,GACf,MAAM,qBAAqB,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -37,6 +37,7 @@ export * from './sync/pull.js';
|
|
|
37
37
|
export * from './sync/push.js';
|
|
38
38
|
export * from './sync/status.js';
|
|
39
39
|
export * from './sync/taxonomies.js';
|
|
40
|
+
export * from './sync/bylines.js';
|
|
40
41
|
export * from './utils/config.js';
|
|
41
42
|
export * from './utils/frontmatter.js';
|
|
42
43
|
export * from './utils/profile.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,GAKnB,MAAM,qBAAqB,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,GAKnB,MAAM,qBAAqB,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAa/C,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAkE3E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlF"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -32,6 +32,7 @@ import { registerSyncPullTools } from './tools/sync-pull.js';
|
|
|
32
32
|
import { registerSyncPushTool } from './tools/sync-push.js';
|
|
33
33
|
import { registerSyncStatusTool } from './tools/sync-status.js';
|
|
34
34
|
import { registerSyncDiffTool } from './tools/sync-diff.js';
|
|
35
|
+
import { getPackageVersion } from '../utils/version.js';
|
|
35
36
|
export function createMcpServer(options) {
|
|
36
37
|
let activeProfileOverride;
|
|
37
38
|
// Helper to resolve workspace context based on optional profile
|
|
@@ -71,7 +72,7 @@ export function createMcpServer(options) {
|
|
|
71
72
|
};
|
|
72
73
|
const server = new McpServer({
|
|
73
74
|
name: 'emit',
|
|
74
|
-
version:
|
|
75
|
+
version: getPackageVersion(),
|
|
75
76
|
});
|
|
76
77
|
// Register modular tools
|
|
77
78
|
registerProfileTools(server, {
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type CacheDatabase } from '../db/cache.js';
|
|
2
|
+
export interface BylineMaps {
|
|
3
|
+
slugToId: Record<string, string>;
|
|
4
|
+
idToSlug: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
export interface SyncBylinesOptions {
|
|
7
|
+
origin: string;
|
|
8
|
+
token: string;
|
|
9
|
+
refreshToken?: string;
|
|
10
|
+
cache: CacheDatabase;
|
|
11
|
+
fetchFn?: typeof fetch;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Synchronizes remote bylines from EmDash into the local SQLite database cache.
|
|
15
|
+
* Automatically called on pull commands to ensure local author metadata is always fresh.
|
|
16
|
+
* Gracefully falls back to existing cache if remote is unreachable.
|
|
17
|
+
*/
|
|
18
|
+
export declare function syncRemoteBylines(options: SyncBylinesOptions): Promise<BylineMaps>;
|
|
19
|
+
/**
|
|
20
|
+
* Returns cached slugToId and idToSlug maps directly from local DB.
|
|
21
|
+
*/
|
|
22
|
+
export declare function loadLocalBylineMaps(cache: CacheDatabase): BylineMaps;
|
|
23
|
+
//# sourceMappingURL=bylines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bylines.d.ts","sourceRoot":"","sources":["../../src/sync/bylines.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,gBAAgB,CAAC;AAGvE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AA4CD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAsDxF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,CAEpE"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2026 SPORT-SERVICE RS★R
|
|
3
|
+
*
|
|
4
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
* in the Software without restriction, including without limitation the rights
|
|
7
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
* furnished to do so, subject to the following conditions:
|
|
10
|
+
*
|
|
11
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
* copies or substantial portions of the Software.
|
|
13
|
+
*
|
|
14
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
* SOFTWARE.
|
|
21
|
+
*/
|
|
22
|
+
import { createAuthedFetch } from '../client/http.js';
|
|
23
|
+
/**
|
|
24
|
+
* Parses raw JSON-RPC result from EmDash /_emdash/api/mcp endpoint.
|
|
25
|
+
* Handles both Server-Sent Events (SSE) format ("data: {...}") and plain JSON responses.
|
|
26
|
+
*/
|
|
27
|
+
function parseMcpToolCallText(rawBody) {
|
|
28
|
+
const trimmed = rawBody.trim();
|
|
29
|
+
if (trimmed.startsWith('{')) {
|
|
30
|
+
try {
|
|
31
|
+
const json = JSON.parse(trimmed);
|
|
32
|
+
return json.result?.content?.[0]?.text || null;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Handle SSE data: lines
|
|
39
|
+
const dataLine = rawBody.split('\n').find((l) => l.startsWith('data:'));
|
|
40
|
+
if (dataLine) {
|
|
41
|
+
try {
|
|
42
|
+
const jsonStr = dataLine.replace(/^data:\s*/, '').trim();
|
|
43
|
+
const json = JSON.parse(jsonStr);
|
|
44
|
+
return json.result?.content?.[0]?.text || null;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Synchronizes remote bylines from EmDash into the local SQLite database cache.
|
|
54
|
+
* Automatically called on pull commands to ensure local author metadata is always fresh.
|
|
55
|
+
* Gracefully falls back to existing cache if remote is unreachable.
|
|
56
|
+
*/
|
|
57
|
+
export async function syncRemoteBylines(options) {
|
|
58
|
+
const fetchFn = createAuthedFetch(options);
|
|
59
|
+
try {
|
|
60
|
+
const mcpUrl = new URL('/_emdash/api/mcp', options.origin).toString();
|
|
61
|
+
const res = await fetchFn(mcpUrl, {
|
|
62
|
+
method: 'POST',
|
|
63
|
+
headers: {
|
|
64
|
+
'Content-Type': 'application/json',
|
|
65
|
+
Accept: 'application/json, text/event-stream',
|
|
66
|
+
},
|
|
67
|
+
body: JSON.stringify({
|
|
68
|
+
jsonrpc: '2.0',
|
|
69
|
+
id: 1,
|
|
70
|
+
method: 'tools/call',
|
|
71
|
+
params: {
|
|
72
|
+
name: 'byline_list',
|
|
73
|
+
arguments: { limit: 100 },
|
|
74
|
+
},
|
|
75
|
+
}),
|
|
76
|
+
});
|
|
77
|
+
if (res.ok) {
|
|
78
|
+
const responseText = await res.text();
|
|
79
|
+
const toolText = parseMcpToolCallText(responseText);
|
|
80
|
+
if (toolText) {
|
|
81
|
+
const parsed = JSON.parse(toolText);
|
|
82
|
+
const rawItems = Array.isArray(parsed.items) ? parsed.items : [];
|
|
83
|
+
const records = [];
|
|
84
|
+
const now = Math.floor(Date.now() / 1000);
|
|
85
|
+
for (const item of rawItems) {
|
|
86
|
+
if (item.id && item.slug) {
|
|
87
|
+
records.push({
|
|
88
|
+
id: item.id,
|
|
89
|
+
slug: item.slug,
|
|
90
|
+
displayName: item.displayName || item.slug,
|
|
91
|
+
isGuest: Boolean(item.isGuest),
|
|
92
|
+
rawJson: JSON.stringify(item),
|
|
93
|
+
updatedAt: now,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
options.cache.saveBylines(records, true);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Non-fatal: if remote byline sync fails (e.g. offline, permissions), proceed with existing cache
|
|
103
|
+
}
|
|
104
|
+
return options.cache.getBylineMaps();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Returns cached slugToId and idToSlug maps directly from local DB.
|
|
108
|
+
*/
|
|
109
|
+
export function loadLocalBylineMaps(cache) {
|
|
110
|
+
return cache.getBylineMaps();
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=bylines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bylines.js","sourceRoot":"","sources":["../../src/sync/bylines.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/new.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { type TaxonomyCandidates } from '../utils/frontmatter.js';
|
|
2
|
+
import type { CacheDatabase } from '../db/cache.js';
|
|
2
3
|
export interface CreateArticleOptions {
|
|
3
4
|
workspaceRoot: string;
|
|
4
5
|
slug: string;
|
|
5
6
|
title?: string;
|
|
6
7
|
collection?: string;
|
|
7
8
|
locale?: string;
|
|
9
|
+
byline?: string;
|
|
10
|
+
cache?: CacheDatabase;
|
|
8
11
|
candidates?: TaxonomyCandidates;
|
|
9
12
|
}
|
|
10
13
|
export interface CreateArticleResult {
|