mnemospark 0.5.0 → 0.6.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/dist/cli.js +53 -58
- package/dist/cli.js.map +1 -1
- package/dist/index.js +53 -58
- package/dist/index.js.map +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -2890,7 +2890,14 @@ import { CronExpressionParser } from "cron-parser";
|
|
|
2890
2890
|
var LS_NAME_DISPLAY_MAX = 72;
|
|
2891
2891
|
var LS_PAY_DISPLAY_MAX = 28;
|
|
2892
2892
|
var LS_CRON_ID_MAX = 14;
|
|
2893
|
-
var
|
|
2893
|
+
var LS_S3_COL_WIDTH = 12;
|
|
2894
|
+
var LS_NEXT_COL_WIDTH = Math.max(LS_S3_COL_WIDTH, "NEXT PAYMENT DATE".length);
|
|
2895
|
+
var HDR_SIZE = "SIZE";
|
|
2896
|
+
var HDR_S3_TIME = "S3_TIME";
|
|
2897
|
+
var HDR_CRON_JOB = "CRON JOB";
|
|
2898
|
+
var HDR_NEXT_PAYMENT = "NEXT PAYMENT DATE";
|
|
2899
|
+
var HDR_AMOUNT_DUE = "AMOUNT DUE";
|
|
2900
|
+
var HDR_FILE_OR_KEY = "FILE NAME OR OBJECT-KEY";
|
|
2894
2901
|
var MONTHS_SHORT = [
|
|
2895
2902
|
"Jan",
|
|
2896
2903
|
"Feb",
|
|
@@ -2905,14 +2912,14 @@ var MONTHS_SHORT = [
|
|
|
2905
2912
|
"Nov",
|
|
2906
2913
|
"Dec"
|
|
2907
2914
|
];
|
|
2908
|
-
function formatLsTimeFieldUtc(iso, now) {
|
|
2909
|
-
const placeholder = " - ".slice(0,
|
|
2915
|
+
function formatLsTimeFieldUtc(iso, now, fieldWidth = LS_S3_COL_WIDTH) {
|
|
2916
|
+
const placeholder = " - ".slice(0, fieldWidth);
|
|
2910
2917
|
if (!iso) {
|
|
2911
|
-
return placeholder.padEnd(
|
|
2918
|
+
return placeholder.padEnd(fieldWidth, " ");
|
|
2912
2919
|
}
|
|
2913
2920
|
const d = new Date(iso);
|
|
2914
2921
|
if (Number.isNaN(d.getTime())) {
|
|
2915
|
-
return placeholder.padEnd(
|
|
2922
|
+
return placeholder.padEnd(fieldWidth, " ");
|
|
2916
2923
|
}
|
|
2917
2924
|
const mon = MONTHS_SHORT[d.getUTCMonth()] ?? "???";
|
|
2918
2925
|
const day = String(d.getUTCDate()).padStart(2, " ");
|
|
@@ -2926,7 +2933,7 @@ function formatLsTimeFieldUtc(iso, now) {
|
|
|
2926
2933
|
} else {
|
|
2927
2934
|
core = `${mon} ${day} ${y}`;
|
|
2928
2935
|
}
|
|
2929
|
-
return core.padEnd(
|
|
2936
|
+
return core.padEnd(fieldWidth, " ");
|
|
2930
2937
|
}
|
|
2931
2938
|
function truncateEnd(value, max) {
|
|
2932
2939
|
if (value.length <= max) {
|
|
@@ -2966,18 +2973,26 @@ function formatPaymentCell(amount, network, maxWidth) {
|
|
|
2966
2973
|
return truncateEnd(s, maxWidth).padStart(maxWidth, " ");
|
|
2967
2974
|
}
|
|
2968
2975
|
function formatNextCronUtc(schedule, cronStatus, now) {
|
|
2969
|
-
const blank = " - ".slice(0,
|
|
2976
|
+
const blank = " - ".slice(0, LS_NEXT_COL_WIDTH).padEnd(LS_NEXT_COL_WIDTH, " ");
|
|
2970
2977
|
if (cronStatus !== "active") {
|
|
2971
2978
|
return blank;
|
|
2972
2979
|
}
|
|
2973
2980
|
try {
|
|
2974
2981
|
const expr = CronExpressionParser.parse(schedule, { tz: "UTC", currentDate: now });
|
|
2975
2982
|
const next = expr.next().toDate();
|
|
2976
|
-
return formatLsTimeFieldUtc(next.toISOString(), now);
|
|
2983
|
+
return formatLsTimeFieldUtc(next.toISOString(), now, LS_NEXT_COL_WIDTH);
|
|
2977
2984
|
} catch {
|
|
2978
|
-
return "?".padEnd(
|
|
2985
|
+
return "?".padEnd(LS_NEXT_COL_WIDTH, " ");
|
|
2979
2986
|
}
|
|
2980
2987
|
}
|
|
2988
|
+
function buildLsProseIntro(bucket) {
|
|
2989
|
+
return [
|
|
2990
|
+
"\u2601\uFE0F mnemospark cloud files",
|
|
2991
|
+
`S3 bucket: ${bucket}`,
|
|
2992
|
+
"The columns: CRON JOB, NEXT PAYMENT DATE, AMOUNT DUE, FILE NAME are from this host's mnemospark SQLite catalog",
|
|
2993
|
+
"mnemospark cloud only stores the OBJECT-KEY for privacy"
|
|
2994
|
+
];
|
|
2995
|
+
}
|
|
2981
2996
|
async function prepareRows(objects, walletAddress, datastore, now) {
|
|
2982
2997
|
const sorted = [...objects].sort((a, b) => {
|
|
2983
2998
|
const ta = a.last_modified ? Date.parse(a.last_modified) : Number.NaN;
|
|
@@ -3000,9 +3015,9 @@ async function prepareRows(objects, walletAddress, datastore, now) {
|
|
|
3000
3015
|
const friendly = await datastore.findLatestFriendlyNameForObjectKey(walletAddress, obj.key);
|
|
3001
3016
|
const cp = await datastore.findCronAndPaymentForObjectKey(walletAddress, obj.key);
|
|
3002
3017
|
const sizeStr = formatBytesForDisplay(obj.size_bytes);
|
|
3003
|
-
const s3time = formatLsTimeFieldUtc(obj.last_modified, now);
|
|
3018
|
+
const s3time = formatLsTimeFieldUtc(obj.last_modified, now, LS_S3_COL_WIDTH);
|
|
3004
3019
|
let cronIdDisp = null;
|
|
3005
|
-
let nextRun = " - ".slice(0,
|
|
3020
|
+
let nextRun = " - ".slice(0, LS_NEXT_COL_WIDTH).padEnd(LS_NEXT_COL_WIDTH, " ");
|
|
3006
3021
|
let payCell = "";
|
|
3007
3022
|
if (cp) {
|
|
3008
3023
|
cronIdDisp = cp.cronId;
|
|
@@ -3013,10 +3028,6 @@ async function prepareRows(objects, walletAddress, datastore, now) {
|
|
|
3013
3028
|
}
|
|
3014
3029
|
const nameRaw = friendly ? `${friendly} (${obj.key})` : obj.key;
|
|
3015
3030
|
rows.push({
|
|
3016
|
-
perm: "----------",
|
|
3017
|
-
ln: " 1",
|
|
3018
|
-
user: "- ",
|
|
3019
|
-
grp: "- ",
|
|
3020
3031
|
sizeStr,
|
|
3021
3032
|
s3time,
|
|
3022
3033
|
cronIdRaw: cronIdDisp,
|
|
@@ -3028,68 +3039,57 @@ async function prepareRows(objects, walletAddress, datastore, now) {
|
|
|
3028
3039
|
return rows;
|
|
3029
3040
|
}
|
|
3030
3041
|
function columnWidths(rows) {
|
|
3031
|
-
let sizeW =
|
|
3032
|
-
let
|
|
3033
|
-
let
|
|
3042
|
+
let sizeW = HDR_SIZE.length;
|
|
3043
|
+
let s3W = Math.max(LS_S3_COL_WIDTH, HDR_S3_TIME.length);
|
|
3044
|
+
let nextW = LS_NEXT_COL_WIDTH;
|
|
3045
|
+
let cronW = HDR_CRON_JOB.length;
|
|
3046
|
+
let payW = HDR_AMOUNT_DUE.length;
|
|
3034
3047
|
for (const r of rows) {
|
|
3035
3048
|
sizeW = Math.max(sizeW, r.sizeStr.length);
|
|
3049
|
+
s3W = Math.max(s3W, r.s3time.length);
|
|
3050
|
+
nextW = Math.max(nextW, r.nextRun.length);
|
|
3036
3051
|
const cid = r.cronIdRaw ? truncateEnd(r.cronIdRaw, LS_CRON_ID_MAX) : "";
|
|
3037
3052
|
cronW = Math.max(cronW, cid.length || 1);
|
|
3038
3053
|
payW = Math.max(payW, r.payRaw.length);
|
|
3039
3054
|
}
|
|
3040
|
-
cronW = Math.min(Math.max(cronW,
|
|
3041
|
-
payW = Math.min(Math.max(payW,
|
|
3042
|
-
return { sizeW, cronW, payW };
|
|
3055
|
+
cronW = Math.min(Math.max(cronW, HDR_CRON_JOB.length), LS_CRON_ID_MAX);
|
|
3056
|
+
payW = Math.min(Math.max(payW, HDR_AMOUNT_DUE.length), LS_PAY_DISPLAY_MAX);
|
|
3057
|
+
return { sizeW, s3W, cronW, nextW, payW };
|
|
3043
3058
|
}
|
|
3044
3059
|
function renderRow(r, w) {
|
|
3045
3060
|
const cronPadded = formatCronIdCell(r.cronIdRaw, w.cronW);
|
|
3046
|
-
const sizePadded = r.sizeStr.padStart(w.sizeW, " ");
|
|
3047
|
-
const payPadded = r.payRaw.padStart(w.payW, " ");
|
|
3048
3061
|
return [
|
|
3049
|
-
r.
|
|
3050
|
-
r.
|
|
3051
|
-
r.user,
|
|
3052
|
-
r.grp,
|
|
3053
|
-
sizePadded,
|
|
3054
|
-
r.s3time,
|
|
3062
|
+
r.sizeStr.padStart(w.sizeW, " "),
|
|
3063
|
+
r.s3time.padEnd(w.s3W, " "),
|
|
3055
3064
|
cronPadded,
|
|
3056
|
-
r.nextRun,
|
|
3057
|
-
|
|
3065
|
+
r.nextRun.padEnd(w.nextW, " "),
|
|
3066
|
+
r.payRaw.padStart(w.payW, " "),
|
|
3058
3067
|
r.nameRaw
|
|
3059
3068
|
].join(" ");
|
|
3060
3069
|
}
|
|
3061
3070
|
function renderHeader(w) {
|
|
3062
3071
|
return [
|
|
3063
|
-
"
|
|
3064
|
-
"
|
|
3065
|
-
"
|
|
3066
|
-
"
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
"CRON".padStart(w.cronW, " "),
|
|
3070
|
-
"NEXT ".slice(0, LS_TIME_FIELD_WIDTH).padEnd(LS_TIME_FIELD_WIDTH, " "),
|
|
3071
|
-
"PAY".padStart(w.payW, " "),
|
|
3072
|
-
"NAME"
|
|
3072
|
+
HDR_SIZE.padStart(w.sizeW, " "),
|
|
3073
|
+
HDR_S3_TIME.padEnd(w.s3W, " "),
|
|
3074
|
+
HDR_CRON_JOB.padStart(w.cronW, " "),
|
|
3075
|
+
HDR_NEXT_PAYMENT.padEnd(w.nextW, " "),
|
|
3076
|
+
HDR_AMOUNT_DUE.padStart(w.payW, " "),
|
|
3077
|
+
HDR_FILE_OR_KEY
|
|
3073
3078
|
].join(" ");
|
|
3074
3079
|
}
|
|
3075
3080
|
async function buildMnemosparkLsMessage(result, ctx) {
|
|
3076
3081
|
const now = ctx.now ?? /* @__PURE__ */ new Date();
|
|
3077
3082
|
if (isStorageLsListResponse(result)) {
|
|
3078
|
-
const
|
|
3079
|
-
const legend2 = "Legend: S3_TIME and NEXT are UTC. NEXT is the next cron fire from the stored expression.";
|
|
3080
|
-
const bucketLine = `bucket: ${result.bucket}`;
|
|
3081
|
-
const sortLine = "sorted by: S3 last_modified descending (missing dates last), then key ascending.";
|
|
3083
|
+
const intro = buildLsProseIntro(result.bucket);
|
|
3082
3084
|
if (result.objects.length === 0) {
|
|
3083
|
-
|
|
3084
|
-
return lines.join("\n");
|
|
3085
|
+
return [...intro, "", "No objects in this bucket."].join("\n");
|
|
3085
3086
|
}
|
|
3086
3087
|
const rows = await prepareRows(result.objects, ctx.walletAddress, ctx.datastore, now);
|
|
3087
3088
|
const w2 = columnWidths(rows);
|
|
3088
3089
|
const header2 = renderHeader(w2);
|
|
3089
3090
|
const bodyLines = rows.map((r) => renderRow(r, w2));
|
|
3090
|
-
const totalLine = `total ${String(result.objects.length)}`;
|
|
3091
3091
|
const truncLine = result.is_truncated ? "List truncated; more objects in bucket." : null;
|
|
3092
|
-
const prose2 = [
|
|
3092
|
+
const prose2 = [...intro, ...truncLine ? [truncLine] : []].join("\n");
|
|
3093
3093
|
const fence2 = ["```", [header2, ...bodyLines].join("\n"), "```"].join("\n");
|
|
3094
3094
|
return `${prose2}
|
|
3095
3095
|
|
|
@@ -3101,10 +3101,10 @@ ${fence2}`;
|
|
|
3101
3101
|
);
|
|
3102
3102
|
const cp = await ctx.datastore.findCronAndPaymentForObjectKey(ctx.walletAddress, result.key);
|
|
3103
3103
|
const sizeStr = formatBytesForDisplay(result.size_bytes);
|
|
3104
|
-
const s3time = formatLsTimeFieldUtc(void 0, now);
|
|
3104
|
+
const s3time = formatLsTimeFieldUtc(void 0, now, LS_S3_COL_WIDTH);
|
|
3105
3105
|
let payCell = formatPaymentCell(null, null, LS_PAY_DISPLAY_MAX);
|
|
3106
3106
|
let cronIdDisp = null;
|
|
3107
|
-
let nextRun = " - ".slice(0,
|
|
3107
|
+
let nextRun = " - ".slice(0, LS_NEXT_COL_WIDTH).padEnd(LS_NEXT_COL_WIDTH, " ");
|
|
3108
3108
|
if (cp) {
|
|
3109
3109
|
cronIdDisp = cp.cronId;
|
|
3110
3110
|
nextRun = formatNextCronUtc(cp.schedule, cp.cronStatus, now);
|
|
@@ -3116,10 +3116,6 @@ ${fence2}`;
|
|
|
3116
3116
|
8
|
|
3117
3117
|
);
|
|
3118
3118
|
const prep = {
|
|
3119
|
-
perm: "----------",
|
|
3120
|
-
ln: " 1",
|
|
3121
|
-
user: "- ",
|
|
3122
|
-
grp: "- ",
|
|
3123
3119
|
sizeStr,
|
|
3124
3120
|
s3time,
|
|
3125
3121
|
cronIdRaw: cronIdDisp,
|
|
@@ -3130,11 +3126,10 @@ ${fence2}`;
|
|
|
3130
3126
|
const w = columnWidths([prep]);
|
|
3131
3127
|
const header = renderHeader(w);
|
|
3132
3128
|
const line = renderRow(prep, w);
|
|
3133
|
-
const
|
|
3134
|
-
const legend = "Legend: S3_TIME and NEXT are UTC.";
|
|
3135
|
-
const prose = [disclaimer, legend, `bucket: ${result.bucket}`, ""].join("\n");
|
|
3129
|
+
const prose = buildLsProseIntro(result.bucket).join("\n");
|
|
3136
3130
|
const fence = ["```", [header, line].join("\n"), "```"].join("\n");
|
|
3137
3131
|
return `${prose}
|
|
3132
|
+
|
|
3138
3133
|
${fence}`;
|
|
3139
3134
|
}
|
|
3140
3135
|
|