skillwiki 0.10.110 → 0.10.111

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 (36) hide show
  1. package/dist/{chunk-5MV5SSRM.js → chunk-5IBLXGLY.js} +5 -3
  2. package/dist/chunk-6OQLBNKR.js +250 -0
  3. package/dist/chunk-GQWCTJTU.js +55 -0
  4. package/dist/{chunk-QU2CKXM4.js → chunk-HBJLFPQP.js} +91 -199
  5. package/dist/chunk-I2J3IJB7.js +54 -0
  6. package/dist/{chunk-WPJHDRTP.js → chunk-I6IRJCUJ.js} +12 -57
  7. package/dist/{chunk-NA3TZ4JN.js → chunk-JQV5KNPT.js} +8 -6
  8. package/dist/chunk-KWEYA3OE.js +60 -0
  9. package/dist/{chunk-KX5Y3GSX.js → chunk-MRPJ7X7W.js} +5 -3
  10. package/dist/{chunk-6X6PPQNI.js → chunk-OJJBZDPR.js} +162 -296
  11. package/dist/chunk-OSL4J7GF.js +32 -0
  12. package/dist/chunk-PYPPG7RF.js +126 -0
  13. package/dist/chunk-QESNTTVY.js +50 -0
  14. package/dist/chunk-TDBUJUYH.js +109 -0
  15. package/dist/{chunk-R2DJ7IJ5.js → chunk-UIEQIJXP.js} +5 -336
  16. package/dist/chunk-X5GL2FCU.js +344 -0
  17. package/dist/chunk-ZRGZBAVS.js +98 -0
  18. package/dist/cli.js +308 -298
  19. package/dist/{index-projection-6XGESSHV.js → index-projection-2K672CBO.js} +5 -3
  20. package/dist/journal-QU5IDXQF.js +13 -0
  21. package/dist/{managed-write-preflight-JPOBVVSU.js → managed-write-preflight-GRSHQYKC.js} +7 -4
  22. package/dist/migrate-PIB4QA54.js +21 -0
  23. package/dist/ready-S7F53Q2D.js +9 -0
  24. package/dist/runtime-GLMI5OCT.js +15 -0
  25. package/dist/skillwiki-mcp.js +12 -7
  26. package/dist/sources-D2MGP246.js +10 -0
  27. package/dist/upload-HTE62TOV.js +14 -0
  28. package/dist/watcher-MHG46J3R.js +616 -0
  29. package/docs/clip-outbox.md +119 -0
  30. package/package.json +5 -1
  31. package/skills/.claude-plugin/plugin.json +1 -1
  32. package/skills/.codex-plugin/plugin.json +1 -1
  33. package/skills/.cursor-plugin/plugin.json +1 -1
  34. package/skills/package.json +1 -1
  35. package/templates/launchd/com.karlchow.skillwiki-clip-outbox.plist +12 -13
  36. package/dist/sources-CLOF5VAT.js +0 -9
@@ -0,0 +1,119 @@
1
+ # Clip-outbox worker and attended migration
2
+
3
+ The channel remains disabled by default. Installing or updating npm ships the
4
+ worker and launchd template; it does not change `clip_outbox.enabled`, load a
5
+ job, import browser settings, or enable wiki-push. `skillwiki doctor` reports
6
+ **clip channel not configured** until attended setup is complete.
7
+
8
+ After upgrading the CLI, refresh the host plist explicitly:
9
+
10
+ ```sh
11
+ skillwiki clip-outbox install-or-migrate
12
+ skillwiki doctor
13
+ ```
14
+
15
+ This writes or refreshes
16
+ `~/Library/LaunchAgents/com.karlchow.skillwiki-clip-outbox.plist` from the new
17
+ package. It preserves host configuration and does not call launchctl. Existing
18
+ customizations to this dedicated plist are replaced by the packaged template.
19
+ Its arguments use the absolute installed Node executable and npm `skillwiki`
20
+ bin symlink (including `/opt/homebrew/bin/skillwiki`); npm version upgrades keep
21
+ that bin path. WatchPaths expands the configured outbox root. KeepAlive and
22
+ RunAtLoad supervise the worker; WatchPaths only aids wakeup. The actual recursive
23
+ watch is native macOS FSEvents. If Node's installation prefix changes, rerun the
24
+ migration. Installing with `--omit=optional` omits FSEvents and the worker fails
25
+ closed instead of switching to polling.
26
+
27
+ ## Before operator enablement
28
+
29
+ 1. Create/select the dedicated `~/Obsidian/clip-outbox` Obsidian vault, with
30
+ `raw/articles` and `raw/assets`. Never select `~/wiki`. Import the existing
31
+ clipper template separately in every browser profile and confirm scratch
32
+ captures arrive in this outbox. Startup scans discover files already there;
33
+ move historical backlog elsewhere until an attended exact-file selection is
34
+ implemented. Do not copy a historical vault into the dedicated outbox.
35
+ 2. Configure the existing `clip_outbox.*` namespace: `root`, `state_root`,
36
+ `mirror_root`, `ready_url`, `s3_credential_ref`, `ready_credential_ref`, and
37
+ either an inventoried `d8_note_root` or explicit `d8_note_absent=true`.
38
+ Leave `enabled=false` throughout preparation. State lives outside both
39
+ vaults, for example `~/Library/Application Support/SkillWiki/clip-outbox`;
40
+ create its parent first. The resolver enforces disjoint roots and the fixed
41
+ `central` / `seaweed-wiki:cloud/wiki` destination. The mirror freeze marker
42
+ must exist and `vault_sync.push_enabled=false` must remain set, with the
43
+ wiki-push job unloaded.
44
+ 3. Install separately scoped credentials in the operator-owned, mode-0600 host
45
+ file `~/.skillwiki/clip-outbox-credentials.json`. It is a JSON provider map:
46
+ the name referenced by `s3_credential_ref` maps to an object with `endpoint`,
47
+ optional `region` (default `us-east-1`), `accessKeyId`, `secretAccessKey`, and
48
+ optional `sessionToken`; the name referenced by `ready_credential_ref` maps
49
+ to the separately issued file-ingress token string. References may instead
50
+ resolve from service environment variables (S3 value is the same JSON object
51
+ encoded as text). Never place values in a plist, vault page, or command line.
52
+ Launchd does not inherit an interactive shell's exports, so prefer the
53
+ protected file for unattended operation. An MCP token is rejected as the
54
+ file token, including one stored only in the host `.env` file.
55
+ 4. Provision S3 permissions for create-only article/asset writes and hash
56
+ readback, plus read-only access to `wiki/meta/delete-intents/` for the exact
57
+ path and ancestor admission checks. Missing/unknown delete-intent access
58
+ blocks publication. Prove concurrent **If-None-Match: \*** creation on the
59
+ deployed SeaweedFS endpoint: one writer wins, identical retries reuse bytes,
60
+ different bytes cannot replace them. Verify the destination binding and
61
+ independent file-ingress notifier token. Local unit tests are not deployed
62
+ conditional-create evidence.
63
+ 5. After those checks, the operator explicitly sets `clip_outbox.enabled=true`
64
+ using `skillwiki config set`, then explicitly requests loading:
65
+
66
+ ```sh
67
+ skillwiki clip-outbox install-or-migrate --load --conditional-create-proven
68
+ skillwiki doctor
69
+ skillwiki clip-outbox status
70
+ ```
71
+
72
+ `--conditional-create-proven` is an operator attestation of the deployed race
73
+ test, not a test performed by this command. It records a non-secret receipt
74
+ bound to the endpoint and destination outside the vault. Both flags and the
75
+ existing enable setting are required for loading. The foreground
76
+ `skillwiki clip-outbox watch` command requires the same valid configuration
77
+ and recorded evidence. A different endpoint invalidates the receipt.
78
+
79
+ ## Worker behavior and recovery
80
+
81
+ The worker subscribes before one startup journal/root scan. FSEvents coalescing,
82
+ directory-level events, overflow/drop/root-change flags trigger a recovery scan.
83
+ Normal file events use 500 ms quiet debounce and matching complete input hashes
84
+ 500 ms apart. It localizes images with the existing guarded helper, rechecks the
85
+ article and every referenced local binary, and seals exact snapshots outside
86
+ raw. Original input bytes are retained there too; the capture input is not
87
+ rewritten. New article keys include a date and random capture identity; existing
88
+ local asset paths are preserved. The sibling asset `note.md` is included.
89
+
90
+ Sealing enters one serial publication queue immediately. Every asset, including
91
+ the index, is conditionally created and read back for SHA-256 verification before
92
+ the article. Each verified object gets a durable journal receipt. Unknown PUT
93
+ outcomes are inspected before retry. Conflicts and auth/admission failures hold
94
+ the item; transient failures use jittered exponential backoff from about one
95
+ second to at most 60 seconds. No minute/hour timer participates in normal
96
+ publication. The optional hourly root scan is recovery only; disable it with
97
+ `clip_outbox.poll_fallback_enabled=false` for an isolated realtime rehearsal.
98
+
99
+ After article verification, the worker immediately POSTs the v0.10.110 ready
100
+ contract (`vault_id`, `files` with exact paths/hashes) to `/file-ingress/ready`.
101
+ It sends no article or binary content. A failed/unknown hint stays
102
+ `notify-pending`; restart retries that notification without uploading verified
103
+ objects again. Only a verified response accounting for every path records
104
+ `central-visible`. The worker never infers `mirrored`; confirm central pending
105
+ inventory, SSE, exact mirror hashes and image preview separately.
106
+
107
+ `clip-outbox status` lists capture identities, journal states, redacted reason
108
+ codes and attempts. Edits to an already sealed input report
109
+ `SEALED_SOURCE_CHANGED`; the sealed snapshot and published keys remain fixed.
110
+ A corrupt journal or incomplete worker lock stops startup for attended recovery.
111
+ Do not delete a journal/lock while a worker is running. Queue data and receipts
112
+ are retained indefinitely in this slice (there is no automatic pruning), which
113
+ also preserves the required seven-day minimum and all undelivered/conflicted
114
+ items. Disabling the job retains that evidence; it never deletes cloud raw.
115
+
116
+ A successful upload proves S3 storage; a successful ready adoption proves
117
+ central materialization. Mirror freshness and pending-source visibility still
118
+ require the isolated end-to-end rollout checks. Neither this migration nor the
119
+ worker unfreezes the mirror, calls wiki_capture, or runs wiki-push.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.110",
3
+ "version": "0.10.111",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "skillwiki": "dist/cli.js",
@@ -9,6 +9,7 @@
9
9
  "files": [
10
10
  "dist",
11
11
  "templates",
12
+ "docs",
12
13
  "skills",
13
14
  "README.md"
14
15
  ],
@@ -42,5 +43,8 @@
42
43
  },
43
44
  "engines": {
44
45
  "node": ">=20"
46
+ },
47
+ "optionalDependencies": {
48
+ "fsevents": "^2.3.3"
45
49
  }
46
50
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.110",
3
+ "version": "0.10.111",
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.110",
3
+ "version": "0.10.111",
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.110",
3
+ "version": "0.10.111",
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.110",
3
+ "version": "0.10.111",
4
4
  "private": true,
5
5
  "files": [
6
6
  "wiki-*",
@@ -2,21 +2,20 @@
2
2
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
3
  <plist version="1.0">
4
4
  <dict>
5
- <key>Label</key>
6
- <string>com.karlchow.skillwiki-clip-outbox</string>
5
+ <key>Label</key><string>com.karlchow.skillwiki-clip-outbox</string>
7
6
  <key>ProgramArguments</key>
8
7
  <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>
8
+ <string>@NODE_BINARY@</string>
9
+ <string>@CLI_BINARY@</string>
10
+ <string>clip-outbox</string><string>watch</string>
20
11
  </array>
12
+ <key>EnvironmentVariables</key>
13
+ <dict><key>HOME</key><string>@HOME@</string><key>SKILLWIKI_HOME</key><string>@HOME@</string></dict>
14
+ <key>KeepAlive</key><true/>
15
+ <key>RunAtLoad</key><true/>
16
+ <key>ThrottleInterval</key><integer>10</integer>
17
+ <key>WatchPaths</key><array><string>@OUTBOX_ROOT@</string></array>
18
+ <key>StandardOutPath</key><string>@LOG_ROOT@/clip-outbox.log</string>
19
+ <key>StandardErrorPath</key><string>@LOG_ROOT@/clip-outbox-error.log</string>
21
20
  </dict>
22
21
  </plist>
@@ -1,9 +0,0 @@
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
- };