forge-openclaw-plugin 0.2.15 → 0.2.19
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 +39 -4
- package/dist/assets/{board-C_m78kvK.js → board-8L3uX7_O.js} +2 -2
- package/dist/assets/{board-C_m78kvK.js.map → board-8L3uX7_O.js.map} +1 -1
- package/dist/assets/index-Cj1IBH_w.js +36 -0
- package/dist/assets/index-Cj1IBH_w.js.map +1 -0
- package/dist/assets/index-DQT6EbuS.css +1 -0
- package/dist/assets/{motion-CpZvZumD.js → motion-1GAqqi8M.js} +2 -2
- package/dist/assets/{motion-CpZvZumD.js.map → motion-1GAqqi8M.js.map} +1 -1
- package/dist/assets/{table-DtyXTw03.js → table-DBGlgRjk.js} +2 -2
- package/dist/assets/{table-DtyXTw03.js.map → table-DBGlgRjk.js.map} +1 -1
- package/dist/assets/{ui-BXbpiKyS.js → ui-iTluWjC4.js} +2 -2
- package/dist/assets/{ui-BXbpiKyS.js.map → ui-iTluWjC4.js.map} +1 -1
- package/dist/assets/{vendor-QBH6qVEe.js → vendor-BvM2F9Dp.js} +151 -81
- package/dist/assets/vendor-BvM2F9Dp.js.map +1 -0
- package/dist/assets/{viz-w-IMeueL.js → viz-CNeunkfu.js} +2 -2
- package/dist/assets/{viz-w-IMeueL.js.map → viz-CNeunkfu.js.map} +1 -1
- package/dist/index.html +8 -8
- package/dist/openclaw/local-runtime.js +142 -9
- package/dist/openclaw/parity.js +1 -0
- package/dist/openclaw/plugin-entry-shared.js +7 -1
- package/dist/openclaw/routes.js +7 -0
- package/dist/openclaw/tools.js +198 -16
- package/dist/server/app.js +2615 -251
- package/dist/server/managers/platform/secrets-manager.js +44 -1
- package/dist/server/managers/runtime.js +3 -1
- package/dist/server/openapi.js +2212 -170
- package/dist/server/repositories/calendar.js +1101 -0
- package/dist/server/repositories/deleted-entities.js +10 -2
- package/dist/server/repositories/habits.js +358 -0
- package/dist/server/repositories/notes.js +161 -28
- package/dist/server/repositories/projects.js +45 -13
- package/dist/server/repositories/rewards.js +176 -6
- package/dist/server/repositories/settings.js +47 -5
- package/dist/server/repositories/task-runs.js +46 -10
- package/dist/server/repositories/tasks.js +25 -9
- package/dist/server/repositories/weekly-reviews.js +109 -0
- package/dist/server/repositories/work-adjustments.js +105 -0
- package/dist/server/services/calendar-runtime.js +1301 -0
- package/dist/server/services/context.js +16 -6
- package/dist/server/services/dashboard.js +6 -3
- package/dist/server/services/entity-crud.js +116 -3
- package/dist/server/services/gamification.js +66 -18
- package/dist/server/services/insights.js +2 -1
- package/dist/server/services/projects.js +32 -8
- package/dist/server/services/reviews.js +17 -2
- package/dist/server/services/work-time.js +27 -0
- package/dist/server/types.js +1069 -45
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/server/migrations/003_habits.sql +30 -0
- package/server/migrations/004_habit_links.sql +8 -0
- package/server/migrations/005_habit_psyche_links.sql +24 -0
- package/server/migrations/006_work_adjustments.sql +14 -0
- package/server/migrations/007_weekly_review_closures.sql +17 -0
- package/server/migrations/008_calendar_execution.sql +147 -0
- package/server/migrations/009_true_calendar_events.sql +195 -0
- package/server/migrations/010_calendar_selection_state.sql +6 -0
- package/server/migrations/011_calendar_timezone_backfill.sql +11 -0
- package/server/migrations/012_work_block_ranges.sql +7 -0
- package/server/migrations/013_microsoft_local_auth_settings.sql +8 -0
- package/server/migrations/014_note_tags_and_ephemeral.sql +8 -0
- package/skills/forge-openclaw/SKILL.md +130 -10
- package/skills/forge-openclaw/cron_jobs.md +395 -0
- package/dist/assets/index-BWtLtXwb.js +0 -36
- package/dist/assets/index-BWtLtXwb.js.map +0 -1
- package/dist/assets/index-Dp5GXY_z.css +0 -1
- package/dist/assets/vendor-QBH6qVEe.js.map +0 -1
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
import { createHash, randomBytes, timingSafeEqual } from "node:crypto";
|
|
1
|
+
import { createCipheriv, createDecipheriv, createHash, randomBytes, timingSafeEqual } from "node:crypto";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
2
4
|
import { AbstractManager } from "../base.js";
|
|
3
5
|
export class SecretsManager extends AbstractManager {
|
|
4
6
|
name = "SecretsManager";
|
|
7
|
+
rootDir = process.cwd();
|
|
8
|
+
cachedKey = null;
|
|
9
|
+
configure(rootDir) {
|
|
10
|
+
this.rootDir = rootDir ?? process.cwd();
|
|
11
|
+
this.cachedKey = null;
|
|
12
|
+
}
|
|
5
13
|
createSecret(prefix) {
|
|
6
14
|
return `${prefix}_${randomBytes(18).toString("hex")}`;
|
|
7
15
|
}
|
|
@@ -16,4 +24,39 @@ export class SecretsManager extends AbstractManager {
|
|
|
16
24
|
}
|
|
17
25
|
return timingSafeEqual(leftBuffer, rightBuffer);
|
|
18
26
|
}
|
|
27
|
+
sealJson(value) {
|
|
28
|
+
const iv = randomBytes(12);
|
|
29
|
+
const cipher = createCipheriv("aes-256-gcm", this.getEncryptionKey(), iv);
|
|
30
|
+
const plaintext = Buffer.from(JSON.stringify(value), "utf8");
|
|
31
|
+
const encrypted = Buffer.concat([cipher.update(plaintext), cipher.final()]);
|
|
32
|
+
const tag = cipher.getAuthTag();
|
|
33
|
+
return [iv.toString("base64"), tag.toString("base64"), encrypted.toString("base64")].join(".");
|
|
34
|
+
}
|
|
35
|
+
openJson(cipherText) {
|
|
36
|
+
const [ivEncoded, tagEncoded, payloadEncoded] = cipherText.split(".");
|
|
37
|
+
if (!ivEncoded || !tagEncoded || !payloadEncoded) {
|
|
38
|
+
throw new Error("Malformed encrypted secret payload");
|
|
39
|
+
}
|
|
40
|
+
const decipher = createDecipheriv("aes-256-gcm", this.getEncryptionKey(), Buffer.from(ivEncoded, "base64"));
|
|
41
|
+
decipher.setAuthTag(Buffer.from(tagEncoded, "base64"));
|
|
42
|
+
const decrypted = Buffer.concat([
|
|
43
|
+
decipher.update(Buffer.from(payloadEncoded, "base64")),
|
|
44
|
+
decipher.final()
|
|
45
|
+
]);
|
|
46
|
+
return JSON.parse(decrypted.toString("utf8"));
|
|
47
|
+
}
|
|
48
|
+
getEncryptionKey() {
|
|
49
|
+
if (this.cachedKey) {
|
|
50
|
+
return this.cachedKey;
|
|
51
|
+
}
|
|
52
|
+
const keyPath = path.join(this.rootDir, "data", ".forge-secrets.key");
|
|
53
|
+
mkdirSync(path.dirname(keyPath), { recursive: true });
|
|
54
|
+
if (!existsSync(keyPath)) {
|
|
55
|
+
writeFileSync(keyPath, randomBytes(32).toString("base64"), { encoding: "utf8", mode: 0o600 });
|
|
56
|
+
}
|
|
57
|
+
const encoded = readFileSync(keyPath, "utf8").trim();
|
|
58
|
+
const rawKey = Buffer.from(encoded, "base64");
|
|
59
|
+
this.cachedKey = rawKey.length === 32 ? rawKey : createHash("sha256").update(rawKey).digest();
|
|
60
|
+
return this.cachedKey;
|
|
61
|
+
}
|
|
19
62
|
}
|
|
@@ -17,9 +17,11 @@ import { ExternalServiceManager } from "./platform/external-service-manager.js";
|
|
|
17
17
|
import { SearchIndexManager } from "./platform/search-index-manager.js";
|
|
18
18
|
export function createManagerRuntime(options = {}) {
|
|
19
19
|
const configuration = new ConfigurationManager();
|
|
20
|
+
const runtimeConfig = configuration.readRuntimeConfig({ dataRoot: options.dataRoot });
|
|
20
21
|
const database = new DatabaseManager();
|
|
21
|
-
database.configure(
|
|
22
|
+
database.configure(runtimeConfig.dataRoot);
|
|
22
23
|
const secrets = new SecretsManager();
|
|
24
|
+
secrets.configure(runtimeConfig.dataRoot ?? process.cwd());
|
|
23
25
|
const transaction = new TransactionManager();
|
|
24
26
|
const migration = new MigrationManager();
|
|
25
27
|
const storage = new StorageManager();
|