@karmaniverous/jeeves-meta-openclaw 0.12.5 → 0.12.7

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.
@@ -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 === '>=' && !satisfies(gt.semver, String(c), options)) {
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 === '<=' && !satisfies(lt.semver, String(c), options)) {
5960
+ } else if (lt.operator === '<=' && !c.test(lt.semver)) {
5954
5961
  return false
5955
5962
  }
5956
5963
  }
@@ -24346,14 +24353,14 @@ const SECTION_ORDER = [
24346
24353
  * Core library version, inlined at build time.
24347
24354
  *
24348
24355
  * @remarks
24349
- * The `0.5.9` placeholder is replaced by
24356
+ * The `0.5.10` placeholder is replaced by
24350
24357
  * `@rollup/plugin-replace` during the build with the actual version
24351
24358
  * from `package.json`. This ensures the correct version survives
24352
24359
  * when consumers bundle core into their own dist (where runtime
24353
24360
  * `import.meta.url`-based resolution would find the wrong package.json).
24354
24361
  */
24355
24362
  /** The core library version from package.json (inlined at build time). */
24356
- const CORE_VERSION = '0.5.9';
24363
+ const CORE_VERSION = '0.5.10';
24357
24364
 
24358
24365
  /**
24359
24366
  * Workspace and config root initialization.
@@ -24366,12 +24373,26 @@ const CORE_VERSION = '0.5.9';
24366
24373
  * - `{configRoot}/jeeves-{name}/` for each component
24367
24374
  */
24368
24375
  let state;
24376
+ const WINDOWS_DRIVE_RE = /^[a-zA-Z]:/;
24377
+ /**
24378
+ * Throw if a path looks like a Windows drive letter on a non-Windows platform.
24379
+ *
24380
+ * @param label - Human-readable name for the path (used in error messages).
24381
+ * @param value - The raw path string to validate.
24382
+ */
24383
+ function rejectWindowsDrivePath(label, value) {
24384
+ if (process.platform !== 'win32' && WINDOWS_DRIVE_RE.test(value)) {
24385
+ throw new Error(`jeeves-core: ${label} "${value}" looks like a Windows drive-letter path and will not resolve correctly on this platform.`);
24386
+ }
24387
+ }
24369
24388
  /**
24370
24389
  * Initialize the core library with workspace and config root paths.
24371
24390
  *
24372
24391
  * @param options - Workspace and config root paths.
24373
24392
  */
24374
24393
  function init(options) {
24394
+ rejectWindowsDrivePath('configRoot', options.configRoot);
24395
+ rejectWindowsDrivePath('workspacePath', options.workspacePath);
24375
24396
  state = {
24376
24397
  workspacePath: options.workspacePath,
24377
24398
  configRoot: options.configRoot,
@@ -26177,6 +26198,20 @@ When editing files outside the workspace, use the bridge pattern: copy in → ed
26177
26198
 
26178
26199
  **Cross-channel sends:** Use the \`message\` tool with an explicit \`target\` to send to a different channel or DM.
26179
26200
 
26201
+ ### Slack File Downloads
26202
+
26203
+ 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:
26204
+
26205
+ \`\`\`js
26206
+ fetch(url_private_download, {
26207
+ headers: { Authorization: 'Bearer ' + botToken },
26208
+ });
26209
+ \`\`\`
26210
+
26211
+ The bot token is at \`channels.slack.accounts.default.botToken\` in \`openclaw.json\`.
26212
+
26213
+ Never tell the user a file can't be downloaded until both methods have been tried.
26214
+
26180
26215
  ### Plugin Lifecycle
26181
26216
 
26182
26217
  \`\`\`bash