diff --git a/docs/RELEASE.md b/docs/RELEASE.md index c2118700..00ed8126 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -2,7 +2,7 @@ `kinic-vfs-cli` is published as the single operator binary for database setup, scripted writes, archive/restore, and Skill Registry maintenance. The Browser remains the primary public UI. -Primary distribution is npm. The npm package downloads GitHub Release assets and verifies SHA-256 checksums. Homebrew is optional follow-up packaging. Cargo install is a Rust-user fallback; crates.io publication is deferred. +Primary distribution is npm. The npm package downloads GitHub Release assets and verifies SHA-256 checksums. Cargo install is a Rust-user fallback; crates.io publication is deferred. ## npm @@ -74,37 +74,6 @@ tar -xzf kinic-vfs-cli-v0.1.3-macos-arm64.tar.gz ./kinic-vfs-cli --version ``` -## Homebrew - -Homebrew packaging is optional. The standard tap is `ICME-Lab/homebrew-tap`. If the tap does not exist yet, create it first. - -After a GitHub Release is available: - -1. Read the release checksum: - - ```bash - shasum -a 256 kinic-vfs-cli-v0.1.3-macos-arm64.tar.gz - ``` - -2. Copy [`../packaging/homebrew/Formula/kinic-vfs-cli.rb`](../packaging/homebrew/Formula/kinic-vfs-cli.rb) into `ICME-Lab/homebrew-tap`. - -3. Replace the placeholder `sha256` with the release checksum. - -4. Validate inside the tap repo: - - ```bash - brew audit --strict --online kinic-vfs-cli - brew install ICME-Lab/tap/kinic-vfs-cli - brew test kinic-vfs-cli - ``` - -Before release assets exist, only local syntax and style checks are expected to pass: - -```bash -ruby -c packaging/homebrew/Formula/kinic-vfs-cli.rb -brew style packaging/homebrew/Formula/kinic-vfs-cli.rb -``` - ## CI Artifacts The normal `cli-artifacts` CI job uses the same tarball layout as the release workflow, but uploads workflow artifacts instead of creating a GitHub Release. diff --git a/docs/internal/LLM_WIKI_STRUCTURE.md b/docs/internal/LLM_WIKI_STRUCTURE.md index 984a8d62..e442fc2c 100644 --- a/docs/internal/LLM_WIKI_STRUCTURE.md +++ b/docs/internal/LLM_WIKI_STRUCTURE.md @@ -190,12 +190,12 @@ sequenceDiagram | --- | --- | --- | | build | `build-vfs-canister.sh`, `build-vfs-canister-canbench.sh` | canister build | | canbench | `run_canbench_guard.sh`, `run_canbench_scale.sh`, `canbench/*.py` | canbench 集計・比較 | -| bench | `bench/run_beam_bench.sh`, `bench/run_canister_vfs_*.sh` | beam / canister workload | +| bench | `bench/run_canister_vfs_*.sh` | canister workload | | env | `setup_canbench_ci.sh` | 実行環境補助 | ### 8.3 `fixtures/` -- `fixtures/beam/`: beam sample 入力 +- 現在、永続 fixture はない ### 8.4 `artifacts/` diff --git a/docs/internal/llm-wiki-structure.svg b/docs/internal/llm-wiki-structure.svg deleted file mode 100644 index 47ea3feb..00000000 --- a/docs/internal/llm-wiki-structure.svg +++ /dev/null @@ -1,111 +0,0 @@ - - llm-wiki structure overview - Overview of llm-wiki workspace crates, data flow, support assets, and non-workspace directories. - - - - - - - - - - llm-wiki Structure - IC canister-backed VFS wiki base. Source of truth is remote node storage under /Wiki and /Sources. - - - Interface Layer - - vfs_cli_app - human / agent CLI - status, node ops, maintenance, skill registry - - vfs_cli_core - generic CLI core - - vfs_client - ic-agent transport + candid RPC - - - Canister / Service - - vfs_canister - IC query/update entrypoints - ic-sqlite-vfs stable memory, migrations - - vfs_runtime - VfsService boundary - thin orchestration around FsStore - - wiki_domain - wiki/source path validation - - - Storage Core - - vfs_store - SQLite source of truth - CRUD, append, edit, move, delete, glob - FTS search, snapshot export, delta sync, etag - - schema.rs - versioned migration, legacy reject - - vfs_types - shared contracts for all layers - - - Support Surface - - docs/validation - correctness and benchmark contract - - scripts/ - build, canbench, beam, env helpers - - agent skills - repo-local workflow skills - kinic-wiki-ingest / lint / query - - - - - - - - Key Flows - Read / Write Path - agent or CLI → vfs_client → vfs_canister → VfsService → FsStore → SQLite/FTS - Snapshot APIs - snapshot revision, change log, removed_paths, changed_nodes, and etag conflict control - Knowledge Policy - wiki note schema authority lives in docs/internal/WIKI_CANONICALITY.md, not in generic VFS crates - - - Top-Level Repository Areas - README.md: public entry and quick start - crates/: runtime implementation core - docs/: internal policy and validation docs - fixtures/: beam samples - artifacts/: benchmark output and wiki backups - - - Not in Current Workspace Build - crates/wiki_agent_schema - crates/wiki_http_adapter - crates/wiki_runtime - crates/wiki_search - crates/wiki_types - empty dirs only; safe to treat as inactive for current architecture reading - diff --git a/fixtures/beam/beam_evidence_sample.json b/fixtures/beam/beam_evidence_sample.json deleted file mode 100644 index 857c937c..00000000 --- a/fixtures/beam/beam_evidence_sample.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "100K": [ - { - "conversation_id": "beam-evidence-1", - "conversation_seed": { - "category": "General", - "title": "Calendar planning" - }, - "narratives": "A short planning conversation about a meeting date.", - "user_profile": { - "user_info": "Sample user profile" - }, - "conversation_plan": "Discuss one meeting date and confirm it.", - "user_questions": [ - { - "messages": [ - [ - "Can you help me remember the meeting date?" - ] - ] - } - ], - "chat": [ - [ - { - "role": "user", - "content": "Please remember that the meeting is on March 15, 2024." - }, - { - "role": "assistant", - "content": "Understood. I will remember March 15, 2024." - } - ] - ], - "probing_questions": "{'factoid':[{'question':'When is the meeting?','answer':'March 15, 2024','gold_answers':['March 15, 2024'],'gold_paths':['facts.md'],'gold_spans':['March 15, 2024'],'tags':['factoid','facts']},{'question':'What was the conversation plan?','answer':'Discuss one meeting date and confirm it.','gold_answers':['Discuss one meeting date and confirm it.'],'gold_paths':['plan.md'],'gold_spans':['Discuss one meeting date and confirm it.'],'tags':['factoid','plan']}],'temporal_reasoning':[{'question':'What happened in the first turn?','answer':'Please remember that the meeting is on March 15, 2024.','gold_answers':['Please remember that the meeting is on March 15, 2024.'],'gold_paths':['events.md'],'gold_spans':['Turn 0001 user: Please remember that the meeting is on March 15, 2024.'],'as_of':'2026-04-16T00:00:00+09:00','tags':['temporal','events']}],'abstention':[{'question':'What city was the meeting in?','answer':'insufficient evidence','expects_abstention':true,'gold_answers':['insufficient evidence'],'tags':['abstention']}]}" - } - ] -} diff --git a/fixtures/beam/beam_sample.json b/fixtures/beam/beam_sample.json deleted file mode 100644 index 1f19ce51..00000000 --- a/fixtures/beam/beam_sample.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "100K": [ - { - "conversation_id": "beam-sample-1", - "conversation_seed": { - "category": "General", - "title": "Calendar planning" - }, - "narratives": "A short planning conversation about a meeting date.", - "user_profile": { - "user_info": "Sample user profile" - }, - "conversation_plan": "Discuss one meeting date and confirm it.", - "user_questions": [ - { - "messages": [ - [ - "Can you help me remember the meeting date?" - ] - ] - } - ], - "chat": [ - [ - { - "role": "user", - "content": "Please remember that the meeting is on March 15, 2024." - }, - { - "role": "assistant", - "content": "Understood. I will remember March 15, 2024." - } - ] - ], - "probing_questions": "{'abstention':[{'question':'What city was the meeting in?','answer':'insufficient evidence','expects_abstention':true,'gold_answers':['insufficient evidence'],'tags':['abstention']}],'factoid':[{'question':'When is the meeting?','answer':'March 15, 2024','gold_answers':['March 15, 2024'],'gold_paths':['facts.md'],'gold_spans':['March 15, 2024'],'tags':['factoid','facts']},{'question':'What was the conversation plan?','answer':'Discuss one meeting date and confirm it.','gold_answers':['Discuss one meeting date and confirm it.'],'gold_paths':['plan.md'],'gold_spans':['Discuss one meeting date and confirm it.'],'tags':['factoid','plan']}],'temporal_reasoning':[{'question':'What happened in the first turn?','answer':'Please remember that the meeting is on March 15, 2024.','gold_answers':['Please remember that the meeting is on March 15, 2024.'],'gold_paths':['events.md'],'gold_spans':['Turn 0001 user: Please remember that the meeting is on March 15, 2024.'],'as_of':'2026-04-16T00:00:00+09:00','tags':['temporal','events']}]}" - } - ] -} diff --git a/packaging/homebrew/Formula/kinic-vfs-cli.rb b/packaging/homebrew/Formula/kinic-vfs-cli.rb deleted file mode 100644 index 5ebf8759..00000000 --- a/packaging/homebrew/Formula/kinic-vfs-cli.rb +++ /dev/null @@ -1,20 +0,0 @@ -class KinicVfsCli < Formula - desc "Operator CLI for Kinic VFS-backed wiki databases and Skill Registry packages" - homepage "https://github.com/ICME-Lab/kinic-wiki" - version "0.1.1" - - if OS.mac? && Hardware::CPU.arm? - url "https://github.com/ICME-Lab/kinic-wiki/releases/download/v#{version}/kinic-vfs-cli-v#{version}-macos-arm64.tar.gz" - sha256 "232a81c1a3ecd0b7d1c3e189e276fe5bf56fb546b6d14900bdbfee4cce9e5b24" - else - odie "kinic-vfs-cli v#{version} formula currently supports macOS arm64 only" - end - - def install - bin.install "kinic-vfs-cli" - end - - test do - assert_match "Usage:", shell_output("#{bin}/kinic-vfs-cli --help") - end -end diff --git a/scripts/bench/run_beam_bench.sh b/scripts/bench/run_beam_bench.sh deleted file mode 100755 index f79fa369..00000000 --- a/scripts/bench/run_beam_bench.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Where: scripts/bench/run_beam_bench.sh -# What: Run the read-only BEAM-derived retrieval benchmark binary. -# Why: Eval must stay separate from namespace preparation and canister writes. - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" - -cd "${REPO_ROOT}" -cargo run -p kinic-vfs-cli --bin beam_bench -- "$@" diff --git a/scripts/bench/run_beam_grounded_slice.sh b/scripts/bench/run_beam_grounded_slice.sh deleted file mode 100755 index 6041086f..00000000 --- a/scripts/bench/run_beam_grounded_slice.sh +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Where: scripts/bench/run_beam_grounded_slice.sh -# What: Prepare then run one grounded QA slice against the read-only BEAM eval harness. -# Why: Test runs should use one command so prepare/eval order is never skipped. - -if [[ $# -lt 5 ]]; then - echo "usage: $0 [extra args...]" >&2 - exit 1 -fi - -SLICE="$1" -CANISTER_ID="$2" -DATASET_PATH="$3" -OUTPUT_DIR="$4" -NAMESPACE="$5" -shift 5 - -SPLIT="100K" -LIMIT_ARGS=(--limit 20) -PASSTHROUGH_ARGS=() -while [[ $# -gt 0 ]]; do - case "$1" in - --split) - SPLIT="$2" - shift 2 - ;; - --limit) - LIMIT_ARGS=("$1" "$2") - shift 2 - ;; - *) - PASSTHROUGH_ARGS+=("$1") - shift - ;; - esac -done - -ARGS=( - --local - --canister-id "$CANISTER_ID" - --dataset-path "$DATASET_PATH" - --split "$SPLIT" - --output-dir "$OUTPUT_DIR" - --eval-mode retrieve-and-extract - --top-k 3 - --parallelism 1 - --namespace "$NAMESPACE" -) -ARGS+=("${LIMIT_ARGS[@]}") - -case "$SLICE" in - information-extraction) - ARGS+=(--include-question-type information_extraction) - ;; - temporal-reasoning) - ARGS+=(--include-question-type temporal_reasoning) - ;; - event-ordering) - ARGS+=(--include-question-type event_ordering) - ;; - instruction-following) - ARGS+=(--include-question-type instruction_following) - ;; - preference-following) - ARGS+=(--include-question-type preference_following) - ;; - knowledge-update) - ARGS+=(--include-question-type knowledge_update) - ;; - contradiction-resolution) - ARGS+=(--include-question-type contradiction_resolution) - ;; - summarization) - ARGS+=(--include-question-type summarization) - ;; - multi-session-reasoning) - ARGS+=(--include-question-type multi_session_reasoning) - ;; - abstention) - ARGS+=(--include-question-type abstention) - ;; - facts) - ARGS+=(--include-question-type information_extraction) - ;; - temporal) - ARGS+=(--include-question-type temporal_reasoning) - ;; - plan) - ARGS+=(--include-question-class factoid --include-tag plan) - ;; - *) - echo "unknown slice: $SLICE" >&2 - exit 1 - ;; -esac - -BENCH_DIR="$(cd "$(dirname "$0")" && pwd)" -PREPARE_ARGS=( - --local - --canister-id "$CANISTER_ID" - --dataset-path "$DATASET_PATH" - --split "$SPLIT" - --namespace "$NAMESPACE" -) -if [[ ${#LIMIT_ARGS[@]} -gt 0 ]]; then - PREPARE_ARGS+=("${LIMIT_ARGS[@]}") -fi -BENCH_ARGS=("${ARGS[@]}") -if [[ ${#PASSTHROUGH_ARGS[@]} -gt 0 ]]; then - BENCH_ARGS+=("${PASSTHROUGH_ARGS[@]}") -fi - -bash "${BENCH_DIR}/run_beam_prepare.sh" "${PREPARE_ARGS[@]}" -bash "${BENCH_DIR}/run_beam_bench.sh" "${BENCH_ARGS[@]}" diff --git a/scripts/bench/run_beam_improvement_slices.sh b/scripts/bench/run_beam_improvement_slices.sh deleted file mode 100755 index c8329cfa..00000000 --- a/scripts/bench/run_beam_improvement_slices.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Where: scripts/bench/run_beam_improvement_slices.sh -# What: Run the BEAM improvement slices in the recommended order with fixed names. -# Why: Prompt-tuning checks should rerun the same question-type slices without ad hoc command drift. - -if [[ $# -lt 3 ]]; then - echo "usage: $0 [namespace] [extra args...]" >&2 - exit 1 -fi - -CANISTER_ID="$1" -DATASET_PATH="$2" -OUTPUT_ROOT="$3" -NAMESPACE="${4:-beam-full-reset}" - -if [[ $# -ge 4 ]]; then - shift 4 -else - shift 3 -fi - -EXTRA_ARGS=("$@") -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" - -SLICES=( - preference-following - information-extraction - summarization - multi-session-reasoning - contradiction-resolution - temporal-reasoning -) - -for slice in "${SLICES[@]}"; do - ARGS=( - "$slice" - "$CANISTER_ID" - "$DATASET_PATH" - "${OUTPUT_ROOT}/${slice}" - "$NAMESPACE" - ) - if [[ ${#EXTRA_ARGS[@]} -gt 0 ]]; then - ARGS+=("${EXTRA_ARGS[@]}") - fi - bash "${SCRIPT_DIR}/run_beam_grounded_slice.sh" "${ARGS[@]}" -done diff --git a/scripts/bench/run_beam_prepare.sh b/scripts/bench/run_beam_prepare.sh deleted file mode 100755 index bf10d3ab..00000000 --- a/scripts/bench/run_beam_prepare.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Where: scripts/bench/run_beam_prepare.sh -# What: Prepare a BEAM benchmark namespace before read-only eval. -# Why: Note import and index sync must happen outside `beam_bench`. - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" - -cd "${REPO_ROOT}" -cargo run -p kinic-vfs-cli --bin beam_prepare -- "$@" diff --git a/scripts/bench/run_canister_vfs_workload.sh b/scripts/bench/run_canister_vfs_workload.sh index 81205d88..2a09f0f3 100644 --- a/scripts/bench/run_canister_vfs_workload.sh +++ b/scripts/bench/run_canister_vfs_workload.sh @@ -89,14 +89,14 @@ node -e ' const pickIterations = (operation, size) => { if (operation === "list") return Number(process.env.WORKLOAD_LIST_ITERATIONS || 100); if (operation === "search") return Number(process.env.WORKLOAD_SEARCH_ITERATIONS || 50); - if (operation === "mkdir" || operation === "glob" || operation === "recent") { + if (operation === "mkdir" || operation === "glob") { return Number(process.env.WORKLOAD_QUERY_ITERATIONS || process.env.WORKLOAD_LIST_ITERATIONS || 100); } return size.iterations; }; const defaultOperations = [ "create", "update", "append", "edit", "move_same_dir", "move_cross_dir", "delete", "read", "list", "search", - "mkdir", "glob", "recent", "multi_edit" + "mkdir", "glob", "multi_edit" ]; const operations = parseList(process.env.WORKLOAD_OPERATIONS, defaultOperations); const directoryShapes = parseList(process.env.WORKLOAD_DIRECTORY_SHAPES, ["flat"]); @@ -244,7 +244,6 @@ write_failed_raw() { search: { openai_tool: "search", openai_tool_variant: null }, mkdir: { openai_tool: "mkdir", openai_tool_variant: null }, glob: { openai_tool: "glob", openai_tool_variant: null }, - recent: { openai_tool: "recent", openai_tool_variant: null }, multi_edit: { openai_tool: "multi_edit", openai_tool_variant: null } }; const oa = openaiMap[op] ?? { openai_tool: op, openai_tool_variant: null };