@karmaniverous/jeeves-watcher-openclaw 0.14.9 → 0.14.11
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/content/tools-platform.md +14 -0
- package/dist/cli.js +39 -4
- package/dist/index.js +39 -4
- package/dist/skills/jeeves-watcher/SKILL.md +1 -1
- package/openclaw.plugin.json +16 -1
- package/package.json +58 -58
|
@@ -24,6 +24,20 @@ When editing files outside the workspace, use the bridge pattern: copy in → ed
|
|
|
24
24
|
|
|
25
25
|
**Cross-channel sends:** Use the `message` tool with an explicit `target` to send to a different channel or DM.
|
|
26
26
|
|
|
27
|
+
### Slack File Downloads
|
|
28
|
+
|
|
29
|
+
To download a Slack-hosted file, first try the `message` tool's `download-file` action. If that fails, fall back to a direct HTTP fetch using the bot token:
|
|
30
|
+
|
|
31
|
+
```js
|
|
32
|
+
fetch(url_private_download, {
|
|
33
|
+
headers: { Authorization: 'Bearer ' + botToken },
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The bot token is at `channels.slack.accounts.default.botToken` in `openclaw.json`.
|
|
38
|
+
|
|
39
|
+
Never tell the user a file can't be downloaded until both methods have been tried.
|
|
40
|
+
|
|
27
41
|
### Plugin Lifecycle
|
|
28
42
|
|
|
29
43
|
```bash
|
package/dist/cli.js
CHANGED
|
@@ -4749,6 +4749,9 @@ function requireRange () {
|
|
|
4749
4749
|
}
|
|
4750
4750
|
|
|
4751
4751
|
parseRange (range) {
|
|
4752
|
+
// strip build metadata so it can't bleed into the version
|
|
4753
|
+
range = range.replace(BUILDSTRIPRE, '');
|
|
4754
|
+
|
|
4752
4755
|
// memoize range parsing for performance.
|
|
4753
4756
|
// this is a very hot path, and fully deterministic.
|
|
4754
4757
|
const memoOpts =
|
|
@@ -4874,6 +4877,7 @@ function requireRange () {
|
|
|
4874
4877
|
const SemVer = requireSemver$1();
|
|
4875
4878
|
const {
|
|
4876
4879
|
safeRe: re,
|
|
4880
|
+
src,
|
|
4877
4881
|
t,
|
|
4878
4882
|
comparatorTrimReplace,
|
|
4879
4883
|
tildeTrimReplace,
|
|
@@ -4881,6 +4885,9 @@ function requireRange () {
|
|
|
4881
4885
|
} = requireRe();
|
|
4882
4886
|
const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = requireConstants();
|
|
4883
4887
|
|
|
4888
|
+
// unbounded global build-metadata stripper used by parseRange
|
|
4889
|
+
const BUILDSTRIPRE = new RegExp(src[t.BUILD], 'g');
|
|
4890
|
+
|
|
4884
4891
|
const isNullSet = c => c.value === '<0.0.0-0';
|
|
4885
4892
|
const isAny = c => c.value === '';
|
|
4886
4893
|
|
|
@@ -5932,7 +5939,7 @@ function requireSubset () {
|
|
|
5932
5939
|
if (higher === c && higher !== gt) {
|
|
5933
5940
|
return false
|
|
5934
5941
|
}
|
|
5935
|
-
} else if (gt.operator === '>=' && !
|
|
5942
|
+
} else if (gt.operator === '>=' && !c.test(gt.semver)) {
|
|
5936
5943
|
return false
|
|
5937
5944
|
}
|
|
5938
5945
|
}
|
|
@@ -5950,7 +5957,7 @@ function requireSubset () {
|
|
|
5950
5957
|
if (lower === c && lower !== lt) {
|
|
5951
5958
|
return false
|
|
5952
5959
|
}
|
|
5953
|
-
} else if (lt.operator === '<=' && !
|
|
5960
|
+
} else if (lt.operator === '<=' && !c.test(lt.semver)) {
|
|
5954
5961
|
return false
|
|
5955
5962
|
}
|
|
5956
5963
|
}
|
|
@@ -24475,14 +24482,14 @@ const SECTION_ORDER = [
|
|
|
24475
24482
|
* Core library version, inlined at build time.
|
|
24476
24483
|
*
|
|
24477
24484
|
* @remarks
|
|
24478
|
-
* The `0.5.
|
|
24485
|
+
* The `0.5.10` placeholder is replaced by
|
|
24479
24486
|
* `@rollup/plugin-replace` during the build with the actual version
|
|
24480
24487
|
* from `package.json`. This ensures the correct version survives
|
|
24481
24488
|
* when consumers bundle core into their own dist (where runtime
|
|
24482
24489
|
* `import.meta.url`-based resolution would find the wrong package.json).
|
|
24483
24490
|
*/
|
|
24484
24491
|
/** The core library version from package.json (inlined at build time). */
|
|
24485
|
-
const CORE_VERSION = '0.5.
|
|
24492
|
+
const CORE_VERSION = '0.5.10';
|
|
24486
24493
|
|
|
24487
24494
|
/**
|
|
24488
24495
|
* Workspace and config root initialization.
|
|
@@ -24495,12 +24502,26 @@ const CORE_VERSION = '0.5.9';
|
|
|
24495
24502
|
* - `{configRoot}/jeeves-{name}/` for each component
|
|
24496
24503
|
*/
|
|
24497
24504
|
let state;
|
|
24505
|
+
const WINDOWS_DRIVE_RE = /^[a-zA-Z]:/;
|
|
24506
|
+
/**
|
|
24507
|
+
* Throw if a path looks like a Windows drive letter on a non-Windows platform.
|
|
24508
|
+
*
|
|
24509
|
+
* @param label - Human-readable name for the path (used in error messages).
|
|
24510
|
+
* @param value - The raw path string to validate.
|
|
24511
|
+
*/
|
|
24512
|
+
function rejectWindowsDrivePath(label, value) {
|
|
24513
|
+
if (process.platform !== 'win32' && WINDOWS_DRIVE_RE.test(value)) {
|
|
24514
|
+
throw new Error(`jeeves-core: ${label} "${value}" looks like a Windows drive-letter path and will not resolve correctly on this platform.`);
|
|
24515
|
+
}
|
|
24516
|
+
}
|
|
24498
24517
|
/**
|
|
24499
24518
|
* Initialize the core library with workspace and config root paths.
|
|
24500
24519
|
*
|
|
24501
24520
|
* @param options - Workspace and config root paths.
|
|
24502
24521
|
*/
|
|
24503
24522
|
function init(options) {
|
|
24523
|
+
rejectWindowsDrivePath('configRoot', options.configRoot);
|
|
24524
|
+
rejectWindowsDrivePath('workspacePath', options.workspacePath);
|
|
24504
24525
|
state = {
|
|
24505
24526
|
workspacePath: options.workspacePath,
|
|
24506
24527
|
configRoot: options.configRoot,
|
|
@@ -26306,6 +26327,20 @@ When editing files outside the workspace, use the bridge pattern: copy in → ed
|
|
|
26306
26327
|
|
|
26307
26328
|
**Cross-channel sends:** Use the \`message\` tool with an explicit \`target\` to send to a different channel or DM.
|
|
26308
26329
|
|
|
26330
|
+
### Slack File Downloads
|
|
26331
|
+
|
|
26332
|
+
To download a Slack-hosted file, first try the \`message\` tool's \`download-file\` action. If that fails, fall back to a direct HTTP fetch using the bot token:
|
|
26333
|
+
|
|
26334
|
+
\`\`\`js
|
|
26335
|
+
fetch(url_private_download, {
|
|
26336
|
+
headers: { Authorization: 'Bearer ' + botToken },
|
|
26337
|
+
});
|
|
26338
|
+
\`\`\`
|
|
26339
|
+
|
|
26340
|
+
The bot token is at \`channels.slack.accounts.default.botToken\` in \`openclaw.json\`.
|
|
26341
|
+
|
|
26342
|
+
Never tell the user a file can't be downloaded until both methods have been tried.
|
|
26343
|
+
|
|
26309
26344
|
### Plugin Lifecycle
|
|
26310
26345
|
|
|
26311
26346
|
\`\`\`bash
|
package/dist/index.js
CHANGED
|
@@ -4748,6 +4748,9 @@ function requireRange () {
|
|
|
4748
4748
|
}
|
|
4749
4749
|
|
|
4750
4750
|
parseRange (range) {
|
|
4751
|
+
// strip build metadata so it can't bleed into the version
|
|
4752
|
+
range = range.replace(BUILDSTRIPRE, '');
|
|
4753
|
+
|
|
4751
4754
|
// memoize range parsing for performance.
|
|
4752
4755
|
// this is a very hot path, and fully deterministic.
|
|
4753
4756
|
const memoOpts =
|
|
@@ -4873,6 +4876,7 @@ function requireRange () {
|
|
|
4873
4876
|
const SemVer = requireSemver$1();
|
|
4874
4877
|
const {
|
|
4875
4878
|
safeRe: re,
|
|
4879
|
+
src,
|
|
4876
4880
|
t,
|
|
4877
4881
|
comparatorTrimReplace,
|
|
4878
4882
|
tildeTrimReplace,
|
|
@@ -4880,6 +4884,9 @@ function requireRange () {
|
|
|
4880
4884
|
} = requireRe();
|
|
4881
4885
|
const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = requireConstants();
|
|
4882
4886
|
|
|
4887
|
+
// unbounded global build-metadata stripper used by parseRange
|
|
4888
|
+
const BUILDSTRIPRE = new RegExp(src[t.BUILD], 'g');
|
|
4889
|
+
|
|
4883
4890
|
const isNullSet = c => c.value === '<0.0.0-0';
|
|
4884
4891
|
const isAny = c => c.value === '';
|
|
4885
4892
|
|
|
@@ -5931,7 +5938,7 @@ function requireSubset () {
|
|
|
5931
5938
|
if (higher === c && higher !== gt) {
|
|
5932
5939
|
return false
|
|
5933
5940
|
}
|
|
5934
|
-
} else if (gt.operator === '>=' && !
|
|
5941
|
+
} else if (gt.operator === '>=' && !c.test(gt.semver)) {
|
|
5935
5942
|
return false
|
|
5936
5943
|
}
|
|
5937
5944
|
}
|
|
@@ -5949,7 +5956,7 @@ function requireSubset () {
|
|
|
5949
5956
|
if (lower === c && lower !== lt) {
|
|
5950
5957
|
return false
|
|
5951
5958
|
}
|
|
5952
|
-
} else if (lt.operator === '<=' && !
|
|
5959
|
+
} else if (lt.operator === '<=' && !c.test(lt.semver)) {
|
|
5953
5960
|
return false
|
|
5954
5961
|
}
|
|
5955
5962
|
}
|
|
@@ -24554,14 +24561,14 @@ const PLATFORM_COMPONENTS = [
|
|
|
24554
24561
|
* Core library version, inlined at build time.
|
|
24555
24562
|
*
|
|
24556
24563
|
* @remarks
|
|
24557
|
-
* The `0.5.
|
|
24564
|
+
* The `0.5.10` placeholder is replaced by
|
|
24558
24565
|
* `@rollup/plugin-replace` during the build with the actual version
|
|
24559
24566
|
* from `package.json`. This ensures the correct version survives
|
|
24560
24567
|
* when consumers bundle core into their own dist (where runtime
|
|
24561
24568
|
* `import.meta.url`-based resolution would find the wrong package.json).
|
|
24562
24569
|
*/
|
|
24563
24570
|
/** The core library version from package.json (inlined at build time). */
|
|
24564
|
-
const CORE_VERSION = '0.5.
|
|
24571
|
+
const CORE_VERSION = '0.5.10';
|
|
24565
24572
|
|
|
24566
24573
|
/**
|
|
24567
24574
|
* Workspace and config root initialization.
|
|
@@ -24574,12 +24581,26 @@ const CORE_VERSION = '0.5.9';
|
|
|
24574
24581
|
* - `{configRoot}/jeeves-{name}/` for each component
|
|
24575
24582
|
*/
|
|
24576
24583
|
let state;
|
|
24584
|
+
const WINDOWS_DRIVE_RE = /^[a-zA-Z]:/;
|
|
24585
|
+
/**
|
|
24586
|
+
* Throw if a path looks like a Windows drive letter on a non-Windows platform.
|
|
24587
|
+
*
|
|
24588
|
+
* @param label - Human-readable name for the path (used in error messages).
|
|
24589
|
+
* @param value - The raw path string to validate.
|
|
24590
|
+
*/
|
|
24591
|
+
function rejectWindowsDrivePath(label, value) {
|
|
24592
|
+
if (process.platform !== 'win32' && WINDOWS_DRIVE_RE.test(value)) {
|
|
24593
|
+
throw new Error(`jeeves-core: ${label} "${value}" looks like a Windows drive-letter path and will not resolve correctly on this platform.`);
|
|
24594
|
+
}
|
|
24595
|
+
}
|
|
24577
24596
|
/**
|
|
24578
24597
|
* Initialize the core library with workspace and config root paths.
|
|
24579
24598
|
*
|
|
24580
24599
|
* @param options - Workspace and config root paths.
|
|
24581
24600
|
*/
|
|
24582
24601
|
function init(options) {
|
|
24602
|
+
rejectWindowsDrivePath('configRoot', options.configRoot);
|
|
24603
|
+
rejectWindowsDrivePath('workspacePath', options.workspacePath);
|
|
24583
24604
|
state = {
|
|
24584
24605
|
workspacePath: options.workspacePath,
|
|
24585
24606
|
configRoot: options.configRoot,
|
|
@@ -26688,6 +26709,20 @@ When editing files outside the workspace, use the bridge pattern: copy in → ed
|
|
|
26688
26709
|
|
|
26689
26710
|
**Cross-channel sends:** Use the \`message\` tool with an explicit \`target\` to send to a different channel or DM.
|
|
26690
26711
|
|
|
26712
|
+
### Slack File Downloads
|
|
26713
|
+
|
|
26714
|
+
To download a Slack-hosted file, first try the \`message\` tool's \`download-file\` action. If that fails, fall back to a direct HTTP fetch using the bot token:
|
|
26715
|
+
|
|
26716
|
+
\`\`\`js
|
|
26717
|
+
fetch(url_private_download, {
|
|
26718
|
+
headers: { Authorization: 'Bearer ' + botToken },
|
|
26719
|
+
});
|
|
26720
|
+
\`\`\`
|
|
26721
|
+
|
|
26722
|
+
The bot token is at \`channels.slack.accounts.default.botToken\` in \`openclaw.json\`.
|
|
26723
|
+
|
|
26724
|
+
Never tell the user a file can't be downloaded until both methods have been tried.
|
|
26725
|
+
|
|
26691
26726
|
### Plugin Lifecycle
|
|
26692
26727
|
|
|
26693
26728
|
\`\`\`bash
|
|
@@ -397,7 +397,7 @@ Apply config changes atomically.
|
|
|
397
397
|
Validates, writes to disk, and triggers configured reindex behavior. Returns validation errors if invalid. Config changes take full effect without service restart — including new/removed watch paths (filesystem watcher is rebuilt), inference rule changes, move detection settings, and gitignore filter updates.
|
|
398
398
|
|
|
399
399
|
### `watcher_reindex`
|
|
400
|
-
Trigger a reindex operation.
|
|
400
|
+
Trigger a reindex operation. Non-prune scopes return a `plan` object showing blast area before execution begins. Live prune (non-dry-run) returns immediately without a plan.
|
|
401
401
|
|
|
402
402
|
**Parameters:**
|
|
403
403
|
- `scope` (string, optional) — Reindex scope. Default: `"rules"`. One of:
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "jeeves-watcher-openclaw",
|
|
3
3
|
"name": "Jeeves Watcher",
|
|
4
4
|
"description": "Semantic search, metadata enrichment, and instance administration for a jeeves-watcher deployment.",
|
|
5
|
-
"version": "0.14.
|
|
5
|
+
"version": "0.14.11",
|
|
6
6
|
"skills": [
|
|
7
7
|
"dist/skills/jeeves-watcher"
|
|
8
8
|
],
|
|
@@ -22,6 +22,21 @@
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
|
+
"contracts": {
|
|
26
|
+
"tools": [
|
|
27
|
+
"watcher_status",
|
|
28
|
+
"watcher_config",
|
|
29
|
+
"watcher_config_apply",
|
|
30
|
+
"watcher_service",
|
|
31
|
+
"watcher_search",
|
|
32
|
+
"watcher_enrich",
|
|
33
|
+
"watcher_validate",
|
|
34
|
+
"watcher_reindex",
|
|
35
|
+
"watcher_scan",
|
|
36
|
+
"watcher_issues",
|
|
37
|
+
"watcher_walk"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
25
40
|
"uiHints": {
|
|
26
41
|
"apiUrl": {
|
|
27
42
|
"label": "Watcher API URL",
|
package/package.json
CHANGED
|
@@ -1,15 +1,32 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@karmaniverous/jeeves-watcher-openclaw",
|
|
3
|
-
"version": "0.14.9",
|
|
4
2
|
"author": "Jason Williscroft",
|
|
5
|
-
"description": "OpenClaw plugin for jeeves-watcher — semantic search and metadata enrichment tools",
|
|
6
|
-
"license": "BSD-3-Clause",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"main": "dist/index.js",
|
|
9
|
-
"types": "dist/index.d.ts",
|
|
10
3
|
"bin": {
|
|
11
4
|
"jeeves-watcher-openclaw": "./dist/cli.js"
|
|
12
5
|
},
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/karmaniverous/jeeves-watcher/issues"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"@karmaniverous/jeeves": "^0.5.11",
|
|
11
|
+
"@karmaniverous/jeeves-watcher-core": "^0.1.2"
|
|
12
|
+
},
|
|
13
|
+
"description": "OpenClaw plugin for jeeves-watcher — semantic search and metadata enrichment tools",
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"@dotenvx/dotenvx": "^1.69.1",
|
|
16
|
+
"@rollup/plugin-commonjs": "^29.0.2",
|
|
17
|
+
"@rollup/plugin-json": "^6.1.0",
|
|
18
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
19
|
+
"@rollup/plugin-typescript": "^12.3.0",
|
|
20
|
+
"cross-env": "^10.1.0",
|
|
21
|
+
"knip": "^6.14.2",
|
|
22
|
+
"release-it": "^20.0.1",
|
|
23
|
+
"rollup": "^4.60.4",
|
|
24
|
+
"tslib": "^2.8.1",
|
|
25
|
+
"vitest": "^4.1.7"
|
|
26
|
+
},
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=22"
|
|
29
|
+
},
|
|
13
30
|
"exports": {
|
|
14
31
|
".": {
|
|
15
32
|
"import": {
|
|
@@ -23,17 +40,6 @@
|
|
|
23
40
|
"content",
|
|
24
41
|
"openclaw.plugin.json"
|
|
25
42
|
],
|
|
26
|
-
"publishConfig": {
|
|
27
|
-
"access": "public"
|
|
28
|
-
},
|
|
29
|
-
"repository": {
|
|
30
|
-
"type": "git",
|
|
31
|
-
"url": "git+https://github.com/karmaniverous/jeeves-watcher.git",
|
|
32
|
-
"directory": "packages/openclaw"
|
|
33
|
-
},
|
|
34
|
-
"bugs": {
|
|
35
|
-
"url": "https://github.com/karmaniverous/jeeves-watcher/issues"
|
|
36
|
-
},
|
|
37
43
|
"homepage": "https://github.com/karmaniverous/jeeves-watcher#readme",
|
|
38
44
|
"keywords": [
|
|
39
45
|
"openclaw",
|
|
@@ -41,76 +47,70 @@
|
|
|
41
47
|
"jeeves-watcher",
|
|
42
48
|
"semantic-search"
|
|
43
49
|
],
|
|
44
|
-
"
|
|
45
|
-
|
|
46
|
-
|
|
50
|
+
"license": "BSD-3-Clause",
|
|
51
|
+
"main": "dist/index.js",
|
|
52
|
+
"name": "@karmaniverous/jeeves-watcher-openclaw",
|
|
47
53
|
"openclaw": {
|
|
48
54
|
"extensions": [
|
|
49
55
|
"./dist/index.js"
|
|
50
56
|
]
|
|
51
57
|
},
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"@rollup/plugin-commonjs": "^29.0.2",
|
|
55
|
-
"@rollup/plugin-json": "^6.1.0",
|
|
56
|
-
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
57
|
-
"@rollup/plugin-typescript": "^12.3.0",
|
|
58
|
-
"cross-env": "^10.1.0",
|
|
59
|
-
"knip": "^6.13.1",
|
|
60
|
-
"release-it": "^20.0.1",
|
|
61
|
-
"rollup": "^4.60.3",
|
|
62
|
-
"tslib": "^2.8.1",
|
|
63
|
-
"vitest": "^4.1.6"
|
|
64
|
-
},
|
|
65
|
-
"scripts": {
|
|
66
|
-
"build:plugin": "rimraf dist && cross-env NO_COLOR=1 rollup --config rollup.config.ts --configPlugin @rollup/plugin-typescript",
|
|
67
|
-
"build:skills": "tsx scripts/build-skills.ts",
|
|
68
|
-
"build": "npm run build:plugin && npm run build:skills && npm run build:content",
|
|
69
|
-
"build:content": "node scripts/copy-content.mjs",
|
|
70
|
-
"changelog": "git-cliff -o CHANGELOG.md",
|
|
71
|
-
"lint": "eslint .",
|
|
72
|
-
"lint:fix": "eslint --fix .",
|
|
73
|
-
"release": "dotenvx run -f .env.local -- release-it",
|
|
74
|
-
"release:pre": "dotenvx run -f .env.local -- release-it --no-git.requireBranch --github.prerelease --preRelease",
|
|
75
|
-
"test": "vitest run",
|
|
76
|
-
"typecheck": "tsc"
|
|
58
|
+
"publishConfig": {
|
|
59
|
+
"access": "public"
|
|
77
60
|
},
|
|
78
61
|
"release-it": {
|
|
79
62
|
"git": {
|
|
80
63
|
"changelog": "npx git-cliff --unreleased --strip header",
|
|
81
64
|
"commitMessage": "chore: release @karmaniverous/jeeves-watcher-openclaw v${version}",
|
|
82
|
-
"
|
|
83
|
-
"
|
|
65
|
+
"requireBranch": "main",
|
|
66
|
+
"tagName": "openclaw/${version}"
|
|
84
67
|
},
|
|
85
68
|
"github": {
|
|
86
69
|
"release": true
|
|
87
70
|
},
|
|
88
71
|
"hooks": {
|
|
72
|
+
"after:bump": [
|
|
73
|
+
"node -e \"const f='openclaw.plugin.json';const j=JSON.parse(require('fs').readFileSync(f,'utf8'));j.version='${version}';require('fs').writeFileSync(f,JSON.stringify(j,null,2)+'')\""
|
|
74
|
+
],
|
|
89
75
|
"after:init": [
|
|
90
76
|
"npm run lint",
|
|
91
77
|
"npm run typecheck",
|
|
92
78
|
"npm run test",
|
|
93
79
|
"npm run build"
|
|
94
80
|
],
|
|
95
|
-
"before:npm:release": [
|
|
96
|
-
"npx git-cliff -o CHANGELOG.md",
|
|
97
|
-
"git add -A"
|
|
98
|
-
],
|
|
99
81
|
"after:release": [
|
|
100
82
|
"git switch -c release/openclaw/${version}",
|
|
101
83
|
"git push -u origin release/openclaw/${version}",
|
|
102
84
|
"git switch ${branchName}"
|
|
103
85
|
],
|
|
104
|
-
"
|
|
105
|
-
"
|
|
86
|
+
"before:npm:release": [
|
|
87
|
+
"npx git-cliff -o CHANGELOG.md",
|
|
88
|
+
"git add -A"
|
|
106
89
|
]
|
|
107
90
|
},
|
|
108
91
|
"npm": {
|
|
109
92
|
"publish": true
|
|
110
93
|
}
|
|
111
94
|
},
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"
|
|
115
|
-
|
|
95
|
+
"repository": {
|
|
96
|
+
"directory": "packages/openclaw",
|
|
97
|
+
"type": "git",
|
|
98
|
+
"url": "git+https://github.com/karmaniverous/jeeves-watcher.git"
|
|
99
|
+
},
|
|
100
|
+
"scripts": {
|
|
101
|
+
"build": "npm run build:plugin && npm run build:skills && npm run build:content",
|
|
102
|
+
"build:content": "node scripts/copy-content.mjs",
|
|
103
|
+
"build:plugin": "rimraf dist && cross-env NO_COLOR=1 rollup --config rollup.config.ts --configPlugin @rollup/plugin-typescript",
|
|
104
|
+
"build:skills": "tsx scripts/build-skills.ts",
|
|
105
|
+
"changelog": "git-cliff -o CHANGELOG.md",
|
|
106
|
+
"lint": "eslint .",
|
|
107
|
+
"lint:fix": "eslint --fix .",
|
|
108
|
+
"release": "dotenvx run -f .env.local -- release-it",
|
|
109
|
+
"release:pre": "dotenvx run -f .env.local -- release-it --no-git.requireBranch --github.prerelease --preRelease",
|
|
110
|
+
"test": "vitest run",
|
|
111
|
+
"typecheck": "tsc"
|
|
112
|
+
},
|
|
113
|
+
"type": "module",
|
|
114
|
+
"types": "dist/index.d.ts",
|
|
115
|
+
"version": "0.14.11"
|
|
116
116
|
}
|