@gmickel/gno 1.44.0 → 1.45.0
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/assets/skill/SKILL.md +3 -0
- package/assets/skill/recipes/memory-file-decision.md +76 -0
- package/assets/skill/recipes/memory-scoped-recall.md +66 -0
- package/assets/skill/recipes/memory-supersede-fact.md +68 -0
- package/browser-extension/artifacts/{gno-browser-clipper-v1.44.0.zip → gno-browser-clipper-v1.45.0.zip} +0 -0
- package/browser-extension/artifacts/gno-browser-clipper-v1.45.0.zip.sha256 +1 -0
- package/browser-extension/dist/manifest.json +1 -1
- package/package.json +1 -1
- package/src/cli/commands/agents/block.ts +9 -8
- package/browser-extension/artifacts/gno-browser-clipper-v1.44.0.zip.sha256 +0 -1
package/assets/skill/SKILL.md
CHANGED
|
@@ -62,6 +62,9 @@ the matching recipe, then run the commands it names.
|
|
|
62
62
|
| Summarize a source | `recipes/source-summary.md` | Source-summary note with provenance verified |
|
|
63
63
|
| Preserve an idea | `recipes/idea-capture.md` | Original phrasing captured and findable |
|
|
64
64
|
| Verify claims and citations | `recipes/citation-and-provenance.md` | Claims labeled with evidence or explicit gaps |
|
|
65
|
+
| File a fact that may change | `recipes/memory-file-decision.md` | Fact stored (add) or proposal resolved, cited |
|
|
66
|
+
| Replace a stale recalled fact | `recipes/memory-supersede-fact.md` | Successor written, predecessor superseded |
|
|
67
|
+
| What do we know/believe about X | `recipes/memory-scoped-recall.md` | Current facts recalled under budget, cited |
|
|
65
68
|
|
|
66
69
|
Recipe rules:
|
|
67
70
|
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Memory: File A Decision
|
|
2
|
+
|
|
3
|
+
Use this recipe when a conversation settles one fact that may later change (a
|
|
4
|
+
decision, a preference, a standing rule) and the agent should be able to
|
|
5
|
+
recall it next session. Documents and long notes go through
|
|
6
|
+
`recipes/capture-and-file.md`; this recipe stores one fact.
|
|
7
|
+
|
|
8
|
+
## Inputs
|
|
9
|
+
|
|
10
|
+
- The fact, in one or two sentences, as it should be recalled later.
|
|
11
|
+
- One to eight explicit scopes (`project:gno`, `family`, `client/acme`).
|
|
12
|
+
There is no implicit global scope; every call names its scopes.
|
|
13
|
+
- Source evidence when known (a meeting, a message, a URL — never a `gno://`
|
|
14
|
+
URI, which the fence rejects as GNO-derived).
|
|
15
|
+
- The memory-managed collection when more than one is configured.
|
|
16
|
+
|
|
17
|
+
## Workflow
|
|
18
|
+
|
|
19
|
+
1. Recall first so a fact that already exists is not filed twice.
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
gno recall "<the topic>" --scope <scope> --json > /tmp/recall.json
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
2. Propose the fact. Without a decision `remember` writes nothing and returns
|
|
26
|
+
`outcome: "candidates"` with likely and weak matches from the same scopes.
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
gno remember "<fact>" --scope <scope> --json
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
3. Decide from the candidates. GNO never adjudicates a likely match; the
|
|
33
|
+
caller does.
|
|
34
|
+
- No match, or the match is a different fact: add.
|
|
35
|
+
- A match says the same thing: stop; `outcome: "existing"` means nothing
|
|
36
|
+
is written and the record is already current.
|
|
37
|
+
- A match is the same fact with stale content: switch to
|
|
38
|
+
`recipes/memory-supersede-fact.md`.
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
gno remember "<fact>" --scope <scope> --add \
|
|
42
|
+
--source "<where this came from>" --receipt /tmp/recall.json --json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
4. Read the result. `outcome: "added"` plus `sync.status: "completed"` means
|
|
46
|
+
the fact file exists and is retrievable now; a `failed` sync means the
|
|
47
|
+
file exists and the index lags (`gno update <collection>`).
|
|
48
|
+
|
|
49
|
+
5. Verify by recalling it back and cite the returned `uri`.
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
gno recall "<distinctive phrase>" --scope <scope>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Guardrails
|
|
56
|
+
|
|
57
|
+
- Store what the user said or decided, not GNO's own recall output. Pass the
|
|
58
|
+
recall receipt (`--receipt`) so a recalled span cannot be re-filed as new;
|
|
59
|
+
a paraphrase without lineage cannot be fenced, so do not paraphrase
|
|
60
|
+
recalled facts into new ones.
|
|
61
|
+
- Never store a fact without an explicit `--add`; a question alone is
|
|
62
|
+
read-only, and `remember` without a decision is a proposal.
|
|
63
|
+
- Scopes are visibility, not access control. Pick the scope the fact belongs
|
|
64
|
+
to; use a shared scope name only when several callers agree on it.
|
|
65
|
+
- `remember` works only on a collection with `memoryManaged: true`; other
|
|
66
|
+
collections fail with `MEMORY_COLLECTION_UNMANAGED`. Do not fall back to
|
|
67
|
+
`gno capture` for a fact that may change.
|
|
68
|
+
- Keep the text self-contained; recall returns the fact without the
|
|
69
|
+
conversation that produced it.
|
|
70
|
+
|
|
71
|
+
## Done
|
|
72
|
+
|
|
73
|
+
- `outcome: "added"` with a `gno://` URI, or `existing` with the current
|
|
74
|
+
record.
|
|
75
|
+
- Recall in the same scope returns the fact.
|
|
76
|
+
- The user's wording, scopes, and source are preserved.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Memory: Scoped Recall
|
|
2
|
+
|
|
3
|
+
Use this recipe for "what do we know / what did we decide / what does the
|
|
4
|
+
user believe about X" questions, before document search and before answering
|
|
5
|
+
from general knowledge. Recall returns only current facts, under a budget,
|
|
6
|
+
with `gno://` cites.
|
|
7
|
+
|
|
8
|
+
## Inputs
|
|
9
|
+
|
|
10
|
+
- The question, as a short query.
|
|
11
|
+
- The scopes the answer may draw from (`project:gno`, `family`,
|
|
12
|
+
`client/acme`). Every call names its scopes; there is no implicit global
|
|
13
|
+
scope.
|
|
14
|
+
- Budget when the default (8 facts, 512 tokens) is too much or too little.
|
|
15
|
+
- The memory-managed collection when more than one is configured.
|
|
16
|
+
|
|
17
|
+
## Workflow
|
|
18
|
+
|
|
19
|
+
1. Recall in the narrowest scope that should hold the answer.
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
gno recall "<question>" --scope <scope> --json
|
|
23
|
+
gno recall "<question>" --scope <scope-a> --scope <scope-b> --max-facts 3 --max-tokens 256 --json
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Visibility is any-intersection: a fact is returned when at least one of
|
|
27
|
+
the call's scopes appears on it. Widen by adding scopes, not by dropping
|
|
28
|
+
the flag.
|
|
29
|
+
|
|
30
|
+
2. Read the response.
|
|
31
|
+
- `facts[]`: `uri`, `text`, `scopes`, `contentHash`, `supersedes`, `score`.
|
|
32
|
+
Superseded records never appear.
|
|
33
|
+
- `budget.omitted` > 0: facts matched but did not fit. Narrow the query
|
|
34
|
+
or raise the budget.
|
|
35
|
+
- Empty `facts` plus a `hint`: nothing is stored in scope yet. Say so;
|
|
36
|
+
the hint names `gno remember` for when the user wants to store one.
|
|
37
|
+
- `retrieval.mode: "lexical"`: the collection has no cached embeddings, so
|
|
38
|
+
the query matched every term. Rephrase to the fact's own words, or embed
|
|
39
|
+
the collection (`gno embed <collection>`) for question-shaped queries.
|
|
40
|
+
|
|
41
|
+
3. Answer from the facts and cite each by its `gno://` URI. When memory is
|
|
42
|
+
silent or stale, fall through to `gno search` / `gno query` on the
|
|
43
|
+
documents; memory answers "what we believe", documents answer "what the
|
|
44
|
+
sources say".
|
|
45
|
+
|
|
46
|
+
4. Keep the JSON if a write may follow. Its `receipt` is what `gno remember
|
|
47
|
+
--receipt` fences against, and its `contentHash` is what a supersede
|
|
48
|
+
requires (`recipes/memory-supersede-fact.md`).
|
|
49
|
+
|
|
50
|
+
## Guardrails
|
|
51
|
+
|
|
52
|
+
- Recalled spans are context, not new facts. Never feed recall output back
|
|
53
|
+
into `gno remember`; the fence catches exact replays with a receipt, not
|
|
54
|
+
paraphrases.
|
|
55
|
+
- Do not widen to every scope by habit. Scopes partition visibility; a recall
|
|
56
|
+
scoped to `project:other` should not surface family facts.
|
|
57
|
+
- `recall` reads memory-managed collections only; ordinary notes are not
|
|
58
|
+
facts. Use the document ladder for them.
|
|
59
|
+
- Respect the response's `egressLineage`; derived output inherits the
|
|
60
|
+
strictest policy across the returned facts.
|
|
61
|
+
|
|
62
|
+
## Done
|
|
63
|
+
|
|
64
|
+
- Facts cited by `gno://` URI, or an explicit "nothing stored in scope".
|
|
65
|
+
- Omitted facts acknowledged when `budget.omitted` is non-zero.
|
|
66
|
+
- Recall JSON kept when a remember or supersede follows.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Memory: Supersede A Stale Fact
|
|
2
|
+
|
|
3
|
+
Use this recipe when a recalled fact is no longer true and a newer statement
|
|
4
|
+
replaces it. Facts are replaced, never edited in place and never deleted by
|
|
5
|
+
the memory contract.
|
|
6
|
+
|
|
7
|
+
## Inputs
|
|
8
|
+
|
|
9
|
+
- The stale fact's `uri` and `contentHash`, taken from a recall.
|
|
10
|
+
- The replacement text.
|
|
11
|
+
- The same scopes the stale fact is visible in.
|
|
12
|
+
- Source evidence for the change when known.
|
|
13
|
+
|
|
14
|
+
## Workflow
|
|
15
|
+
|
|
16
|
+
1. Recall the current fact and keep the JSON; it carries the predecessor's
|
|
17
|
+
`uri`, `contentHash`, and the receipt.
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
gno recall "<the topic>" --scope <scope> --json > /tmp/recall.json
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
2. Confirm the match is the same fact with stale content, not a different
|
|
24
|
+
fact. Two facts that both hold get an add, not a supersede.
|
|
25
|
+
|
|
26
|
+
3. Supersede, naming the predecessor and its hash.
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
gno remember "<replacement text>" --scope <scope> \
|
|
30
|
+
--supersede <uri> --predecessor-hash <contentHash> \
|
|
31
|
+
--source "<what changed and where that is recorded>" \
|
|
32
|
+
--receipt /tmp/recall.json --json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The scriptable spelling `--decision supersede --predecessor <uri>` means
|
|
36
|
+
the same thing.
|
|
37
|
+
|
|
38
|
+
4. Read the result. `outcome: "superseded"` returns the successor record with
|
|
39
|
+
`supersedes: [<uri>]`.
|
|
40
|
+
- `MEMORY_PREDECESSOR_HASH_MISMATCH`: the fact changed since the recall.
|
|
41
|
+
Recall again and decide against the current text.
|
|
42
|
+
- `MEMORY_SUPERSEDE_CONFLICT` (exit 4): another writer superseded it
|
|
43
|
+
first. Recall again; the successor may already say what you meant.
|
|
44
|
+
|
|
45
|
+
5. Verify: recall returns the successor and not the predecessor.
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
gno recall "<distinctive phrase>" --scope <scope>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Guardrails
|
|
52
|
+
|
|
53
|
+
- Never supersede without the `contentHash` from a recall; the hash is what
|
|
54
|
+
proves the replacement targets the fact the agent actually read.
|
|
55
|
+
- The replacement must be a new statement. Re-storing the recalled text is
|
|
56
|
+
fenced (`MEMORY_FENCED_REPLAY`) when the receipt is presented; a
|
|
57
|
+
paraphrase without lineage is not, so do not rephrase the old fact as a
|
|
58
|
+
"new" one.
|
|
59
|
+
- Superseded facts stay on disk and in ordinary `gno search`; only `recall`
|
|
60
|
+
excludes them. To remove a file, the user deletes it and runs
|
|
61
|
+
`gno update`; the contract has no delete.
|
|
62
|
+
- Do not chain supersedes speculatively; one recalled fact, one decision.
|
|
63
|
+
|
|
64
|
+
## Done
|
|
65
|
+
|
|
66
|
+
- `outcome: "superseded"` with a successor URI carrying `supersedes`.
|
|
67
|
+
- Recall in scope returns the successor only.
|
|
68
|
+
- A conflict or hash mismatch ended in a fresh recall, not a retry loop.
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ea5867ff2927a15524f4d5167c7ee9ee8a530b3604fefad886ec0327af7185d8 gno-browser-clipper-v1.45.0.zip
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@ import { CliError } from "../../errors.js";
|
|
|
17
17
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
18
18
|
|
|
19
19
|
/** Version of the protocol block content. Bump on any content change. */
|
|
20
|
-
export const BLOCK_VERSION =
|
|
20
|
+
export const BLOCK_VERSION = 3;
|
|
21
21
|
|
|
22
22
|
/** Stable across block versions — never change these once shipped. */
|
|
23
23
|
export const BEGIN_MARKER = "<!-- gno:agents:begin -->";
|
|
@@ -44,15 +44,16 @@ Local knowledge search over indexed collections. Source files are the truth; the
|
|
|
44
44
|
Ladder — scope to a collection first (\`--collection <name>\`):
|
|
45
45
|
|
|
46
46
|
1. Exact term/identifier/quote/error: \`gno search "<text>"\`
|
|
47
|
-
2.
|
|
48
|
-
3.
|
|
49
|
-
4.
|
|
50
|
-
5.
|
|
51
|
-
6.
|
|
47
|
+
2. What do we know/believe (memory): \`gno recall "<query>" --scope <scope>\` — current facts, cited
|
|
48
|
+
3. Entity or known document: \`gno query "<question>" --fast -n 10\`
|
|
49
|
+
4. Multi-document evidence: \`gno context build "<goal>" --budget 12000\`
|
|
50
|
+
5. Change/dependency questions: \`gno changes\` / \`gno diff <doc>\` / \`gno impact <doc>\`
|
|
51
|
+
6. Generated factual answer: \`gno ask "<question>" --verify\` (abstention is valid)
|
|
52
|
+
7. Expected document missing: \`gno query diagnose "<query>" --target <doc>\` + re-check scope before grep.
|
|
52
53
|
|
|
53
|
-
Writing: retrieve first — a question alone is read-only. Edit an existing canonical note in its source file; \`gno capture\` creates genuinely new notes (collection, title
|
|
54
|
+
Writing: retrieve first — a question alone is read-only. Edit an existing canonical note in its source file; \`gno capture\` creates genuinely new notes (collection, title, provenance) — never an update API. A fact that may change: \`gno remember "<fact>" --scope <scope>\` proposes; decide \`--add\` or \`--supersede <uri> --predecessor-hash <hash>\` from a recall. Recalled spans are context, not new facts: pass the receipt (\`--receipt\`). After writes: reindex the collection, verify retrieval.
|
|
54
55
|
|
|
55
|
-
Cite with gno:// URIs. Advanced retrieval (structured queries, filters, backlinks
|
|
56
|
+
Cite with gno:// URIs. Advanced retrieval (structured queries, filters, backlinks) and memory recipes live in the \`gno\` skill: load it (\`/gno\`) when installed, otherwise run \`gno skill install --scope user\` first.`;
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
/** SHA-256 hex digest of the body, truncated for the stamp line. */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
31a5cf0632f64360093ef6184708a77244d0e65e6d344d3ba6e11902fcab12b1 gno-browser-clipper-v1.44.0.zip
|