superbee 0.3.0-pre.1 → 0.3.0-pre.2
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/SKILL.md +5 -0
- package/dist/publication-bridge.mjs +23 -1
- package/dist/publication.mjs +23 -1
- package/dist/superbee.mjs +98920 -87892
- package/package.json +1 -1
- package/references/hosted-checkout.md +130 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "superbee",
|
|
3
|
-
"version": "0.3.0-pre.
|
|
3
|
+
"version": "0.3.0-pre.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Agent-facing Superbee CLI for reading and writing local OKF knowledge bundles: context notes, docs, cross-links, and live bundle Views.",
|
|
6
6
|
"keywords": [
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Working in a hosted checkout
|
|
2
|
+
|
|
3
|
+
Read this when you work in a folder made by `superbee checkout`, or when `superbee sync` reports a
|
|
4
|
+
conflict there. The hosted bundle is the authority. The folder is a working copy. `superbee sync`
|
|
5
|
+
applies changes directly under the signed-in person's own access, and nobody has to approve them.
|
|
6
|
+
|
|
7
|
+
## Sign-in: relay the link, then retry
|
|
8
|
+
|
|
9
|
+
Hosted commands start sign-in by themselves. When a command returns `AUTH_REQUIRED` (exit 4):
|
|
10
|
+
|
|
11
|
+
1. Give the person `details.sign_in_url` and `details.user_code` exactly as returned.
|
|
12
|
+
2. Wait until they say they have confirmed.
|
|
13
|
+
3. Run the same command again (`details.resume`). It finishes sign-in and continues.
|
|
14
|
+
|
|
15
|
+
Never ask for a password, token or code the person did not see in their browser.
|
|
16
|
+
`superbee setup hosted` signs in and records the default hosted workspace in one step. If the
|
|
17
|
+
receipt says `choose_workspace`, ask the person which workspace to use, then run the command it
|
|
18
|
+
lists for that workspace.
|
|
19
|
+
|
|
20
|
+
## Sync at the end of a batch of edits
|
|
21
|
+
|
|
22
|
+
Edit files as usual, then run `superbee sync` once when a batch of related edits is done, not after
|
|
23
|
+
every file. Sync always pulls before it sends. Its receipt has one row per document:
|
|
24
|
+
`committed`, `conflict`, `held`, `refused`, `unknown` or `paused`. It exits 0 only when every row is
|
|
25
|
+
committed.
|
|
26
|
+
|
|
27
|
+
Reads keep the folder current on their own:
|
|
28
|
+
- `list`, `doc read`, `status`, `home`, `link show` and `view list` pull first when the last pull
|
|
29
|
+
is more than five minutes old. They wait at most two seconds and never send anything.
|
|
30
|
+
- These pulls never start a sign-in. When you are signed out, they print a note on stderr and skip
|
|
31
|
+
the pull. Run `superbee sync`, which returns the sign-in link to relay.
|
|
32
|
+
- When the last pull is more than thirty minutes old, they print a warning on stderr. Run sync
|
|
33
|
+
then.
|
|
34
|
+
- `SUPERBEE_NO_AUTOPULL=<any value>` turns these pulls off.
|
|
35
|
+
|
|
36
|
+
## Conflicts: inspect, then keep, take or revise
|
|
37
|
+
|
|
38
|
+
Changes to different documents merge automatically. Any concurrent change to the same document,
|
|
39
|
+
even to different frontmatter keys, comes back as a `conflict` row, and nothing is sent for that
|
|
40
|
+
document until you resolve it:
|
|
41
|
+
|
|
42
|
+
```sh
|
|
43
|
+
superbee sync --inspect --doc <id> # base, your version, the host's version
|
|
44
|
+
superbee sync --resolve take --doc <id> # use the host's version
|
|
45
|
+
superbee sync --resolve keep --doc <id> # send yours over the inspected host version
|
|
46
|
+
superbee sync --resolve revise --doc <id> # edit the file to the combined result first, then send it
|
|
47
|
+
superbee sync # sends what keep or revise decided
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
- `--resolve` only records the decision in the checkout. It never sends anything: its receipt
|
|
51
|
+
says `sent: false`, and after `keep` or `revise` its `next` and `help` name the `superbee sync`
|
|
52
|
+
that sends it. `take` has nothing to send.
|
|
53
|
+
- `keep` or `revise` again before that sync answers `already_resolved: true` ("waiting to send");
|
|
54
|
+
the first decision stands. `take` after an unsent `keep` or `revise` replaces it (`replaces`),
|
|
55
|
+
and nothing is sent. When the change may already have been sent, `take` is refused
|
|
56
|
+
(`resolution_not_replaceable`): run `superbee sync`, then resolve any conflict it reports.
|
|
57
|
+
|
|
58
|
+
- `keep` and `revise` need an `--inspect` first (`not_inspected` otherwise). If the host changes
|
|
59
|
+
after the inspection, they refuse with `stale_review`: inspect again, and decide again.
|
|
60
|
+
- `--inspect <id>` is an alias of `--inspect --doc <id>`.
|
|
61
|
+
- `keep` refuses a file edited since the conflict (`file_edited`). Use `revise` to send the file as
|
|
62
|
+
it is now.
|
|
63
|
+
- To discard your edits with `take`, remove the file first if the command says it would discard
|
|
64
|
+
them.
|
|
65
|
+
- If you cannot tell which version is right, ask the person. Do not merge by guessing.
|
|
66
|
+
|
|
67
|
+
## Deleting documents
|
|
68
|
+
|
|
69
|
+
Deleting a file (or running `superbee doc delete`) sends a delete of the version you had at the
|
|
70
|
+
next sync. The host keeps the document's history.
|
|
71
|
+
|
|
72
|
+
Deleting many files at once is held instead. The rule: when the deletes of the last day are more
|
|
73
|
+
than half the checkout and at least 3, the new ones are not sent. The same rule is applied to the
|
|
74
|
+
documents this checkout did not create itself, so documents it added earlier never dilute the
|
|
75
|
+
count. The sync receipt then carries `deletions_held`, which names the held documents. The hold
|
|
76
|
+
stays in place across syncs until the person decides. Accepting it is the person's step, never
|
|
77
|
+
yours:
|
|
78
|
+
|
|
79
|
+
1. Name the held documents to the person, and ask whether they should be removed from the bundle.
|
|
80
|
+
2. If they want them removed, give them `deletions_held.confirmation_required.command_for_person`
|
|
81
|
+
(`superbee sync --accept-deletes <count>:<digest>`) to run in their own terminal. It lists the
|
|
82
|
+
documents and asks them to type the count. The token covers exactly that set; if the set
|
|
83
|
+
changes, nothing is accepted.
|
|
84
|
+
3. Do not run it yourself. In a shell without a terminal it is refused with `FORBIDDEN`
|
|
85
|
+
`needs_person_at_terminal` (exit 2), and nothing is accepted. Do not retry it or work around it.
|
|
86
|
+
The check keeps the person in the loop; it is not a security boundary. A pseudo-terminal
|
|
87
|
+
(`script`, `expect`), typing into their terminal (`tmux send-keys`) or importing the CLI with
|
|
88
|
+
another terminal would get past it, and each of those is a violation of this rule.
|
|
89
|
+
4. Otherwise run `superbee sync --restore-deletes`, which puts the files back. `--resolve take --doc
|
|
90
|
+
<id>` restores a single file. Both work from your shell.
|
|
91
|
+
|
|
92
|
+
If the host deleted a document you edited, `--resolve keep` re-creates it, after an `--inspect`
|
|
93
|
+
that shows the deletion. If you deleted a document the host changed, `keep` deletes the host's
|
|
94
|
+
version (after `--inspect`), and `take` brings it back.
|
|
95
|
+
|
|
96
|
+
When the host no longer lists most of the documents the folder holds (8 or more, and more than
|
|
97
|
+
half, or all of them), the pull removes none of them and the receipt carries
|
|
98
|
+
`pulled.refused_deletions`: a bundle emptied or replaced by mistake looks the same. Tell the person.
|
|
99
|
+
Once they confirm, in the Superbee app, that the bundle really shrank, run its `take` command
|
|
100
|
+
(`superbee sync --take-host-deletions <count>:<digest>`). It removes the files of exactly that set
|
|
101
|
+
and keeps any file you edited. Nothing is sent to the host.
|
|
102
|
+
|
|
103
|
+
A host document whose id cannot be a file in the folder (a path-like id such as `a/../b`) is held
|
|
104
|
+
with a `held` row, reason `unsafe_id`, and the rest of the bundle syncs. A host document whose id
|
|
105
|
+
differs only in letter case from another is held as `case_collision`. Both are renamed in the
|
|
106
|
+
Superbee app, by the person.
|
|
107
|
+
|
|
108
|
+
## Refusals that belong to the person
|
|
109
|
+
|
|
110
|
+
Some commands are refused in a hosted checkout with "do this in the Superbee app". Examples:
|
|
111
|
+
editing Kinds or recipes, artifacts, and `doc verify`. Tell the person what to do in the app. Do
|
|
112
|
+
not work around a refusal by editing files, using another command, or copying the bundle
|
|
113
|
+
somewhere else.
|
|
114
|
+
|
|
115
|
+
`sync_busy` means another command is working, or is just taking or releasing the lock: wait,
|
|
116
|
+
then retry, and never remove that lock. Only `lock_orphaned` means the lock's holder is gone:
|
|
117
|
+
confirm that no superbee command is still running, then remove the lock named in the help.
|
|
118
|
+
|
|
119
|
+
## Session hooks (opt-in)
|
|
120
|
+
|
|
121
|
+
- `superbee hook install` installs the SessionStart hook. In a hosted checkout, it pulls from the
|
|
122
|
+
host at the start of each session.
|
|
123
|
+
- `superbee hook install --turn-end-sync` also installs a Stop hook for Claude Code and Codex. It
|
|
124
|
+
syncs the checkout when each turn ends, and skips the network when nothing changed and the last
|
|
125
|
+
pull is recent. If that sync finds a conflict, a held file or a sign-in link, the hook hands it
|
|
126
|
+
back to you before the turn ends: handle it as above. It reports each condition once; the same
|
|
127
|
+
unresolved condition is not reported on later turns, so check `superbee sync` yourself.
|
|
128
|
+
- Offer the Stop hook, but install it only when the person agrees.
|
|
129
|
+
`superbee hook uninstall --turn-end-sync` removes it, and `SUPERBEE_NO_TURN_SYNC=<any value>`
|
|
130
|
+
turns it off for a shell.
|