dsh-tiddlywiki 0.33.2 → 0.33.3
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/docs/CHANGELOG.md +6 -0
- package/lib/client.js +3 -3
- package/lib/index.js +82 -3
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/src/client/i18n-frame.ts +4 -2
- package/src/client/tid-parse.ts +77 -0
- package/src/client/tid-preview.ts +18 -7
- package/src/index.ts +12 -1
package/lib/index.js
CHANGED
|
@@ -17483,6 +17483,83 @@ const TID_EXTENSIONS = ["tid", "tiddler"];
|
|
|
17483
17483
|
/** 正文要注入的 keyed 子槽(宿主约定,见 docs/development.md)。 */
|
|
17484
17484
|
const TID_PREVIEW_SLOT = "sidebar.right.tab.document";
|
|
17485
17485
|
/**
|
|
17486
|
+
* 内部/机械性字段:对「人看这个文件」没有信息量,摘要里折到一行小字里。
|
|
17487
|
+
*
|
|
17488
|
+
* `ws/*` 与 `agent-written` 其实是**标签值里的标记**,不是字段名 —— 见 `summarizeTid`。
|
|
17489
|
+
*/
|
|
17490
|
+
const INTERNAL_FIELD_KEYS = [
|
|
17491
|
+
"revision",
|
|
17492
|
+
"workspace",
|
|
17493
|
+
"human-edited",
|
|
17494
|
+
"agent-written",
|
|
17495
|
+
"bag",
|
|
17496
|
+
"list"
|
|
17497
|
+
];
|
|
17498
|
+
/** 摘要里单列出来的字段(其余进「另外 N 个字段」那一行)。 */
|
|
17499
|
+
const SUMMARY_FIELD_KEYS = [
|
|
17500
|
+
"created",
|
|
17501
|
+
"modified",
|
|
17502
|
+
"creator",
|
|
17503
|
+
"modifier",
|
|
17504
|
+
"type"
|
|
17505
|
+
];
|
|
17506
|
+
/**
|
|
17507
|
+
* 把 TiddlyWiki 的 17 位时间戳(`YYYYMMDDHHmmssSSS`,UTC)变成 `YYYY-MM-DD HH:mm`。
|
|
17508
|
+
*
|
|
17509
|
+
* 不是 17 位数字就原样返回 —— 宁可显示原文,也不要把一个看不懂的值装作看懂了。
|
|
17510
|
+
*/
|
|
17511
|
+
function formatTidStamp(value) {
|
|
17512
|
+
const raw = value.trim();
|
|
17513
|
+
if (!/^\d{17}$/.test(raw)) return raw;
|
|
17514
|
+
const [y, mo, d, h, mi] = [
|
|
17515
|
+
raw.slice(0, 4),
|
|
17516
|
+
raw.slice(4, 6),
|
|
17517
|
+
raw.slice(6, 8),
|
|
17518
|
+
raw.slice(8, 10),
|
|
17519
|
+
raw.slice(10, 12)
|
|
17520
|
+
];
|
|
17521
|
+
return `${y}-${mo}-${d} ${h}:${mi}`;
|
|
17522
|
+
}
|
|
17523
|
+
/**
|
|
17524
|
+
* 把解析结果压成**给人看**的摘要。
|
|
17525
|
+
*
|
|
17526
|
+
* 规则(作者 2026-10-26 要求):只单列 `title` / `tags` / 时间,其余(`revision`、`workspace`、
|
|
17527
|
+
* `human-edited`、`ws/*` 这类机械字段)折进一行小字 —— 预览器的第一眼应该看到**内容**,
|
|
17528
|
+
* 不是一堆元数据。
|
|
17529
|
+
*/
|
|
17530
|
+
function summarizeTid(parsed) {
|
|
17531
|
+
const known = [];
|
|
17532
|
+
const other = [];
|
|
17533
|
+
let tags = [];
|
|
17534
|
+
let created;
|
|
17535
|
+
let modified;
|
|
17536
|
+
for (const [key, value] of parsed.fields) {
|
|
17537
|
+
if (key === "tags") {
|
|
17538
|
+
tags = value.split(/[\s,]+/).filter((tag) => tag.length > 0);
|
|
17539
|
+
continue;
|
|
17540
|
+
}
|
|
17541
|
+
if (key === "created") created = value;
|
|
17542
|
+
if (key === "modified") modified = value;
|
|
17543
|
+
if (SUMMARY_FIELD_KEYS.includes(key)) {
|
|
17544
|
+
known.push([key, key === "created" || key === "modified" ? formatTidStamp(value) : value]);
|
|
17545
|
+
continue;
|
|
17546
|
+
}
|
|
17547
|
+
other.push([key, key === "created" || key === "modified" ? formatTidStamp(value) : value]);
|
|
17548
|
+
}
|
|
17549
|
+
const visibleTags = tags.filter((tag) => !tag.startsWith("ws/") && tag !== "agent-written");
|
|
17550
|
+
const hiddenTags = tags.filter((tag) => !visibleTags.includes(tag));
|
|
17551
|
+
if (hiddenTags.length > 0) other.push(["tags(hidden)", hiddenTags.join(" ")]);
|
|
17552
|
+
const stamp = modified ?? created;
|
|
17553
|
+
const time = stamp === void 0 ? void 0 : formatTidStamp(stamp);
|
|
17554
|
+
return {
|
|
17555
|
+
...parsed.title !== void 0 && parsed.title.length > 0 ? { title: parsed.title } : {},
|
|
17556
|
+
tags: visibleTags,
|
|
17557
|
+
...time !== void 0 ? { time } : {},
|
|
17558
|
+
known: known.filter(([key]) => key !== "created" && key !== "modified"),
|
|
17559
|
+
other
|
|
17560
|
+
};
|
|
17561
|
+
}
|
|
17562
|
+
/**
|
|
17486
17563
|
* 把一份 `.tid` 文件拆成「字段 + 正文」。
|
|
17487
17564
|
*
|
|
17488
17565
|
* `.tid` 格式:若干 `key: value` 行 → **一个空行** → 正文。没有空行时整份都当字段
|
|
@@ -18487,7 +18564,8 @@ const CHUNKS = [
|
|
|
18487
18564
|
"frame.statusUnreachable": "无法访问 /dsh-tiddlywiki/status",
|
|
18488
18565
|
"frame.noEditorUrl": "服务未返回编辑器地址",
|
|
18489
18566
|
"frame.statusError": "服务状态:{status}",
|
|
18490
|
-
"frame.tidPreviewTitle": "
|
|
18567
|
+
"frame.tidPreviewTitle": "真 TiddlyWiki 渲染",
|
|
18568
|
+
"frame.tidMoreFields": "另外 {n} 个字段",
|
|
18491
18569
|
"frame.tidPreviewWaiting": "等待文件内容…",
|
|
18492
18570
|
"frame.tidPreviewNoBody": "这个 .tid 只有字段、没有正文。",
|
|
18493
18571
|
"frame.tidPreviewFallback": "渲染失败,下面是原文:"
|
|
@@ -18517,7 +18595,8 @@ const CHUNKS = [
|
|
|
18517
18595
|
"frame.statusUnreachable": "Cannot reach /dsh-tiddlywiki/status",
|
|
18518
18596
|
"frame.noEditorUrl": "The service returned no editor address",
|
|
18519
18597
|
"frame.statusError": "Service status: {status}",
|
|
18520
|
-
"frame.tidPreviewTitle": "
|
|
18598
|
+
"frame.tidPreviewTitle": "Rendered TiddlyWiki",
|
|
18599
|
+
"frame.tidMoreFields": "{n} more fields",
|
|
18521
18600
|
"frame.tidPreviewWaiting": "Waiting for file content…",
|
|
18522
18601
|
"frame.tidPreviewNoBody": "This .tid has fields but no body text.",
|
|
18523
18602
|
"frame.tidPreviewFallback": "Rendering failed; showing the raw text:"
|
|
@@ -18906,6 +18985,6 @@ function apply(ctx, rawConfig = {}) {
|
|
|
18906
18985
|
}, "dsh-tiddlywiki: host teardown");
|
|
18907
18986
|
}
|
|
18908
18987
|
//#endregion
|
|
18909
|
-
export { AGENT_WRITTEN_TAG, ALL_ARTICLES_MARKER_TITLE, ALL_ARTICLES_TEXT, ALL_ARTICLES_TITLE, ANON_USERNAME, AutoCommitter, CLIP_BRIDGE_BOOKMARKLET, CLIP_BRIDGE_DEFAULT_PORT, CLIP_BRIDGE_DOC_TEXT, CLIP_BRIDGE_DOC_TITLE, CLIP_BRIDGE_DRAG_HREF, CLIP_BRIDGE_MARKER_TITLE, ClipBridge, ConfigPatchError, ConfigStore, ConfigUnreadableError, DEFAULT_NOTE_TYPE, DEFAULT_PROMPT_MODE, DEFAULT_WECHAT_ADAPTER, DEFAULT_WECHAT_COMMAND, DEFAULT_WIKI_ID, DEFAULT_WIKI_MODE, DOC_NOTE_TAG, DOC_NOTE_TEXT, DOC_NOTE_TITLE, DSH_DOCS_TAG, GitConflictStateError, GitFace, HOME_DEFAULT_TIDDLERS, HOME_INDEX_ITEMS, HOME_INDEX_MARKER_TITLE, HUMAN_EDITED_TAG, LOCALE_NAMESPACE, LOCATION_STATE_VERSION, MARKDOWN_PLUGIN, MASKED_SECRET, MENUBAR_THEME_MARKER_TITLE, MENUBAR_THEME_TEXT, MENUBAR_THEME_TIDDLER, MISSING_TYPE_FILTER, NOTE_COMMAND_NAME, PATH_PREFIX, PROMPT_GOVERNANCE_BLOCKS, PROMPT_MODES, PROMPT_SECTION_NAME, PROMPT_SECTION_ORDER, READY_HARD_FACTOR, READY_POLL_MS, READY_SLOW_POLL_MS, READY_TIMEOUT_DEFAULT_MS, READY_TIMEOUT_MAX_MS, READY_TIMEOUT_MIN_MS, RENDER_BUNDLE_TEXT, RENDER_MARKER_TITLE, RENDER_PLUGIN_FILE, RENDER_PLUGIN_TITLE, RESERVED_WIKI_IDS, RepoCommitters, SEED_DEFS, SEED_MARKER_VERSION, SEND_TO_AGENT_BUNDLE_TEXT, SEND_TO_AGENT_MARKER_TITLE, SEND_TO_AGENT_PLUGIN_TITLE, SESSION_SCOPE_MAX_AGE_MS, SESSION_SCOPE_VERSION, SESSION_SUMMARY_PREFIX, SKILL_FILE_NAME, SPLIT_SKILL_DIR, SPLIT_SKILL_MARKER, STARTER_DOCS_ITEMS, STARTER_DOCS_MARKER_TITLE, TEXT_LIST_FILTER, TID_EXTENSIONS, TID_PREVIEW_ID, TID_PREVIEW_SLOT, TRASH_INDEX_TITLE, TRASH_PREFIX, TW_PROXY_PATH, TW_PROXY_PREFIX, TW_WEB_HOST_DEFAULT, TW_WEB_HOST_TIDDLER, TiddlyWebClient, TrashIndexUnavailableError, UI_STYLES_MARKER_TITLE, UI_STYLE_ITEMS, WECHAT_ADAPTERS, WECHAT_ADAPTER_FILES, WECHAT_ADAPTER_MARKER, WECHAT_DOCS_MARKER_TITLE, WECHAT_DOCS_TEXT, WECHAT_DOCS_TITLE, WECHAT_PUBLISH_BUNDLE_TEXT, WECHAT_PUBLISH_MARKER_TITLE, WECHAT_PUBLISH_PLUGIN_TITLE, WIKI_ICON_NAMES, WIKI_MODES, WIKI_REGISTRY_VERSION, WORKSPACE_FIELD, WORKSPACE_TAG_PREFIX, WechatPublishRunner, WikiFarm, WikiInstance, WikiServer, WriteConflictError, apply, applyWikiAction, assertNoConflict, assertPublicImageUrl, awaitReady, buildBinaryTiddler, buildClipTiddler, buildImageNoteTiddler, buildPromptText, buildPublishInvocation, buildVersionInvocation, buildWriteTiddler, bundledCatalog, capOutput, checkAllSeeds, checkWechatReady, cleanTiddler, clearLocationState, createGitLayer, createMutationLock, deepMerge, defaultAdaptersDir, defaultEntry, defaultLocationStateFile, defaultRegistryFile, defaultSessionScopeFile, defaultSkillRoot, defaultWechatJobDir, defineTool, deriveWikiId, describeConflict, describePrompt, describeUnreadableConfig, docNoteText, downloadClipImage, drainThenStop, dshHomePath, ensureLanguage, ensurePlugin, ensureTiddlerTimestamps, entryLocation, entryPath, escapeInline, escapePromptBraces, expandEnvPath, findEntry, findPathConflicts, flattenTiddlerFields, flushPendingWrites, formatTiddlerDate, hasHostTranslator, hashText, hostAllowed, imageExtensionForMime, inject, insertIntoSection, installSplitSkill, interpretPublishOutcome, isBinaryType, isInsidePath, isJunkTag, isPrivateAddress, isSafeCliValue, isSafeDsn, isSafeSessionId, isSafeUrl, listWikiCandidates, locationPath, maskConfigSecrets, name, needsRestartAfterSeeds, normalizeConfigPatch, normalizeEntry, normalizeFieldsArg, normalizeLocation, normalizePromptMode, normalizePromptPreview, normalizeReadyTimeoutMs, normalizeThemes, normalizeWechatConfig, normalizeWikiIcon, normalizeWikiId, normalizeWorkspaceName, openInTwEditor, parseClipPayload, parseNoteInput, parseSeedMarker, parseSkillText, parseTidText, parseTiddlerDate, pathComparisonKey, pickImageMime, pinLanguageTiddler, proxyBaseFor, pruneScopes, readActiveThemeName, readBundledSkillText, readLocationState, readRegistry, readSeedMarker, readSessionScopes, readWikiInfo, readyHardTimeoutMs, registerAdminRoutes, registerLocaleWithHost, registerNoteCommand, registerRoutes, registerSplitSkill, registerTiddlywikiTools, removeSeedById, removeWiki, resolveAgentScope, resolveClipTitle, resolveNodeExecutable, resolveTwRoot, resolveWikiRoot, runAllSeeds, runSeedById, sanitizeTwFragment, scanAdapterDir, scopeBanner, seedAllArticles, seedClipBridge, seedDocNote, seedHomeIndex, seedMenubarTheme, seedRenderRoute, seedSendToAgent, seedStarterDocs, seedUiStyles, seedWechatDocs, seedWechatPublish, setSessionScope, singleEntryRegistry, stoppedWikiFromRequest, stoppedWikiMessage, stripMaskedSecrets, switchWiki, tailOf, targetRuntimeFor, tiddlywikiToolSummary, toIsoDateString, toolSignatureLines, translate, unseedClipBridge, unseedWechatDocs, unseedWechatPublish, upsertWiki, validateRegistry, waitForFileWrite, wikiIdFromRequest, withScopeBanner, workspaceMarkFromCwd, workspaceNameFromCwd, workspaceTagName, writeLocationState, writeRegistry, writeSeedMarker, writeSessionScopes, writeSessionSummary, writeWikiInfo };
|
|
18988
|
+
export { AGENT_WRITTEN_TAG, ALL_ARTICLES_MARKER_TITLE, ALL_ARTICLES_TEXT, ALL_ARTICLES_TITLE, ANON_USERNAME, AutoCommitter, CLIP_BRIDGE_BOOKMARKLET, CLIP_BRIDGE_DEFAULT_PORT, CLIP_BRIDGE_DOC_TEXT, CLIP_BRIDGE_DOC_TITLE, CLIP_BRIDGE_DRAG_HREF, CLIP_BRIDGE_MARKER_TITLE, ClipBridge, ConfigPatchError, ConfigStore, ConfigUnreadableError, DEFAULT_NOTE_TYPE, DEFAULT_PROMPT_MODE, DEFAULT_WECHAT_ADAPTER, DEFAULT_WECHAT_COMMAND, DEFAULT_WIKI_ID, DEFAULT_WIKI_MODE, DOC_NOTE_TAG, DOC_NOTE_TEXT, DOC_NOTE_TITLE, DSH_DOCS_TAG, GitConflictStateError, GitFace, HOME_DEFAULT_TIDDLERS, HOME_INDEX_ITEMS, HOME_INDEX_MARKER_TITLE, HUMAN_EDITED_TAG, INTERNAL_FIELD_KEYS, LOCALE_NAMESPACE, LOCATION_STATE_VERSION, MARKDOWN_PLUGIN, MASKED_SECRET, MENUBAR_THEME_MARKER_TITLE, MENUBAR_THEME_TEXT, MENUBAR_THEME_TIDDLER, MISSING_TYPE_FILTER, NOTE_COMMAND_NAME, PATH_PREFIX, PROMPT_GOVERNANCE_BLOCKS, PROMPT_MODES, PROMPT_SECTION_NAME, PROMPT_SECTION_ORDER, READY_HARD_FACTOR, READY_POLL_MS, READY_SLOW_POLL_MS, READY_TIMEOUT_DEFAULT_MS, READY_TIMEOUT_MAX_MS, READY_TIMEOUT_MIN_MS, RENDER_BUNDLE_TEXT, RENDER_MARKER_TITLE, RENDER_PLUGIN_FILE, RENDER_PLUGIN_TITLE, RESERVED_WIKI_IDS, RepoCommitters, SEED_DEFS, SEED_MARKER_VERSION, SEND_TO_AGENT_BUNDLE_TEXT, SEND_TO_AGENT_MARKER_TITLE, SEND_TO_AGENT_PLUGIN_TITLE, SESSION_SCOPE_MAX_AGE_MS, SESSION_SCOPE_VERSION, SESSION_SUMMARY_PREFIX, SKILL_FILE_NAME, SPLIT_SKILL_DIR, SPLIT_SKILL_MARKER, STARTER_DOCS_ITEMS, STARTER_DOCS_MARKER_TITLE, SUMMARY_FIELD_KEYS, TEXT_LIST_FILTER, TID_EXTENSIONS, TID_PREVIEW_ID, TID_PREVIEW_SLOT, TRASH_INDEX_TITLE, TRASH_PREFIX, TW_PROXY_PATH, TW_PROXY_PREFIX, TW_WEB_HOST_DEFAULT, TW_WEB_HOST_TIDDLER, TiddlyWebClient, TrashIndexUnavailableError, UI_STYLES_MARKER_TITLE, UI_STYLE_ITEMS, WECHAT_ADAPTERS, WECHAT_ADAPTER_FILES, WECHAT_ADAPTER_MARKER, WECHAT_DOCS_MARKER_TITLE, WECHAT_DOCS_TEXT, WECHAT_DOCS_TITLE, WECHAT_PUBLISH_BUNDLE_TEXT, WECHAT_PUBLISH_MARKER_TITLE, WECHAT_PUBLISH_PLUGIN_TITLE, WIKI_ICON_NAMES, WIKI_MODES, WIKI_REGISTRY_VERSION, WORKSPACE_FIELD, WORKSPACE_TAG_PREFIX, WechatPublishRunner, WikiFarm, WikiInstance, WikiServer, WriteConflictError, apply, applyWikiAction, assertNoConflict, assertPublicImageUrl, awaitReady, buildBinaryTiddler, buildClipTiddler, buildImageNoteTiddler, buildPromptText, buildPublishInvocation, buildVersionInvocation, buildWriteTiddler, bundledCatalog, capOutput, checkAllSeeds, checkWechatReady, cleanTiddler, clearLocationState, createGitLayer, createMutationLock, deepMerge, defaultAdaptersDir, defaultEntry, defaultLocationStateFile, defaultRegistryFile, defaultSessionScopeFile, defaultSkillRoot, defaultWechatJobDir, defineTool, deriveWikiId, describeConflict, describePrompt, describeUnreadableConfig, docNoteText, downloadClipImage, drainThenStop, dshHomePath, ensureLanguage, ensurePlugin, ensureTiddlerTimestamps, entryLocation, entryPath, escapeInline, escapePromptBraces, expandEnvPath, findEntry, findPathConflicts, flattenTiddlerFields, flushPendingWrites, formatTidStamp, formatTiddlerDate, hasHostTranslator, hashText, hostAllowed, imageExtensionForMime, inject, insertIntoSection, installSplitSkill, interpretPublishOutcome, isBinaryType, isInsidePath, isJunkTag, isPrivateAddress, isSafeCliValue, isSafeDsn, isSafeSessionId, isSafeUrl, listWikiCandidates, locationPath, maskConfigSecrets, name, needsRestartAfterSeeds, normalizeConfigPatch, normalizeEntry, normalizeFieldsArg, normalizeLocation, normalizePromptMode, normalizePromptPreview, normalizeReadyTimeoutMs, normalizeThemes, normalizeWechatConfig, normalizeWikiIcon, normalizeWikiId, normalizeWorkspaceName, openInTwEditor, parseClipPayload, parseNoteInput, parseSeedMarker, parseSkillText, parseTidText, parseTiddlerDate, pathComparisonKey, pickImageMime, pinLanguageTiddler, proxyBaseFor, pruneScopes, readActiveThemeName, readBundledSkillText, readLocationState, readRegistry, readSeedMarker, readSessionScopes, readWikiInfo, readyHardTimeoutMs, registerAdminRoutes, registerLocaleWithHost, registerNoteCommand, registerRoutes, registerSplitSkill, registerTiddlywikiTools, removeSeedById, removeWiki, resolveAgentScope, resolveClipTitle, resolveNodeExecutable, resolveTwRoot, resolveWikiRoot, runAllSeeds, runSeedById, sanitizeTwFragment, scanAdapterDir, scopeBanner, seedAllArticles, seedClipBridge, seedDocNote, seedHomeIndex, seedMenubarTheme, seedRenderRoute, seedSendToAgent, seedStarterDocs, seedUiStyles, seedWechatDocs, seedWechatPublish, setSessionScope, singleEntryRegistry, stoppedWikiFromRequest, stoppedWikiMessage, stripMaskedSecrets, summarizeTid, switchWiki, tailOf, targetRuntimeFor, tiddlywikiToolSummary, toIsoDateString, toolSignatureLines, translate, unseedClipBridge, unseedWechatDocs, unseedWechatPublish, upsertWiki, validateRegistry, waitForFileWrite, wikiIdFromRequest, withScopeBanner, workspaceMarkFromCwd, workspaceNameFromCwd, workspaceTagName, writeLocationState, writeRegistry, writeSeedMarker, writeSessionScopes, writeSessionSummary, writeWikiInfo };
|
|
18910
18989
|
|
|
18911
18990
|
//# sourceMappingURL=index.js.map
|