wendkeep 0.80.1 → 0.80.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/CHANGELOG.md +10 -0
- package/README.en.md +3 -0
- package/README.md +3 -0
- package/docs/en/commands/operating-profiles.md +4 -0
- package/docs/pt-BR/commands/operating-profiles.md +4 -0
- package/package.json +1 -1
- package/src/profile.mjs +16 -3
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,16 @@ All notable changes to **wendkeep** are documented here. Format based on
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this project follows
|
|
5
5
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.80.2] — 2026-08-24
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **Perfil persistente em worktrees vinculadas.** `profile use` e `profile status` agora leem e
|
|
12
|
+
escrevem o binding canônico da worktree principal quando o Vault é resolvido pelo registry Git
|
|
13
|
+
compartilhado, sem alterar o `.wendkeep.json` versionado da worktree vinculada. A identidade de
|
|
14
|
+
caminho também normaliza aliases Windows 8.3, impedindo que uma seleção humana `OFF` volte
|
|
15
|
+
imediatamente ao fallback `GOVERN`; README e guia de perfis foram atualizados em PT-BR/EN.
|
|
16
|
+
|
|
7
17
|
## [0.80.1] — 2026-08-24
|
|
8
18
|
|
|
9
19
|
### Fixed
|
package/README.en.md
CHANGED
|
@@ -161,6 +161,9 @@ paths are also supported. Hooks search upward from the agent's `cwd`, so nested
|
|
|
161
161
|
the nearest binding. The vault carries the same identity in `.brain/PROJECT.json`; a mismatch
|
|
162
162
|
is rejected before any session is written. If no binding exists, hooks fail closed and never
|
|
163
163
|
create the historical `~/wendkeep-vault` fallback.
|
|
164
|
+
In linked worktrees, `profile use` and `profile status` resolve the main worktree's canonical
|
|
165
|
+
binding through the shared Git registry; the persistent selection applies project-wide without
|
|
166
|
+
rewriting the current worktree's versioned `.wendkeep.json`.
|
|
164
167
|
|
|
165
168
|
`OBSIDIAN_VAULT_PATH` remains only as legacy/manual CLI compatibility. It is not used to
|
|
166
169
|
route automatic Codex or Claude hooks and a project-local binding overrides an inherited
|
package/README.md
CHANGED
|
@@ -161,6 +161,9 @@ paths are also supported. Hooks search upward from the agent's `cwd`, so nested
|
|
|
161
161
|
the nearest binding. The vault carries the same identity in `.brain/PROJECT.json`; a mismatch
|
|
162
162
|
is rejected before any session is written. If no binding exists, hooks fail closed and never
|
|
163
163
|
create the historical `~/wendkeep-vault` fallback.
|
|
164
|
+
In linked worktrees, `profile use` and `profile status` resolve the main worktree's canonical
|
|
165
|
+
binding through the shared Git registry; the persistent selection applies project-wide without
|
|
166
|
+
rewriting the current worktree's versioned `.wendkeep.json`.
|
|
164
167
|
|
|
165
168
|
`OBSIDIAN_VAULT_PATH` remains only as legacy/manual CLI compatibility. It is not used to
|
|
166
169
|
route automatic Codex or Claude hooks and a project-local binding overrides an inherited
|
|
@@ -138,6 +138,10 @@ ownership to the native LLM harness.
|
|
|
138
138
|
missing, ambiguous, or stale context fails closed without a partial mutation.
|
|
139
139
|
- `.wendkeep.json` stays on `schemaVersion: 1`; the additive field is, for example,
|
|
140
140
|
`"harness": { "profile": "GOVERN" }`. A legacy binding without it also resolves to `GOVERN`.
|
|
141
|
+
- In a linked worktree, `profile use` and `profile status` use the main worktree's canonical
|
|
142
|
+
binding discovered through the shared Git registry. The selection is persisted once for the
|
|
143
|
+
project and the linked worktree's versioned `.wendkeep.json` remains unchanged, including on
|
|
144
|
+
Windows when long paths and 8.3 aliases identify the same Vault.
|
|
141
145
|
- A corrupt binding never means `OFF`. When the payload or legacy integration identifies one
|
|
142
146
|
unambiguous Vault, Keep Core remains active under `GOVERN` and the hook exposes a diagnostic;
|
|
143
147
|
mutation guards fail closed until the binding is repaired. Invalid local configuration, a
|
|
@@ -139,6 +139,10 @@ harness nativo da LLM.
|
|
|
139
139
|
ausente, ambíguo ou stale falha fechado sem mutação parcial.
|
|
140
140
|
- `.wendkeep.json` continua em `schemaVersion: 1`; o campo aditivo usa, por exemplo,
|
|
141
141
|
`"harness": { "profile": "GOVERN" }`. Binding legado sem o campo também resolve `GOVERN`.
|
|
142
|
+
- Em worktree vinculada, `profile use` e `profile status` usam o binding canônico da worktree
|
|
143
|
+
principal descoberto pelo registry Git compartilhado. A seleção é persistida uma vez para o
|
|
144
|
+
projeto e o `.wendkeep.json` versionado da worktree vinculada permanece intacto, inclusive no
|
|
145
|
+
Windows quando caminhos longos e aliases 8.3 identificam o mesmo Vault.
|
|
142
146
|
- Binding corrompido nunca equivale a `OFF`. Quando o payload ou a integração legada identifica
|
|
143
147
|
um Vault inequívoco, o Keep Core continua ativo sob `GOVERN` e o hook expõe um diagnóstico;
|
|
144
148
|
guards de mutação falham fechados até o binding ser reparado. Configuração local inválida,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wendkeep",
|
|
3
|
-
"version": "0.80.
|
|
3
|
+
"version": "0.80.2",
|
|
4
4
|
"description": "Vault-first persistent memory for AI coding agents, with an optional profile-aware governance runtime: OFF, FLOW, GUIDE, GOVERN, or ASSURE. Local-first and agent-agnostic (Claude Code, Codex, Cursor…).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"workspaces": [
|
package/src/profile.mjs
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
setSessionTaskOperatingProfile,
|
|
14
14
|
} from '../hooks/operating-profile-task-store.mjs';
|
|
15
15
|
import { resolveCommandActiveContext } from './active-context-runtime.mjs';
|
|
16
|
+
import { realpathSync } from 'node:fs';
|
|
16
17
|
import { resolve } from 'node:path';
|
|
17
18
|
import { findProjectBinding, resolveProjectVault, updateProjectBinding } from './project-vault.mjs';
|
|
18
19
|
|
|
@@ -77,7 +78,11 @@ function validateArgv(argv) {
|
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
function canonicalPath(value) {
|
|
80
|
-
const
|
|
81
|
+
const absolute = resolve(value);
|
|
82
|
+
let canonical = absolute;
|
|
83
|
+
try { canonical = realpathSync.native(absolute); }
|
|
84
|
+
catch { /* Preserve comparison support for valid paths that do not exist yet. */ }
|
|
85
|
+
const path = canonical.replaceAll('\\', '/');
|
|
81
86
|
return process.platform === 'win32' ? path.toLowerCase() : path;
|
|
82
87
|
}
|
|
83
88
|
|
|
@@ -114,8 +119,16 @@ function context(argv) {
|
|
|
114
119
|
catch (error) {
|
|
115
120
|
if (!explicitVault) throw error;
|
|
116
121
|
}
|
|
117
|
-
|
|
118
|
-
|
|
122
|
+
let canonicalBinding = null;
|
|
123
|
+
if (resolved.source === 'worktree-registry' && resolved.projectRoot) {
|
|
124
|
+
canonicalBinding = findProjectBinding(resolved.projectRoot);
|
|
125
|
+
}
|
|
126
|
+
const candidateBinding = canonicalBinding || binding;
|
|
127
|
+
const matchingBinding = candidateBinding
|
|
128
|
+
&& canonicalPath(candidateBinding.base) === canonicalPath(resolved.base)
|
|
129
|
+
? candidateBinding
|
|
130
|
+
: null;
|
|
131
|
+
const projectConfig = matchingBinding?.config || resolved.config || {};
|
|
119
132
|
return {
|
|
120
133
|
resolved: {
|
|
121
134
|
...resolved,
|