echoes-vault-opencode 1.1.5 → 1.1.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.
- package/index.ts +48 -0
- package/package.json +1 -1
- package/tui.tsx +5 -0
package/index.ts
CHANGED
|
@@ -19,6 +19,12 @@ type VaultPaths = {
|
|
|
19
19
|
assets: string
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
type VaultStats = {
|
|
23
|
+
totalPages: number
|
|
24
|
+
totalDailyLogs: number
|
|
25
|
+
deprecatedPages: number
|
|
26
|
+
}
|
|
27
|
+
|
|
22
28
|
type EchoesState = {
|
|
23
29
|
version: number
|
|
24
30
|
pluginVersion: string
|
|
@@ -29,6 +35,7 @@ type EchoesState = {
|
|
|
29
35
|
lastStart: string | null
|
|
30
36
|
lastSave: string | null
|
|
31
37
|
}
|
|
38
|
+
stats: VaultStats
|
|
32
39
|
}
|
|
33
40
|
|
|
34
41
|
const STATE_FILENAME = ".opencode/echoes-state.json"
|
|
@@ -53,6 +60,11 @@ const defaultState = (): EchoesState => ({
|
|
|
53
60
|
lastStart: null,
|
|
54
61
|
lastSave: null,
|
|
55
62
|
},
|
|
63
|
+
stats: {
|
|
64
|
+
totalPages: 0,
|
|
65
|
+
totalDailyLogs: 0,
|
|
66
|
+
deprecatedPages: 0,
|
|
67
|
+
},
|
|
56
68
|
})
|
|
57
69
|
|
|
58
70
|
const readState = async (directory: string): Promise<EchoesState> => {
|
|
@@ -88,6 +100,36 @@ const ensureVaultDirs = async (paths: VaultPaths): Promise<void> => {
|
|
|
88
100
|
await fs.mkdir(paths.assets, { recursive: true })
|
|
89
101
|
}
|
|
90
102
|
|
|
103
|
+
const collectStats = async (vaultPaths: VaultPaths): Promise<VaultStats> => {
|
|
104
|
+
let totalPages = 0
|
|
105
|
+
let totalDailyLogs = 0
|
|
106
|
+
let deprecatedPages = 0
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
const pageFiles = (await fs.readdir(vaultPaths.pages)).filter((f) => f.endsWith(".md"))
|
|
110
|
+
totalPages = pageFiles.length
|
|
111
|
+
for (const file of pageFiles) {
|
|
112
|
+
const content = await fs.readFile(path.join(vaultPaths.pages, file), "utf-8")
|
|
113
|
+
if (content.includes("DEPRECATED")) {
|
|
114
|
+
deprecatedPages++
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
} catch { /* pages dir may not exist yet */ }
|
|
118
|
+
|
|
119
|
+
try {
|
|
120
|
+
const dailyFiles = (await fs.readdir(vaultPaths.daily)).filter((f) => f.endsWith(".md"))
|
|
121
|
+
totalDailyLogs = dailyFiles.length
|
|
122
|
+
} catch { /* daily dir may not exist yet */ }
|
|
123
|
+
|
|
124
|
+
return { totalPages, totalDailyLogs, deprecatedPages }
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const updateStats = async (directory: string, vaultPaths: VaultPaths): Promise<void> => {
|
|
128
|
+
const st = await readState(directory)
|
|
129
|
+
st.stats = await collectStats(vaultPaths)
|
|
130
|
+
await writeState(directory, st)
|
|
131
|
+
}
|
|
132
|
+
|
|
91
133
|
const DEFAULT_INDEX = `# EchoesVault Index
|
|
92
134
|
|
|
93
135
|
Welcome to the EchoesVault knowledge base.
|
|
@@ -375,6 +417,7 @@ const OpenCodeEchoes: Plugin = async ({ directory }) => {
|
|
|
375
417
|
state.pluginVersion = await getPluginVersion()
|
|
376
418
|
state.session.started = false
|
|
377
419
|
state.session.saved = false
|
|
420
|
+
state.stats = await collectStats(paths)
|
|
378
421
|
await writeState(directory, state)
|
|
379
422
|
|
|
380
423
|
return {
|
|
@@ -479,6 +522,7 @@ const OpenCodeEchoes: Plugin = async ({ directory }) => {
|
|
|
479
522
|
const st = await readState(directory)
|
|
480
523
|
st.session.saved = true
|
|
481
524
|
st.session.lastSave = new Date().toISOString()
|
|
525
|
+
st.stats = await collectStats(paths)
|
|
482
526
|
await writeState(directory, st)
|
|
483
527
|
|
|
484
528
|
return [
|
|
@@ -506,6 +550,7 @@ const OpenCodeEchoes: Plugin = async ({ directory }) => {
|
|
|
506
550
|
const timestamp = new Date().toISOString()
|
|
507
551
|
const entry = `### Scratchpad — ${timestamp}\n\n${args.logEntry}\n\n`
|
|
508
552
|
await fs.appendFile(dailyFile, entry)
|
|
553
|
+
await updateStats(directory, paths)
|
|
509
554
|
return `✅ Scratchpad note saved to EchoesVault/daily/${today}.md`
|
|
510
555
|
},
|
|
511
556
|
}),
|
|
@@ -587,6 +632,8 @@ const OpenCodeEchoes: Plugin = async ({ directory }) => {
|
|
|
587
632
|
}
|
|
588
633
|
}
|
|
589
634
|
|
|
635
|
+
await updateStats(directory, paths)
|
|
636
|
+
|
|
590
637
|
const action = existed ? "updated" : "created"
|
|
591
638
|
const parts = [`✅ Page ${action}: EchoesVault/pages/${fileName}`]
|
|
592
639
|
if (!existed && args.indexDescription) {
|
|
@@ -602,6 +649,7 @@ const OpenCodeEchoes: Plugin = async ({ directory }) => {
|
|
|
602
649
|
async execute(_args, _ctx) {
|
|
603
650
|
const st = await readState(directory)
|
|
604
651
|
st.initialized = true
|
|
652
|
+
st.stats = await collectStats(paths)
|
|
605
653
|
await writeState(directory, st)
|
|
606
654
|
return "EchoesVault activated."
|
|
607
655
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "echoes-vault-opencode",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.7",
|
|
4
4
|
"description": "EchoesVault — persistent memory plugin for OpenCode. Obsidian-style knowledge base with daily logs, encyclopedia pages, and session resumption.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
package/tui.tsx
CHANGED
|
@@ -14,6 +14,11 @@ type EchoesState = {
|
|
|
14
14
|
lastStart: string | null
|
|
15
15
|
lastSave: string | null
|
|
16
16
|
}
|
|
17
|
+
stats?: {
|
|
18
|
+
totalPages: number
|
|
19
|
+
totalDailyLogs: number
|
|
20
|
+
deprecatedPages: number
|
|
21
|
+
}
|
|
17
22
|
}
|
|
18
23
|
|
|
19
24
|
const STATE_PATH = path.join(process.cwd(), ".opencode", "echoes-state.json")
|