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/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": ".tid 文件预览",
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": ".tid file preview",
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