@biaoo/tiangong-wiki 0.2.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/LICENSE +21 -0
- package/README.md +167 -0
- package/README.zh-CN.md +167 -0
- package/SKILL.md +116 -0
- package/agents/openai.yaml +4 -0
- package/assets/config.example.env +18 -0
- package/assets/templates/achievement.md +32 -0
- package/assets/templates/bridge.md +33 -0
- package/assets/templates/concept.md +47 -0
- package/assets/templates/faq.md +31 -0
- package/assets/templates/lesson.md +31 -0
- package/assets/templates/method.md +31 -0
- package/assets/templates/misconception.md +35 -0
- package/assets/templates/person.md +31 -0
- package/assets/templates/research-note.md +34 -0
- package/assets/templates/resume.md +34 -0
- package/assets/templates/source-summary.md +35 -0
- package/assets/vllm/qwen3_5_openai_developer.jinja +182 -0
- package/assets/wiki.config.default.json +193 -0
- package/dist/commands/check-config.js +77 -0
- package/dist/commands/create.js +32 -0
- package/dist/commands/daemon.js +186 -0
- package/dist/commands/dashboard.js +112 -0
- package/dist/commands/doctor.js +22 -0
- package/dist/commands/export-graph.js +28 -0
- package/dist/commands/export-index.js +31 -0
- package/dist/commands/find.js +36 -0
- package/dist/commands/fts.js +32 -0
- package/dist/commands/graph.js +35 -0
- package/dist/commands/init.js +48 -0
- package/dist/commands/lint.js +35 -0
- package/dist/commands/list.js +28 -0
- package/dist/commands/page-info.js +24 -0
- package/dist/commands/search.js +32 -0
- package/dist/commands/setup.js +15 -0
- package/dist/commands/stat.js +20 -0
- package/dist/commands/sync.js +38 -0
- package/dist/commands/template.js +71 -0
- package/dist/commands/type.js +88 -0
- package/dist/commands/vault.js +64 -0
- package/dist/core/agent.js +201 -0
- package/dist/core/cli-env.js +129 -0
- package/dist/core/codex-workflow.js +233 -0
- package/dist/core/config.js +126 -0
- package/dist/core/db.js +292 -0
- package/dist/core/embedding.js +104 -0
- package/dist/core/frontmatter.js +287 -0
- package/dist/core/indexer.js +241 -0
- package/dist/core/onboarding.js +967 -0
- package/dist/core/page-files.js +91 -0
- package/dist/core/paths.js +161 -0
- package/dist/core/presenters.js +23 -0
- package/dist/core/query.js +58 -0
- package/dist/core/runtime.js +20 -0
- package/dist/core/sync.js +235 -0
- package/dist/core/synology.js +412 -0
- package/dist/core/template-evolution.js +38 -0
- package/dist/core/vault-processing.js +742 -0
- package/dist/core/vault.js +594 -0
- package/dist/core/workflow-context.js +188 -0
- package/dist/core/workflow-result.js +162 -0
- package/dist/core/workspace-bootstrap.js +30 -0
- package/dist/core/workspace-skills.js +220 -0
- package/dist/daemon/client.js +147 -0
- package/dist/daemon/server.js +807 -0
- package/dist/daemon/state.js +53 -0
- package/dist/dashboard/assets/index-1FgAUZ28.css +1 -0
- package/dist/dashboard/assets/index-6A0PWT4X.js +154 -0
- package/dist/dashboard/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
- package/dist/dashboard/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
- package/dist/dashboard/assets/jetbrains-mono-cyrillic-700-normal-BWTpRfYl.woff2 +0 -0
- package/dist/dashboard/assets/jetbrains-mono-cyrillic-700-normal-CEoEElIJ.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
- package/dist/dashboard/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
- package/dist/dashboard/assets/jetbrains-mono-greek-700-normal-C6CZE3T8.woff2 +0 -0
- package/dist/dashboard/assets/jetbrains-mono-greek-700-normal-DEigVDxa.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/dist/dashboard/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- package/dist/dashboard/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2 +0 -0
- package/dist/dashboard/assets/jetbrains-mono-latin-700-normal-D3wTyLJW.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
- package/dist/dashboard/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
- package/dist/dashboard/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-latin-ext-700-normal-CZipNAKV.woff2 +0 -0
- package/dist/dashboard/assets/jetbrains-mono-latin-ext-700-normal-CxPITLHs.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
- package/dist/dashboard/assets/jetbrains-mono-vietnamese-700-normal-BDLVIk2r.woff +0 -0
- package/dist/dashboard/assets/space-grotesk-latin-400-normal-BnQMeOim.woff +0 -0
- package/dist/dashboard/assets/space-grotesk-latin-400-normal-CJ-V5oYT.woff2 +0 -0
- package/dist/dashboard/assets/space-grotesk-latin-500-normal-CNSSEhBt.woff +0 -0
- package/dist/dashboard/assets/space-grotesk-latin-500-normal-lFbtlQH6.woff2 +0 -0
- package/dist/dashboard/assets/space-grotesk-latin-700-normal-CwsQ-cCU.woff +0 -0
- package/dist/dashboard/assets/space-grotesk-latin-700-normal-RjhwGPKo.woff2 +0 -0
- package/dist/dashboard/assets/space-grotesk-latin-ext-400-normal-CfP_5XZW.woff2 +0 -0
- package/dist/dashboard/assets/space-grotesk-latin-ext-400-normal-DRPE3kg4.woff +0 -0
- package/dist/dashboard/assets/space-grotesk-latin-ext-500-normal-3dgZTiw9.woff +0 -0
- package/dist/dashboard/assets/space-grotesk-latin-ext-500-normal-DUe3BAxM.woff2 +0 -0
- package/dist/dashboard/assets/space-grotesk-latin-ext-700-normal-BQnZhY3m.woff2 +0 -0
- package/dist/dashboard/assets/space-grotesk-latin-ext-700-normal-HVCqSBdx.woff +0 -0
- package/dist/dashboard/assets/space-grotesk-vietnamese-400-normal-B7xT_GF5.woff2 +0 -0
- package/dist/dashboard/assets/space-grotesk-vietnamese-400-normal-BIWiOVfw.woff +0 -0
- package/dist/dashboard/assets/space-grotesk-vietnamese-500-normal-BTqKIpxg.woff +0 -0
- package/dist/dashboard/assets/space-grotesk-vietnamese-500-normal-BmEvtly_.woff2 +0 -0
- package/dist/dashboard/assets/space-grotesk-vietnamese-700-normal-DMty7AZE.woff2 +0 -0
- package/dist/dashboard/assets/space-grotesk-vietnamese-700-normal-Duxec5Rn.woff +0 -0
- package/dist/dashboard/index.html +18 -0
- package/dist/index.js +86 -0
- package/dist/operations/dashboard.js +1231 -0
- package/dist/operations/export.js +110 -0
- package/dist/operations/query.js +649 -0
- package/dist/operations/type-template.js +210 -0
- package/dist/operations/write.js +143 -0
- package/dist/types/config.js +1 -0
- package/dist/types/page.js +1 -0
- package/dist/utils/case.js +22 -0
- package/dist/utils/errors.js +26 -0
- package/dist/utils/fs.js +77 -0
- package/dist/utils/output.js +33 -0
- package/dist/utils/process.js +60 -0
- package/dist/utils/segmenter.js +24 -0
- package/dist/utils/slug.js +10 -0
- package/dist/utils/time.js +24 -0
- package/package.json +64 -0
- package/references/cli-interface.md +312 -0
- package/references/env.md +122 -0
- package/references/template-design-guide.md +271 -0
- package/references/vault-to-wiki-instruction.md +110 -0
- package/references/wiki-maintenance-instruction.md +190 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { AppError } from "../utils/errors.js";
|
|
2
|
+
import { resolveRuntimePaths } from "../core/paths.js";
|
|
3
|
+
import { isDaemonProcessRunning, readDaemonPid, readDaemonState } from "./state.js";
|
|
4
|
+
function buildBaseUrl(endpoint) {
|
|
5
|
+
return `http://${endpoint.host}:${endpoint.port}`;
|
|
6
|
+
}
|
|
7
|
+
async function fetchJson(input, init, timeoutMs) {
|
|
8
|
+
const controller = new AbortController();
|
|
9
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
10
|
+
try {
|
|
11
|
+
const response = await fetch(input, {
|
|
12
|
+
...init,
|
|
13
|
+
signal: controller.signal,
|
|
14
|
+
});
|
|
15
|
+
const rawText = await response.text();
|
|
16
|
+
const payload = rawText ? JSON.parse(rawText) : null;
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
const details = payload && typeof payload === "object" && payload !== null && "details" in payload
|
|
19
|
+
? payload.details
|
|
20
|
+
: { status: response.status };
|
|
21
|
+
const type = payload && typeof payload === "object" && payload !== null && "type" in payload
|
|
22
|
+
? String(payload.type)
|
|
23
|
+
: "runtime";
|
|
24
|
+
const message = payload && typeof payload === "object" && payload !== null && "error" in payload
|
|
25
|
+
? String(payload.error)
|
|
26
|
+
: `Daemon request failed with HTTP ${response.status}`;
|
|
27
|
+
throw new AppError(message, type === "config" || type === "runtime" || type === "not_found" || type === "not_configured"
|
|
28
|
+
? type
|
|
29
|
+
: "runtime", details);
|
|
30
|
+
}
|
|
31
|
+
return payload;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (error instanceof AppError) {
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
38
|
+
throw new AppError(`Daemon request timed out after ${timeoutMs}ms`, "runtime");
|
|
39
|
+
}
|
|
40
|
+
throw new AppError(error instanceof Error ? error.message : String(error), "runtime");
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
clearTimeout(timeout);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function probeEndpoint(endpoint) {
|
|
47
|
+
const payload = await fetchJson(`${buildBaseUrl(endpoint)}/health`, { method: "GET" }, 500);
|
|
48
|
+
return (payload.ok === true &&
|
|
49
|
+
payload.service === "tiangong-wiki-daemon" &&
|
|
50
|
+
payload.host === endpoint.host &&
|
|
51
|
+
payload.port === endpoint.port &&
|
|
52
|
+
(endpoint.pid === null || payload.pid === endpoint.pid));
|
|
53
|
+
}
|
|
54
|
+
export async function inspectDaemonAvailability(env = process.env) {
|
|
55
|
+
const paths = resolveRuntimePaths(env);
|
|
56
|
+
const state = readDaemonState(paths.daemonStatePath);
|
|
57
|
+
const pid = state?.pid ?? readDaemonPid(paths.daemonPidPath);
|
|
58
|
+
if (!isDaemonProcessRunning(pid)) {
|
|
59
|
+
return {
|
|
60
|
+
status: "stopped",
|
|
61
|
+
endpoint: null,
|
|
62
|
+
pid,
|
|
63
|
+
state,
|
|
64
|
+
reason: "no_running_process",
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (!state) {
|
|
68
|
+
return {
|
|
69
|
+
status: "degraded",
|
|
70
|
+
endpoint: null,
|
|
71
|
+
pid,
|
|
72
|
+
state: null,
|
|
73
|
+
reason: "missing_state",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const endpoint = {
|
|
77
|
+
pid,
|
|
78
|
+
host: state.host,
|
|
79
|
+
port: state.port,
|
|
80
|
+
state,
|
|
81
|
+
};
|
|
82
|
+
try {
|
|
83
|
+
const healthy = await probeEndpoint(endpoint);
|
|
84
|
+
return {
|
|
85
|
+
status: healthy ? "healthy" : "degraded",
|
|
86
|
+
endpoint: healthy ? endpoint : null,
|
|
87
|
+
pid,
|
|
88
|
+
state,
|
|
89
|
+
reason: healthy ? undefined : "health_check_failed",
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return {
|
|
94
|
+
status: "degraded",
|
|
95
|
+
endpoint: null,
|
|
96
|
+
pid,
|
|
97
|
+
state,
|
|
98
|
+
reason: "health_check_failed",
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function buildUrl(endpoint, routePath, query) {
|
|
103
|
+
const url = new URL(`${buildBaseUrl(endpoint)}${routePath}`);
|
|
104
|
+
if (query) {
|
|
105
|
+
for (const [key, value] of Object.entries(query)) {
|
|
106
|
+
if (value === undefined || value === null) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
url.searchParams.set(key, String(value));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return url.toString();
|
|
113
|
+
}
|
|
114
|
+
export async function requestDaemonJson(options) {
|
|
115
|
+
let endpoint = options.endpoint ?? null;
|
|
116
|
+
if (!endpoint) {
|
|
117
|
+
const availability = await inspectDaemonAvailability(options.env);
|
|
118
|
+
if (availability.status !== "healthy" || !availability.endpoint) {
|
|
119
|
+
throw new AppError("Wiki daemon is not healthy", "runtime", availability);
|
|
120
|
+
}
|
|
121
|
+
endpoint = availability.endpoint;
|
|
122
|
+
}
|
|
123
|
+
return fetchJson(buildUrl(endpoint, options.path, options.query), {
|
|
124
|
+
method: options.method,
|
|
125
|
+
headers: options.body === undefined ? undefined : { "content-type": "application/json" },
|
|
126
|
+
body: options.body === undefined ? undefined : JSON.stringify(options.body),
|
|
127
|
+
}, 5_000);
|
|
128
|
+
}
|
|
129
|
+
function warnReadFallback(availability) {
|
|
130
|
+
const location = availability.state
|
|
131
|
+
? `${availability.state.host}:${availability.state.port}`
|
|
132
|
+
: "unknown daemon endpoint";
|
|
133
|
+
process.stderr.write(`[tiangong-wiki] daemon is running but unhealthy at ${location}; falling back to local read execution.\n`);
|
|
134
|
+
}
|
|
135
|
+
export async function executeServerBackedOperation(options) {
|
|
136
|
+
const availability = await inspectDaemonAvailability(options.env);
|
|
137
|
+
if (availability.status === "healthy" && availability.endpoint) {
|
|
138
|
+
return options.remote(availability.endpoint);
|
|
139
|
+
}
|
|
140
|
+
if (availability.status === "degraded") {
|
|
141
|
+
if (options.kind === "write") {
|
|
142
|
+
throw new AppError("Wiki daemon is running but unavailable; refusing to bypass daemon for a write operation.", "runtime", availability);
|
|
143
|
+
}
|
|
144
|
+
warnReadFallback(availability);
|
|
145
|
+
}
|
|
146
|
+
return options.local();
|
|
147
|
+
}
|