skillwiki 0.10.108 → 0.10.110

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 (30) hide show
  1. package/dist/{chunk-JCDAEZVD.js → chunk-5MV5SSRM.js} +1 -1
  2. package/dist/{chunk-Z4NCF6K6.js → chunk-6X6PPQNI.js} +481 -179
  3. package/dist/{chunk-DTTKCCQ4.js → chunk-KX5Y3GSX.js} +2 -2
  4. package/dist/{chunk-QU2IXZRN.js → chunk-NA3TZ4JN.js} +2 -2
  5. package/dist/{chunk-PGD3J2GE.js → chunk-QU2CKXM4.js} +49 -37
  6. package/dist/{chunk-GJC2CI3W.js → chunk-R2DJ7IJ5.js} +103 -0
  7. package/dist/{chunk-HMHMCPCE.js → chunk-WPJHDRTP.js} +1 -1
  8. package/dist/cli.js +135 -101
  9. package/dist/{index-projection-ESBJOBS7.js → index-projection-6XGESSHV.js} +3 -3
  10. package/dist/{managed-write-preflight-AYD3CJYD.js → managed-write-preflight-JPOBVVSU.js} +4 -4
  11. package/dist/skillwiki-mcp.js +7 -7
  12. package/dist/sources-CLOF5VAT.js +9 -0
  13. package/dist/vault-sync/scripts/wiki-snapshot.sh +20 -12
  14. package/package.json +1 -1
  15. package/skills/.claude-plugin/plugin.json +1 -1
  16. package/skills/.codex-plugin/plugin.json +1 -1
  17. package/skills/.cursor-plugin/plugin.json +1 -1
  18. package/skills/package.json +1 -1
  19. package/skills/skills/skillwiki-connect/SKILL.md +8 -0
  20. package/skills/skills/skillwiki-mcp/SKILL.md +8 -0
  21. package/skills/skills/using-skillwiki/SKILL.md +1 -1
  22. package/skills/skills/wiki-init/SKILL.md +12 -11
  23. package/skills/skillwiki-connect/SKILL.md +8 -0
  24. package/skills/skillwiki-mcp/SKILL.md +8 -0
  25. package/skills/using-skillwiki/SKILL.md +1 -1
  26. package/skills/wiki-init/SKILL.md +12 -11
  27. package/templates/launchd/com.karlchow.skillwiki-clip-outbox.plist +22 -0
  28. package/templates/web-clipper/llm-wiki-clippings.json +1 -1
  29. package/templates/web-clipper/readme.txt +13 -13
  30. package/dist/sources-QTQSZMST.js +0 -9
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runSkillwikiMcpStdio
4
- } from "./chunk-Z4NCF6K6.js";
4
+ } from "./chunk-6X6PPQNI.js";
5
5
  import "./chunk-7I2TPIV5.js";
6
- import "./chunk-DTTKCCQ4.js";
7
- import "./chunk-PGD3J2GE.js";
8
- import "./chunk-HMHMCPCE.js";
9
- import "./chunk-QU2IXZRN.js";
10
- import "./chunk-JCDAEZVD.js";
11
- import "./chunk-GJC2CI3W.js";
6
+ import "./chunk-KX5Y3GSX.js";
7
+ import "./chunk-QU2CKXM4.js";
8
+ import "./chunk-WPJHDRTP.js";
9
+ import "./chunk-NA3TZ4JN.js";
10
+ import "./chunk-5MV5SSRM.js";
11
+ import "./chunk-R2DJ7IJ5.js";
12
12
 
13
13
  // src/mcp-entry.ts
14
14
  runSkillwikiMcpStdio().catch((error) => {
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runSourcesPending
4
+ } from "./chunk-NA3TZ4JN.js";
5
+ import "./chunk-5MV5SSRM.js";
6
+ import "./chunk-R2DJ7IJ5.js";
7
+ export {
8
+ runSourcesPending
9
+ };
@@ -1067,28 +1067,33 @@ snapshot_post_sync_log_append_race_detected() {
1067
1067
  # delete-intent reconciliation, re-read the current store, and re-run the
1068
1068
  # existing exact worktree parity and semantic preview gates. Returns 0 only when
1069
1069
  # the recovery converged; the caller refuses (without a second retry) otherwise.
1070
- snapshot_retry_sync_after_log_append_race() {
1070
+ # reason is log-append (store log is a strict prefix extension) or
1071
+ # semantic-preview (worktree matches store but preview reports index/log drift).
1072
+ snapshot_retry_sync_after_projection_race() {
1071
1073
  local context="${1:-post-sync}"
1074
+ local reason="${2:-log-append}"
1072
1075
  if ! rclone sync "$CLOUD_REMOTE" "$SNAPSHOT_WORKTREE" "${RCLONE_OPTS[@]}" --stats 10s 2>&1 | tee "$RCLONE_LOG"; then
1073
- log "ERROR: $context log-append race retry rclone sync failed"
1076
+ log "ERROR: $context $reason race retry rclone sync failed"
1074
1077
  tail -50 "$RCLONE_LOG" >> "$LOG_FILE" 2>/dev/null || true
1075
1078
  rm -f "$RCLONE_LOG"
1076
1079
  return 1
1077
1080
  fi
1078
1081
  rm -f "$RCLONE_LOG"
1079
- log "post-sync log-append race detected; performed one additional rclone sync context=$context"
1082
+ log "post-sync $reason race detected; performed one additional rclone sync context=$context"
1080
1083
  if ! snapshot_reconcile_delete_intents; then
1081
- log "ERROR: $context log-append race retry delete-intent reconciliation failed"
1084
+ log "ERROR: $context $reason race retry delete-intent reconciliation failed"
1082
1085
  return 1
1083
1086
  fi
1084
1087
  snapshot_gate_projection_candidate \
1085
- "FAIL $context log-append race retry projection expectation refresh; snapshot promotion refused" \
1086
- "FAIL $context log-append race retry projection candidate verification; snapshot promotion refused"
1088
+ "FAIL $context $reason race retry projection expectation refresh; snapshot promotion refused" \
1089
+ "FAIL $context $reason race retry projection candidate verification; snapshot promotion refused"
1087
1090
  }
1088
1091
 
1089
- # Post-sync projection gate with at most one log-append-race recovery.
1090
- # A first failure that is not the recoverable log-append shape (or that does not
1091
- # converge after the single retry) is logged as the terminal refusal.
1092
+ # Post-sync projection gate with at most one recoverable-race re-sync.
1093
+ # Recoverable shapes are a store-ahead log append, or exact worktree==store
1094
+ # byte parity whose semantic preview still reports index/log drift (a late
1095
+ # typed page whose matching index.md has not landed yet). Any other mismatch,
1096
+ # or a retry that does not converge, is the terminal refusal.
1092
1097
  snapshot_gate_projection_candidate_with_race_retry() {
1093
1098
  local context="${1:-post-sync}"
1094
1099
  local refresh_fail="$2"
@@ -1097,14 +1102,17 @@ snapshot_gate_projection_candidate_with_race_retry() {
1097
1102
  log "$refresh_fail"
1098
1103
  return 1
1099
1104
  fi
1100
- # Exact byte parity is the ordinary path. Its semantic preview is terminal:
1101
- # a later append must not turn a preview failure into a retry.
1102
1105
  if [ -z "$PROJECTION_STATE_DIR" ] \
1103
1106
  || { cmp -s "$PROJECTION_STATE_DIR/expected-index.md" "$SNAPSHOT_WORKTREE/index.md" \
1104
1107
  && cmp -s "$PROJECTION_STATE_DIR/expected-log.md" "$SNAPSHOT_WORKTREE/log.md"; }; then
1105
1108
  if snapshot_verify_projection_candidate; then
1106
1109
  return 0
1107
1110
  fi
1111
+ # Exact byte parity with a drifting preview is the page-vs-index race:
1112
+ # retry once. A later append must not get a second retry after this.
1113
+ if snapshot_retry_sync_after_projection_race "$context" "semantic-preview"; then
1114
+ return 0
1115
+ fi
1108
1116
  log "$verify_fail"
1109
1117
  return 1
1110
1118
  fi
@@ -1113,7 +1121,7 @@ snapshot_gate_projection_candidate_with_race_retry() {
1113
1121
  log "$verify_fail"
1114
1122
  return 1
1115
1123
  fi
1116
- if snapshot_retry_sync_after_log_append_race "$context"; then
1124
+ if snapshot_retry_sync_after_projection_race "$context" "log-append"; then
1117
1125
  return 0
1118
1126
  fi
1119
1127
  log "$verify_fail"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.108",
3
+ "version": "0.10.110",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "skillwiki": "dist/cli.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.108",
3
+ "version": "0.10.110",
4
4
  "skills": "./",
5
5
  "description": "Project-aware Karpathy-style knowledge base for Claude Code: 22 prompt-only skills (wiki-*, proj-*, using-skillwiki, skillwiki-mcp, skillwiki-connect) backed by the deterministic `skillwiki` CLI.",
6
6
  "author": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.108",
3
+ "version": "0.10.110",
4
4
  "description": "Project-aware Karpathy-style knowledge base for Codex with 22 prompt-only skills backed by the deterministic skillwiki CLI.",
5
5
  "author": {
6
6
  "name": "karlorz",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.108",
3
+ "version": "0.10.110",
4
4
  "description": "Project-aware Karpathy-style knowledge base: 22 prompt-only skills (wiki-*, proj-*, using-skillwiki, skillwiki-mcp, skillwiki-connect) backed by HTTP MCP wiki_capture.",
5
5
  "author": {
6
6
  "name": "karlorz"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skillwiki/skills",
3
- "version": "0.10.108",
3
+ "version": "0.10.110",
4
4
  "private": true,
5
5
  "files": [
6
6
  "wiki-*",
@@ -68,6 +68,14 @@ skillwiki connect --from-stdin --dry-run
68
68
 
69
69
  Doctor on an MCP-only leaf (no vault + token present + vault-sync not installed) treats missing `WIKI_PATH` as info, not an init cluster.
70
70
 
71
+ ## Windows MCP-only leaves
72
+
73
+ - Do not configure an optional Git mirror as `WIKI_PATH`: CLI `skillwiki query` reads that local mirror, not HTTP MCP. Use the advertised `wiki_query` tool for live reads and `wiki_context` for active work.
74
+ - User config home resolves from a nonblank explicit home, then `HOME`, `USERPROFILE`, and the OS home directory. Empty or unset `HOME` does not require persisting a workaround environment variable. `skillwiki config path` and doctor's config-file row show the resolved absolute path.
75
+ - If the npm-generated PowerShell launcher fails or interrupts a command sequence, use `skillwiki.cmd config path` and `skillwiki.cmd doctor --check-mcp`, or invoke the installed `dist/cli.js` with Node. Do not edit generated shims or infer a SkillWiki defect without inspecting the failing wrapper.
76
+ - POSIX mode `0600` is not proof of a restrictive Windows ACL. The operator must keep the user config private. If a harness blocks attachment/stdin credential transfer, stop and request operator-controlled configuration of that resolved file with restricted access; never automatically bypass the harness, print the token, or store it in a repo or Drive.
77
+ - Record CLI/plugin/daemon versions separately when investigating drift. A scheduled notifier is not evidence that an upgrade completed; use an explicit operator-approved upgrade and restart the client when delivery includes installation changes.
78
+
71
79
  ## Stop conditions
72
80
 
73
81
  - A non-local-only SkillWiki connector already authenticates.
@@ -45,10 +45,18 @@ Check the successful write receipt's `vault_id` against the intended vault befor
45
45
 
46
46
  ## Reads
47
47
 
48
+ CLI `skillwiki query` reads a local configured vault; it does not forward to HTTP MCP. On an MCP-only leaf, leave `WIKI_PATH` unset and use the advertised MCP `wiki_query` for live reads. Optional Git mirrors are read-only snapshots and may lag the live writer.
49
+
48
50
  Local `~/wiki` (or `skillwiki path`) is fine for reads. MCP read tools are optional. Prefer ordinary file reads of the local mirror. Frozen-leaf agents should use HTTP `wiki_sources_pending`, `wiki_lint_summary`, `wiki_stale`, `wiki_compile_status`, and `wiki_reviews` instead of local CLI commands when those tools are advertised.
49
51
 
50
52
  `wiki_query` is typed knowledge only unless `scope` is `work` or `all`. For recent progress, key projects, or to-dos, feature-detect and call `wiki_progress`; apply `project`, `host`, or `agent_role` filters when requested, and present `recent_progress`, `key_projects`, and `todos` as complete bullet lists. For queued work, doctor, plugin-drift, or MCP diagnose questions, call `wiki_context` first (active_work) or pass `scope: "work"` / `"all"`. Do not treat a top typed packet hit as the live work queue.
51
53
 
54
+ ## Bridge diagnostics
55
+
56
+ Use a protocol SDK rather than copying a one-line SSE parser. SkillWiki diagnostic clients use the existing MCP TypeScript SDK to validate initialization, negotiate the protocol, send `notifications/initialized`, carry optional session IDs and negotiated protocol headers, and parse JSON or SSE (including multiline data). Empty HTTP 202 bodies acknowledge notifications/responses, not a successful initialize result. Doctor/connect probes have a 10-second overall deadline per connection and close their transports without terminating the server session.
57
+
58
+ Treat a missing/invalid initialize result, authentication refusal, or timeout as a failed handshake; do not proceed to tools calls merely because the HTTP status is successful. Preserve bearer redaction in all diagnostics.
59
+
52
60
  ## Errors
53
61
 
54
62
  Report handshake, capture, and append failures literally. If tools are missing after a 401 or `missing_prereq`, stop and tell the operator to set `SKILLWIKI_MCP_TOKEN` via process env, host Configure, or `skillwiki connect --from-file` (unknown agents; never paste-into-chat), run `grok plugin update skillwiki`, and start a new session. Over SSH, treat an OAuth login URL the same way: report `headless_oauth_loopback` and stop. Do not fall back to local `raw/transcripts/` writes.
@@ -183,7 +183,7 @@ If the vault has `.WIKI_GIT_FROZEN`:
183
183
  ## Skill Map
184
184
  | Skill | When to Invoke |
185
185
  |-------|----------------|
186
- | `wiki-init` | Bootstrap a vault and install `_Templates/web-clipper/llm-wiki-clippings.json` plus import guidance |
186
+ | `wiki-init` | Bootstrap a vault and install `_Templates/web-clipper/llm-wiki-clippings.json` plus import guidance. File-level clips use a dedicated `~/Obsidian/clip-outbox` vault, not `~/wiki`; `skillwiki doctor` reports clip-channel rows; `wiki_capture` is not clip ingress. |
187
187
  | `wiki-ingest` | Convert URLs, files, or pasted text into typed-knowledge pages |
188
188
  | `wiki-query` | Search typed knowledge by default; work-queue / doctor / MCP diagnose questions use `wiki_context` or `--scope work` / `--scope all`; explicitly requested fresh/raw evidence uses the separate pending channel |
189
189
  | `wiki-lint` | Vault health and lint checks; use `health` for whole-system reports and `lint --summary` for bounded lint buckets |
@@ -29,17 +29,18 @@ None for the first run.
29
29
  `skillwiki init --target <dir> --domain existing --write-gitignore`.
30
30
  6. Report the installed Web Clipper assets at
31
31
  `_Templates/web-clipper/llm-wiki-clippings.json` and
32
- `_Templates/web-clipper/readme.txt`. Tell the user to open Obsidian Web
33
- Clipper Settings, import the JSON, and repeat the import for every browser
34
- profile that should capture into the vault. Re-init preserves existing
35
- customized copies, including short files.
36
- 7. Explain that the generic template preserves `{{content}}`; remote HTTP(S)
37
- images remain external dependencies. An attended local-asset capture may
38
- choose any URL-friendly path under `raw/assets/`, but it must write the asset,
39
- emit an explicit vault-qualified `![[raw/assets/...]]` embed, verify
40
- resolution/preview, and only then finalize the immutable raw note. Also write
41
- a sibling Markdown note (`listings.md`, `note.md`, or a dated `.md`) that
42
- embeds each file. Never use `.txt` as the only index.
32
+ `_Templates/web-clipper/readme.txt`. For the file-level clip channel, create
33
+ or select the dedicated Obsidian vault `~/Obsidian/clip-outbox` (never
34
+ `~/wiki`), with `raw/articles` and `raw/assets`, attachment folder
35
+ `raw/assets`. Tell the user to open Obsidian Web Clipper Settings, import the
36
+ JSON, select that outbox vault, keep **Add to Obsidian**, and repeat the
37
+ import for every browser profile. Re-init preserves existing customized
38
+ copies, including short files. A new package version never silently updates
39
+ browser extension storage.
40
+ 7. Explain that the generic template preserves `{{content}}`. The clip-outbox
41
+ worker localizes required v1 HTTPS images before freeze, writes
42
+ `![[raw/assets/...]]` embeds, and uploads `raw/assets/<capture-id>/note.md`.
43
+ `wiki_capture` is not clip ingress. Never use `.txt` as the only index.
43
44
  8. **Suggest first sources.** Propose 3–5 initial sources (URLs, papers, articles) appropriate to the domain. Prompt the user to provide the first one to ingest, then hand off to wiki-ingest.
44
45
 
45
46
  ## Stop conditions
@@ -68,6 +68,14 @@ skillwiki connect --from-stdin --dry-run
68
68
 
69
69
  Doctor on an MCP-only leaf (no vault + token present + vault-sync not installed) treats missing `WIKI_PATH` as info, not an init cluster.
70
70
 
71
+ ## Windows MCP-only leaves
72
+
73
+ - Do not configure an optional Git mirror as `WIKI_PATH`: CLI `skillwiki query` reads that local mirror, not HTTP MCP. Use the advertised `wiki_query` tool for live reads and `wiki_context` for active work.
74
+ - User config home resolves from a nonblank explicit home, then `HOME`, `USERPROFILE`, and the OS home directory. Empty or unset `HOME` does not require persisting a workaround environment variable. `skillwiki config path` and doctor's config-file row show the resolved absolute path.
75
+ - If the npm-generated PowerShell launcher fails or interrupts a command sequence, use `skillwiki.cmd config path` and `skillwiki.cmd doctor --check-mcp`, or invoke the installed `dist/cli.js` with Node. Do not edit generated shims or infer a SkillWiki defect without inspecting the failing wrapper.
76
+ - POSIX mode `0600` is not proof of a restrictive Windows ACL. The operator must keep the user config private. If a harness blocks attachment/stdin credential transfer, stop and request operator-controlled configuration of that resolved file with restricted access; never automatically bypass the harness, print the token, or store it in a repo or Drive.
77
+ - Record CLI/plugin/daemon versions separately when investigating drift. A scheduled notifier is not evidence that an upgrade completed; use an explicit operator-approved upgrade and restart the client when delivery includes installation changes.
78
+
71
79
  ## Stop conditions
72
80
 
73
81
  - A non-local-only SkillWiki connector already authenticates.
@@ -45,10 +45,18 @@ Check the successful write receipt's `vault_id` against the intended vault befor
45
45
 
46
46
  ## Reads
47
47
 
48
+ CLI `skillwiki query` reads a local configured vault; it does not forward to HTTP MCP. On an MCP-only leaf, leave `WIKI_PATH` unset and use the advertised MCP `wiki_query` for live reads. Optional Git mirrors are read-only snapshots and may lag the live writer.
49
+
48
50
  Local `~/wiki` (or `skillwiki path`) is fine for reads. MCP read tools are optional. Prefer ordinary file reads of the local mirror. Frozen-leaf agents should use HTTP `wiki_sources_pending`, `wiki_lint_summary`, `wiki_stale`, `wiki_compile_status`, and `wiki_reviews` instead of local CLI commands when those tools are advertised.
49
51
 
50
52
  `wiki_query` is typed knowledge only unless `scope` is `work` or `all`. For recent progress, key projects, or to-dos, feature-detect and call `wiki_progress`; apply `project`, `host`, or `agent_role` filters when requested, and present `recent_progress`, `key_projects`, and `todos` as complete bullet lists. For queued work, doctor, plugin-drift, or MCP diagnose questions, call `wiki_context` first (active_work) or pass `scope: "work"` / `"all"`. Do not treat a top typed packet hit as the live work queue.
51
53
 
54
+ ## Bridge diagnostics
55
+
56
+ Use a protocol SDK rather than copying a one-line SSE parser. SkillWiki diagnostic clients use the existing MCP TypeScript SDK to validate initialization, negotiate the protocol, send `notifications/initialized`, carry optional session IDs and negotiated protocol headers, and parse JSON or SSE (including multiline data). Empty HTTP 202 bodies acknowledge notifications/responses, not a successful initialize result. Doctor/connect probes have a 10-second overall deadline per connection and close their transports without terminating the server session.
57
+
58
+ Treat a missing/invalid initialize result, authentication refusal, or timeout as a failed handshake; do not proceed to tools calls merely because the HTTP status is successful. Preserve bearer redaction in all diagnostics.
59
+
52
60
  ## Errors
53
61
 
54
62
  Report handshake, capture, and append failures literally. If tools are missing after a 401 or `missing_prereq`, stop and tell the operator to set `SKILLWIKI_MCP_TOKEN` via process env, host Configure, or `skillwiki connect --from-file` (unknown agents; never paste-into-chat), run `grok plugin update skillwiki`, and start a new session. Over SSH, treat an OAuth login URL the same way: report `headless_oauth_loopback` and stop. Do not fall back to local `raw/transcripts/` writes.
@@ -183,7 +183,7 @@ If the vault has `.WIKI_GIT_FROZEN`:
183
183
  ## Skill Map
184
184
  | Skill | When to Invoke |
185
185
  |-------|----------------|
186
- | `wiki-init` | Bootstrap a vault and install `_Templates/web-clipper/llm-wiki-clippings.json` plus import guidance |
186
+ | `wiki-init` | Bootstrap a vault and install `_Templates/web-clipper/llm-wiki-clippings.json` plus import guidance. File-level clips use a dedicated `~/Obsidian/clip-outbox` vault, not `~/wiki`; `skillwiki doctor` reports clip-channel rows; `wiki_capture` is not clip ingress. |
187
187
  | `wiki-ingest` | Convert URLs, files, or pasted text into typed-knowledge pages |
188
188
  | `wiki-query` | Search typed knowledge by default; work-queue / doctor / MCP diagnose questions use `wiki_context` or `--scope work` / `--scope all`; explicitly requested fresh/raw evidence uses the separate pending channel |
189
189
  | `wiki-lint` | Vault health and lint checks; use `health` for whole-system reports and `lint --summary` for bounded lint buckets |
@@ -29,17 +29,18 @@ None for the first run.
29
29
  `skillwiki init --target <dir> --domain existing --write-gitignore`.
30
30
  6. Report the installed Web Clipper assets at
31
31
  `_Templates/web-clipper/llm-wiki-clippings.json` and
32
- `_Templates/web-clipper/readme.txt`. Tell the user to open Obsidian Web
33
- Clipper Settings, import the JSON, and repeat the import for every browser
34
- profile that should capture into the vault. Re-init preserves existing
35
- customized copies, including short files.
36
- 7. Explain that the generic template preserves `{{content}}`; remote HTTP(S)
37
- images remain external dependencies. An attended local-asset capture may
38
- choose any URL-friendly path under `raw/assets/`, but it must write the asset,
39
- emit an explicit vault-qualified `![[raw/assets/...]]` embed, verify
40
- resolution/preview, and only then finalize the immutable raw note. Also write
41
- a sibling Markdown note (`listings.md`, `note.md`, or a dated `.md`) that
42
- embeds each file. Never use `.txt` as the only index.
32
+ `_Templates/web-clipper/readme.txt`. For the file-level clip channel, create
33
+ or select the dedicated Obsidian vault `~/Obsidian/clip-outbox` (never
34
+ `~/wiki`), with `raw/articles` and `raw/assets`, attachment folder
35
+ `raw/assets`. Tell the user to open Obsidian Web Clipper Settings, import the
36
+ JSON, select that outbox vault, keep **Add to Obsidian**, and repeat the
37
+ import for every browser profile. Re-init preserves existing customized
38
+ copies, including short files. A new package version never silently updates
39
+ browser extension storage.
40
+ 7. Explain that the generic template preserves `{{content}}`. The clip-outbox
41
+ worker localizes required v1 HTTPS images before freeze, writes
42
+ `![[raw/assets/...]]` embeds, and uploads `raw/assets/<capture-id>/note.md`.
43
+ `wiki_capture` is not clip ingress. Never use `.txt` as the only index.
43
44
  8. **Suggest first sources.** Propose 3–5 initial sources (URLs, papers, articles) appropriate to the domain. Prompt the user to provide the first one to ingest, then hand off to wiki-ingest.
44
45
 
45
46
  ## Stop conditions
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>Label</key>
6
+ <string>com.karlchow.skillwiki-clip-outbox</string>
7
+ <key>ProgramArguments</key>
8
+ <array>
9
+ <string>/usr/local/bin/skillwiki</string>
10
+ <string>clip-outbox</string>
11
+ <string>watch</string>
12
+ </array>
13
+ <key>KeepAlive</key>
14
+ <true/>
15
+ <key>RunAtLoad</key>
16
+ <true/>
17
+ <key>WatchPaths</key>
18
+ <array>
19
+ <string>/Users/REPLACE/Obsidian/clip-outbox/raw/articles</string>
20
+ </array>
21
+ </dict>
22
+ </plist>
@@ -51,6 +51,6 @@
51
51
  }
52
52
  ],
53
53
  "triggers": [],
54
- "noteNameFormat": "{{date|date:\"YYYY-MM-DD\"}}-{{title|safe_name}}",
54
+ "noteNameFormat": "{{date|date:\"YYYY-MM-DD\"}}-{{title|safe_name}}-{{date|date:\"HHmmss\"}}",
55
55
  "path": "raw/articles"
56
56
  }
@@ -1,16 +1,16 @@
1
1
  SkillWiki Obsidian Web Clipper template
2
2
 
3
- 1. Open Obsidian Web Clipper Settings in the browser profile that will capture this vault.
4
- 2. Import llm-wiki-clippings.json.
5
- 3. Confirm the destination path is raw/articles and the behavior is Create.
6
- 4. Repeat the import for every browser profile that should capture into this vault.
3
+ Dedicated clip-outbox (v1):
4
+ 1. Create or select an Obsidian vault at ~/Obsidian/clip-outbox (outside ~/wiki).
5
+ 2. Create raw/articles and raw/assets in that vault. Set the attachment folder to raw/assets.
6
+ 3. Open Obsidian Web Clipper Settings in the browser profile that will capture.
7
+ 4. Import llm-wiki-clippings.json.
8
+ 5. Select the clip-outbox vault. Keep Add to Obsidian. Do not select ~/wiki.
9
+ 6. Confirm the destination path is raw/articles and the behavior is Create.
10
+ 7. Repeat the import for every browser profile. Shipping a new JSON does not update extension storage.
11
+ 8. Verify with a scratch capture and a repeated same-title save before enabling delivery.
7
12
 
8
- The generic template preserves Web Clipper's {{content}} output. Remote HTTP(S)
9
- images remain external dependencies and are not guaranteed to be downloaded or
10
- available offline.
11
-
12
- For attended local asset materialization, an agent may choose any URL-friendly
13
- path under raw/assets/. Write the asset first, use an explicit vault-qualified
14
- Obsidian embed such as ![[raw/assets/example/diagram.png]], verify the target and
15
- preview, and only then finalize the new raw capture. Referenced asset paths are
16
- stable after capture.
13
+ The generic template preserves Web Clipper's {{content}} output. The clip-outbox
14
+ worker localizes remote HTTPS images, writes explicit ![[raw/assets/...]] embeds,
15
+ and uploads a sibling Markdown index at raw/assets/<capture-id>/note.md. Never use
16
+ .txt as the only index. wiki_capture is not clip or image ingress.
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- runSourcesPending
4
- } from "./chunk-QU2IXZRN.js";
5
- import "./chunk-JCDAEZVD.js";
6
- import "./chunk-GJC2CI3W.js";
7
- export {
8
- runSourcesPending
9
- };