Loading...
Loading...
Compare original and translation side by side
wiki-history-ingest/wiki-history-ingest copilotwiki-history-ingest/wiki-history-ingest copilot.envOBSIDIAN_VAULT_PATHCOPILOT_HISTORY_PATH~/.copilot/session-stateCOPILOT_VSCODE_STORAGE_PATHworkspaceStorage.env.manifest.jsonindex.md.envOBSIDIAN_VAULT_PATHCOPILOT_HISTORY_PATH~/.copilot/session-stateCOPILOT_VSCODE_STORAGE_PATHworkspaceStorage.env.manifest.jsonindex.md.manifest.jsonupdated_atingested_at.manifest.jsonupdated_atingested_atwiki-rebuildwiki-rebuild~/.copilot/session-state/~/.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
└── ...~/.copilot/session-store.db~/.copilot/session-store.dbsessions — 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)<workspaceStorage>/<hash>/GitHub.copilot-chat/<workspaceStorage>/<hash>/GitHub.copilot-chat/.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).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)session-store.dbcheckpointscheckpoints/*.jsonoverviewwork_donetechnical_detailsimportant_filesnext_stepssession-store.dbsessions.summaryindex.mdsession-store.dbturnsevents.jsonlmemory-tool/memories/<id>/plan.mdsession_filestool.execution_*session_refsvscode.metadata.jsoncustomTitlesession-store.dbcheckpointscheckpoints/*.jsonoverviewwork_donetechnical_detailsimportant_filesnext_stepssession-store.dbsessions.summaryindex.mdsession-store.dbturnsevents.jsonlmemory-tool/memories/<id>/plan.mdsession_filestool.execution_*session_refsvscode.metadata.jsoncustomTitle.manifest.jsonundefined.manifest.jsonundefined
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."
构建统一清单——每个会话UUID对应一个条目,并分类:
- **新会话**——未在manifest中记录 → 需要导入
- **已修改会话**——在manifest中记录但`updated_at`时间更新 → 需要重新导入
- **未修改会话**——在manifest中记录且未修改 → 追加模式下跳过
向用户报告:“在session-state中找到X个会话,在session-store.db中找到Y个,VS Code转录文件Z个。Checkpoints:A个。增量:B个新会话,C个已修改会话。”session-store.dbsession-store.dbSELECT 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;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;checkpoints/*.jsoncheckpoints/*.jsontitleoverviewhistorywork_donetechnical_detailsimportant_filesnext_stepsindex.mdtitleoverviewhistorywork_donetechnical_detailsimportant_filesnext_stepsindex.mdoverviewwork_donetechnical_detailsimportant_filesnext_stepsoverviewwork_donetechnical_detailsimportant_filesnext_stepssession-store.dbevents.jsonlsession-store.dbevents.jsonlsession-store.dbsession-store.dbSELECT turn_index, user_message, assistant_response, timestamp
FROM turns
WHERE session_id = '<uuid>'
ORDER BY turn_index ASC;SELECT turn_index, user_message, assistant_response, timestamp
FROM turns
WHERE session_id = '<uuid>'
ORDER BY turn_index ASC;events.jsonlevents.jsonlreferences/copilot-data-format.md | 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 |
assistant.messagedata.contentdata.reasoningTextreasoningOpaquedata.toolRequeststype: "tool.execution_end"references/copilot-data-format.md | 说明 | 是否值得读取? |
|---|---|---|
| 会话元数据(cwd、分支、版本) | 是——建立项目上下文 |
| 用户回合 | 是—— |
| 助手回合 | 是—— |
| 工具调用 | 略读——揭示使用的文件/命令 |
| 工具结果 | 否——通常是冗余内容 |
assistant.messagedata.contentdata.reasoningTextreasoningOpaquedata.toolRequeststype: "tool.execution_end"memory-tool/memories/<base64-id>/plan.mdimport base64
session_id = base64.b64decode(dir_name).decode('utf-8')skills/concepts/memory-tool/memories/<base64-id>/plan.mdimport base64
session_id = base64.b64decode(dir_name).decode('utf-8')skills/concepts/session-store.db-- 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;session-store.db-- 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;cwdrepositoryvscode.metadata.jsoncustomTitlecwdrepositoryvscode.metadata.jsoncustomTitlecwdrepositoryC:\Users\name\git\my-project → my-project
/Users/name/code/another-app → another-apprepositoryowner/reposession-store.dbcwdcwdrepositoryC:\Users\name\git\my-project → my-project
/Users/name/code/another-app → another-appsession-store.dbrepositoryowner/repocwd| 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 | | |
projects/<name>/<name>.md_project.md_project.md_project<name>.mdsummary:wiki-queryllm-wiki^[inferred]^[ambiguous]provenance:| 发现内容 | 存储位置 | 示例 |
|---|---|---|
| 项目架构决策 | | |
| 项目特定调试模式 | | |
| 用户学到的通用概念 | | |
| 跨项目的常见问题 | | |
| 使用的工具/服务 | | |
| 多会话中的模式 | | |
projects/<name>/<name>.md_project.md_project.md_project<name>.mdsummary:wiki-queryllm-wiki^[inferred]^[ambiguous]provenance:.manifest.json.manifest.jsoningested_atsession_idupdated_atsource_type"copilot_session""copilot_checkpoint""copilot_transcript""copilot_memory_artifact"projectpages_createdpages_updatedprojects{
"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_atsession_idupdated_atsource_type"copilot_session""copilot_checkpoint""copilot_transcript""copilot_memory_artifact"projectpages_createdpages_updatedprojects{
"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
}
}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-ingestupdatedindex.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-ingestupdateddata.reasoningOpaquedata.reasoningTextdata.reasoningOpaquedata.reasoningTextreferences/copilot-data-format.mdreferences/copilot-data-format.md