@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.
Files changed (136) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +167 -0
  3. package/README.zh-CN.md +167 -0
  4. package/SKILL.md +116 -0
  5. package/agents/openai.yaml +4 -0
  6. package/assets/config.example.env +18 -0
  7. package/assets/templates/achievement.md +32 -0
  8. package/assets/templates/bridge.md +33 -0
  9. package/assets/templates/concept.md +47 -0
  10. package/assets/templates/faq.md +31 -0
  11. package/assets/templates/lesson.md +31 -0
  12. package/assets/templates/method.md +31 -0
  13. package/assets/templates/misconception.md +35 -0
  14. package/assets/templates/person.md +31 -0
  15. package/assets/templates/research-note.md +34 -0
  16. package/assets/templates/resume.md +34 -0
  17. package/assets/templates/source-summary.md +35 -0
  18. package/assets/vllm/qwen3_5_openai_developer.jinja +182 -0
  19. package/assets/wiki.config.default.json +193 -0
  20. package/dist/commands/check-config.js +77 -0
  21. package/dist/commands/create.js +32 -0
  22. package/dist/commands/daemon.js +186 -0
  23. package/dist/commands/dashboard.js +112 -0
  24. package/dist/commands/doctor.js +22 -0
  25. package/dist/commands/export-graph.js +28 -0
  26. package/dist/commands/export-index.js +31 -0
  27. package/dist/commands/find.js +36 -0
  28. package/dist/commands/fts.js +32 -0
  29. package/dist/commands/graph.js +35 -0
  30. package/dist/commands/init.js +48 -0
  31. package/dist/commands/lint.js +35 -0
  32. package/dist/commands/list.js +28 -0
  33. package/dist/commands/page-info.js +24 -0
  34. package/dist/commands/search.js +32 -0
  35. package/dist/commands/setup.js +15 -0
  36. package/dist/commands/stat.js +20 -0
  37. package/dist/commands/sync.js +38 -0
  38. package/dist/commands/template.js +71 -0
  39. package/dist/commands/type.js +88 -0
  40. package/dist/commands/vault.js +64 -0
  41. package/dist/core/agent.js +201 -0
  42. package/dist/core/cli-env.js +129 -0
  43. package/dist/core/codex-workflow.js +233 -0
  44. package/dist/core/config.js +126 -0
  45. package/dist/core/db.js +292 -0
  46. package/dist/core/embedding.js +104 -0
  47. package/dist/core/frontmatter.js +287 -0
  48. package/dist/core/indexer.js +241 -0
  49. package/dist/core/onboarding.js +967 -0
  50. package/dist/core/page-files.js +91 -0
  51. package/dist/core/paths.js +161 -0
  52. package/dist/core/presenters.js +23 -0
  53. package/dist/core/query.js +58 -0
  54. package/dist/core/runtime.js +20 -0
  55. package/dist/core/sync.js +235 -0
  56. package/dist/core/synology.js +412 -0
  57. package/dist/core/template-evolution.js +38 -0
  58. package/dist/core/vault-processing.js +742 -0
  59. package/dist/core/vault.js +594 -0
  60. package/dist/core/workflow-context.js +188 -0
  61. package/dist/core/workflow-result.js +162 -0
  62. package/dist/core/workspace-bootstrap.js +30 -0
  63. package/dist/core/workspace-skills.js +220 -0
  64. package/dist/daemon/client.js +147 -0
  65. package/dist/daemon/server.js +807 -0
  66. package/dist/daemon/state.js +53 -0
  67. package/dist/dashboard/assets/index-1FgAUZ28.css +1 -0
  68. package/dist/dashboard/assets/index-6A0PWT4X.js +154 -0
  69. package/dist/dashboard/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  70. package/dist/dashboard/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  71. package/dist/dashboard/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
  72. package/dist/dashboard/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
  73. package/dist/dashboard/assets/jetbrains-mono-cyrillic-700-normal-BWTpRfYl.woff2 +0 -0
  74. package/dist/dashboard/assets/jetbrains-mono-cyrillic-700-normal-CEoEElIJ.woff +0 -0
  75. package/dist/dashboard/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  76. package/dist/dashboard/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  77. package/dist/dashboard/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
  78. package/dist/dashboard/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
  79. package/dist/dashboard/assets/jetbrains-mono-greek-700-normal-C6CZE3T8.woff2 +0 -0
  80. package/dist/dashboard/assets/jetbrains-mono-greek-700-normal-DEigVDxa.woff +0 -0
  81. package/dist/dashboard/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  82. package/dist/dashboard/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  83. package/dist/dashboard/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  84. package/dist/dashboard/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  85. package/dist/dashboard/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2 +0 -0
  86. package/dist/dashboard/assets/jetbrains-mono-latin-700-normal-D3wTyLJW.woff +0 -0
  87. package/dist/dashboard/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  88. package/dist/dashboard/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  89. package/dist/dashboard/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
  90. package/dist/dashboard/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
  91. package/dist/dashboard/assets/jetbrains-mono-latin-ext-700-normal-CZipNAKV.woff2 +0 -0
  92. package/dist/dashboard/assets/jetbrains-mono-latin-ext-700-normal-CxPITLHs.woff +0 -0
  93. package/dist/dashboard/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  94. package/dist/dashboard/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
  95. package/dist/dashboard/assets/jetbrains-mono-vietnamese-700-normal-BDLVIk2r.woff +0 -0
  96. package/dist/dashboard/assets/space-grotesk-latin-400-normal-BnQMeOim.woff +0 -0
  97. package/dist/dashboard/assets/space-grotesk-latin-400-normal-CJ-V5oYT.woff2 +0 -0
  98. package/dist/dashboard/assets/space-grotesk-latin-500-normal-CNSSEhBt.woff +0 -0
  99. package/dist/dashboard/assets/space-grotesk-latin-500-normal-lFbtlQH6.woff2 +0 -0
  100. package/dist/dashboard/assets/space-grotesk-latin-700-normal-CwsQ-cCU.woff +0 -0
  101. package/dist/dashboard/assets/space-grotesk-latin-700-normal-RjhwGPKo.woff2 +0 -0
  102. package/dist/dashboard/assets/space-grotesk-latin-ext-400-normal-CfP_5XZW.woff2 +0 -0
  103. package/dist/dashboard/assets/space-grotesk-latin-ext-400-normal-DRPE3kg4.woff +0 -0
  104. package/dist/dashboard/assets/space-grotesk-latin-ext-500-normal-3dgZTiw9.woff +0 -0
  105. package/dist/dashboard/assets/space-grotesk-latin-ext-500-normal-DUe3BAxM.woff2 +0 -0
  106. package/dist/dashboard/assets/space-grotesk-latin-ext-700-normal-BQnZhY3m.woff2 +0 -0
  107. package/dist/dashboard/assets/space-grotesk-latin-ext-700-normal-HVCqSBdx.woff +0 -0
  108. package/dist/dashboard/assets/space-grotesk-vietnamese-400-normal-B7xT_GF5.woff2 +0 -0
  109. package/dist/dashboard/assets/space-grotesk-vietnamese-400-normal-BIWiOVfw.woff +0 -0
  110. package/dist/dashboard/assets/space-grotesk-vietnamese-500-normal-BTqKIpxg.woff +0 -0
  111. package/dist/dashboard/assets/space-grotesk-vietnamese-500-normal-BmEvtly_.woff2 +0 -0
  112. package/dist/dashboard/assets/space-grotesk-vietnamese-700-normal-DMty7AZE.woff2 +0 -0
  113. package/dist/dashboard/assets/space-grotesk-vietnamese-700-normal-Duxec5Rn.woff +0 -0
  114. package/dist/dashboard/index.html +18 -0
  115. package/dist/index.js +86 -0
  116. package/dist/operations/dashboard.js +1231 -0
  117. package/dist/operations/export.js +110 -0
  118. package/dist/operations/query.js +649 -0
  119. package/dist/operations/type-template.js +210 -0
  120. package/dist/operations/write.js +143 -0
  121. package/dist/types/config.js +1 -0
  122. package/dist/types/page.js +1 -0
  123. package/dist/utils/case.js +22 -0
  124. package/dist/utils/errors.js +26 -0
  125. package/dist/utils/fs.js +77 -0
  126. package/dist/utils/output.js +33 -0
  127. package/dist/utils/process.js +60 -0
  128. package/dist/utils/segmenter.js +24 -0
  129. package/dist/utils/slug.js +10 -0
  130. package/dist/utils/time.js +24 -0
  131. package/package.json +64 -0
  132. package/references/cli-interface.md +312 -0
  133. package/references/env.md +122 -0
  134. package/references/template-design-guide.md +271 -0
  135. package/references/vault-to-wiki-instruction.md +110 -0
  136. 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
+ }