oh-my-llmwikimode 1.2.0 → 1.4.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/bin/llmwiki.js +110 -14
- package/docs/CODEX_INTEGRATION_BRIDGE.md +28 -6
- package/docs/KNOWLEDGE_FOLDER_TAXONOMY.md +106 -0
- package/docs/KNOWLEDGE_UX_DASHBOARD_CONTRACT.md +111 -0
- package/docs/KNOWLEDGE_UX_MIGRATION_NOTES.md +43 -0
- package/docs/SCOPE_LOCK.md +69 -45
- package/docs/design/EOS_AS_INDEPENDENT_SYSTEM.md +75 -0
- package/docs/design/EOS_CHAT_HOME_IA.md +11 -4
- package/docs/design/EOS_CHAT_OPERATING_LOOP.md +10 -3
- package/docs/design/EOS_LLMWIKI_ADAPTER_CONTRACT_MVP.md +96 -0
- package/docs/design/EOS_LLMWIKI_SEPARATION_ROADMAP.md +39 -0
- package/docs/design/EOS_SIDE_REVIEW_IA.md +2 -1
- package/docs/design/EOS_VISUAL_SCREENSHOT_HARNESS.md +4 -3
- package/docs/design/README.md +23 -10
- package/docs/eos-workspace-boundary-mvp.md +33 -2
- package/package.json +2 -1
- package/src/agent/librarian/memory.js +1 -1
- package/src/agent/librarian/scanner.js +1 -2
- package/src/agent/llm/opencode-go-provider.js +1 -1
- package/src/codex/bridge.js +18 -2
- package/src/codex/hud-install.js +261 -0
- package/src/codex/presence.js +97 -20
- package/src/daemon.js +14 -9
- package/src/eos/academy/inject.js +8 -4
- package/src/eos/academy/sharing.js +2 -2
- package/src/eos/discord/interaction-router.js +10 -6
- package/src/eos/external-workers/schema.js +2 -2
- package/src/eos/graph/service.js +12 -12
- package/src/eos/hermes/skill-generator.js +2 -2
- package/src/eos/home.js +55 -12
- package/src/eos/http/app.js +16 -3
- package/src/eos/http/routes/agent.js +3 -3
- package/src/eos/http/routes/librarian.js +2 -2
- package/src/eos/http/routes/qa.js +2 -2
- package/src/eos/http/routes/wiki-process.js +8 -6
- package/src/eos/librarian/service.js +11 -8
- package/src/eos/public/cli.js +9 -0
- package/src/eos/public/daemon-approval.js +3 -0
- package/src/eos/public/daemon-core.js +4 -0
- package/src/eos/public/daemon-discord.js +1 -0
- package/src/eos/public/daemon-librarian.js +1 -0
- package/src/eos/public/home.js +1 -0
- package/src/eos/public/librarian-runtime.js +3 -0
- package/src/eos/public/provider.js +1 -0
- package/src/eos/research/draft-generator.js +2 -2
- package/src/eos/search/service.js +15 -34
- package/src/eos/visual-qa/accessibility.js +7 -0
- package/src/eos/visual-qa/screenshot-harness.js +7 -0
- package/src/eos/workspace/static/app.js +148 -0
- package/src/eos/workspace/static/index.html +64 -0
- package/src/eos/workspace/static/styles.css +262 -0
- package/src/eos/workspace-boundary/side-review-workflow.js +3 -0
- package/src/eos/workspace-boundary/wiki-adapter.js +49 -130
- package/src/llmwiki/eos-adapter.js +342 -0
- package/src/wiki/browser-data.js +1 -1
- package/src/wiki/classification-suggestions.js +25 -12
- package/src/wiki/context.js +6 -3
- package/src/wiki/ingest.js +1 -0
- package/src/wiki/project-dashboard.js +193 -0
- package/src/wiki/project-identity.js +57 -0
- package/src/wiki/save-routing.js +133 -1
- package/src/wiki/store.js +44 -18
package/bin/llmwiki.js
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
buildCodexPresenceStatus,
|
|
14
14
|
launchCodexPresenceHudTmux,
|
|
15
15
|
} from "../src/codex/presence.js";
|
|
16
|
+
import { installCodexHudAutostart } from "../src/codex/hud-install.js";
|
|
16
17
|
import { buildCuratorBrowserData } from "../src/curator/browser-data.js";
|
|
17
18
|
import { proposeConsolidation, readCuratorQueue, suggestLessonCandidate } from "../src/curator/queue.js";
|
|
18
19
|
import { generateWeeklyDigest, getDigest, listDigests } from "../src/librarian/weekly-digest.js";
|
|
@@ -37,6 +38,8 @@ import { buildIndex, ensureWikiStructure, getWikiPaths, promoteEntry, rejectEntr
|
|
|
37
38
|
import { queryWiki } from "../src/wiki/query.js";
|
|
38
39
|
import { buildWikiContext } from "../src/wiki/context.js";
|
|
39
40
|
import { recommendWikiContext } from "../src/wiki/context-trigger.js";
|
|
41
|
+
import { buildProjectDashboard, writeProjectDashboard } from "../src/wiki/project-dashboard.js";
|
|
42
|
+
import { CANONICAL_PROJECT_SLUG } from "../src/wiki/project-identity.js";
|
|
40
43
|
import { routeWikiSave } from "../src/wiki/save-routing.js";
|
|
41
44
|
import {
|
|
42
45
|
appendSearchFailure,
|
|
@@ -66,7 +69,6 @@ import {
|
|
|
66
69
|
updateSemanticIndex,
|
|
67
70
|
} from "../src/wiki/semantic-index.js";
|
|
68
71
|
import { semanticSearch } from "../src/wiki/semantic-search.js";
|
|
69
|
-
import { SearchService } from "../src/eos/search/service.js";
|
|
70
72
|
import {
|
|
71
73
|
applyClassification,
|
|
72
74
|
getClassificationSuggestion,
|
|
@@ -79,7 +81,9 @@ import {
|
|
|
79
81
|
importExternalWorkerReceipt,
|
|
80
82
|
listExternalWorkerDispatches,
|
|
81
83
|
listExternalWorkerProfiles,
|
|
82
|
-
|
|
84
|
+
readExternalWorkerArtifacts,
|
|
85
|
+
SearchService,
|
|
86
|
+
} from "../src/eos/public/cli.js";
|
|
83
87
|
import {
|
|
84
88
|
listLibrarianReports,
|
|
85
89
|
runLibrarianOrchestration,
|
|
@@ -102,11 +106,11 @@ const COMMANDS = {
|
|
|
102
106
|
},
|
|
103
107
|
status: {
|
|
104
108
|
usage: "llmwiki status [--format hud|--json] [options]",
|
|
105
|
-
description: "Show Wiki Mode presence status for Codex-friendly local integrations.",
|
|
109
|
+
description: "Show Oh My LLM Wiki Mode presence status for Codex-friendly local integrations.",
|
|
106
110
|
},
|
|
107
111
|
hud: {
|
|
108
112
|
usage: "llmwiki hud [--watch|--tmux] [--interval 1] [options]",
|
|
109
|
-
description: "Show a standalone Wiki Mode HUD line without modifying Codex or OMX.",
|
|
113
|
+
description: "Show a standalone Oh My LLM Wiki Mode HUD line without modifying Codex or OMX.",
|
|
110
114
|
},
|
|
111
115
|
query: {
|
|
112
116
|
usage: "llmwiki query [options] <query>",
|
|
@@ -172,6 +176,10 @@ const COMMANDS = {
|
|
|
172
176
|
usage: "llmwiki raw <list|status|validate> [options]",
|
|
173
177
|
description: "List raw contents, show raw statistics, or validate raw directory structure.",
|
|
174
178
|
},
|
|
179
|
+
dashboard: {
|
|
180
|
+
usage: "llmwiki dashboard <generate|preview> [--project oh-my-llmwikimode] [options]",
|
|
181
|
+
description: "Generate or preview a user-facing project dashboard.",
|
|
182
|
+
},
|
|
175
183
|
"lesson-proposal": {
|
|
176
184
|
usage: "llmwiki lesson-proposal <analyze|list|show|apply> [options]",
|
|
177
185
|
description: "Analyze usage events, list proposals, show a proposal, or apply a proposal to create a lesson.",
|
|
@@ -181,11 +189,11 @@ const COMMANDS = {
|
|
|
181
189
|
description: "Analyze drafts, list, show, apply, or reject review-required project classification suggestions.",
|
|
182
190
|
},
|
|
183
191
|
codex: {
|
|
184
|
-
usage: "llmwiki codex <status|skill|write-skill|should-context|context|capture|save> [options]",
|
|
185
|
-
description: "Expose a safe local Codex skill/CLI bridge
|
|
192
|
+
usage: "llmwiki codex <status|skill|write-skill|install-hud|should-context|context|capture|save> [options]",
|
|
193
|
+
description: "Expose a safe local Codex skill/CLI bridge; passive commands are non-mutating, while install-hud is explicit repair.",
|
|
186
194
|
},
|
|
187
195
|
"eos-worker": {
|
|
188
|
-
usage: "llmwiki eos-worker <profiles|dispatch|receipt> [options]",
|
|
196
|
+
usage: "llmwiki eos-worker <status|profiles|dispatch|receipt> [options]",
|
|
189
197
|
description: "Manage artifact-only Eos external worker dispatches and receipts.",
|
|
190
198
|
},
|
|
191
199
|
librarian: {
|
|
@@ -209,15 +217,18 @@ function globalOptionsHelp() {
|
|
|
209
217
|
return [
|
|
210
218
|
"Options:",
|
|
211
219
|
` --wiki-root <path> Wiki root directory (default: ${DEFAULT_WIKI_ROOT})`,
|
|
212
|
-
" --project <name> Target project for ingest/store
|
|
220
|
+
" --project <name> Target project for ingest/store; codex save defaults to knowledge/projects/<name>/",
|
|
213
221
|
" --tags <tags> Comma-separated tags for ingest/todo add",
|
|
214
222
|
" --output-dir <path> Explicit output directory (codex write-skill only)",
|
|
223
|
+
" --codex-home <path> Explicit Codex home for codex install-hud",
|
|
224
|
+
" --use-default-codex-home Allow codex install-hud to write the default CODEX_HOME/~/.codex",
|
|
225
|
+
" --dry-run Preview codex install-hud without writing files",
|
|
215
226
|
" --browser-data Rebuild .system/browser-data.json (rebuild only)",
|
|
216
227
|
" --limit <n> Number of audit entries to print (audit only)",
|
|
217
228
|
" --json Output JSON",
|
|
218
229
|
" --format <format> Output format for supported commands (context, hud)",
|
|
219
|
-
" --watch Continuously refresh the Wiki Mode HUD (hud only)",
|
|
220
|
-
" --tmux Open the Wiki Mode HUD in a tmux/psmux pane (hud only)",
|
|
230
|
+
" --watch Continuously refresh the Oh My LLM Wiki Mode HUD (hud only)",
|
|
231
|
+
" --tmux Open the Oh My LLM Wiki Mode HUD in a tmux/psmux pane (hud only)",
|
|
221
232
|
" --interval <sec> HUD refresh interval in seconds (default: 1)",
|
|
222
233
|
" --related <paths> Comma-separated related entries (curator suggest-lesson)",
|
|
223
234
|
" --entries <paths> Comma-separated entries (curator propose-consolidation)",
|
|
@@ -422,6 +433,9 @@ function parseArgs(argv) {
|
|
|
422
433
|
location: null,
|
|
423
434
|
mode: null,
|
|
424
435
|
outputDir: null,
|
|
436
|
+
codexHome: null,
|
|
437
|
+
useDefaultCodexHome: false,
|
|
438
|
+
dryRun: false,
|
|
425
439
|
packId: null,
|
|
426
440
|
agentProfileId: "main-opencode",
|
|
427
441
|
approvedBy: null,
|
|
@@ -585,6 +599,35 @@ function parseArgs(argv) {
|
|
|
585
599
|
continue;
|
|
586
600
|
}
|
|
587
601
|
|
|
602
|
+
if (token === "--dry-run") {
|
|
603
|
+
parsed.dryRun = true;
|
|
604
|
+
continue;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
if (token === "--codex-home") {
|
|
608
|
+
const codexHome = argv[index + 1];
|
|
609
|
+
if (!codexHome) {
|
|
610
|
+
return { ...parsed, error: "--codex-home requires a path" };
|
|
611
|
+
}
|
|
612
|
+
parsed.codexHome = codexHome;
|
|
613
|
+
index += 1;
|
|
614
|
+
continue;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
if (token === "--use-default-codex-home") {
|
|
618
|
+
parsed.useDefaultCodexHome = true;
|
|
619
|
+
continue;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
if (token.startsWith("--codex-home=")) {
|
|
623
|
+
const codexHome = token.slice("--codex-home=".length);
|
|
624
|
+
if (!codexHome) {
|
|
625
|
+
return { ...parsed, error: "--codex-home requires a path" };
|
|
626
|
+
}
|
|
627
|
+
parsed.codexHome = codexHome;
|
|
628
|
+
continue;
|
|
629
|
+
}
|
|
630
|
+
|
|
588
631
|
if (token === "--limit") {
|
|
589
632
|
const limit = argv[index + 1];
|
|
590
633
|
if (!limit) {
|
|
@@ -749,6 +792,7 @@ function parseArgs(argv) {
|
|
|
749
792
|
continue;
|
|
750
793
|
}
|
|
751
794
|
|
|
795
|
+
|
|
752
796
|
if (token === "--output-dir") {
|
|
753
797
|
const outputDir = argv[index + 1];
|
|
754
798
|
if (!outputDir) {
|
|
@@ -829,7 +873,7 @@ function parseArgs(argv) {
|
|
|
829
873
|
|
|
830
874
|
if (token === "--project") {
|
|
831
875
|
const project = argv[index + 1];
|
|
832
|
-
if (!project) {
|
|
876
|
+
if (!project || project.startsWith("--")) {
|
|
833
877
|
return { ...parsed, error: "--project requires a name" };
|
|
834
878
|
}
|
|
835
879
|
parsed.project = project;
|
|
@@ -1530,6 +1574,28 @@ function runRaw(parsed) {
|
|
|
1530
1574
|
return { success: false, error: `Unknown raw subcommand: ${action}` };
|
|
1531
1575
|
}
|
|
1532
1576
|
|
|
1577
|
+
function runDashboard(parsed) {
|
|
1578
|
+
const action = parsed.args[0] || "preview";
|
|
1579
|
+
const options = {
|
|
1580
|
+
project: parsed.project || CANONICAL_PROJECT_SLUG,
|
|
1581
|
+
};
|
|
1582
|
+
|
|
1583
|
+
if (action === "preview") {
|
|
1584
|
+
const result = buildProjectDashboard(parsed.wikiRoot, options);
|
|
1585
|
+
return {
|
|
1586
|
+
...result,
|
|
1587
|
+
output: result.dashboard,
|
|
1588
|
+
message: `Dashboard preview generated for ${result.project}.`,
|
|
1589
|
+
};
|
|
1590
|
+
}
|
|
1591
|
+
|
|
1592
|
+
if (action === "generate") {
|
|
1593
|
+
return writeProjectDashboard(parsed.wikiRoot, options);
|
|
1594
|
+
}
|
|
1595
|
+
|
|
1596
|
+
return { success: false, error: `Unknown dashboard subcommand: ${action}` };
|
|
1597
|
+
}
|
|
1598
|
+
|
|
1533
1599
|
function runSearchFeedback(parsed) {
|
|
1534
1600
|
const action = parsed.args[0] || "list";
|
|
1535
1601
|
|
|
@@ -1745,7 +1811,7 @@ async function runCodex(parsed) {
|
|
|
1745
1811
|
bridge,
|
|
1746
1812
|
message: [
|
|
1747
1813
|
"Codex local bridge is available.",
|
|
1748
|
-
"
|
|
1814
|
+
"Passive commands perform no plugin install, MCP registration, marketplace mutation, config mutation, or auto-push; codex install-hud is explicit repair only.",
|
|
1749
1815
|
].join(" "),
|
|
1750
1816
|
};
|
|
1751
1817
|
}
|
|
@@ -1764,7 +1830,22 @@ async function runCodex(parsed) {
|
|
|
1764
1830
|
return writeCodexSkillBridge(parsed.wikiRoot, parsed.outputDir);
|
|
1765
1831
|
}
|
|
1766
1832
|
|
|
1767
|
-
|
|
1833
|
+
if (action === "install-hud") {
|
|
1834
|
+
if (!parsed.dryRun && !parsed.codexHome && !parsed.useDefaultCodexHome) {
|
|
1835
|
+
return {
|
|
1836
|
+
success: false,
|
|
1837
|
+
error:
|
|
1838
|
+
"codex install-hud writes Codex hook/config files; pass --codex-home <path> or --use-default-codex-home for non-dry-run installs.",
|
|
1839
|
+
};
|
|
1840
|
+
}
|
|
1841
|
+
return installCodexHudAutostart({
|
|
1842
|
+
wikiRoot: parsed.wikiRoot,
|
|
1843
|
+
codexHome: parsed.codexHome,
|
|
1844
|
+
dryRun: parsed.dryRun,
|
|
1845
|
+
});
|
|
1846
|
+
}
|
|
1847
|
+
|
|
1848
|
+
if (action === "should-context") {
|
|
1768
1849
|
const query = parsed.query || parsed.args.slice(1).join(" ").trim();
|
|
1769
1850
|
if (!query) {
|
|
1770
1851
|
return { success: false, error: "codex should-context requires --query or a positional query" };
|
|
@@ -1876,7 +1957,7 @@ async function runCodex(parsed) {
|
|
|
1876
1957
|
return { success: false, error: "codex save requires --summary or a positional summary" };
|
|
1877
1958
|
}
|
|
1878
1959
|
|
|
1879
|
-
const location = parsed.location || "drafts";
|
|
1960
|
+
const location = parsed.location || (parsed.project ? "knowledge" : "drafts");
|
|
1880
1961
|
if (!["drafts", "knowledge", "reviewing"].includes(location)) {
|
|
1881
1962
|
return { success: false, error: "codex save --location must be drafts, knowledge, or reviewing" };
|
|
1882
1963
|
}
|
|
@@ -1963,6 +2044,20 @@ async function runEosWorker(parsed) {
|
|
|
1963
2044
|
};
|
|
1964
2045
|
}
|
|
1965
2046
|
|
|
2047
|
+
if (area === "status") {
|
|
2048
|
+
const artifacts = await readExternalWorkerArtifacts(parsed.wikiRoot);
|
|
2049
|
+
return {
|
|
2050
|
+
success: true,
|
|
2051
|
+
runtime_status: "artifact_only",
|
|
2052
|
+
wikiRoot: parsed.wikiRoot,
|
|
2053
|
+
summary: artifacts.summary,
|
|
2054
|
+
paths: artifacts.paths,
|
|
2055
|
+
executed: false,
|
|
2056
|
+
live_execution: false,
|
|
2057
|
+
message: "External worker artifact status loaded; no worker execution performed.",
|
|
2058
|
+
};
|
|
2059
|
+
}
|
|
2060
|
+
|
|
1966
2061
|
if (area === "dispatch") {
|
|
1967
2062
|
if (action === "list") {
|
|
1968
2063
|
return {
|
|
@@ -2067,6 +2162,7 @@ const HANDLERS = {
|
|
|
2067
2162
|
"semantic-search": runSemanticSearch,
|
|
2068
2163
|
"semantic-index": runSemanticIndex,
|
|
2069
2164
|
raw: runRaw,
|
|
2165
|
+
dashboard: runDashboard,
|
|
2070
2166
|
"lesson-proposal": runLessonProposal,
|
|
2071
2167
|
classify: runClassify,
|
|
2072
2168
|
codex: runCodex,
|
|
@@ -13,7 +13,10 @@ path for other users.
|
|
|
13
13
|
- Local-first only.
|
|
14
14
|
- Read-only by default.
|
|
15
15
|
- Review-required wiki management outputs only.
|
|
16
|
-
-
|
|
16
|
+
- Passive status/context/capture commands do not mutate Codex config.
|
|
17
|
+
- Only the explicit `codex install-hud` repair command may mutate Codex
|
|
18
|
+
hook/config files, and non-dry-run installs require either `--codex-home
|
|
19
|
+
<path>` or `--use-default-codex-home`.
|
|
17
20
|
- No plugin installation.
|
|
18
21
|
- No MCP registration.
|
|
19
22
|
- No marketplace metadata mutation.
|
|
@@ -34,17 +37,18 @@ llmwiki codex capture --wiki-root "<your-wiki-root>" --type solution_candidate -
|
|
|
34
37
|
llmwiki codex save --wiki-root "<your-wiki-root>" --location drafts --summary "<summary>" --details "<details>" --json
|
|
35
38
|
llmwiki codex skill --wiki-root "<your-wiki-root>"
|
|
36
39
|
llmwiki codex write-skill --wiki-root "<your-wiki-root>" --output-dir "<explicit-local-dir>"
|
|
40
|
+
llmwiki codex install-hud --wiki-root "<your-wiki-root>" --codex-home "<your-codex-home>" --dry-run --json
|
|
37
41
|
```
|
|
38
42
|
|
|
39
|
-
## Wiki Mode HUD presence
|
|
43
|
+
## Oh My LLM Wiki Mode HUD presence
|
|
40
44
|
|
|
41
45
|
The Codex bridge also exposes a standalone, non-invasive presence line:
|
|
42
46
|
|
|
43
47
|
```text
|
|
44
|
-
[Wiki Mode] Connected | v1.
|
|
48
|
+
[Oh My LLM Wiki Mode] Connected | v1.2.0 | Review Queue 0
|
|
45
49
|
```
|
|
46
50
|
|
|
47
|
-
Use it when you want a human-readable confirmation that the local Wiki Mode
|
|
51
|
+
Use it when you want a human-readable confirmation that the local Oh My LLM Wiki Mode
|
|
48
52
|
bridge can see the selected wiki root:
|
|
49
53
|
|
|
50
54
|
```bash
|
|
@@ -52,7 +56,7 @@ llmwiki status --wiki-root "<your-wiki-root>" --format hud
|
|
|
52
56
|
llmwiki hud --wiki-root "<your-wiki-root>"
|
|
53
57
|
```
|
|
54
58
|
|
|
55
|
-
For an attached tmux/psmux Codex session, the Wiki Mode HUD can run in its own
|
|
59
|
+
For an attached tmux/psmux Codex session, the Oh My LLM Wiki Mode HUD can run in its own
|
|
56
60
|
small pane without modifying Codex, OMX, or their statusline renderers:
|
|
57
61
|
|
|
58
62
|
```bash
|
|
@@ -62,7 +66,14 @@ llmwiki hud --wiki-root "<your-wiki-root>" --tmux
|
|
|
62
66
|
The Codex plugin scaffold includes a `SessionStart` hook that runs this HUD
|
|
63
67
|
startup path automatically when the plugin is installed and the session is
|
|
64
68
|
inside tmux/psmux. The hook exits silently outside tmux/psmux and skips
|
|
65
|
-
duplicate startup when
|
|
69
|
+
duplicate startup when an `Oh My LLM Wiki Mode HUD` pane already exists.
|
|
70
|
+
The scaffold follows Codex plugin hook discovery rules by declaring
|
|
71
|
+
`"hooks": "./hooks.json"` in `.codex-plugin/plugin.json`; installing/enabling
|
|
72
|
+
the plugin still requires the user to review and trust bundled hooks in Codex.
|
|
73
|
+
The hook command resolves its script from `PLUGIN_ROOT`/`CLAUDE_PLUGIN_ROOT`/
|
|
74
|
+
`CODEX_PLUGIN_ROOT`, not from the active repository working directory, and
|
|
75
|
+
treats HUD import/startup failures as best-effort debug output instead of
|
|
76
|
+
failing the Codex hook.
|
|
66
77
|
|
|
67
78
|
`Review Queue` counts local review-required Wiki Mode artifacts, including
|
|
68
79
|
Codex captures and local curator/graph review cards. This is intentionally
|
|
@@ -120,6 +131,7 @@ user explicitly asks to embed one machine's resolved absolute path.
|
|
|
120
131
|
|
|
121
132
|
- `.codex-plugin/plugin.json`
|
|
122
133
|
- `skills/llmwiki-local-bridge/SKILL.md`
|
|
134
|
+
- `hooks.json`
|
|
123
135
|
- `scripts/llmwiki-codex.ps1`
|
|
124
136
|
- `README.md`
|
|
125
137
|
|
|
@@ -132,3 +144,13 @@ Plugin or MCP integration can be considered later only as a separate, explicit
|
|
|
132
144
|
scope with fresh safety tests. This bridge is the safe starting point and must
|
|
133
145
|
not be expanded into marketplace, account, hosted sync, or hidden execution
|
|
134
146
|
work without a new plan.
|
|
147
|
+
|
|
148
|
+
### Explicit HUD repair command
|
|
149
|
+
|
|
150
|
+
The Codex plugin normally owns HUD autostart through its bundled `SessionStart` hook. If a local Codex hook installation needs repair, use the explicit command below. `--dry-run` previews the files and trust state without writing anything:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
llmwiki codex install-hud --wiki-root "<your-wiki-root>" --codex-home "<your-codex-home>" --dry-run --json
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Without `--dry-run`, the command may write a local Codex hook script, merge `hooks.json`, and add matching trust metadata to `config.toml`. Non-dry-run installs require an explicit target with `--codex-home <path>` or an explicit default-home acknowledgement with `--use-default-codex-home`. It reports `mutates_codex_config: true` so callers never confuse it with passive status/context commands.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# LLM Wiki Project Folder Taxonomy
|
|
2
|
+
|
|
3
|
+
Status: draft migration contract for the Knowledge UX Hygiene + Dashboard
|
|
4
|
+
Ultragoal.
|
|
5
|
+
|
|
6
|
+
## Goal
|
|
7
|
+
|
|
8
|
+
Make project knowledge folders readable for a Korean user while keeping enough
|
|
9
|
+
English signal for automation and cross-tool integrations.
|
|
10
|
+
|
|
11
|
+
Canonical folder labels use this pattern:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
<Korean label>_<English machine hint>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Example:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
개발-진행-기록_dev-history/
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Canonical labels
|
|
24
|
+
|
|
25
|
+
| Current folder | Canonical label | Purpose |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
| `!대시보드` | `!대시보드_dashboard` | User-facing entry point and daily summary |
|
|
28
|
+
| `0_omx 핸드오프` | `0_omx-핸드오프_omx-handoff` | OMX / Codex handoff plans and run instructions |
|
|
29
|
+
| `개발-진행-기록` | `개발-진행-기록_dev-history` | Work logs, roadmap updates, implementation and release history |
|
|
30
|
+
| `개발-진행-기록/로드맵` | `개발-진행-기록_dev-history/로드맵_roadmap` | Roadmaps and planning timeline |
|
|
31
|
+
| `개발-진행-기록/구현-보고` | `개발-진행-기록_dev-history/구현-보고_implementation-reports` | Implementation reports |
|
|
32
|
+
| `개발-진행-기록/검증-로그` | `개발-진행-기록_dev-history/검증-로그_verification-logs` | Verification logs and QA evidence |
|
|
33
|
+
| `개발-진행-기록/릴리즈-로그` | `개발-진행-기록_dev-history/릴리즈-로그_release-logs` | Release logs and publishing notes |
|
|
34
|
+
| `이슈-및-문제` | `이슈-및-문제_issues` | Issues, bugs, active tasks, and improvement proposals |
|
|
35
|
+
| `이슈-및-문제/활성-과제` | `이슈-및-문제_issues/활성-과제_active` | Active work items |
|
|
36
|
+
| `이슈-및-문제/issues` | `이슈-및-문제_issues/버그-이슈_bugs` | Bug reports and defect investigations |
|
|
37
|
+
| `이슈-및-문제/improvements` | `이슈-및-문제_issues/개선-제안_improvements` | Improvement proposals |
|
|
38
|
+
| `아키텍처-및-설계` | `아키텍처-및-설계_architecture-design` | Architecture, design, and decisions |
|
|
39
|
+
| `가이드-및-정책` | `가이드-및-정책_guides-policies` | User guides, policies, and operating models |
|
|
40
|
+
| `완료-보고` | `완료-보고_completion-reports` | Completion reports and milestone summaries |
|
|
41
|
+
| `테스트-및-QA` | `테스트-및-QA_testing-qa` | Test plans and QA checklists |
|
|
42
|
+
| `아카이브` | `아카이브_archive` | Superseded or historical entries |
|
|
43
|
+
| `워크데스크-기능` | `워크데스크-기능_workdesk-features` | Existing Workdesk / Work Harbor feature notes |
|
|
44
|
+
|
|
45
|
+
## Non-destructive migration plan
|
|
46
|
+
|
|
47
|
+
Do not mass-rename folders in the first implementation pass. Renaming first can
|
|
48
|
+
break:
|
|
49
|
+
|
|
50
|
+
- existing markdown links,
|
|
51
|
+
- current `.system/index.json` and `.system/graph.json` references,
|
|
52
|
+
- OpenCode plugin assumptions,
|
|
53
|
+
- Codex bridge search results,
|
|
54
|
+
- user muscle memory.
|
|
55
|
+
|
|
56
|
+
Instead:
|
|
57
|
+
|
|
58
|
+
1. Add a canonical mapping table in code or configuration.
|
|
59
|
+
2. Teach save routing to accept both current and canonical labels.
|
|
60
|
+
3. Generate review-required migration proposals for existing folders.
|
|
61
|
+
4. Provide a safe move command or script that:
|
|
62
|
+
- resolves old and new paths,
|
|
63
|
+
- updates markdown links when possible,
|
|
64
|
+
- records an audit event,
|
|
65
|
+
- runs `llmwiki rebuild --browser-data`,
|
|
66
|
+
- reports changed paths.
|
|
67
|
+
5. Only then allow explicit migration.
|
|
68
|
+
|
|
69
|
+
## Compatibility rules
|
|
70
|
+
|
|
71
|
+
- Current folders remain valid input paths.
|
|
72
|
+
- Canonical labels are preferred for new output once the router is ready.
|
|
73
|
+
- Search should find entries regardless of old or canonical folder names.
|
|
74
|
+
- Curator proposals may suggest moves, but must not move or delete files without
|
|
75
|
+
explicit review.
|
|
76
|
+
- Dashboard links should tolerate both old and canonical paths during transition.
|
|
77
|
+
|
|
78
|
+
## Filename policy preview
|
|
79
|
+
|
|
80
|
+
This taxonomy pairs with a later save-routing story:
|
|
81
|
+
|
|
82
|
+
```text
|
|
83
|
+
YYYY-MM-DD-short-readable-topic.md
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Examples:
|
|
87
|
+
|
|
88
|
+
- `2026-05-27-codex-eos-npm-v1.1.0-release.md`
|
|
89
|
+
- `2026-05-27-knowledge-dashboard-contract.md`
|
|
90
|
+
- `save-routing-devlog-classification-improvement.md`
|
|
91
|
+
|
|
92
|
+
Avoid:
|
|
93
|
+
|
|
94
|
+
- timestamp-only titles,
|
|
95
|
+
- whole conversation titles,
|
|
96
|
+
- random root-level files,
|
|
97
|
+
- mojibake filenames.
|
|
98
|
+
|
|
99
|
+
## Acceptance criteria
|
|
100
|
+
|
|
101
|
+
This taxonomy story is complete when:
|
|
102
|
+
|
|
103
|
+
- The current-to-canonical mapping is documented.
|
|
104
|
+
- The migration path is explicitly non-destructive.
|
|
105
|
+
- Existing OpenCode and Codex usage are named as compatibility constraints.
|
|
106
|
+
- Later stories can implement routing and dashboard generation from this table.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# LLM Wiki Knowledge UX Dashboard Contract
|
|
2
|
+
|
|
3
|
+
Status: draft contract for the Knowledge UX Hygiene + Dashboard Ultragoal.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
This contract defines the first user-facing dashboard slice for the
|
|
8
|
+
`oh-my-llmwikimode` project knowledge area. `llm-wiki-mode` and
|
|
9
|
+
`llmwikimode` remain legacy aliases for runtime inputs. It is intentionally a
|
|
10
|
+
contract first:
|
|
11
|
+
implementation may follow in later Ultragoal stories, but the daily view should
|
|
12
|
+
stay stable enough that a user can check the project without reading the whole
|
|
13
|
+
wiki.
|
|
14
|
+
|
|
15
|
+
## Baseline inventory
|
|
16
|
+
|
|
17
|
+
Snapshot source: local wiki root `C:\Users\USER\Documents\llm-wiki`.
|
|
18
|
+
|
|
19
|
+
- Canonical project area: `knowledge/projects/oh-my-llmwikimode`
|
|
20
|
+
- Legacy project area: `knowledge/projects/llm-wiki-mode` remains readable and
|
|
21
|
+
must not be bulk moved without a review-required migration plan.
|
|
22
|
+
- Markdown entries under the project area: about 177
|
|
23
|
+
- Current top-level project folders:
|
|
24
|
+
- `!대시보드`
|
|
25
|
+
- `0_omx 핸드오프`
|
|
26
|
+
- `가이드-및-정책`
|
|
27
|
+
- `개발-진행-기록`
|
|
28
|
+
- `아카이브`
|
|
29
|
+
- `아키텍처-및-설계`
|
|
30
|
+
- `완료-보고`
|
|
31
|
+
- `워크데스크-기능`
|
|
32
|
+
- `이슈-및-문제`
|
|
33
|
+
- `테스트-및-QA`
|
|
34
|
+
- Current dashboard files:
|
|
35
|
+
- `!대시보드/00-시작-여기.md`
|
|
36
|
+
- `!대시보드/오늘의-작업.md`
|
|
37
|
+
- `!대시보드/로드맵-및-개발-방향.md`
|
|
38
|
+
- `!대시보드/시행착오-및-해결-기록.md`
|
|
39
|
+
- `!대시보드/템플릿/*.md`
|
|
40
|
+
- Current CLI presence: `Wiki Mode Connected | v1.1.0 | Review Queue 128`
|
|
41
|
+
- Current lint baseline: 245 errors and 79 warnings across the broader wiki
|
|
42
|
+
snapshot, mainly missing `title` / `source` / `status` and invalid status enum
|
|
43
|
+
values.
|
|
44
|
+
|
|
45
|
+
## Daily user dashboard fields
|
|
46
|
+
|
|
47
|
+
The dashboard should answer five questions in under one minute:
|
|
48
|
+
|
|
49
|
+
1. What needs attention now?
|
|
50
|
+
2. What changed recently?
|
|
51
|
+
3. What is waiting for review?
|
|
52
|
+
4. Is the wiki healthy enough to trust?
|
|
53
|
+
5. What should I do next?
|
|
54
|
+
|
|
55
|
+
Recommended sections:
|
|
56
|
+
|
|
57
|
+
| Section | User value | Source |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| Today focus | Shows the top 1-3 current actions | Active issues, latest triage, recent completion logs |
|
|
60
|
+
| Recent project changes | Shows latest releases, devlogs, and verification logs | `개발-진행-기록*`, `완료-보고*` |
|
|
61
|
+
| Review queue | Shows review-required candidates and curator proposals | `llmwiki status`, `llmwiki curator list` |
|
|
62
|
+
| Hygiene warnings | Shows lint/encoding/routing risk summary | `llmwiki lint`, hygiene proposal artifacts |
|
|
63
|
+
| Next actions | Shows recommended safe next steps | Current triage + dashboard policy |
|
|
64
|
+
|
|
65
|
+
## Display principles
|
|
66
|
+
|
|
67
|
+
- Korean first, English suffix when it improves machine routing.
|
|
68
|
+
- The user dashboard should hide raw draft noise by default.
|
|
69
|
+
- Dashboard entries should link to deeper documents instead of copying long
|
|
70
|
+
reports.
|
|
71
|
+
- The dashboard should state when a section is generated from stale data.
|
|
72
|
+
- Review-required items must stay visibly review-required.
|
|
73
|
+
|
|
74
|
+
## Non-goals for this dashboard slice
|
|
75
|
+
|
|
76
|
+
- No hosted sync.
|
|
77
|
+
- No account, marketplace, or payment flows.
|
|
78
|
+
- No hidden execution.
|
|
79
|
+
- No automatic deletion, automatic promotion, or automatic merge.
|
|
80
|
+
- No Eos personal assistant or Discord bridge implementation.
|
|
81
|
+
|
|
82
|
+
## Compatibility expectations
|
|
83
|
+
|
|
84
|
+
- Existing OpenCode plugin usage must continue to work.
|
|
85
|
+
- Existing Codex bridge / CLI usage must continue to work.
|
|
86
|
+
- Existing folder names must not be destructively mass-renamed in this first
|
|
87
|
+
slice.
|
|
88
|
+
- Migration to Korean-first English-suffix folder labels should happen through a
|
|
89
|
+
compatibility and proposal layer first.
|
|
90
|
+
|
|
91
|
+
## Completion evidence for this contract
|
|
92
|
+
|
|
93
|
+
The first Ultragoal story is complete when:
|
|
94
|
+
|
|
95
|
+
- The baseline inventory is recorded.
|
|
96
|
+
- The daily dashboard fields are explicitly defined.
|
|
97
|
+
- The current risks are named without mutating existing user documents.
|
|
98
|
+
- The contract is searchable from the project wiki or repo docs.
|
|
99
|
+
|
|
100
|
+
## Regeneration command
|
|
101
|
+
|
|
102
|
+
Later implementation stories can refresh the user dashboard with:
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
llmwiki dashboard generate --project oh-my-llmwikimode
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The command writes a review-required dashboard entry under the project dashboard
|
|
109
|
+
folder and does not delete, promote, merge, or auto-approve source entries.
|
|
110
|
+
Legacy aliases `llm-wiki-mode` and `llmwikimode` are accepted by the CLI and
|
|
111
|
+
route to the canonical project slug.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Knowledge UX Migration Notes
|
|
2
|
+
|
|
3
|
+
These notes explain how to adopt the Korean-first project knowledge UX without
|
|
4
|
+
breaking current OpenCode or Codex bridge usage.
|
|
5
|
+
|
|
6
|
+
## Migration posture
|
|
7
|
+
|
|
8
|
+
- Do not bulk-rename existing project folders first.
|
|
9
|
+
- Keep old paths readable while new writes prefer the bilingual taxonomy from
|
|
10
|
+
`docs/KNOWLEDGE_FOLDER_TAXONOMY.md`.
|
|
11
|
+
- Use `oh-my-llmwikimode` as the canonical project slug for new runtime writes.
|
|
12
|
+
`llm-wiki-mode` and `llmwikimode` are accepted legacy aliases and should be
|
|
13
|
+
routed to the canonical slug instead of creating split project folders.
|
|
14
|
+
- Use router-generated placements for new project knowledge, then let curator
|
|
15
|
+
proposal cards identify old entries that may be moved later.
|
|
16
|
+
- Use dashboard generation as the user's daily entry point instead of asking the
|
|
17
|
+
user to inspect every raw draft.
|
|
18
|
+
|
|
19
|
+
## Safe command sequence
|
|
20
|
+
|
|
21
|
+
```powershell
|
|
22
|
+
node bin/llmwiki.js doctor --wiki-root "C:\Users\USER\Documents\llm-wiki" --json
|
|
23
|
+
node bin/llmwiki.js rebuild --wiki-root "C:\Users\USER\Documents\llm-wiki" --browser-data
|
|
24
|
+
node bin/llmwiki.js dashboard preview --wiki-root "C:\Users\USER\Documents\llm-wiki" --project oh-my-llmwikimode --json
|
|
25
|
+
node bin/llmwiki.js dashboard generate --wiki-root "C:\Users\USER\Documents\llm-wiki" --project oh-my-llmwikimode
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Compatibility smoke may also run the same dashboard preview with
|
|
29
|
+
`--project llm-wiki-mode` and `--project llmwikimode`; both aliases must resolve
|
|
30
|
+
to the canonical project dashboard.
|
|
31
|
+
|
|
32
|
+
## Compatibility checks
|
|
33
|
+
|
|
34
|
+
OpenCode remains compatible because the plugin server entry point and wiki root
|
|
35
|
+
contracts are unchanged. Codex remains compatible because the CLI bridge and HUD
|
|
36
|
+
are non-invasive: they report status, context, and review-required write paths
|
|
37
|
+
without mutating Codex config or the OMX status line.
|
|
38
|
+
|
|
39
|
+
## Current verification evidence
|
|
40
|
+
|
|
41
|
+
- Targeted tests: `node --test test/project-dashboard.test.js test/cli.test.js test/wiki-save-routing.test.js test/lint.test.js test/doctor.test.js test/curator-proposals.test.js`
|
|
42
|
+
- Documentation consistency: `npm run verify:docs`
|
|
43
|
+
- Real wiki checks: `llmwiki rebuild`, `llmwiki query`, `llmwiki doctor`, `llmwiki status`
|