Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
1cc7bba
docs(rfc): propose atomic memory as independent artifacts
frf12 Sep 30, 2026
9348391
feat(memory): implement independent atomic memory
frf12 Oct 5, 2026
2027559
fix(memory): repair migration receipts and normalize writes
frf12 Oct 6, 2026
d6dd04a
fix(memory): preserve history when NFC expands text
frf12 Oct 6, 2026
e860477
fix(atomic-memory): resolve runtime and transport regressions
frf12 Oct 6, 2026
df3dcc4
fix(atomic-memory): keep short reads on a consistent snapshot
frf12 Oct 6, 2026
2b90329
test(zcode): verify atomic memory source lineage
frf12 Oct 6, 2026
a5c35a2
test(dream): make superseded worker recovery deterministic
frf12 Oct 6, 2026
3d96ebd
fix(atomic-memory): align reconciliation and host contracts
frf12 Oct 6, 2026
acf1600
fix(ci): update atomic memory integration contracts
frf12 Oct 6, 2026
a6d1c37
fix(atomic-memory): preserve authorization and evidence boundaries
frf12 Oct 7, 2026
81540bf
test(atomic-memory): cover supervisor generation and automatic merge
frf12 Oct 7, 2026
46e4cee
test(oceanbase): isolate HTTP databases and enable CI coverage
frf12 Oct 7, 2026
f97529c
test(memory): add live temporal conflict coverage
frf12 Oct 7, 2026
25cec75
chore: merge upstream master into atomic memory
frf12 Oct 7, 2026
bc65ebd
fix(memory): tolerate candidate drift during context preparation
frf12 Oct 7, 2026
58326a4
feat(search): add family-scoped artifact retrieval
frf12 Oct 7, 2026
1024fce
fix(search): preserve artifact content JSON aliases
frf12 Oct 7, 2026
2893339
fix(ci): refresh generated artifacts and license headers
frf12 Oct 7, 2026
18fde95
fix(dify): align atomic memory tools after upstream merge
frf12 Oct 7, 2026
da6a77b
Merge upstream updates for artifact search integration
frf12 Oct 8, 2026
b5466f1
Merge Atomic Memory dependency for artifact search integration
frf12 Oct 8, 2026
f34ecb8
feat(search): integrate atomic memory artifact retrieval
frf12 Oct 7, 2026
7000204
chore: merge upstream master into atomic memory
frf12 Oct 8, 2026
77d4553
chore: sync latest Atomic Memory dependency
frf12 Oct 8, 2026
54826fc
docs(dashboard): clarify experience search boundary
frf12 Oct 8, 2026
1fcfe87
fix(search): authorize topic retrieval in consistent snapshots
frf12 Oct 8, 2026
f06261e
merge(search): sync topic authorization snapshot fix
frf12 Oct 8, 2026
8b5d5aa
fix(memory): clarify temporal fact reconciliation
frf12 Oct 8, 2026
b7c0e80
fix(search): stabilize RRF scores for subnormal weights
frf12 Oct 8, 2026
4406243
merge(search): sync RRF numerical stability fix
frf12 Oct 8, 2026
f483d8a
fix(memory): reconcile against current published content
frf12 Oct 8, 2026
34c1fff
test(usage): stabilize checkout expiry retry scenario
frf12 Oct 8, 2026
f09cae4
fix(memory): keep creation metadata out of model output
frf12 Oct 9, 2026
a0732e7
fix(authz): restore existing transaction binding behavior
frf12 Oct 9, 2026
d5c3c65
merge(search): restore existing authorization binding
frf12 Oct 9, 2026
6835315
fix(atomic-memory): defer read audits until snapshot closes
frf12 Oct 9, 2026
7bd5b85
merge(master): sync Desktop contract validation
frf12 Oct 9, 2026
0bebd31
test(memory): preserve behavioral search authorization checks
frf12 Oct 9, 2026
78df6ac
fix(desktop): support atomic memory protocol
frf12 Oct 9, 2026
fb46118
test: wait for recorder recovery settlement
frf12 Oct 9, 2026
0db3634
fix(desktop): qualify the current CLI version series
frf12 Oct 9, 2026
715d62e
Merge branch 'codex/artifact-search' into codex/artifact-search-atomic
frf12 Oct 9, 2026
58f7f4f
Merge commit 'aeeb735397f692df186c32b404f4245030db1f22' into codex/ar…
frf12 Oct 9, 2026
347610a
fix(desktop): qualify the artifact search contract
frf12 Oct 9, 2026
1c711da
fix(desktop): keep diagnostic tests after production items
frf12 Oct 9, 2026
aa7150f
style(desktop): format compatibility fixtures
frf12 Oct 9, 2026
5f5ba86
Merge artifact search Desktop compatibility fixes
frf12 Oct 9, 2026
84e03d8
Merge artifact search fixture formatting
frf12 Oct 9, 2026
c07d552
Merge upstream artifact search and RFC
frf12 Oct 9, 2026
6d0d440
fix(atomic-memory): restore scope retrieval authorization
frf12 Oct 9, 2026
dc7c631
fix: address artifact search review edge cases
frf12 Oct 9, 2026
1be35b0
Merge artifact search review fixes
frf12 Oct 9, 2026
763022e
test(desktop): await navigation focus before typing
frf12 Oct 9, 2026
5c77f02
Merge Desktop navigation fixture synchronization
frf12 Oct 9, 2026
7b54fde
merge: integrate master artifact search
frf12 Oct 9, 2026
0ac9186
test(desktop): locate grouped compatibility options
frf12 Oct 9, 2026
f9570ed
Merge installed compatibility selector fix
frf12 Oct 9, 2026
77dc6f7
fix(desktop): repair atomic memory integration
frf12 Oct 9, 2026
f702c04
fix(server): advertise atomic memory capabilities
frf12 Oct 9, 2026
1f9b91c
fix(desktop): qualify atomic memory protocol
frf12 Oct 9, 2026
2405d0a
merge: integrate evaluation suite reorganization
frf12 Oct 9, 2026
70b1a5e
fix(memory): pin atomic reads and bound reconciliation inputs
frf12 Oct 9, 2026
e9056ef
chore: merge master evaluation reorganization
frf12 Oct 9, 2026
c9ae71a
ci: allow OceanBase regression datafiles to grow
frf12 Oct 9, 2026
2f49795
chore: merge master migration and contract updates
frf12 Oct 9, 2026
7532596
chore: merge isolated Desktop CI qualification
frf12 Oct 9, 2026
a02e77d
Merge upstream/master into codex/atomic-memory
frf12 Oct 9, 2026
9bebc45
docs(memory): add atomic memory clean migration design
frf12 Oct 9, 2026
196dfc0
test(dify): exercise the Atomic search hit schema in contract regener…
frf12 Oct 9, 2026
d100439
refactor(atomic-memory): use shared access control instead of a famil…
frf12 Oct 9, 2026
e72c999
fix(desktop): report the fixture contract digest from the real-Server…
frf12 Oct 9, 2026
d4ea42f
refactor(memory): serve legacy Memory routes from Atomic Memory at th…
frf12 Oct 10, 2026
9b88e2c
fix(desktop): keep contract digest in compatibility selection
frf12 Oct 10, 2026
5fddc0c
refactor(atomic-memory): import entries with their direct evidence
frf12 Oct 10, 2026
fd830a3
Merge upstream/master into codex/atomic-memory
frf12 Oct 10, 2026
6ba2d44
refactor(tags): drop legacy Memory entry tag targets
frf12 Oct 10, 2026
8b7a953
feat(atomic-memory): archive legacy Memory and convert references
frf12 Oct 10, 2026
e8e6b25
fix(atomic-memory): close migration gaps found in review
frf12 Oct 10, 2026
6e923f3
refactor(atomic-memory): remove legacy Memory from the runtime and co…
frf12 Oct 10, 2026
33d9320
Merge upstream/master into codex/atomic-memory
frf12 Oct 10, 2026
f69c2f9
Merge upstream/master into codex/atomic-memory
frf12 Oct 10, 2026
400602e
chore(skill-up): refresh tool contract fixtures without legacy Memory…
frf12 Oct 10, 2026
3be389c
fix(atomic-memory): finish clean migration and receipt compatibility
frf12 Oct 10, 2026
38432c5
fix(atomic-memory): close migration boundary and validation gaps
frf12 Oct 10, 2026
8097d38
chore(skill-up): refresh migrated memory guidance pin
frf12 Oct 10, 2026
60eb009
chore(desktop): refresh generated migration contract
frf12 Oct 10, 2026
50c3568
ci: serialize atomic memory migration acceptance
frf12 Oct 10, 2026
f912f99
fix(memory): support long SQLite full-text queries
frf12 Oct 10, 2026
989c8e9
merge: integrate latest Atomic Memory changes from #1857
frf12 Oct 11, 2026
7b016d9
merge: reconcile Atomic Memory squash merge from master
frf12 Oct 11, 2026
187b7fa
merge: integrate shared artifact merge and restoration
frf12 Oct 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/e2e-harness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,12 @@ jobs:
compose=(docker compose -f e2e/bub/compose.yaml -f e2e/bub/compose.oceanbase.yaml)
"${compose[@]}" up --detach --wait --wait-timeout 660 oceanbase
container_id=$("${compose[@]}" ps -q oceanbase)
# SLIM restores a demo datafile capped at 1G and ignores resource environment overrides.
# Repeated isolated schemas and FULLTEXT indexes need bounded growth through the whole job.
docker exec "$container_id" obclient -h127.0.0.1 -P2881 -uroot -e \
"SHOW PARAMETERS WHERE name IN ('datafile_size', 'datafile_next', 'datafile_maxsize');
ALTER SYSTEM SET datafile_maxsize='8G';
SHOW PARAMETERS WHERE name IN ('datafile_size', 'datafile_next', 'datafile_maxsize');"
oceanbase_ip=$(docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container_id")
test -n "$oceanbase_ip"
export POWERCONTEXT_TEST_OCEANBASE_URL="mysql+aoceanbase://root%40test:powercontext-e2e@${oceanbase_ip}:2881/powercontext?charset=utf8mb4"
Expand Down
6 changes: 4 additions & 2 deletions desktop/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ Register an explicitly trusted local installation in `%APPDATA%/com.powercontext
}
```

The native adapter checks the absolute executable path, pinned digest and fixed `--version` result before running either `service status --json` or `doctor integrations --json`. This is a local installation pin, not publisher-signature verification; the Python environment and dependencies must also be trusted. The adapter admits 1.0.1 and 1.1.1 and their development builds; the registration must pin the exact installed version. The example identifies the tested baseline. Other version series require adapter qualification. No PATH-first CLI selection or renderer-provided commands are accepted.
The native adapter checks the absolute executable path, pinned digest and fixed `--version` result before running either `service status --json` or `doctor integrations --json`. This is a local installation pin, not publisher-signature verification; the Python environment and dependencies must also be trusted. The adapter admits 1.0.1, 1.1.1 and 1.2.1 and their development builds; the registration must pin the exact installed version. The example identifies the tested baseline. Other version series require adapter qualification. No PATH-first CLI selection or renderer-provided commands are accepted.

Version verification has a 15-second deadline, service status 20 seconds, and integration diagnostics 60 seconds. Each invocation limits combined stdout/stderr to 256 KiB. Helpers run hidden in an owned Windows Job; completion, timeout and cancellation clean up their descendants. Only allowlisted status fields reach the UI. Valid unhealthy JSON remains useful even with exit code 1. Isolated real-CLI checks pass; installed-application qualification remains open in [validation guide](VALIDATION.md).

Expand All @@ -116,4 +116,6 @@ The CI-only lifecycle scenario forcibly ends its own installed Desktop process a

Installed boundary checks exercise an 8192-byte Unicode note, reject over-budget input, display zero and capped-ten search results, and verify cancel/confirm behavior when disconnecting with an unsaved draft. Each result requires its matching remote report.

After upgrading from an earlier preview, select `sqlite-atomic-f702c041-v1` and recheck your connection. A previous `sqlite-1.1.1-v1` / `sqlite-63f918b7-v1` / `sqlite-ab43e3a7-v1` / `sqlite-f1089f4e-v1` / `sqlite-6e237568-v1` / `sqlite-legacy-58f7f4f6-v1` selection is not silently upgraded to a different contract. See [current qualification](VALIDATION.md).
After upgrading from an earlier preview, open Connections and select your saved connection. Profiles matching the bundled API contract appear under “Available for this Desktop build”; compare their tested Server builds with your deployment before selecting one, saving, checking and explicitly using the connection again. New connections start with no compatibility selection.

Historical profiles appear as disabled records. A saved incompatible or unavailable selection remains visible with an explanation until explicitly replaced; it is never silently upgraded. This build currently has no product qualification record matching its bundled contract, so business operations remain unavailable in ordinary builds. The independently qualified `ci-fixtures` build is for disposable acceptance tests. Historical qualification evidence and remaining requirements are documented in the [validation guide](VALIDATION.md).
4 changes: 3 additions & 1 deletion desktop/README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,6 @@ Windows GitHub Actions 会构建未签名安装包,安装到临时中文路径

安装版边界测试覆盖 8192 字节 Unicode 正文、超限输入禁止提交、搜索无结果和最多 10 条的提示,以及未保存草稿时取消或确认断开连接的行为。是否通过以对应远程报告为准。

从早期预览版升级后,请选择 `sqlite-atomic-f702c041-v1` 并重新检查连接。旧的 `sqlite-1.1.1-v1` / `sqlite-63f918b7-v1` / `sqlite-ab43e3a7-v1` / `sqlite-f1089f4e-v1` / `sqlite-6e237568-v1` / `sqlite-legacy-58f7f4f6-v1` 选择不会静默升级为另一份契约。当前验证范围见[验证说明](VALIDATION.md)。
从早期预览版升级后,请打开「连接」并选中已保存的连接。与当前 API 契约匹配的配置显示在「此 Desktop 构建可用」中;先核对已测试的 Server 构建与实际部署,再明确选择、保存、检查并使用该连接。新连接默认不选择兼容配置。

历史配置显示为不可选择的记录。已保存的不匹配或不可用配置仍会显示并说明原因,须明确替换,不会静默升级。当前构建尚无匹配打包契约的产品资格记录,因此普通构建暂不开放业务操作。独立验证的 `ci-fixtures` 构建仅用于临时验收测试。历史资格证据和剩余要求见[验证说明](VALIDATION.md)。
16 changes: 14 additions & 2 deletions desktop/VALIDATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ cargo test --locked --manifest-path desktop/src-tauri/Cargo.toml

## Compatibility scope

[compatibility.json](src-tauri/src/connections/compatibility.json) identifies the qualified Server source, normalized OpenAPI contract digest and qualification-wheel digest for `sqlite-atomic-f702c041-v1`, described in [Atomic Memory protocol qualification](#atomic-memory-protocol-qualification). CI builds have their own artifact identities.
[compatibility.json](src-tauri/src/connections/compatibility.json) preserves the recorded Server sources, normalized OpenAPI contract digests and qualification-wheel digests for the historical profiles below. No product record currently matches this build’s bundled contract; ordinary builds keep business operations unavailable until an independently verified matching profile is added. Historical records are disabled in the selector, and saved unavailable selections remain visible until explicitly replaced. CI builds have their own artifact identities and do not change product qualification.

The real Server harness covers SQLite with anonymous loopback, static Bearer, HTTPS with explicit CA/base path, and injected-provider/enforced access. It exercises save/search/exact reads, identity changes, binding revocation, ambiguous writes without replay and Scope pagination. Installed UI checks cover repeated launches preserving the existing editor, late committed-save responses preserving a new Scope draft, explicit connection/Scope selection, clipboard copies, connection isolation, draft cancellation, byte limits and independent Server survival after Desktop exit.

Selecting a compatibility profile does not attest the remote binary identity. Existing `sqlite-1.1.1-v1` / `sqlite-63f918b7-v1` / `sqlite-ab43e3a7-v1` / `sqlite-f1089f4e-v1` / `sqlite-6e237568-v1` / `sqlite-legacy-58f7f4f6-v1` selections require explicitly choosing the current profile and rechecking the connection. Desktop reads memories only through Atomic Memory references, so Servers that answer only with Memory entry citations are not qualified. CLI diagnostics separately verify the registered executable path, digest and exact version.
Selecting a compatibility profile does not attest the remote binary identity. Existing `sqlite-1.1.1-v1` / `sqlite-63f918b7-v1` / `sqlite-ab43e3a7-v1` / `sqlite-f1089f4e-v1` / `sqlite-6e237568-v1` / `sqlite-legacy-58f7f4f6-v1` selections require explicitly choosing an available matching profile and rechecking the connection. Desktop reads memories only through Atomic Memory references, so Servers that answer only with Memory entry citations are not qualified. CLI diagnostics separately verify the registered executable path, digest and exact version.

### Atomic Memory protocol qualification

Expand All @@ -36,6 +36,18 @@ The native `ConnectionManager` exercised the actual isolated built-wheel SQLite

These results establish the stated Server protocol compatibility. Windows credentials, process containment, registered-executable checks and installed-package acceptance for this Atomic profile require their actual Windows CI checks. This protocol record does not establish platform or release acceptance.

### Historical protocol qualifications

`sqlite-6e237568-v1` records the original Server source, contract digest and qualification-wheel digest. Its qualification wheel was built from checkout `ea30fd5c`; its backend sources, OpenAPI contract, project configuration and lock matched the recorded Server commit. The immutable catalog preserves its identities and original ten operations.

`sqlite-legacy-58f7f4f6-v1` identifies Server sources at `58f7f4f6cbadd698bac35b3fca019d9f48f55b81`, contract digest `9f4ba7b35ecd3b3639af4e648aff84b713a7f30b51d5a4c30c8809aeb8dc8024`, and qualification-wheel digest `7203cf1a98cb9dfd8631e142f7a0f5e74c39845da4fb7d862117a49fa1ef38af`. Its original ten Desktop operations and Legacy Memory protocol were exercised by the native `ConnectionManager` against the isolated built-wheel SQLite Server in all four harness modes: anonymous loopback, Bearer, HTTPS with explicit CA/base path, and injected-provider/enforced access. These checks cover save/search/exact historical citation reads, identity changes, revocation, ambiguous writes without replay, and Scope pagination. The original `sqlite-6e237568-v1` record retains its identities and operations. The Base Legacy qualification requires explicitly selecting a profile whose recorded contract matches the bundled Desktop contract and rechecking the connection.

This qualification used macOS 26.2 ARM64, Rust 1.95.0 and Python 3.12.7. An external system Python launcher was used for native process creation because this environment can terminate native subprocesses before their first request. The wheel, native client, fixtures and business assertions were preserved. The real CLI's fixed version, service-status and integration commands were also exercised with an isolated home and PATH; their actual outputs passed the native projections. These checks establish the stated SQLite compatibility and CLI response handling. Windows registered-executable checks, credentials, process containment and installed-package acceptance require their actual Windows CI checks. No remote legacy deployment was tested in this qualification.

`sqlite-atomic-7bd5b85c-v1` identifies Server sources at `7bd5b85c154c284d0ad550de31ecf8aa629d8ccf`, contract digest `0807df984ba706b505d4fff0cb849d4566222f10572d91a5e03399b833d1fe4f`, and qualification-wheel digest `057eca5de29961684bfea8ea8aece7c133b3d8b46a024db69a944519bc5b2746`. Its native `ConnectionManager` was exercised against the isolated built-wheel SQLite Server in all four harness modes: anonymous loopback, Bearer, HTTPS with explicit CA/base path, and injected-provider/enforced access. These checks cover Atomic writes, all returned references, search, immutable revision reads, identity changes, revocation, ambiguous writes without replay, and Scope pagination. These are historical results for that qualified build; this Desktop build reads only Atomic Memory references and does not retain the Legacy citation protocol.

The Atomic qualification run used macOS 26.2 ARM64, Rust 1.95.0 and Python 3.12.7. An external launcher routed native process creation through system Python 3.9.6 because the same signed native executable exited with SIGKILL when launched by the Conda Python parent before its first request. The wheel, native client, harness fixtures and business assertions were unchanged by that launcher. This establishes the stated SQLite compatibility; Windows IPC, vault, process containment and installed-package acceptance require their actual Windows CI checks. No legacy remote deployment was tested in the Atomic qualification run.

## CI fixture 的独立资格

CI fixture 使用独立资格记录,不会修改历史生产资格。原生 HTTP 测试显式注入 synthetic profile;真实 Server 和安装验收使用 `fixture_qualification.py` 从当前合同、Server 提交和构建 wheel 生成的 `.artifacts/ci-compatibility.json`,读取时重新核对合同、操作集合和 wheel 哈希。
Expand Down
1 change: 1 addition & 0 deletions desktop/src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion desktop/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ tauri = { version = "=2.11.0", features = [] }
serde = { version = "=1.0.228", features = ["derive"] }
serde_json = "=1.0.149"
sha2 = "=0.10.9"
ts-rs = "=12.0.1"
ts-rs = { version = "=12.0.1", features = ["serde-json-impl"] }
reqwest = { version = "=0.12.28", default-features = false, features = ["native-tls", "json", "stream"] }
url = "=2.5.8"
tokio = { version = "=1.52.1", features = ["macros", "rt-multi-thread", "net", "io-util", "sync", "time"] }
Expand Down
20 changes: 20 additions & 0 deletions desktop/src-tauri/examples/server_probe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,14 @@ async fn main() {
let saved = manager.remember(generation, &submitted).await.unwrap();
assert_eq!(saved.record.status, WriteStatus::Succeeded);
let result = saved.result.unwrap();
assert_eq!(
saved.record.references,
result
.records
.iter()
.map(|record| record.artifact.clone())
.collect::<Vec<_>>()
);
assert_eq!(result.records.len(), 1);
let entry = &result.records[0];
assert_eq!(entry.text, expected);
Expand Down Expand Up @@ -187,6 +195,18 @@ async fn main() {
.unwrap();
save_ms.push(start.elapsed().as_secs_f64() * 1000.0);
assert_eq!(result.record.status, WriteStatus::Succeeded);
let records = result.result.unwrap().records;
assert!(!records.is_empty());
assert_eq!(result.record.references.len(), records.len());
for (record, reference) in records.iter().zip(&result.record.references) {
assert_eq!(reference, &record.artifact);
let exact = manager
.atomic_memory_entry(generation, reference)
.await
.unwrap();
assert_eq!(exact.artifact, *reference);
assert_eq!(exact.text, record.text);
}
}
let mut search_ms = vec![];
let mut exact_ms = vec![];
Expand Down
58 changes: 58 additions & 0 deletions desktop/src-tauri/src/connections/compatibility.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,62 @@
[
{
"id": "sqlite-6e237568-v1",
"serverCommit": "6e2375688bc38a667840c6b2dc8269d8848027bc",
"contractSha256": "9af88b2b779c372a21ae9f398d0ca75b333f2e5da2afa3626df879911a442edd",
"artifactSha256": "92c5d14c64969e75e48d30d755c0b1e25d1f8ed9d22e781a8241de0a9098be25",
"operations": [
"get_liveness",
"get_readiness",
"get_access_principal",
"get_capabilities",
"list_scopes",
"get_scope",
"get_default_scope",
"remember_memory",
"search_memory",
"get_memory_entry"
],
"evidence": "desktop/VALIDATION.md"
},
{
"id": "sqlite-atomic-7bd5b85c-v1",
"serverCommit": "7bd5b85c154c284d0ad550de31ecf8aa629d8ccf",
"contractSha256": "0807df984ba706b505d4fff0cb849d4566222f10572d91a5e03399b833d1fe4f",
"artifactSha256": "057eca5de29961684bfea8ea8aece7c133b3d8b46a024db69a944519bc5b2746",
"operations": [
"get_liveness",
"get_readiness",
"get_access_principal",
"get_capabilities",
"list_scopes",
"get_scope",
"get_default_scope",
"remember_memory",
"search_memory",
"get_memory_entry",
"get_artifact_revision"
],
"evidence": "desktop/VALIDATION.md"
},
{
"id": "sqlite-legacy-58f7f4f6-v1",
"serverCommit": "58f7f4f6cbadd698bac35b3fca019d9f48f55b81",
"contractSha256": "9f4ba7b35ecd3b3639af4e648aff84b713a7f30b51d5a4c30c8809aeb8dc8024",
"artifactSha256": "7203cf1a98cb9dfd8631e142f7a0f5e74c39845da4fb7d862117a49fa1ef38af",
"operations": [
"get_liveness",
"get_readiness",
"get_access_principal",
"get_capabilities",
"list_scopes",
"get_scope",
"get_default_scope",
"remember_memory",
"search_memory",
"get_memory_entry"
],
"evidence": "desktop/VALIDATION.md"
},
{
"id": "sqlite-atomic-f702c041-v1",
"serverCommit": "f702c0418d69e3072e1ec2fa657e0df81e8e51b4",
Expand Down
11 changes: 7 additions & 4 deletions desktop/src-tauri/src/connections/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ pub struct WriteRecord {
pub operation_id: String,
pub context: MemoryContext,
pub status: WriteStatus,
pub artifact: Option<ArtifactReference>,
pub references: Vec<ArtifactReference>,
pub error: Option<ApiFailure>,
}
#[derive(Clone, Serialize, TS)]
Expand Down Expand Up @@ -635,7 +635,7 @@ impl ConnectionManager {
operation_id: uuid::Uuid::new_v4().to_string(),
context,
status: WriteStatus::Pending,
artifact: None,
references: vec![],
error: None,
};
{
Expand All @@ -654,8 +654,11 @@ impl ConnectionManager {
let result = match response {
Ok(value) => {
record.status = WriteStatus::Succeeded;
record.artifact =
(value.records.len() == 1).then(|| value.records[0].artifact.clone());
record.references = value
.records
.iter()
.map(|record| record.artifact.clone())
.collect();
Some(value)
}
Err(error) => {
Expand Down
1 change: 1 addition & 0 deletions desktop/src-tauri/src/credentials.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ use serde::{Deserialize, Deserializer, Serialize};
use ts_rs::TS;
use zeroize::Zeroizing;

#[cfg(windows)]
const SERVICE: &str = "com.powercontext.desktop.preview";
pub struct Secret(Zeroizing<String>);
impl Secret {
Expand Down
1 change: 1 addition & 0 deletions desktop/src-tauri/src/transport/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,7 @@ fn valid_atomic_record(record: &AtomicMemoryRecord) -> bool {
&& !record.kind.trim().is_empty()
&& record.kind.chars().count() <= 128
&& !record.text.is_empty()
&& (record.state == AtomicMemoryState::Merged) == record.merged_into_id.is_some()
}
fn invalid_received() -> ApiFailure {
ApiFailure {
Expand Down
Loading
Loading