copilot-history-ingest
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCopilot History Ingest — Conversation Mining
Copilot历史导入——会话挖掘
You are extracting knowledge from the user's past GitHub Copilot CLI conversations and distilling it into the Obsidian wiki. Conversations are rich but messy — your job is to find the signal and compile it.
This skill can be invoked directly or via the router ().
wiki-history-ingest/wiki-history-ingest copilot你需要从用户过往的GitHub Copilot CLI对话中提取知识,并将其提炼到Obsidian wiki中。对话内容丰富但杂乱——你的任务是筛选有效信息并进行整理。
此技能可直接调用,也可通过路由调用()。
wiki-history-ingest/wiki-history-ingest copilotBefore You Start
开始前准备
- Read to get
.envandOBSIDIAN_VAULT_PATH(defaults toCOPILOT_HISTORY_PATH) and~/.copilot/session-state(the VS CodeCOPILOT_VSCODE_STORAGE_PATHdirectory; platform-specific — ask the user if absent fromworkspaceStorage).env - Read at the vault root to check what's already been ingested
.manifest.json - Read at the vault root to know what the wiki already contains
index.md
- 读取文件获取
.env、OBSIDIAN_VAULT_PATH(默认值为COPILOT_HISTORY_PATH)和~/.copilot/session-state(VS Code的COPILOT_VSCODE_STORAGE_PATH目录;路径因平台而异——如果workspaceStorage中缺失,请询问用户).env - 读取vault根目录下的文件,检查已导入的内容
.manifest.json - 读取vault根目录下的文件,了解wiki已包含的内容
index.md
Ingest Modes
导入模式
Append Mode (default)
追加模式(默认)
Check for each source file (events JSONL, transcript JSONL, checkpoint, session-store DB). Only process:
.manifest.json- Sessions not in the manifest (new sessions)
- Sessions whose is newer than their
updated_atin the manifestingested_at
This is usually what you want — the user ran a few new sessions and wants to capture the delta.
检查中的每个源文件(events JSONL、transcript JSONL、checkpoint、session-store DB)。仅处理:
.manifest.json- 未在manifest中记录的会话(新会话)
- 时间晚于manifest中
updated_at时间的会话ingested_at
这通常是用户需要的模式——用户运行了一些新会话,希望捕获增量内容。
Full Mode
全量模式
Process everything regardless of manifest. Use after a or if the user explicitly asks.
wiki-rebuild无论manifest记录如何,处理所有内容。在之后或用户明确要求时使用。
wiki-rebuildGitHub Copilot Data Layout
GitHub Copilot数据布局
Copilot stores data in three locations. Scan all three.
Copilot将数据存储在三个位置。请扫描所有三个位置。
Source 1: ~/.copilot/session-state/
(CLI sessions)
~/.copilot/session-state/数据源1:~/.copilot/session-state/
(CLI会话)
~/.copilot/session-state/~/.copilot/session-state/
├── <session-uuid>/
│ ├── workspace.yaml # Session metadata (id, cwd, summary_count, created_at, updated_at)
│ ├── vscode.metadata.json # VS Code context (workspaceFolder, repositoryProperties, customTitle)
│ ├── events.jsonl # Full event log — all turns, tool calls, reasoning
│ ├── session.db # Per-session SQLite (todos/todo_deps only — skip for ingestion)
│ ├── index.md # Session summary written at session end
│ ├── checkpoints/ # Checkpoint JSON files (mid-session summaries)
│ │ └── <uuid>.json # title, overview, history, work_done, technical_details,
│ │ # important_files, next_steps
│ ├── files/ # Artifacts produced during session (plans, diagrams, etc.)
│ └── research/ # Research artifacts
└── ...~/.copilot/session-state/
├── <session-uuid>/
│ ├── workspace.yaml # Session metadata (id, cwd, summary_count, created_at, updated_at)
│ ├── vscode.metadata.json # VS Code context (workspaceFolder, repositoryProperties, customTitle)
│ ├── events.jsonl # Full event log — all turns, tool calls, reasoning
│ ├── session.db # Per-session SQLite (todos/todo_deps only — skip for ingestion)
│ ├── index.md # Session summary written at session end
│ ├── checkpoints/ # Checkpoint JSON files (mid-session summaries)
│ │ └── <uuid>.json # title, overview, history, work_done, technical_details,
│ │ # important_files, next_steps
│ ├── files/ # Artifacts produced during session (plans, diagrams, etc.)
│ └── research/ # Research artifacts
└── ...Source 2: ~/.copilot/session-store.db
(Global SQLite)
~/.copilot/session-store.db数据源2:~/.copilot/session-store.db
(全局SQLite数据库)
~/.copilot/session-store.dbThe canonical cross-session database. This is the highest-value source: structured, queryable, and pre-summarised.
sessions — id, cwd, repository, branch, summary, created_at, updated_at, host_type
turns — session_id, turn_index, user_message, assistant_response, timestamp
checkpoints — session_id, checkpoint_number, title, overview, history, work_done,
technical_details, important_files, next_steps, created_at
session_files — session_id, file_path, tool_name, turn_index, first_seen_at
session_refs — session_id, ref_type (commit/pr/issue), ref_value, turn_index, created_at
search_index — FTS5 virtual table (content, session_id, source_type, source_id)跨会话的标准数据库。这是价值最高的数据源:结构化、可查询且已预先提炼摘要。
sessions — id, cwd, repository, branch, summary, created_at, updated_at, host_type
turns — session_id, turn_index, user_message, assistant_response, timestamp
checkpoints — session_id, checkpoint_number, title, overview, history, work_done,
technical_details, important_files, next_steps, created_at
session_files — session_id, file_path, tool_name, turn_index, first_seen_at
session_refs — session_id, ref_type (commit/pr/issue), ref_value, turn_index, created_at
search_index — FTS5 virtual table (content, session_id, source_type, source_id)Source 3: VS Code Workspace Storage (<workspaceStorage>/<hash>/GitHub.copilot-chat/
)
<workspaceStorage>/<hash>/GitHub.copilot-chat/数据源3:VS Code工作区存储(<workspaceStorage>/<hash>/GitHub.copilot-chat/
)
<workspaceStorage>/<hash>/GitHub.copilot-chat/VS Code extension data, keyed by workspace hash. The path is platform-specific and must come from or user input.
.env<hash>/GitHub.copilot-chat/
├── transcripts/
│ └── <session-uuid>.jsonl # Conversation transcripts (same JSONL format as events.jsonl)
├── memory-tool/
│ └── memories/
│ └── <base64-session-id>/ # Per-session saved artifacts (plan.md, etc.)
│ └── plan.md
└── codebase-external.sqlite # Codebase index (skip — no conversation knowledge)VS Code扩展数据,按工作区哈希值索引。路径因平台而异,必须从或用户输入获取。
.env<hash>/GitHub.copilot-chat/
├── transcripts/
│ └── <session-uuid>.jsonl # Conversation transcripts (same JSONL format as events.jsonl)
├── memory-tool/
│ └── memories/
│ └── <base64-session-id>/ # Per-session saved artifacts (plan.md, etc.)
│ └── plan.md
└── codebase-external.sqlite # Codebase index (skip — no conversation knowledge)Key data sources ranked by value:
关键数据源价值排名:
- Checkpoints (
session-store.dbtable + per-sessioncheckpoints) — Pre-distilled summaries withcheckpoints/*.json,overview,work_done,technical_details,important_files. Gold.next_steps - Session summaries (
session-store.db+sessions.summary) — One-paragraph synopsis per session.index.md - Turns (
session-store.dbtable +turns/ transcript JSONL) — Full conversation. Rich but verbose.events.jsonl - Memory artifacts (etc.) — Pre-written plans and structured notes the user saved explicitly. Worth importing verbatim (or lightly summarised).
memory-tool/memories/<id>/plan.md - File access patterns (table +
session_filesevents) — Which files the agent repeatedly touched — reveals high-value project files.tool.execution_* - Session refs (table) — Commits, PRs, and issues linked to sessions.
session_refs - — Workspace folder path, branch,
vscode.metadata.json(user-set session label). Useful for grouping and naming.customTitle
- Checkpoints(的
session-store.db表 + 会话级checkpoints)——预先提炼的摘要,包含checkpoints/*.json、overview、work_done、technical_details、important_files。黄金级数据源。next_steps - 会话摘要(的
session-store.db+sessions.summary)——每个会话的一段式概要。index.md - 对话回合(的
session-store.db表 +turns/ transcript JSONL)——完整对话。内容丰富但冗长。events.jsonl - 记忆工件(等)——用户明确保存的预先编写的计划和结构化笔记。值得直接导入(或轻度提炼)。
memory-tool/memories/<id>/plan.md - 文件访问模式(表 +
session_files事件)——Agent反复访问的文件——揭示高价值项目文件。tool.execution_* - 会话引用(表)——与会话关联的提交、PR和问题。
session_refs - ——工作区文件夹路径、分支、
vscode.metadata.json(用户设置的会话标签)。对分组和命名有用。customTitle
Step 1: Survey and Compute Delta
步骤1:排查并计算增量
Scan all three data locations and compare against :
.manifest.jsonbash
undefined扫描所有三个数据位置,并与进行比较:
.manifest.jsonbash
undefined--- Source 1: per-session directories ---
--- Source 1: per-session directories ---
Find all session directories (each has workspace.yaml)
Find all session directories (each has workspace.yaml)
ls ~/.copilot/session-state/
ls ~/.copilot/session-state/
For each session, read workspace.yaml for id/cwd/updated_at
For each session, read workspace.yaml for id/cwd/updated_at
and vscode.metadata.json for customTitle / repositoryProperties
and vscode.metadata.json for customTitle / repositoryProperties
--- Source 2: global database ---
--- Source 2: global database ---
Query session-store.db with sqlite3 (or Python sqlite3)
Query session-store.db with sqlite3 (or Python sqlite3)
SELECT s.id, s.cwd, s.repository, s.branch, s.summary, s.updated_at,
COUNT(DISTINCT t.turn_index) AS turn_count,
COUNT(DISTINCT c.id) AS checkpoint_count
FROM sessions s
LEFT JOIN turns t ON t.session_id = s.id
LEFT JOIN checkpoints c ON c.session_id = s.id
GROUP BY s.id
ORDER BY s.updated_at DESC;
SELECT s.id, s.cwd, s.repository, s.branch, s.summary, s.updated_at,
COUNT(DISTINCT t.turn_index) AS turn_count,
COUNT(DISTINCT c.id) AS checkpoint_count
FROM sessions s
LEFT JOIN turns t ON t.session_id = s.id
LEFT JOIN checkpoints c ON c.session_id = s.id
GROUP BY s.id
ORDER BY s.updated_at DESC;
--- Source 3: VS Code workspace storage ---
--- Source 3: VS Code workspace storage ---
For each <hash> directory under workspaceStorage, check for GitHub.copilot-chat/
For each <hash> directory under workspaceStorage, check for GitHub.copilot-chat/
Find transcript files
Find transcript files
ls <workspaceStorage>/<hash>/GitHub.copilot-chat/transcripts/
Build a unified inventory — one entry per session UUID — and classify:
- **New** — not in manifest → needs ingesting
- **Modified** — in manifest but `updated_at` is newer → needs re-ingesting
- **Unchanged** — in manifest and not modified → skip in append mode
Report to the user: "Found X sessions in session-state, Y in session-store.db, Z VS Code transcript files. Checkpoints: A. Delta: B new, C modified."ls <workspaceStorage>/<hash>/GitHub.copilot-chat/transcripts/
构建统一清单——每个会话UUID对应一个条目,并分类:
- **新会话**——未在manifest中记录 → 需要导入
- **已修改会话**——在manifest中记录但`updated_at`时间更新 → 需要重新导入
- **未修改会话**——在manifest中记录且未修改 → 追加模式下跳过
向用户报告:“在session-state中找到X个会话,在session-store.db中找到Y个,VS Code转录文件Z个。Checkpoints:A个。增量:B个新会话,C个已修改会话。”Step 2: Ingest Checkpoints and Summaries First
步骤2:优先导入Checkpoints和摘要
Checkpoints are already distilled — process them before touching raw turns.
Checkpoints已完成提炼——在处理原始对话回合之前先处理它们。
From session-store.db
:
session-store.db从session-store.db
导入:
session-store.dbsql
SELECT s.id, s.cwd, s.repository, s.branch, s.summary,
c.checkpoint_number, c.title, c.overview, c.work_done,
c.technical_details, c.important_files, c.next_steps,
c.created_at
FROM checkpoints c
JOIN sessions s ON c.session_id = s.id
ORDER BY s.updated_at DESC, c.checkpoint_number ASC;sql
SELECT s.id, s.cwd, s.repository, s.branch, s.summary,
c.checkpoint_number, c.title, c.overview, c.work_done,
c.technical_details, c.important_files, c.next_steps,
c.created_at
FROM checkpoints c
JOIN sessions s ON c.session_id = s.id
ORDER BY s.updated_at DESC, c.checkpoint_number ASC;From per-session checkpoints/*.json
:
checkpoints/*.json从会话级checkpoints/*.json
导入:
checkpoints/*.jsonEach checkpoint file has: , , , , , , .
titleoverviewhistorywork_donetechnical_detailsimportant_filesnext_stepsRead (if present) as a session-level summary — it's typically written at session end and is already concise.
index.md每个checkpoint文件包含:、、、、、、。
titleoverviewhistorywork_donetechnical_detailsimportant_filesnext_steps读取(如果存在)作为会话级摘要——它通常在会话结束时编写,内容已简洁。
index.mdWhat to extract:
需要提取的内容:
- → high-level description of what the session accomplished
overview - → concrete tasks completed (good for skills / project pages)
work_done - → implementation specifics (good for concepts pages)
technical_details - → high-value files in the project (good for project pages)
important_files - → open threads (good for linking to ongoing project work)
next_steps
- → 会话完成内容的高层描述
overview - → 已完成的具体任务(适用于技能/项目页面)
work_done - → 实现细节(适用于概念页面)
technical_details - → 项目中的高价值文件(适用于项目页面)
important_files - → 未完成的事项(适用于链接到正在进行的项目工作)
next_steps
Step 3: Parse Session Turns
步骤3:解析会话回合
Read turns from (preferred — already parsed) or from / transcript JSONL.
session-store.dbevents.jsonl从(优先选择——已解析)或 / transcript JSONL读取对话回合。
session-store.dbevents.jsonlFrom session-store.db
:
session-store.db从session-store.db
读取:
session-store.dbsql
SELECT turn_index, user_message, assistant_response, timestamp
FROM turns
WHERE session_id = '<uuid>'
ORDER BY turn_index ASC;sql
SELECT turn_index, user_message, assistant_response, timestamp
FROM turns
WHERE session_id = '<uuid>'
ORDER BY turn_index ASC;From events.jsonl
/ transcript JSONL:
events.jsonl从events.jsonl
/ transcript JSONL读取:
events.jsonlEach file is one session. Each line is a JSON event. See for the full schema.
references/copilot-data-format.mdRelevant event types:
| What it is | Worth reading? |
|---|---|---|
| Session metadata (cwd, branch, version) | Yes — establishes project context |
| User turn | Yes — |
| Assistant turn | Yes — |
| Tool call | Skim — reveals what files/commands were used |
| Tool result | No — usually noise |
Extraction strategy for :
assistant.message- is the assistant's text response — extract this
data.content - is internal reasoning — skip (it's the unpacked
data.reasoningTextfield)reasoningOpaque - lists tool calls — skim tool names and arguments for file access patterns
data.toolRequests - Skip entirely
type: "tool.execution_end"
每个文件对应一个会话。每行是一个JSON事件。完整架构请参见。
references/copilot-data-format.md相关事件类型:
| 说明 | 是否值得读取? |
|---|---|---|
| 会话元数据(cwd、分支、版本) | 是——建立项目上下文 |
| 用户回合 | 是—— |
| 助手回合 | 是—— |
| 工具调用 | 略读——揭示使用的文件/命令 |
| 工具结果 | 否——通常是冗余内容 |
assistant.message- 是助手的文本响应——提取此内容
data.content - 是内部推理逻辑——跳过(是
data.reasoningText字段的展开内容)reasoningOpaque - 列出工具调用——略读工具名称和参数以了解文件访问模式
data.toolRequests - 完全跳过事件
type: "tool.execution_end"
Step 3b: Process Memory Artifacts
步骤3b:处理记忆工件
For each session that has a directory in VS Code workspace storage, read any markdown files saved there (typically ). These are documents the user explicitly saved — treat them as high-quality, user-authored content.
memory-tool/memories/<base64-id>/plan.mdDecode the base64 directory name to get the session UUID:
python
import base64
session_id = base64.b64decode(dir_name).decode('utf-8')Memory artifacts map to project or pages, depending on content type.
skills/concepts/对于在VS Code工作区存储中拥有目录的会话,读取其中保存的所有markdown文件(通常是)。这些是用户明确保存的文档——视为高质量的用户原创内容。
memory-tool/memories/<base64-id>/plan.md解码base64目录名称以获取会话UUID:
python
import base64
session_id = base64.b64decode(dir_name).decode('utf-8')记忆工件根据内容类型映射到项目的或页面。
skills/concepts/Step 3c: Extract File and Ref Patterns
步骤3c:提取文件和引用模式
From :
session-store.dbsql
-- Most-touched files per project
SELECT repository, file_path, COUNT(*) AS touch_count
FROM session_files
GROUP BY repository, file_path
ORDER BY touch_count DESC;
-- Linked commits/PRs/issues per session
SELECT session_id, ref_type, ref_value, turn_index
FROM session_refs
ORDER BY session_id, turn_index;File access patterns reveal which files are architecturally important — note them on project pages.
Session refs link Copilot sessions to git history — useful for connecting wiki knowledge to concrete code changes.
从提取:
session-store.dbsql
-- Most-touched files per project
SELECT repository, file_path, COUNT(*) AS touch_count
FROM session_files
GROUP BY repository, file_path
ORDER BY touch_count DESC;
-- Linked commits/PRs/issues per session
SELECT session_id, ref_type, ref_value, turn_index
FROM session_refs
ORDER BY session_id, turn_index;文件访问模式揭示哪些文件在架构上重要——在项目页面中记录它们。
会话引用将Copilot会话与git历史关联——有助于将wiki知识与具体代码变更连接起来。
Step 4: Cluster by Topic
步骤4:按主题聚类
Don't create one wiki page per session. Instead:
- Group extracted knowledge by topic across sessions
- A single session about "debugging auth + setting up CI" → two separate topics
- Three sessions across different days about "React performance" → one merged topic
- /
cwdgive you a natural first-level grouping;repository'svscode.metadata.jsongives a human-readable session labelcustomTitle
不要为每个会话创建一个wiki页面。相反:
- 跨会话按主题分组提取的知识
- 一个关于“调试认证 + 设置CI”的会话 → 分为两个独立主题
- 不同日期的三个关于“React性能”的会话 → 合并为一个主题
- /
cwd提供自然的一级分组;repository中的vscode.metadata.json提供人类可读的会话标签customTitle
Step 5: Distill into Wiki Pages
步骤5:提炼为Wiki页面
Each Copilot project maps to a project directory in the vault. Derive the project name from or :
cwdrepositoryC:\Users\name\git\my-project → my-project
/Users/name/code/another-app → another-appPrefer (e.g., ) from over raw when available.
repositoryowner/reposession-store.dbcwd每个Copilot项目对应vault中的一个项目目录。从或派生项目名称:
cwdrepositoryC:\Users\name\git\my-project → my-project
/Users/name/code/another-app → another-app当可用时,优先使用中的(例如)而非原始。
session-store.dbrepositoryowner/repocwdProject-specific vs. global knowledge
项目特定知识 vs 全局知识
| What you found | Where it goes | Example |
|---|---|---|
| Project architecture decisions | | |
| Project-specific debugging patterns | | |
| General concept the user learned | | |
| Recurring problem across projects | | |
| A tool/service used | | |
| Patterns across many sessions | | |
For each project with content, create or update the project overview page at — named after the project, not . Obsidian's graph view uses the filename as the node label, so makes every project show up as in the graph. Naming it gives each project a distinct, readable node name.
projects/<name>/<name>.md_project.md_project.md_project<name>.mdImportant: Distill the knowledge, not the conversation. Don't write "In a session on March 15, the user asked about X." Write the knowledge itself, with the session as a source attribution.
Write a frontmatter field on every new/updated page — 1–2 sentences, ≤200 chars, answering "what is this page about?" for a reader who hasn't opened it. 's cheap retrieval path reads this field to avoid opening page bodies.
summary:wiki-queryMark provenance per the convention in (Provenance Markers section):
llm-wiki- Checkpoints and index.md are pre-distilled by the system — treat checkpoint-derived claims as extracted (the system wrote them from observed actions).
- Memory artifacts are user-authored — treat as extracted.
- Conversation turn distillation is mostly inferred. You're synthesizing a coherent claim from many turns. Apply liberally to synthesized patterns, generalizations across sessions, and "what the user really meant" interpretations.
^[inferred] - Use when the user changed direction mid-session or when the session ended unresolved.
^[ambiguous] - Write a frontmatter block on every new/updated page summarizing the rough mix.
provenance:
| 发现内容 | 存储位置 | 示例 |
|---|---|---|
| 项目架构决策 | | |
| 项目特定调试模式 | | |
| 用户学到的通用概念 | | |
| 跨项目的常见问题 | | |
| 使用的工具/服务 | | |
| 多会话中的模式 | | |
对于有内容的每个项目,创建或更新项目概述页面——以项目命名,而非。Obsidian的图谱视图使用文件名作为节点标签,因此会使每个项目在图谱中显示为。命名为可为每个项目提供独特、可读的节点名称。
projects/<name>/<name>.md_project.md_project.md_project<name>.md**重要提示:**提炼的是_知识_,而非对话内容。不要写“在3月15日的会话中,用户询问了X。”而是直接写知识本身,并将会话作为来源归因。
在每个新建/更新的页面上添加前置字段——1-2句话,≤200字符,回答“这个页面是关于什么的?”,供未打开页面的读者了解。的快速检索路径会读取此字段,避免打开页面主体。
summary:wiki-query按照中的约定标记来源(来源标记部分):
llm-wiki- Checkpoints和index.md由系统预先提炼——将来自checkpoint的声明视为提取内容(系统从观察到的操作中编写)。
- 记忆工件是用户原创——视为提取内容。
- 对话回合提炼大多是推断内容。你需要从多个回合中合成连贯的声明。对合成模式、跨会话概括以及“用户真实意图”的解释,广泛使用标记。
^[inferred] - 当用户在会话中途改变方向或会话未解决时,使用标记。
^[ambiguous] - 在每个新建/更新的页面上添加前置块,总结大致的来源类型占比。
provenance:
Step 6: Update Manifest, Journal, and Special Files
步骤6:更新Manifest、日志和特殊文件
Update .manifest.json
.manifest.json更新.manifest.json
.manifest.jsonFor each session processed, add/update its entry with:
- ,
ingested_at,session_idupdated_at - : one of
source_type,"copilot_session","copilot_checkpoint","copilot_transcript""copilot_memory_artifact" - : the decoded project name
project - and
pages_createdlistspages_updated
Also update the section of the manifest:
projectsjson
{
"project-name": {
"repository": "owner/repo",
"cwd": "C:\\Users\\name\\git\\project-name",
"vault_path": "projects/project-name",
"last_ingested": "TIMESTAMP",
"sessions_ingested": 5,
"sessions_total": 8,
"checkpoints_ingested": 12,
"memory_artifacts_ingested": 3
}
}对于每个处理的会话,添加/更新其条目,包含:
- 、
ingested_at、session_idupdated_at - :
source_type、"copilot_session"、"copilot_checkpoint"、"copilot_transcript"之一"copilot_memory_artifact" - :解码后的项目名称
project - 和
pages_created列表pages_updated
同时更新manifest的部分:
projectsjson
{
"project-name": {
"repository": "owner/repo",
"cwd": "C:\\Users\\name\\git\\project-name",
"vault_path": "projects/project-name",
"last_ingested": "TIMESTAMP",
"sessions_ingested": 5,
"sessions_total": 8,
"checkpoints_ingested": 12,
"memory_artifacts_ingested": 3
}
}Create journal entry + update special files
创建日志条目 + 更新特殊文件
Update and per the standard process:
index.mdlog.md- [TIMESTAMP] COPILOT_HISTORY_INGEST projects=N sessions=M checkpoints=C pages_updated=X pages_created=Y mode=append|fullhot.md$OBSIDIAN_VAULT_PATH/hot.mdwiki-ingestupdated按照标准流程更新和:
index.mdlog.md- [TIMESTAMP] COPILOT_HISTORY_INGEST projects=N sessions=M checkpoints=C pages_updated=X pages_created=Y mode=append|fullhot.md$OBSIDIAN_VAULT_PATH/hot.mdwiki-ingestupdatedPrivacy
隐私说明
- Distill and synthesize — don't copy raw conversation text verbatim
- Skip anything that looks like secrets, API keys, passwords, tokens
- /
data.reasoningOpaquein assistant events is internal reasoning — skip entirely, never copy to wikidata.reasoningText - If you encounter personal/sensitive content, ask the user before including it
- The user's conversations may reference other people — be thoughtful about what goes in the wiki
- 提炼和合成内容——不要直接复制原始对话文本
- 跳过任何看起来像密钥、API密钥、密码、令牌的内容
- 助手事件中的/
data.reasoningOpaque是内部推理逻辑——完全跳过,绝不复制到wikidata.reasoningText - 如果遇到个人/敏感内容,在包含前询问用户
- 用户的对话可能涉及其他人——谨慎决定哪些内容可以加入wiki
Reference
参考资料
See for detailed data structure documentation.
references/copilot-data-format.md详细的数据结构文档请参见。
references/copilot-data-format.md