feat: add GEWU installer and service contracts
This commit is contained in:
1 parent
254edac2c5
commit
6c9653866c
36 files changed
+8953
-70
No files matched your search
@@ -23,7 +23,7 @@ Choose a focused skill; load only its applicable protocol and pipeline files:
|
||||
|
||||
## Availability and reporting
|
||||
|
||||
Check the installed manifest and actual tool inventory. This initial pack has no verified GEWU service integration. Do not invent commands or assume that another host's custom tools exist. If required tools are unavailable, identify the blocked stage; prepare local drafts only when requested and label them unaccepted.
|
||||
Check the installed manifest and compare the discovered MCP names and input schemas with `contracts/service-v1.json`. This pack is bound to the local GEWU v1 contract, but native host workflows are NOT RUN. Do not invent commands or assume another host's custom tools exist. If required tools are unavailable or differ from the pinned contract, stop before mutation and identify the blocked stage; prepare local drafts only when requested and label them unaccepted.
|
||||
|
||||
Knowledge changes go through typed MCP proposals. Local artifacts under `Drafts/` and `Runs/` support work but are not accepted knowledge. Only a service acceptance receipt establishes acceptance. Keep credentials and source bodies out of status summaries; do not claim a cloud-backed host keeps all content local.
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
# GEWU research agent — Claude harness
|
||||
|
||||
This file provides discovery and instructions for Claude (Claude Code, Claude Desktop, and Claude-based agent hosts) operating in a GEWU-enabled workspace.
|
||||
|
||||
## Instruction routing
|
||||
|
||||
Follow the canonical GEWU research agent profile in [AGENTS.md](AGENTS.md).
|
||||
|
||||
- **Role and workflow routing:** [AGENTS.md](AGENTS.md)
|
||||
- **Evidence and support rules:** [protocols/EVIDENCE.md](protocols/EVIDENCE.md)
|
||||
- **Project and data boundaries:** [protocols/SCOPE.md](protocols/SCOPE.md)
|
||||
- **MCP proposals, tools and resume:** [protocols/CONTRIBUTIONS.md](protocols/CONTRIBUTIONS.md)
|
||||
|
||||
## Available skills
|
||||
|
||||
When executing research requests, load and follow the corresponding skill and pipeline:
|
||||
|
||||
| Intent | Skill | Pipeline |
|
||||
| --- | --- | --- |
|
||||
| Process selected sources | [kb-ingest](skills/kb-ingest/SKILL.md) | [ingest](pipelines/ingest.md) |
|
||||
| Query knowledge base with citations | [kb-query](skills/kb-query/SKILL.md) | [query](pipelines/query.md) |
|
||||
| Audit freshness, contradictions, links | [kb-curate](skills/kb-curate/SKILL.md) | [curate](pipelines/curate.md) |
|
||||
| Synthesize comparative findings | [kb-synthesize](skills/kb-synthesize/SKILL.md) | [synthesize](pipelines/synthesize.md) |
|
||||
|
||||
## Claude host configuration
|
||||
|
||||
Configure the selected host's project MCP entry for the authenticated Streamable HTTP endpoint, normally `<service-url>/mcp`. Supply the bearer token through the host's secure credential mechanism. Native host setup is not yet qualified. The local `gewu-connector` command transfers explicitly selected local files and does not provide the general GEWU tool catalog.
|
||||
|
||||
## Workspace coexistence
|
||||
|
||||
When installed in a user project workspace alongside other agents:
|
||||
1. **Preserve existing persona:** Do not replace an existing project-level `CLAUDE.md` or `AGENTS.md`. Keep GEWU's profile in `.agents/gewu/AGENTS.md` and reference it when research tasks are requested.
|
||||
2. **Skill namespacing:** All GEWU skills are namespaced with `kb-*`. They live in `.agents/gewu/skills/` without conflicting with existing domain or engineering skills.
|
||||
3. **Operational isolation:** Source processing operates exclusively on files in `Inbox/`, unaccepted drafts remain in `Drafts/`, and execution checkpoints reside in `Runs/`. Never overwrite user code files directly; submit changes through typed MCP proposals.
|
||||
@@ -1,24 +1,119 @@
|
||||
# GEWU local research-agent pack
|
||||
|
||||
Version 0.1.0. Draft instruction pack; service integration and host installation are not implemented or verified.
|
||||
Version 0.14.0. Local service contract, checkpoint helper, pasted-text/transcript intake, scoped project-lens reads and workspace installer are bound; native-host installation and pilot workflows remain unverified.
|
||||
|
||||
This pack follows the workspace-agent pattern used by Winnow and Praxis: [agent profile](AGENTS.md), shared protocols, four skills and separate pipeline procedures. An existing local host supplies the model and tools. There is no standalone agent engine here.
|
||||
This pack contains the [agent profile](AGENTS.md), Claude harness pointer ([CLAUDE.md](CLAUDE.md)), shared protocols, four skills and separate pipeline procedures. An existing local host supplies the model and tools. There is no standalone agent engine here.
|
||||
|
||||
The pack is source material for a dedicated research workspace. Keep the complete pack together when installing it into that workspace's canonical `.agents` directory. Configure the chosen host's discovery and MCP connection separately; preserve existing profiles and other servers. No commands here assume an installer or service exists.
|
||||
The pack is source material for a dedicated research workspace or for integration into an existing user project. Install it under `.agents/gewu` with the included reversible installer. It adds marked research-only routing blocks to the root `AGENTS.md`, `CLAUDE.md`, and `GEMINI.md`, preserving surrounding user content. Host MCP configuration remains a separate step because it requires the operator's service URL and credential.
|
||||
|
||||
| Entry point | Use |
|
||||
| --- | --- |
|
||||
| [AGENTS.md](AGENTS.md) | Canonical research agent profile and routing rules. |
|
||||
| [CLAUDE.md](CLAUDE.md) | Harness pointer and configuration for Claude Code and Claude Desktop. |
|
||||
| [kb-ingest](skills/kb-ingest/SKILL.md) | Turn selected material into evidence-bound proposals. |
|
||||
| [kb-query](skills/kb-query/SKILL.md) | Retrieve and explain accepted knowledge with citations. |
|
||||
| [kb-curate](skills/kb-curate/SKILL.md) | Audit a scoped collection and propose corrections/relations. |
|
||||
| [kb-synthesize](skills/kb-synthesize/SKILL.md) | Build a synthesis with revision-bound dependencies. |
|
||||
|
||||
The [manifest](manifest.json) records versions and explicit compatibility status. Pending service compatibility means no connected workflow is claimed. Until tools exist, requested local drafts stay under the selected workspace's `Drafts/` and remain unaccepted; no canonical writes or fabricated receipts are permitted.
|
||||
## Claude support
|
||||
|
||||
The manifest's `modules` array is the authoritative descriptor registry for the profile, protocols, skills and pipelines. Each entry identifies its implementation, provided/required instruction contracts, compatible checkpoint contract and exact file hash. Its snapshot digest covers that array using the declared canonical serialization. Recompute hashes and the snapshot after changing a module; any published pack change requires a new pack version. The entry lists above are discovery indexes and must agree with the registry.
|
||||
The pack supports Claude through the [CLAUDE.md](CLAUDE.md) harness pointer. When using Claude (such as Claude Code CLI or Claude Desktop):
|
||||
|
||||
1. **Instruction discovery:** Use the marked root routing block to load the canonical profile in `.agents/gewu/AGENTS.md`, its shared protocols, and applicable `kb-*` skills.
|
||||
2. **MCP integration:** Configure the host's project MCP entry for the authenticated Streamable HTTP endpoint, normally `<service-url>/mcp`. Native host setup is not yet qualified.
|
||||
3. **Execution model:** Compare discovered tools and schemas with `contracts/service-v1.json`, then use declared MCP operations such as `search`, `source_capture_url`, `source_capture_text`, `proposal_evaluate`, `proposal_submit` and `proposal_status`. There are no generic `query` or `propose` tools.
|
||||
|
||||
## Setting up a project directory
|
||||
|
||||
GEWU can be deployed in two configurations: a **dedicated research workspace** or an **existing project directory**.
|
||||
|
||||
### Directory layout
|
||||
|
||||
```text
|
||||
<project-root>/
|
||||
AGENTS.md # Project rules with a marked GEWU research route
|
||||
CLAUDE.md # Claude rules with a marked GEWU research route
|
||||
GEMINI.md # Gemini context with a marked GEWU research route
|
||||
.agents/
|
||||
gewu/ # Isolated GEWU pack
|
||||
AGENTS.md # Canonical GEWU research agent profile
|
||||
manifest.json # Pack and module registry with checksums
|
||||
protocols/ # Shared evidence, scope, and contribution protocols
|
||||
skills/ # Modular skill definitions
|
||||
kb-ingest/
|
||||
kb-query/
|
||||
kb-curate/
|
||||
kb-synthesize/
|
||||
<other-skills>/ # Coexisting user skills (e.g., linter, git)
|
||||
pipelines/ # Stage procedures (ingest, query, curate, synthesize)
|
||||
Inbox/ # Explicitly placed source documents for ingestion
|
||||
Drafts/ # Local working notes and unaccepted drafts
|
||||
Runs/ # Resumption checkpoints and local run receipts
|
||||
```
|
||||
|
||||
### Setup steps for a new project directory
|
||||
|
||||
1. **Create working folders:**
|
||||
Create the project directory along with the standard operational folders:
|
||||
```bash
|
||||
mkdir -p my-project/.agents Inbox Drafts Runs
|
||||
```
|
||||
|
||||
2. **Install the GEWU agent pack:**
|
||||
Run the installer from the pack repository. It copies the pack into `.agents/gewu` and adds reversible discovery pointers:
|
||||
```bash
|
||||
python path/to/GEWU/agents/gewu/scripts/install.py install my-project --mode integrated
|
||||
```
|
||||
Use `--mode dedicated` for a workspace reserved for research. The installer refuses an occupied GEWU destination and will not replace a pre-existing root instruction file.
|
||||
|
||||
3. **Configure host MCP connections:**
|
||||
Configure the selected host's project MCP entry for the service's authenticated Streamable HTTP endpoint, normally `<service-url>/mcp`, using a bearer credential supplied through that host's secure environment or credential mechanism. Do not put a live token in a checked-in project config. The local `gewu-connector` command is a separate, explicit-file upload bridge; it is not the general GEWU service MCP client. It returns a typed source candidate and never returns the selected path or bytes. Omit `source_revision_id` to derive a content-bound local revision with an exact retry checkpoint, or pass the original ID when resuming an existing workflow. `source_capture_text` archives and extracts explicitly supplied UTF-8 text or Markdown up to 1 MB and returns a candidate marked as pasted text; it does not register the source. To enable URL capture, the service operator may set `GEWU_FETCH_ALLOWED_HOSTS` to comma-separated exact public hostnames. The capture tool archives UTF-8 text, Markdown, HTML and PDF. HTML extraction produces visible text, not markup-byte offsets. PDF extraction currently requires Linux bubblewrap, Poppler and prlimit, runs without network access; mixed text/blank pages are partial and image-only PDFs report `PDF_NO_TEXT` as unavailable.
|
||||
|
||||
4. **Verify each stage separately:**
|
||||
Check the pack with `python .agents/gewu/scripts/manifest_tool.py verify`, confirm instruction discovery in the selected host, verify authenticated service diagnostics, then exercise the intended workflow. A successful copy does not qualify host discovery, connection, or workflow.
|
||||
|
||||
To remove an installation, run `python .agents/gewu/scripts/install.py uninstall my-project` from the installed pack or original source. Removal restores exact pre-install instruction bytes and removes only unchanged pack files. If a managed file has changed since installation, removal stops and preserves all content for manual review.
|
||||
|
||||
## Working with existing agents, skills, and folders
|
||||
|
||||
In real user projects, developers often already have agent configurations, custom skills, and active development workflows. GEWU is explicitly designed to coexist cleanly without clobbering existing setups:
|
||||
|
||||
### 1. Coexistence with existing agent profiles (`AGENTS.md`, `CLAUDE.md`, `GEMINI.md`)
|
||||
|
||||
- **Do not overwrite root project personas:** If your project already has a root `AGENTS.md` or `CLAUDE.md` governing code conventions, architectural rules, or development personas, keep that root file intact.
|
||||
- **Reference routing:** Add a concise routing section to your existing `AGENTS.md` or `CLAUDE.md` pointing to GEWU for research tasks:
|
||||
```markdown
|
||||
## Knowledge base and research (GEWU)
|
||||
For knowledge base queries, source ingestion, curation, or research synthesis, follow the GEWU profile in `.agents/gewu/AGENTS.md` and use the `kb-*` skills.
|
||||
```
|
||||
- **Preserved boundaries:** This ensures normal coding and maintenance sessions are not hijacked by research personas, while allowing the model to switch into GEWU research mode whenever research tasks arise.
|
||||
|
||||
### 2. Coexistence with existing skills and skill directories
|
||||
|
||||
- **Namespace isolation:** All GEWU skills are prefixed with `kb-` (`kb-ingest`, `kb-query`, `kb-curate`, `kb-synthesize`). They live in `.agents/gewu/skills/`, separate from existing project skills.
|
||||
- **Host-specific skill folders:** The pack keeps skills namespaced under `.agents/gewu/skills/`. Copying them into host-specific skill folders is not performed by this installer and requires separate host qualification.
|
||||
- **Self-contained contracts:** Each `kb-*` skill declares only its needed protocols and pipeline files. They do not depend on external harness hooks or proprietary runtime extensions.
|
||||
|
||||
### 3. Workspace folder and state boundaries
|
||||
|
||||
- **No untracked code mutation:** GEWU does not perform blanket safety commits, modify application source trees, or alter git branches directly.
|
||||
- **`Inbox/`:** Only documents explicitly placed in `Inbox/` (or explicitly targeted by file path) are processed during ingestion.
|
||||
- **`Drafts/`:** Working notes and intermediate unaccepted summaries stay strictly in `Drafts/`.
|
||||
- **`Runs/`:** Private execution checkpoints and progress receipts are stored in `Runs/`.
|
||||
- **Durable acceptance:** All additions to the shared research knowledge base go exclusively through typed MCP proposals and receive cryptographically bound acceptance receipts from the GEWU service.
|
||||
|
||||
### 4. Tool and MCP transport isolation
|
||||
|
||||
- The installer does not edit host MCP configuration. Add a uniquely named GEWU server through the host's supported project configuration or CLI, preserving the existing server entries. Host-specific MCP setup and authentication are not qualified by the pack installer.
|
||||
|
||||
## Manifest and checkpoint integrity
|
||||
|
||||
The [manifest](manifest.json) records module hashes, the checkpoint contract, and the verified local service-contract snapshot. The service snapshot is generated from the actual MCP SDK tool inventory and generated v1 record schemas. Native host acceptance is still NOT RUN. If the installed service tool inventory differs from the pinned snapshot, stop before mutation. Local drafts stay under the selected workspace's `Drafts/` and remain unaccepted; no canonical writes or fabricated receipts are permitted.
|
||||
|
||||
The manifest's `modules` array is the authoritative descriptor registry for the profile, harness pointers, protocols, skills and pipelines. Each entry identifies its implementation, provided/required instruction contracts, compatible checkpoint contract and exact file hash. Its snapshot digest covers that array using the declared canonical serialization. Recompute hashes and the snapshot after changing a module; any published pack change requires a new pack version. The entry lists above are discovery indexes and must agree with the registry.
|
||||
|
||||
For portable Markdown hashing, decode UTF-8, remove an optional BOM and normalize CRLF/CR line endings to LF, then hash the UTF-8 bytes with SHA-256. Preserve every other character and the final newline. This keeps Windows checkout conversion from changing instruction identity; it is not a signature or proof of trusted origin.
|
||||
|
||||
Checkpoint contract `gewu.local-checkpoint@0.1.0` requires run identity, explicit scope/objective, snapshot digest, resolved module contract IDs and file hashes, host/model metadata where available, input/output hashes, stage, coverage, budgets, pending operation identities and last service receipt. Unavailable service fields are explicitly absent; they are never fabricated. This is a draft instruction contract, not an executable checkpoint validator. Resume must verify the saved snapshot and hashes before using saved stages. A successor run requires explicit contract compatibility and downstream revalidation.
|
||||
Checkpoint contract `gewu.local-checkpoint@0.1.0` requires run identity, explicit project/shared scope, lens/objective, snapshot digest, resolved module contract IDs and file hashes, host/model metadata where available, input/output hashes, stage, included/excluded/skipped coverage, budgets, pending operation identities and last service receipt. Unavailable service fields are explicitly absent; they are never fabricated. The standalone `scripts/run_checkpoint.py` utility creates and updates private atomic checkpoint files, rejects credential/source-body fields, pins the pack modules, and refuses resume after a snapshot mismatch. For example, initialize with `python .agents/gewu/scripts/run_checkpoint.py init --run-id run-2026-01 --objective 'Compare audience response' --projects dome-performance --lens 'Audience behavior'`; send one bounded JSON patch to its `update` command on stdin and use `show` to validate pins before resuming. The service API persists agent-owned run state through `run_create`, revision-checked `run_checkpoint` and `run_status`; the local helper remains a private recovery mirror. Neither supplies a host scheduler. A successor run requires explicit contract compatibility and downstream revalidation.
|
||||
|
||||
Empty service-capability lists mean schema binding is pending, as declared by `service_capability_status`; they do not mean connected workflows need no capabilities. Bind and test those requirements when the service schemas exist. Host-adapter descriptors belong to a future installer/configuration implementation and are not supplied by this pack.
|
||||
`required_service_capabilities` lists the catalog capabilities each module uses; `bound-to-pinned-service-v1` means those names exist in the bundled v1 catalog and MCP contract snapshot. `not-required` means that module makes no service calls. These markers do not qualify a native host connection or prove a live pilot workflow. The installer supplies file-based discovery pointers only; native MCP adapters and client workflows remain unqualified.
|
||||
@@ -0,0 +1,430 @@
|
||||
{
|
||||
"api_version": "v1",
|
||||
"operations": [
|
||||
{
|
||||
"capability": "health:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "health",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "service:diagnostics",
|
||||
"mutates_knowledge": false,
|
||||
"name": "diagnostics",
|
||||
"transports": [
|
||||
"http",
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "identity:session",
|
||||
"mutates_knowledge": false,
|
||||
"name": "browser_session_create",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "identity:session",
|
||||
"mutates_knowledge": false,
|
||||
"name": "browser_session_restore",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "identity:session",
|
||||
"mutates_knowledge": false,
|
||||
"name": "browser_session_revoke",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "identity:session",
|
||||
"mutates_knowledge": false,
|
||||
"name": "account_login",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "identity:session",
|
||||
"mutates_knowledge": false,
|
||||
"name": "account_current",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "identity:session",
|
||||
"mutates_knowledge": false,
|
||||
"name": "account_change_password",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "identity:session",
|
||||
"mutates_knowledge": false,
|
||||
"name": "account_list_agent_credentials",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "identity:session",
|
||||
"mutates_knowledge": false,
|
||||
"name": "account_create_agent_credential",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "identity:session",
|
||||
"mutates_knowledge": false,
|
||||
"name": "account_revoke_agent_credential",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "credential:admin",
|
||||
"mutates_knowledge": false,
|
||||
"name": "admin_list_accounts",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "credential:admin",
|
||||
"mutates_knowledge": false,
|
||||
"name": "admin_create_account",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "credential:admin",
|
||||
"mutates_knowledge": false,
|
||||
"name": "admin_disable_account",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "owner:authenticate",
|
||||
"mutates_knowledge": false,
|
||||
"name": "owner_session_create",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "credential:admin",
|
||||
"mutates_knowledge": false,
|
||||
"name": "admin_list_credentials",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "credential:admin",
|
||||
"mutates_knowledge": false,
|
||||
"name": "admin_create_credential",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "credential:admin",
|
||||
"mutates_knowledge": false,
|
||||
"name": "admin_revoke_credential",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "credential:admin",
|
||||
"mutates_knowledge": false,
|
||||
"name": "admin_list_events",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "project:admin",
|
||||
"mutates_knowledge": false,
|
||||
"name": "admin_list_projects",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "project:admin",
|
||||
"mutates_knowledge": false,
|
||||
"name": "project_create",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "project:admin",
|
||||
"mutates_knowledge": false,
|
||||
"name": "project_archive",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "knowledge:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "list_projects",
|
||||
"transports": [
|
||||
"http",
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "knowledge:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "get_project_context",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "knowledge:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "search",
|
||||
"transports": [
|
||||
"http",
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "knowledge:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "list_sources",
|
||||
"transports": [
|
||||
"http",
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "knowledge:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "get_node",
|
||||
"transports": [
|
||||
"http",
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "knowledge:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "node_history",
|
||||
"transports": [
|
||||
"http",
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "knowledge:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "get_source",
|
||||
"transports": [
|
||||
"http",
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "knowledge:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "get_source_artifact",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "knowledge:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "get_source_location",
|
||||
"transports": [
|
||||
"http"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "knowledge:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "neighbors",
|
||||
"transports": [
|
||||
"http",
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:submit",
|
||||
"mutates_knowledge": false,
|
||||
"name": "source_capture_url",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:submit",
|
||||
"mutates_knowledge": false,
|
||||
"name": "source_capture_text",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:submit",
|
||||
"mutates_knowledge": false,
|
||||
"name": "source_upload_begin",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:submit",
|
||||
"mutates_knowledge": false,
|
||||
"name": "source_upload_status",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:submit",
|
||||
"mutates_knowledge": false,
|
||||
"name": "source_upload_chunk",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:submit",
|
||||
"mutates_knowledge": false,
|
||||
"name": "source_upload_finalize",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:submit",
|
||||
"mutates_knowledge": false,
|
||||
"name": "source_extract",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:submit",
|
||||
"mutates_knowledge": false,
|
||||
"name": "source_extraction_block",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:submit",
|
||||
"mutates_knowledge": true,
|
||||
"name": "proposal_submit",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:evaluate",
|
||||
"mutates_knowledge": false,
|
||||
"name": "proposal_evaluate",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "proposal_status",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:withdraw",
|
||||
"mutates_knowledge": false,
|
||||
"name": "proposal_withdraw",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "run:write",
|
||||
"mutates_knowledge": false,
|
||||
"name": "run_create",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "run:write",
|
||||
"mutates_knowledge": false,
|
||||
"name": "run_checkpoint",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "run:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "run_status",
|
||||
"transports": [
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "owner:review",
|
||||
"mutates_knowledge": false,
|
||||
"name": "owner_challenge_get",
|
||||
"transports": [
|
||||
"owner_mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "owner:review",
|
||||
"mutates_knowledge": false,
|
||||
"name": "owner_diff_get",
|
||||
"transports": [
|
||||
"owner_mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "owner:decide",
|
||||
"mutates_knowledge": false,
|
||||
"name": "owner_decide",
|
||||
"transports": [
|
||||
"owner_mcp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "local:file:read",
|
||||
"mutates_knowledge": false,
|
||||
"name": "list_selected_files",
|
||||
"transports": [
|
||||
"stdio"
|
||||
]
|
||||
},
|
||||
{
|
||||
"capability": "proposal:submit",
|
||||
"mutates_knowledge": false,
|
||||
"name": "upload_selected_file",
|
||||
"transports": [
|
||||
"stdio"
|
||||
]
|
||||
}
|
||||
],
|
||||
"schema_version": 1
|
||||
}
|
||||
@@ -0,0 +1,249 @@
|
||||
{
|
||||
"$defs": {
|
||||
"ChangedFile": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"content_sha256": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Content Sha256",
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"maxLength": 500,
|
||||
"minLength": 1,
|
||||
"title": "Path",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"path",
|
||||
"content_sha256"
|
||||
],
|
||||
"title": "ChangedFile",
|
||||
"type": "object"
|
||||
},
|
||||
"OwnerDecisionReference": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"challenge_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Challenge Id",
|
||||
"type": "string"
|
||||
},
|
||||
"decided_at": {
|
||||
"format": "date-time",
|
||||
"title": "Decided At",
|
||||
"type": "string"
|
||||
},
|
||||
"decision": {
|
||||
"const": "authorize",
|
||||
"default": "authorize",
|
||||
"title": "Decision",
|
||||
"type": "string"
|
||||
},
|
||||
"decision_digest": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Decision Digest",
|
||||
"type": "string"
|
||||
},
|
||||
"domains": {
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 100,
|
||||
"minItems": 1,
|
||||
"title": "Domains",
|
||||
"type": "array"
|
||||
},
|
||||
"grant_version": {
|
||||
"minimum": 1,
|
||||
"title": "Grant Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"owner_principal_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Owner Principal Id",
|
||||
"type": "string"
|
||||
},
|
||||
"owner_session_id": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Owner Session Id",
|
||||
"type": "string"
|
||||
},
|
||||
"rationale": {
|
||||
"maxLength": 2000,
|
||||
"minLength": 1,
|
||||
"title": "Rationale",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"challenge_id",
|
||||
"owner_principal_id",
|
||||
"owner_session_id",
|
||||
"decision_digest",
|
||||
"domains",
|
||||
"grant_version",
|
||||
"rationale",
|
||||
"decided_at"
|
||||
],
|
||||
"title": "OwnerDecisionReference",
|
||||
"type": "object"
|
||||
},
|
||||
"PolicyBinding": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"policy_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Policy Id",
|
||||
"type": "string"
|
||||
},
|
||||
"policy_version": {
|
||||
"minimum": 1,
|
||||
"title": "Policy Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"project_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Project Id",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"project_id",
|
||||
"policy_id",
|
||||
"policy_version"
|
||||
],
|
||||
"title": "PolicyBinding",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"accepted_node_ids": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Accepted Node Ids",
|
||||
"type": "array"
|
||||
},
|
||||
"actor_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Actor Id",
|
||||
"type": "string"
|
||||
},
|
||||
"before_revision": {
|
||||
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
|
||||
"title": "Before Revision",
|
||||
"type": "string"
|
||||
},
|
||||
"changed_files": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/ChangedFile"
|
||||
},
|
||||
"maxItems": 200,
|
||||
"minItems": 1,
|
||||
"title": "Changed Files",
|
||||
"type": "array"
|
||||
},
|
||||
"credential_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Credential Id",
|
||||
"type": "string"
|
||||
},
|
||||
"decided_at": {
|
||||
"format": "date-time",
|
||||
"title": "Decided At",
|
||||
"type": "string"
|
||||
},
|
||||
"owner_decisions": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/OwnerDecisionReference"
|
||||
},
|
||||
"maxItems": 100,
|
||||
"title": "Owner Decisions",
|
||||
"type": "array"
|
||||
},
|
||||
"payload_digest": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Payload Digest",
|
||||
"type": "string"
|
||||
},
|
||||
"policy_bindings": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/PolicyBinding"
|
||||
},
|
||||
"title": "Policy Bindings",
|
||||
"type": "array"
|
||||
},
|
||||
"proposal_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Proposal Id",
|
||||
"type": "string"
|
||||
},
|
||||
"proposal_revision": {
|
||||
"minimum": 1,
|
||||
"title": "Proposal Revision",
|
||||
"type": "integer"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"proposal_id",
|
||||
"proposal_revision",
|
||||
"payload_digest",
|
||||
"before_revision",
|
||||
"changed_files",
|
||||
"actor_id",
|
||||
"credential_id",
|
||||
"policy_bindings",
|
||||
"decided_at"
|
||||
],
|
||||
"title": "AcceptanceManifest",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"automatic_edge_types": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"enum": [
|
||||
"solves",
|
||||
"addresses",
|
||||
"causes",
|
||||
"supports",
|
||||
"contradicts",
|
||||
"instance_of",
|
||||
"part_of",
|
||||
"precedes",
|
||||
"supersedes",
|
||||
"compared_with",
|
||||
"derived_from",
|
||||
"applies_to"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Automatic Edge Types",
|
||||
"type": "array"
|
||||
},
|
||||
"automatic_node_types": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"enum": [
|
||||
"finding",
|
||||
"problem",
|
||||
"technique",
|
||||
"case",
|
||||
"entity",
|
||||
"event",
|
||||
"concept",
|
||||
"datapoint",
|
||||
"synthesis"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Automatic Node Types",
|
||||
"type": "array"
|
||||
},
|
||||
"automatic_source_registration": {
|
||||
"default": false,
|
||||
"title": "Automatic Source Registration",
|
||||
"type": "boolean"
|
||||
},
|
||||
"policy_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Policy Id",
|
||||
"type": "string"
|
||||
},
|
||||
"policy_version": {
|
||||
"minimum": 1,
|
||||
"title": "Policy Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"project_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Project Id",
|
||||
"type": "string"
|
||||
},
|
||||
"require_owner_decision_for": {
|
||||
"default": [
|
||||
"delete",
|
||||
"merge",
|
||||
"promote",
|
||||
"intent",
|
||||
"policy"
|
||||
],
|
||||
"items": {
|
||||
"enum": [
|
||||
"delete",
|
||||
"merge",
|
||||
"promote",
|
||||
"intent",
|
||||
"policy"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Require Owner Decision For",
|
||||
"type": "array"
|
||||
},
|
||||
"require_supported_assessment": {
|
||||
"default": true,
|
||||
"title": "Require Supported Assessment",
|
||||
"type": "boolean"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"policy_id",
|
||||
"policy_version",
|
||||
"project_id"
|
||||
],
|
||||
"title": "AutoAcceptPolicy",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
{
|
||||
"$defs": {
|
||||
"ErrorCode": {
|
||||
"enum": [
|
||||
"SCOPE_REQUIRED",
|
||||
"OUT_OF_SCOPE",
|
||||
"UNAUTHORIZED",
|
||||
"OWNER_DECISION_REQUIRED",
|
||||
"POLICY_MISSING",
|
||||
"EVIDENCE_MISMATCH",
|
||||
"SUPPORT_UNAVAILABLE",
|
||||
"BASE_CONFLICT",
|
||||
"IDEMPOTENCY_CONFLICT",
|
||||
"BUDGET_TOO_SMALL",
|
||||
"UPLOAD_EXPIRED",
|
||||
"BUSY",
|
||||
"RECOVERY_REQUIRED"
|
||||
],
|
||||
"title": "ErrorCode",
|
||||
"type": "string"
|
||||
},
|
||||
"Finding": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"code": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Code",
|
||||
"type": "string"
|
||||
},
|
||||
"message": {
|
||||
"maxLength": 1000,
|
||||
"minLength": 1,
|
||||
"title": "Message",
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 256,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Path"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"code",
|
||||
"message"
|
||||
],
|
||||
"title": "Finding",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"code": {
|
||||
"$ref": "#/$defs/ErrorCode"
|
||||
},
|
||||
"findings": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/Finding"
|
||||
},
|
||||
"title": "Findings",
|
||||
"type": "array"
|
||||
},
|
||||
"message": {
|
||||
"maxLength": 1000,
|
||||
"minLength": 1,
|
||||
"title": "Message",
|
||||
"type": "string"
|
||||
},
|
||||
"request_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Request Id",
|
||||
"type": "string"
|
||||
},
|
||||
"retryable": {
|
||||
"title": "Retryable",
|
||||
"type": "boolean"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"code",
|
||||
"message",
|
||||
"retryable",
|
||||
"request_id"
|
||||
],
|
||||
"title": "DomainError",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,183 @@
|
||||
{
|
||||
"$defs": {
|
||||
"ExtractionBlock": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"block_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Block Id",
|
||||
"type": "string"
|
||||
},
|
||||
"normalization_map": {
|
||||
"items": {
|
||||
"maxItems": 2,
|
||||
"minItems": 2,
|
||||
"prefixItems": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "integer"
|
||||
}
|
||||
],
|
||||
"type": "array"
|
||||
},
|
||||
"maxItems": 100000,
|
||||
"title": "Normalization Map",
|
||||
"type": "array"
|
||||
},
|
||||
"normalized_text": {
|
||||
"maxLength": 100000,
|
||||
"title": "Normalized Text",
|
||||
"type": "string"
|
||||
},
|
||||
"ordinal": {
|
||||
"minimum": 0,
|
||||
"title": "Ordinal",
|
||||
"type": "integer"
|
||||
},
|
||||
"original_text": {
|
||||
"maxLength": 100000,
|
||||
"title": "Original Text",
|
||||
"type": "string"
|
||||
},
|
||||
"page": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 1,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Page"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"time_end_ms": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Time End Ms"
|
||||
},
|
||||
"time_start_ms": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Time Start Ms"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"block_id",
|
||||
"ordinal",
|
||||
"original_text",
|
||||
"normalized_text",
|
||||
"normalization_map"
|
||||
],
|
||||
"title": "ExtractionBlock",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"blocks": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/ExtractionBlock"
|
||||
},
|
||||
"maxItems": 100000,
|
||||
"title": "Blocks",
|
||||
"type": "array"
|
||||
},
|
||||
"extraction_id": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Extraction Id",
|
||||
"type": "string"
|
||||
},
|
||||
"normalization_profile": {
|
||||
"const": "unicode-nfc-lf-v1",
|
||||
"title": "Normalization Profile",
|
||||
"type": "string"
|
||||
},
|
||||
"parser_config_sha256": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Parser Config Sha256",
|
||||
"type": "string"
|
||||
},
|
||||
"parser_name": {
|
||||
"maxLength": 100,
|
||||
"minLength": 1,
|
||||
"title": "Parser Name",
|
||||
"type": "string"
|
||||
},
|
||||
"parser_version": {
|
||||
"maxLength": 100,
|
||||
"minLength": 1,
|
||||
"title": "Parser Version",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"source_revision_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Source Revision Id",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"enum": [
|
||||
"complete",
|
||||
"partial",
|
||||
"unavailable"
|
||||
],
|
||||
"title": "Status",
|
||||
"type": "string"
|
||||
},
|
||||
"warnings": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Warnings",
|
||||
"type": "array"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"extraction_id",
|
||||
"source_revision_id",
|
||||
"parser_name",
|
||||
"parser_version",
|
||||
"parser_config_sha256",
|
||||
"normalization_profile",
|
||||
"status",
|
||||
"blocks"
|
||||
],
|
||||
"title": "ExtractionRecord",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,693 @@
|
||||
{
|
||||
"$defs": {
|
||||
"Claim": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"assessment": {
|
||||
"$ref": "#/$defs/SupportAssessment"
|
||||
},
|
||||
"claim_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Claim Id",
|
||||
"type": "string"
|
||||
},
|
||||
"evidence": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/EvidenceReference"
|
||||
},
|
||||
"maxItems": 20,
|
||||
"minItems": 1,
|
||||
"title": "Evidence",
|
||||
"type": "array"
|
||||
},
|
||||
"evidence_type": {
|
||||
"enum": [
|
||||
"measured",
|
||||
"reported",
|
||||
"opinion",
|
||||
"vendor_marketing"
|
||||
],
|
||||
"title": "Evidence Type",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"text": {
|
||||
"maxLength": 4000,
|
||||
"minLength": 1,
|
||||
"title": "Text",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"claim_id",
|
||||
"text",
|
||||
"evidence_type",
|
||||
"evidence",
|
||||
"assessment"
|
||||
],
|
||||
"title": "Claim",
|
||||
"type": "object"
|
||||
},
|
||||
"Confidence": {
|
||||
"enum": [
|
||||
"low",
|
||||
"medium",
|
||||
"high"
|
||||
],
|
||||
"title": "Confidence",
|
||||
"type": "string"
|
||||
},
|
||||
"EvidenceReference": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"assertion_digest": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Assertion Digest",
|
||||
"type": "string"
|
||||
},
|
||||
"assertion_path": {
|
||||
"maxLength": 256,
|
||||
"minLength": 1,
|
||||
"title": "Assertion Path",
|
||||
"type": "string"
|
||||
},
|
||||
"extraction_id": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Extraction Id",
|
||||
"type": "string"
|
||||
},
|
||||
"locator": {
|
||||
"$ref": "#/$defs/Locator"
|
||||
},
|
||||
"normalization_profile": {
|
||||
"const": "unicode-nfc-lf-v1",
|
||||
"title": "Normalization Profile",
|
||||
"type": "string"
|
||||
},
|
||||
"quote": {
|
||||
"maxLength": 8000,
|
||||
"minLength": 1,
|
||||
"title": "Quote",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"source_revision_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Source Revision Id",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"source_revision_id",
|
||||
"extraction_id",
|
||||
"assertion_path",
|
||||
"assertion_digest",
|
||||
"quote",
|
||||
"locator",
|
||||
"normalization_profile"
|
||||
],
|
||||
"title": "EvidenceReference",
|
||||
"type": "object"
|
||||
},
|
||||
"LensFit": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"horizon": {
|
||||
"enum": [
|
||||
"H1",
|
||||
"H2",
|
||||
"H3"
|
||||
],
|
||||
"title": "Horizon",
|
||||
"type": "string"
|
||||
},
|
||||
"key_question": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 1000,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Key Question"
|
||||
},
|
||||
"reason": {
|
||||
"maxLength": 1000,
|
||||
"minLength": 1,
|
||||
"title": "Reason",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"score": {
|
||||
"maximum": 1,
|
||||
"minimum": 0,
|
||||
"title": "Score",
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"score",
|
||||
"horizon",
|
||||
"reason"
|
||||
],
|
||||
"title": "LensFit",
|
||||
"type": "object"
|
||||
},
|
||||
"Lifecycle": {
|
||||
"enum": [
|
||||
"active",
|
||||
"superseded"
|
||||
],
|
||||
"title": "Lifecycle",
|
||||
"type": "string"
|
||||
},
|
||||
"Locator": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"block_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Block Id",
|
||||
"type": "string"
|
||||
},
|
||||
"end": {
|
||||
"exclusiveMinimum": 0,
|
||||
"title": "End",
|
||||
"type": "integer"
|
||||
},
|
||||
"kind": {
|
||||
"enum": [
|
||||
"text_span",
|
||||
"pdf_page_span",
|
||||
"transcript_timestamp_span"
|
||||
],
|
||||
"title": "Kind",
|
||||
"type": "string"
|
||||
},
|
||||
"page": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 1,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Page"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"start": {
|
||||
"minimum": 0,
|
||||
"title": "Start",
|
||||
"type": "integer"
|
||||
},
|
||||
"time_end_ms": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Time End Ms"
|
||||
},
|
||||
"time_start_ms": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Time Start Ms"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"kind",
|
||||
"block_id",
|
||||
"start",
|
||||
"end"
|
||||
],
|
||||
"title": "Locator",
|
||||
"type": "object"
|
||||
},
|
||||
"NodeType": {
|
||||
"enum": [
|
||||
"finding",
|
||||
"problem",
|
||||
"technique",
|
||||
"case",
|
||||
"entity",
|
||||
"event",
|
||||
"concept",
|
||||
"datapoint",
|
||||
"synthesis"
|
||||
],
|
||||
"title": "NodeType",
|
||||
"type": "string"
|
||||
},
|
||||
"ReviewState": {
|
||||
"enum": [
|
||||
"draft",
|
||||
"reviewed"
|
||||
],
|
||||
"title": "ReviewState",
|
||||
"type": "string"
|
||||
},
|
||||
"SupportAssessment": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"assertion_digest": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Assertion Digest",
|
||||
"type": "string"
|
||||
},
|
||||
"assessment_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Assessment Id",
|
||||
"type": "string"
|
||||
},
|
||||
"assessor_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Assessor Id",
|
||||
"type": "string"
|
||||
},
|
||||
"evidence_digests": {
|
||||
"items": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 20,
|
||||
"minItems": 1,
|
||||
"title": "Evidence Digests",
|
||||
"type": "array"
|
||||
},
|
||||
"method": {
|
||||
"maxLength": 100,
|
||||
"minLength": 1,
|
||||
"title": "Method",
|
||||
"type": "string"
|
||||
},
|
||||
"rationale": {
|
||||
"maxLength": 4000,
|
||||
"minLength": 1,
|
||||
"title": "Rationale",
|
||||
"type": "string"
|
||||
},
|
||||
"run_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Run Id",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/$defs/SupportStatus"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"assessment_id",
|
||||
"assertion_digest",
|
||||
"evidence_digests",
|
||||
"assessor_id",
|
||||
"run_id",
|
||||
"method",
|
||||
"status",
|
||||
"rationale"
|
||||
],
|
||||
"title": "SupportAssessment",
|
||||
"type": "object"
|
||||
},
|
||||
"SupportStatus": {
|
||||
"enum": [
|
||||
"supported",
|
||||
"unsupported",
|
||||
"unavailable"
|
||||
],
|
||||
"title": "SupportStatus",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"agent_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Agent Id",
|
||||
"type": "string"
|
||||
},
|
||||
"aliases": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 100,
|
||||
"title": "Aliases",
|
||||
"type": "array"
|
||||
},
|
||||
"as_of": {
|
||||
"anyOf": [
|
||||
{
|
||||
"format": "date-time",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "As Of"
|
||||
},
|
||||
"assumptions": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/Claim"
|
||||
},
|
||||
"maxItems": 100,
|
||||
"title": "Assumptions",
|
||||
"type": "array"
|
||||
},
|
||||
"audience": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 20,
|
||||
"title": "Audience",
|
||||
"type": "array"
|
||||
},
|
||||
"claim_support": {
|
||||
"enum": [
|
||||
"pending",
|
||||
"supported",
|
||||
"unsupported"
|
||||
],
|
||||
"title": "Claim Support",
|
||||
"type": "string"
|
||||
},
|
||||
"claims": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/Claim"
|
||||
},
|
||||
"maxItems": 100,
|
||||
"minItems": 1,
|
||||
"title": "Claims",
|
||||
"type": "array"
|
||||
},
|
||||
"confidence": {
|
||||
"$ref": "#/$defs/Confidence"
|
||||
},
|
||||
"created": {
|
||||
"format": "date-time",
|
||||
"title": "Created",
|
||||
"type": "string"
|
||||
},
|
||||
"demographic": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 1000,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Demographic"
|
||||
},
|
||||
"domain": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 20,
|
||||
"title": "Domain",
|
||||
"type": "array"
|
||||
},
|
||||
"lens_fit": {
|
||||
"maxProperties": 50,
|
||||
"patternProperties": {
|
||||
"^[a-zA-Z0-9][a-zA-Z0-9._:-]*$": {
|
||||
"$ref": "#/$defs/LensFit"
|
||||
}
|
||||
},
|
||||
"propertyNames": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1
|
||||
},
|
||||
"title": "Lens Fit",
|
||||
"type": "object"
|
||||
},
|
||||
"lifecycle": {
|
||||
"$ref": "#/$defs/Lifecycle"
|
||||
},
|
||||
"limitations": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/Claim"
|
||||
},
|
||||
"maxItems": 100,
|
||||
"title": "Limitations",
|
||||
"type": "array"
|
||||
},
|
||||
"merged_from": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 100,
|
||||
"title": "Merged From",
|
||||
"type": "array"
|
||||
},
|
||||
"model_id": {
|
||||
"maxLength": 200,
|
||||
"minLength": 1,
|
||||
"title": "Model Id",
|
||||
"type": "string"
|
||||
},
|
||||
"node_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Node Id",
|
||||
"type": "string"
|
||||
},
|
||||
"node_type": {
|
||||
"$ref": "#/$defs/NodeType"
|
||||
},
|
||||
"project_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Project Id",
|
||||
"type": "string"
|
||||
},
|
||||
"reporting_year": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maximum": 9999,
|
||||
"minimum": 1,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Reporting Year"
|
||||
},
|
||||
"review_state": {
|
||||
"$ref": "#/$defs/ReviewState"
|
||||
},
|
||||
"run_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Run Id",
|
||||
"type": "string"
|
||||
},
|
||||
"sample_size": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Sample Size"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"stale_after": {
|
||||
"anyOf": [
|
||||
{
|
||||
"format": "date-time",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Stale After"
|
||||
},
|
||||
"summary": {
|
||||
"maxLength": 8000,
|
||||
"minLength": 1,
|
||||
"title": "Summary",
|
||||
"type": "string"
|
||||
},
|
||||
"superseded_by": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Superseded By",
|
||||
"type": "array"
|
||||
},
|
||||
"supersedes": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Supersedes",
|
||||
"type": "array"
|
||||
},
|
||||
"tags": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 100,
|
||||
"title": "Tags",
|
||||
"type": "array"
|
||||
},
|
||||
"title": {
|
||||
"maxLength": 300,
|
||||
"minLength": 1,
|
||||
"title": "Title",
|
||||
"type": "string"
|
||||
},
|
||||
"unit": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 100,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Unit"
|
||||
},
|
||||
"updated": {
|
||||
"format": "date-time",
|
||||
"title": "Updated",
|
||||
"type": "string"
|
||||
},
|
||||
"use_for": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 20,
|
||||
"title": "Use For",
|
||||
"type": "array"
|
||||
},
|
||||
"value": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Value"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"node_id",
|
||||
"project_id",
|
||||
"node_type",
|
||||
"title",
|
||||
"summary",
|
||||
"created",
|
||||
"updated",
|
||||
"review_state",
|
||||
"lifecycle",
|
||||
"confidence",
|
||||
"claim_support",
|
||||
"run_id",
|
||||
"agent_id",
|
||||
"model_id",
|
||||
"claims"
|
||||
],
|
||||
"title": "KnowledgeNode",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
{
|
||||
"$defs": {
|
||||
"Scope": {
|
||||
"additionalProperties": false,
|
||||
"description": "Project context plus optional project includes; all-project access is deliberate.",
|
||||
"properties": {
|
||||
"all_projects": {
|
||||
"default": false,
|
||||
"title": "All Projects",
|
||||
"type": "boolean"
|
||||
},
|
||||
"include_projects": {
|
||||
"anyOf": [
|
||||
{
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"type": "array"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Include Projects"
|
||||
},
|
||||
"include_shared": {
|
||||
"default": true,
|
||||
"title": "Include Shared",
|
||||
"type": "boolean"
|
||||
},
|
||||
"projects": {
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"minItems": 1,
|
||||
"title": "Projects",
|
||||
"type": "array"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"projects"
|
||||
],
|
||||
"title": "Scope",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"budget_tokens": {
|
||||
"maximum": 50000,
|
||||
"minimum": 256,
|
||||
"title": "Budget Tokens",
|
||||
"type": "integer"
|
||||
},
|
||||
"cursor": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 512,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Cursor"
|
||||
},
|
||||
"edge_types": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"enum": [
|
||||
"solves",
|
||||
"addresses",
|
||||
"causes",
|
||||
"supports",
|
||||
"contradicts",
|
||||
"instance_of",
|
||||
"part_of",
|
||||
"precedes",
|
||||
"supersedes",
|
||||
"compared_with",
|
||||
"derived_from",
|
||||
"applies_to"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 12,
|
||||
"title": "Edge Types",
|
||||
"type": "array"
|
||||
},
|
||||
"limit": {
|
||||
"default": 20,
|
||||
"maximum": 50,
|
||||
"minimum": 1,
|
||||
"title": "Limit",
|
||||
"type": "integer"
|
||||
},
|
||||
"node_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Node Id",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"scope": {
|
||||
"$ref": "#/$defs/Scope"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"node_id",
|
||||
"scope",
|
||||
"budget_tokens"
|
||||
],
|
||||
"title": "NeighborRequest",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"$defs": {
|
||||
"ProjectStatus": {
|
||||
"enum": [
|
||||
"active",
|
||||
"paused",
|
||||
"archived"
|
||||
],
|
||||
"title": "ProjectStatus",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"autonomy_policy_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Autonomy Policy Id",
|
||||
"type": "string"
|
||||
},
|
||||
"default_includes": {
|
||||
"default": [
|
||||
"shared"
|
||||
],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Default Includes",
|
||||
"type": "array"
|
||||
},
|
||||
"description": {
|
||||
"default": "",
|
||||
"maxLength": 4000,
|
||||
"title": "Description",
|
||||
"type": "string"
|
||||
},
|
||||
"key_questions": {
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 30,
|
||||
"minItems": 1,
|
||||
"title": "Key Questions",
|
||||
"type": "array"
|
||||
},
|
||||
"north_star": {
|
||||
"maxLength": 4000,
|
||||
"minLength": 1,
|
||||
"title": "North Star",
|
||||
"type": "string"
|
||||
},
|
||||
"owners": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Owners",
|
||||
"type": "array"
|
||||
},
|
||||
"project_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Project Id",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/$defs/ProjectStatus"
|
||||
},
|
||||
"taxonomy_extensions": {
|
||||
"additionalProperties": {
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"maxProperties": 100,
|
||||
"title": "Taxonomy Extensions",
|
||||
"type": "object"
|
||||
},
|
||||
"title": {
|
||||
"maxLength": 200,
|
||||
"minLength": 1,
|
||||
"title": "Title",
|
||||
"type": "string"
|
||||
},
|
||||
"watch_list": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 100,
|
||||
"title": "Watch List",
|
||||
"type": "array"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"project_id",
|
||||
"title",
|
||||
"status",
|
||||
"north_star",
|
||||
"key_questions",
|
||||
"autonomy_policy_id"
|
||||
],
|
||||
"title": "ProjectRecord",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
{
|
||||
"$defs": {
|
||||
"Finding": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"code": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Code",
|
||||
"type": "string"
|
||||
},
|
||||
"message": {
|
||||
"maxLength": 1000,
|
||||
"minLength": 1,
|
||||
"title": "Message",
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 256,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Path"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"code",
|
||||
"message"
|
||||
],
|
||||
"title": "Finding",
|
||||
"type": "object"
|
||||
},
|
||||
"ProposalState": {
|
||||
"enum": [
|
||||
"staged",
|
||||
"validating",
|
||||
"needs-review",
|
||||
"accepted",
|
||||
"rejected",
|
||||
"withdrawn"
|
||||
],
|
||||
"title": "ProposalState",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"accepted_node_ids": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Accepted Node Ids",
|
||||
"type": "array"
|
||||
},
|
||||
"commit_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Commit Id"
|
||||
},
|
||||
"decided_at": {
|
||||
"anyOf": [
|
||||
{
|
||||
"format": "date-time",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Decided At"
|
||||
},
|
||||
"findings": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/Finding"
|
||||
},
|
||||
"title": "Findings",
|
||||
"type": "array"
|
||||
},
|
||||
"outcome": {
|
||||
"enum": [
|
||||
"accepted",
|
||||
"held",
|
||||
"rejected",
|
||||
"validation-failed"
|
||||
],
|
||||
"title": "Outcome",
|
||||
"type": "string"
|
||||
},
|
||||
"payload_digest": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Payload Digest",
|
||||
"type": "string"
|
||||
},
|
||||
"proposal_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Proposal Id",
|
||||
"type": "string"
|
||||
},
|
||||
"revision": {
|
||||
"minimum": 1,
|
||||
"title": "Revision",
|
||||
"type": "integer"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"state": {
|
||||
"$ref": "#/$defs/ProposalState"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"proposal_id",
|
||||
"revision",
|
||||
"payload_digest",
|
||||
"state",
|
||||
"outcome"
|
||||
],
|
||||
"title": "ProposalReceipt",
|
||||
"type": "object"
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,257 @@
|
||||
{
|
||||
"$defs": {
|
||||
"Finding": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"code": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Code",
|
||||
"type": "string"
|
||||
},
|
||||
"message": {
|
||||
"maxLength": 1000,
|
||||
"minLength": 1,
|
||||
"title": "Message",
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 256,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Path"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"code",
|
||||
"message"
|
||||
],
|
||||
"title": "Finding",
|
||||
"type": "object"
|
||||
},
|
||||
"ProposalReceipt": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"accepted_node_ids": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Accepted Node Ids",
|
||||
"type": "array"
|
||||
},
|
||||
"commit_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Commit Id"
|
||||
},
|
||||
"decided_at": {
|
||||
"anyOf": [
|
||||
{
|
||||
"format": "date-time",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Decided At"
|
||||
},
|
||||
"findings": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/Finding"
|
||||
},
|
||||
"title": "Findings",
|
||||
"type": "array"
|
||||
},
|
||||
"outcome": {
|
||||
"enum": [
|
||||
"accepted",
|
||||
"held",
|
||||
"rejected",
|
||||
"validation-failed"
|
||||
],
|
||||
"title": "Outcome",
|
||||
"type": "string"
|
||||
},
|
||||
"payload_digest": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Payload Digest",
|
||||
"type": "string"
|
||||
},
|
||||
"proposal_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Proposal Id",
|
||||
"type": "string"
|
||||
},
|
||||
"revision": {
|
||||
"minimum": 1,
|
||||
"title": "Revision",
|
||||
"type": "integer"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"state": {
|
||||
"$ref": "#/$defs/ProposalState"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"proposal_id",
|
||||
"revision",
|
||||
"payload_digest",
|
||||
"state",
|
||||
"outcome"
|
||||
],
|
||||
"title": "ProposalReceipt",
|
||||
"type": "object"
|
||||
},
|
||||
"ProposalState": {
|
||||
"enum": [
|
||||
"staged",
|
||||
"validating",
|
||||
"needs-review",
|
||||
"accepted",
|
||||
"rejected",
|
||||
"withdrawn"
|
||||
],
|
||||
"title": "ProposalState",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"canonical_revision": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Canonical Revision"
|
||||
},
|
||||
"eligible_for_auto_accept": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Eligible For Auto Accept"
|
||||
},
|
||||
"findings": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/Finding"
|
||||
},
|
||||
"maxItems": 200,
|
||||
"title": "Findings",
|
||||
"type": "array"
|
||||
},
|
||||
"lifecycle": {
|
||||
"enum": [
|
||||
"staged",
|
||||
"evaluated",
|
||||
"publishing",
|
||||
"published-unreconciled",
|
||||
"accepted",
|
||||
"withdrawn"
|
||||
],
|
||||
"title": "Lifecycle",
|
||||
"type": "string"
|
||||
},
|
||||
"proposal_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Proposal Id",
|
||||
"type": "string"
|
||||
},
|
||||
"receipt": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/$defs/ProposalReceipt"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null
|
||||
},
|
||||
"revision": {
|
||||
"minimum": 1,
|
||||
"title": "Revision",
|
||||
"type": "integer"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"validation_status": {
|
||||
"anyOf": [
|
||||
{
|
||||
"enum": [
|
||||
"eligible",
|
||||
"needs-review",
|
||||
"invalid",
|
||||
"conflict"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Validation Status"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"proposal_id",
|
||||
"revision",
|
||||
"lifecycle"
|
||||
],
|
||||
"title": "ProposalStatus",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,399 @@
|
||||
{
|
||||
"$defs": {
|
||||
"BudgetProfile": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"encoding": {
|
||||
"maxLength": 100,
|
||||
"minLength": 1,
|
||||
"title": "Encoding",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"tokenizer": {
|
||||
"maxLength": 100,
|
||||
"minLength": 1,
|
||||
"title": "Tokenizer",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"tokenizer",
|
||||
"encoding"
|
||||
],
|
||||
"title": "BudgetProfile",
|
||||
"type": "object"
|
||||
},
|
||||
"EvidenceReference": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"assertion_digest": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Assertion Digest",
|
||||
"type": "string"
|
||||
},
|
||||
"assertion_path": {
|
||||
"maxLength": 256,
|
||||
"minLength": 1,
|
||||
"title": "Assertion Path",
|
||||
"type": "string"
|
||||
},
|
||||
"extraction_id": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Extraction Id",
|
||||
"type": "string"
|
||||
},
|
||||
"locator": {
|
||||
"$ref": "#/$defs/Locator"
|
||||
},
|
||||
"normalization_profile": {
|
||||
"const": "unicode-nfc-lf-v1",
|
||||
"title": "Normalization Profile",
|
||||
"type": "string"
|
||||
},
|
||||
"quote": {
|
||||
"maxLength": 8000,
|
||||
"minLength": 1,
|
||||
"title": "Quote",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"source_revision_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Source Revision Id",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"source_revision_id",
|
||||
"extraction_id",
|
||||
"assertion_path",
|
||||
"assertion_digest",
|
||||
"quote",
|
||||
"locator",
|
||||
"normalization_profile"
|
||||
],
|
||||
"title": "EvidenceReference",
|
||||
"type": "object"
|
||||
},
|
||||
"Finding": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"code": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Code",
|
||||
"type": "string"
|
||||
},
|
||||
"message": {
|
||||
"maxLength": 1000,
|
||||
"minLength": 1,
|
||||
"title": "Message",
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 256,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Path"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"code",
|
||||
"message"
|
||||
],
|
||||
"title": "Finding",
|
||||
"type": "object"
|
||||
},
|
||||
"Locator": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"block_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Block Id",
|
||||
"type": "string"
|
||||
},
|
||||
"end": {
|
||||
"exclusiveMinimum": 0,
|
||||
"title": "End",
|
||||
"type": "integer"
|
||||
},
|
||||
"kind": {
|
||||
"enum": [
|
||||
"text_span",
|
||||
"pdf_page_span",
|
||||
"transcript_timestamp_span"
|
||||
],
|
||||
"title": "Kind",
|
||||
"type": "string"
|
||||
},
|
||||
"page": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 1,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Page"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"start": {
|
||||
"minimum": 0,
|
||||
"title": "Start",
|
||||
"type": "integer"
|
||||
},
|
||||
"time_end_ms": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Time End Ms"
|
||||
},
|
||||
"time_start_ms": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Time Start Ms"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"kind",
|
||||
"block_id",
|
||||
"start",
|
||||
"end"
|
||||
],
|
||||
"title": "Locator",
|
||||
"type": "object"
|
||||
},
|
||||
"Scope": {
|
||||
"additionalProperties": false,
|
||||
"description": "Project context plus optional project includes; all-project access is deliberate.",
|
||||
"properties": {
|
||||
"all_projects": {
|
||||
"default": false,
|
||||
"title": "All Projects",
|
||||
"type": "boolean"
|
||||
},
|
||||
"include_projects": {
|
||||
"anyOf": [
|
||||
{
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"type": "array"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Include Projects"
|
||||
},
|
||||
"include_shared": {
|
||||
"default": true,
|
||||
"title": "Include Shared",
|
||||
"type": "boolean"
|
||||
},
|
||||
"projects": {
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"minItems": 1,
|
||||
"title": "Projects",
|
||||
"type": "array"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"projects"
|
||||
],
|
||||
"title": "Scope",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"api_version": {
|
||||
"const": "v1",
|
||||
"default": "v1",
|
||||
"title": "Api Version",
|
||||
"type": "string"
|
||||
},
|
||||
"budget_profile": {
|
||||
"$ref": "#/$defs/BudgetProfile"
|
||||
},
|
||||
"canonical_revision": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Canonical Revision"
|
||||
},
|
||||
"citations": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/EvidenceReference"
|
||||
},
|
||||
"title": "Citations",
|
||||
"type": "array"
|
||||
},
|
||||
"data": {
|
||||
"items": {
|
||||
"additionalProperties": true,
|
||||
"type": "object"
|
||||
},
|
||||
"title": "Data",
|
||||
"type": "array"
|
||||
},
|
||||
"index_revision": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Index Revision"
|
||||
},
|
||||
"next_cursor": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Next Cursor"
|
||||
},
|
||||
"omissions": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/Finding"
|
||||
},
|
||||
"title": "Omissions",
|
||||
"type": "array"
|
||||
},
|
||||
"request_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Request Id",
|
||||
"type": "string"
|
||||
},
|
||||
"resolved_scope": {
|
||||
"$ref": "#/$defs/Scope"
|
||||
},
|
||||
"retrieval_mode": {
|
||||
"enum": [
|
||||
"keyword",
|
||||
"hybrid",
|
||||
"canonical"
|
||||
],
|
||||
"title": "Retrieval Mode",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"tokens_used": {
|
||||
"minimum": 0,
|
||||
"title": "Tokens Used",
|
||||
"type": "integer"
|
||||
},
|
||||
"warnings": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/Finding"
|
||||
},
|
||||
"title": "Warnings",
|
||||
"type": "array"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"request_id",
|
||||
"resolved_scope",
|
||||
"data",
|
||||
"canonical_revision",
|
||||
"index_revision",
|
||||
"retrieval_mode",
|
||||
"budget_profile",
|
||||
"tokens_used"
|
||||
],
|
||||
"title": "ReadEnvelope",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,503 @@
|
||||
{
|
||||
"$defs": {
|
||||
"Finding": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"code": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Code",
|
||||
"type": "string"
|
||||
},
|
||||
"message": {
|
||||
"maxLength": 1000,
|
||||
"minLength": 1,
|
||||
"title": "Message",
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 256,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Path"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"code",
|
||||
"message"
|
||||
],
|
||||
"title": "Finding",
|
||||
"type": "object"
|
||||
},
|
||||
"ProposalReceipt": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"accepted_node_ids": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Accepted Node Ids",
|
||||
"type": "array"
|
||||
},
|
||||
"commit_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Commit Id"
|
||||
},
|
||||
"decided_at": {
|
||||
"anyOf": [
|
||||
{
|
||||
"format": "date-time",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Decided At"
|
||||
},
|
||||
"findings": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/Finding"
|
||||
},
|
||||
"title": "Findings",
|
||||
"type": "array"
|
||||
},
|
||||
"outcome": {
|
||||
"enum": [
|
||||
"accepted",
|
||||
"held",
|
||||
"rejected",
|
||||
"validation-failed"
|
||||
],
|
||||
"title": "Outcome",
|
||||
"type": "string"
|
||||
},
|
||||
"payload_digest": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Payload Digest",
|
||||
"type": "string"
|
||||
},
|
||||
"proposal_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Proposal Id",
|
||||
"type": "string"
|
||||
},
|
||||
"revision": {
|
||||
"minimum": 1,
|
||||
"title": "Revision",
|
||||
"type": "integer"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"state": {
|
||||
"$ref": "#/$defs/ProposalState"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"proposal_id",
|
||||
"revision",
|
||||
"payload_digest",
|
||||
"state",
|
||||
"outcome"
|
||||
],
|
||||
"title": "ProposalReceipt",
|
||||
"type": "object"
|
||||
},
|
||||
"ProposalState": {
|
||||
"enum": [
|
||||
"staged",
|
||||
"validating",
|
||||
"needs-review",
|
||||
"accepted",
|
||||
"rejected",
|
||||
"withdrawn"
|
||||
],
|
||||
"title": "ProposalState",
|
||||
"type": "string"
|
||||
},
|
||||
"RunCoverage": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"excluded": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/RunCoverageItem"
|
||||
},
|
||||
"maxItems": 10000,
|
||||
"title": "Excluded",
|
||||
"type": "array"
|
||||
},
|
||||
"included": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 10000,
|
||||
"title": "Included",
|
||||
"type": "array"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"selected": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 10000,
|
||||
"title": "Selected",
|
||||
"type": "array"
|
||||
},
|
||||
"skipped": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/RunCoverageItem"
|
||||
},
|
||||
"maxItems": 10000,
|
||||
"title": "Skipped",
|
||||
"type": "array"
|
||||
}
|
||||
},
|
||||
"title": "RunCoverage",
|
||||
"type": "object"
|
||||
},
|
||||
"RunCoverageItem": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"item": {
|
||||
"maxLength": 500,
|
||||
"minLength": 1,
|
||||
"title": "Item",
|
||||
"type": "string"
|
||||
},
|
||||
"reason": {
|
||||
"maxLength": 1000,
|
||||
"minLength": 1,
|
||||
"title": "Reason",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"item",
|
||||
"reason"
|
||||
],
|
||||
"title": "RunCoverageItem",
|
||||
"type": "object"
|
||||
},
|
||||
"RunOperationReference": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"input_sha256": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Input Sha256",
|
||||
"type": "string"
|
||||
},
|
||||
"operation_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Operation Id",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"status": {
|
||||
"enum": [
|
||||
"pending",
|
||||
"uncertain",
|
||||
"complete",
|
||||
"failed"
|
||||
],
|
||||
"title": "Status",
|
||||
"type": "string"
|
||||
},
|
||||
"tool_name": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Tool Name",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"operation_id",
|
||||
"tool_name",
|
||||
"input_sha256",
|
||||
"status"
|
||||
],
|
||||
"title": "RunOperationReference",
|
||||
"type": "object"
|
||||
},
|
||||
"RunProposalReference": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"proposal_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Proposal Id",
|
||||
"type": "string"
|
||||
},
|
||||
"receipt": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/$defs/ProposalReceipt"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null
|
||||
},
|
||||
"revision": {
|
||||
"minimum": 1,
|
||||
"title": "Revision",
|
||||
"type": "integer"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"status": {
|
||||
"enum": [
|
||||
"staged",
|
||||
"evaluated",
|
||||
"eligible",
|
||||
"needs-review",
|
||||
"invalid",
|
||||
"conflict",
|
||||
"publishing",
|
||||
"accepted",
|
||||
"rejected",
|
||||
"withdrawn",
|
||||
"uncertain"
|
||||
],
|
||||
"title": "Status",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"proposal_id",
|
||||
"revision",
|
||||
"status"
|
||||
],
|
||||
"title": "RunProposalReference",
|
||||
"type": "object"
|
||||
},
|
||||
"RunSourceReference": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"artifact_sha256": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Artifact Sha256"
|
||||
},
|
||||
"extraction_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Extraction Id"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"source_revision_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Source Revision Id",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"enum": [
|
||||
"selected",
|
||||
"captured",
|
||||
"extracted",
|
||||
"unavailable",
|
||||
"failed"
|
||||
],
|
||||
"title": "Status",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"source_revision_id",
|
||||
"status"
|
||||
],
|
||||
"title": "RunSourceReference",
|
||||
"type": "object"
|
||||
},
|
||||
"RunState": {
|
||||
"enum": [
|
||||
"active",
|
||||
"completed",
|
||||
"blocked"
|
||||
],
|
||||
"title": "RunState",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"budgets": {
|
||||
"maxProperties": 100,
|
||||
"patternProperties": {
|
||||
"^[a-zA-Z0-9][a-zA-Z0-9._:-]*$": {
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"propertyNames": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1
|
||||
},
|
||||
"title": "Budgets",
|
||||
"type": "object"
|
||||
},
|
||||
"coverage": {
|
||||
"$ref": "#/$defs/RunCoverage"
|
||||
},
|
||||
"expected_revision": {
|
||||
"maximum": 2147483646,
|
||||
"minimum": 0,
|
||||
"title": "Expected Revision",
|
||||
"type": "integer"
|
||||
},
|
||||
"output_hashes": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 1000,
|
||||
"title": "Output Hashes",
|
||||
"type": "array"
|
||||
},
|
||||
"pending_operations": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/RunOperationReference"
|
||||
},
|
||||
"maxItems": 1000,
|
||||
"title": "Pending Operations",
|
||||
"type": "array"
|
||||
},
|
||||
"proposals": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/RunProposalReference"
|
||||
},
|
||||
"maxItems": 1000,
|
||||
"title": "Proposals",
|
||||
"type": "array"
|
||||
},
|
||||
"run_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Run Id",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"sources": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/RunSourceReference"
|
||||
},
|
||||
"maxItems": 500,
|
||||
"title": "Sources",
|
||||
"type": "array"
|
||||
},
|
||||
"stage": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Stage",
|
||||
"type": "string"
|
||||
},
|
||||
"state": {
|
||||
"$ref": "#/$defs/RunState",
|
||||
"default": "active"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"run_id",
|
||||
"expected_revision",
|
||||
"stage"
|
||||
],
|
||||
"title": "RunCheckpointRequest",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"$defs": {
|
||||
"RunModulePin": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"implementation_version": {
|
||||
"maxLength": 64,
|
||||
"minLength": 1,
|
||||
"title": "Implementation Version",
|
||||
"type": "string"
|
||||
},
|
||||
"module_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Module Id",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"sha256": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Sha256",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"module_id",
|
||||
"implementation_version",
|
||||
"sha256"
|
||||
],
|
||||
"title": "RunModulePin",
|
||||
"type": "object"
|
||||
},
|
||||
"Scope": {
|
||||
"additionalProperties": false,
|
||||
"description": "Project context plus optional project includes; all-project access is deliberate.",
|
||||
"properties": {
|
||||
"all_projects": {
|
||||
"default": false,
|
||||
"title": "All Projects",
|
||||
"type": "boolean"
|
||||
},
|
||||
"include_projects": {
|
||||
"anyOf": [
|
||||
{
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"type": "array"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Include Projects"
|
||||
},
|
||||
"include_shared": {
|
||||
"default": true,
|
||||
"title": "Include Shared",
|
||||
"type": "boolean"
|
||||
},
|
||||
"projects": {
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"minItems": 1,
|
||||
"title": "Projects",
|
||||
"type": "array"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"projects"
|
||||
],
|
||||
"title": "Scope",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"lens": {
|
||||
"maxLength": 2000,
|
||||
"minLength": 1,
|
||||
"title": "Lens",
|
||||
"type": "string"
|
||||
},
|
||||
"module_pins": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/RunModulePin"
|
||||
},
|
||||
"maxItems": 100,
|
||||
"minItems": 1,
|
||||
"title": "Module Pins",
|
||||
"type": "array"
|
||||
},
|
||||
"objective": {
|
||||
"maxLength": 4000,
|
||||
"minLength": 1,
|
||||
"title": "Objective",
|
||||
"type": "string"
|
||||
},
|
||||
"pack_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Pack Id",
|
||||
"type": "string"
|
||||
},
|
||||
"pack_snapshot_digest": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Pack Snapshot Digest",
|
||||
"type": "string"
|
||||
},
|
||||
"pack_version": {
|
||||
"maxLength": 64,
|
||||
"minLength": 1,
|
||||
"title": "Pack Version",
|
||||
"type": "string"
|
||||
},
|
||||
"run_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Run Id",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"scope": {
|
||||
"$ref": "#/$defs/Scope"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"run_id",
|
||||
"objective",
|
||||
"scope",
|
||||
"lens",
|
||||
"pack_id",
|
||||
"pack_version",
|
||||
"pack_snapshot_digest",
|
||||
"module_pins"
|
||||
],
|
||||
"title": "RunCreateRequest",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,670 @@
|
||||
{
|
||||
"$defs": {
|
||||
"Finding": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"code": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Code",
|
||||
"type": "string"
|
||||
},
|
||||
"message": {
|
||||
"maxLength": 1000,
|
||||
"minLength": 1,
|
||||
"title": "Message",
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 256,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Path"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"code",
|
||||
"message"
|
||||
],
|
||||
"title": "Finding",
|
||||
"type": "object"
|
||||
},
|
||||
"ProposalReceipt": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"accepted_node_ids": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Accepted Node Ids",
|
||||
"type": "array"
|
||||
},
|
||||
"commit_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Commit Id"
|
||||
},
|
||||
"decided_at": {
|
||||
"anyOf": [
|
||||
{
|
||||
"format": "date-time",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Decided At"
|
||||
},
|
||||
"findings": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/Finding"
|
||||
},
|
||||
"title": "Findings",
|
||||
"type": "array"
|
||||
},
|
||||
"outcome": {
|
||||
"enum": [
|
||||
"accepted",
|
||||
"held",
|
||||
"rejected",
|
||||
"validation-failed"
|
||||
],
|
||||
"title": "Outcome",
|
||||
"type": "string"
|
||||
},
|
||||
"payload_digest": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Payload Digest",
|
||||
"type": "string"
|
||||
},
|
||||
"proposal_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Proposal Id",
|
||||
"type": "string"
|
||||
},
|
||||
"revision": {
|
||||
"minimum": 1,
|
||||
"title": "Revision",
|
||||
"type": "integer"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"state": {
|
||||
"$ref": "#/$defs/ProposalState"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"proposal_id",
|
||||
"revision",
|
||||
"payload_digest",
|
||||
"state",
|
||||
"outcome"
|
||||
],
|
||||
"title": "ProposalReceipt",
|
||||
"type": "object"
|
||||
},
|
||||
"ProposalState": {
|
||||
"enum": [
|
||||
"staged",
|
||||
"validating",
|
||||
"needs-review",
|
||||
"accepted",
|
||||
"rejected",
|
||||
"withdrawn"
|
||||
],
|
||||
"title": "ProposalState",
|
||||
"type": "string"
|
||||
},
|
||||
"RunCoverage": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"excluded": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/RunCoverageItem"
|
||||
},
|
||||
"maxItems": 10000,
|
||||
"title": "Excluded",
|
||||
"type": "array"
|
||||
},
|
||||
"included": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 10000,
|
||||
"title": "Included",
|
||||
"type": "array"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"selected": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 10000,
|
||||
"title": "Selected",
|
||||
"type": "array"
|
||||
},
|
||||
"skipped": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/RunCoverageItem"
|
||||
},
|
||||
"maxItems": 10000,
|
||||
"title": "Skipped",
|
||||
"type": "array"
|
||||
}
|
||||
},
|
||||
"title": "RunCoverage",
|
||||
"type": "object"
|
||||
},
|
||||
"RunCoverageItem": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"item": {
|
||||
"maxLength": 500,
|
||||
"minLength": 1,
|
||||
"title": "Item",
|
||||
"type": "string"
|
||||
},
|
||||
"reason": {
|
||||
"maxLength": 1000,
|
||||
"minLength": 1,
|
||||
"title": "Reason",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"item",
|
||||
"reason"
|
||||
],
|
||||
"title": "RunCoverageItem",
|
||||
"type": "object"
|
||||
},
|
||||
"RunModulePin": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"implementation_version": {
|
||||
"maxLength": 64,
|
||||
"minLength": 1,
|
||||
"title": "Implementation Version",
|
||||
"type": "string"
|
||||
},
|
||||
"module_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Module Id",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"sha256": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Sha256",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"module_id",
|
||||
"implementation_version",
|
||||
"sha256"
|
||||
],
|
||||
"title": "RunModulePin",
|
||||
"type": "object"
|
||||
},
|
||||
"RunOperationReference": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"input_sha256": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Input Sha256",
|
||||
"type": "string"
|
||||
},
|
||||
"operation_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Operation Id",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"status": {
|
||||
"enum": [
|
||||
"pending",
|
||||
"uncertain",
|
||||
"complete",
|
||||
"failed"
|
||||
],
|
||||
"title": "Status",
|
||||
"type": "string"
|
||||
},
|
||||
"tool_name": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Tool Name",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"operation_id",
|
||||
"tool_name",
|
||||
"input_sha256",
|
||||
"status"
|
||||
],
|
||||
"title": "RunOperationReference",
|
||||
"type": "object"
|
||||
},
|
||||
"RunProposalReference": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"proposal_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Proposal Id",
|
||||
"type": "string"
|
||||
},
|
||||
"receipt": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/$defs/ProposalReceipt"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null
|
||||
},
|
||||
"revision": {
|
||||
"minimum": 1,
|
||||
"title": "Revision",
|
||||
"type": "integer"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"status": {
|
||||
"enum": [
|
||||
"staged",
|
||||
"evaluated",
|
||||
"eligible",
|
||||
"needs-review",
|
||||
"invalid",
|
||||
"conflict",
|
||||
"publishing",
|
||||
"accepted",
|
||||
"rejected",
|
||||
"withdrawn",
|
||||
"uncertain"
|
||||
],
|
||||
"title": "Status",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"proposal_id",
|
||||
"revision",
|
||||
"status"
|
||||
],
|
||||
"title": "RunProposalReference",
|
||||
"type": "object"
|
||||
},
|
||||
"RunSourceReference": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"artifact_sha256": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Artifact Sha256"
|
||||
},
|
||||
"extraction_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Extraction Id"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"source_revision_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Source Revision Id",
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"enum": [
|
||||
"selected",
|
||||
"captured",
|
||||
"extracted",
|
||||
"unavailable",
|
||||
"failed"
|
||||
],
|
||||
"title": "Status",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"source_revision_id",
|
||||
"status"
|
||||
],
|
||||
"title": "RunSourceReference",
|
||||
"type": "object"
|
||||
},
|
||||
"RunState": {
|
||||
"enum": [
|
||||
"active",
|
||||
"completed",
|
||||
"blocked"
|
||||
],
|
||||
"title": "RunState",
|
||||
"type": "string"
|
||||
},
|
||||
"Scope": {
|
||||
"additionalProperties": false,
|
||||
"description": "Project context plus optional project includes; all-project access is deliberate.",
|
||||
"properties": {
|
||||
"all_projects": {
|
||||
"default": false,
|
||||
"title": "All Projects",
|
||||
"type": "boolean"
|
||||
},
|
||||
"include_projects": {
|
||||
"anyOf": [
|
||||
{
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"type": "array"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Include Projects"
|
||||
},
|
||||
"include_shared": {
|
||||
"default": true,
|
||||
"title": "Include Shared",
|
||||
"type": "boolean"
|
||||
},
|
||||
"projects": {
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"minItems": 1,
|
||||
"title": "Projects",
|
||||
"type": "array"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"projects"
|
||||
],
|
||||
"title": "Scope",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"budgets": {
|
||||
"maxProperties": 100,
|
||||
"patternProperties": {
|
||||
"^[a-zA-Z0-9][a-zA-Z0-9._:-]*$": {
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"propertyNames": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1
|
||||
},
|
||||
"title": "Budgets",
|
||||
"type": "object"
|
||||
},
|
||||
"checkpoint_digest": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Checkpoint Digest"
|
||||
},
|
||||
"coverage": {
|
||||
"$ref": "#/$defs/RunCoverage"
|
||||
},
|
||||
"created_at": {
|
||||
"format": "date-time",
|
||||
"title": "Created At",
|
||||
"type": "string"
|
||||
},
|
||||
"lens": {
|
||||
"maxLength": 2000,
|
||||
"minLength": 1,
|
||||
"title": "Lens",
|
||||
"type": "string"
|
||||
},
|
||||
"module_pins": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/RunModulePin"
|
||||
},
|
||||
"maxItems": 100,
|
||||
"minItems": 1,
|
||||
"title": "Module Pins",
|
||||
"type": "array"
|
||||
},
|
||||
"objective": {
|
||||
"maxLength": 4000,
|
||||
"minLength": 1,
|
||||
"title": "Objective",
|
||||
"type": "string"
|
||||
},
|
||||
"output_hashes": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 1000,
|
||||
"title": "Output Hashes",
|
||||
"type": "array"
|
||||
},
|
||||
"pack_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Pack Id",
|
||||
"type": "string"
|
||||
},
|
||||
"pack_snapshot_digest": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Pack Snapshot Digest",
|
||||
"type": "string"
|
||||
},
|
||||
"pack_version": {
|
||||
"maxLength": 64,
|
||||
"minLength": 1,
|
||||
"title": "Pack Version",
|
||||
"type": "string"
|
||||
},
|
||||
"pending_operations": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/RunOperationReference"
|
||||
},
|
||||
"maxItems": 1000,
|
||||
"title": "Pending Operations",
|
||||
"type": "array"
|
||||
},
|
||||
"proposals": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/RunProposalReference"
|
||||
},
|
||||
"maxItems": 1000,
|
||||
"title": "Proposals",
|
||||
"type": "array"
|
||||
},
|
||||
"revision": {
|
||||
"minimum": 0,
|
||||
"title": "Revision",
|
||||
"type": "integer"
|
||||
},
|
||||
"run_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Run Id",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"scope": {
|
||||
"$ref": "#/$defs/Scope"
|
||||
},
|
||||
"sources": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/RunSourceReference"
|
||||
},
|
||||
"maxItems": 500,
|
||||
"title": "Sources",
|
||||
"type": "array"
|
||||
},
|
||||
"stage": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Stage",
|
||||
"type": "string"
|
||||
},
|
||||
"state": {
|
||||
"$ref": "#/$defs/RunState"
|
||||
},
|
||||
"updated_at": {
|
||||
"format": "date-time",
|
||||
"title": "Updated At",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"run_id",
|
||||
"revision",
|
||||
"state",
|
||||
"objective",
|
||||
"scope",
|
||||
"lens",
|
||||
"pack_id",
|
||||
"pack_version",
|
||||
"pack_snapshot_digest",
|
||||
"module_pins",
|
||||
"stage",
|
||||
"created_at",
|
||||
"updated_at"
|
||||
],
|
||||
"title": "RunRecord",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"additionalProperties": false,
|
||||
"description": "Project context plus optional project includes; all-project access is deliberate.",
|
||||
"properties": {
|
||||
"all_projects": {
|
||||
"default": false,
|
||||
"title": "All Projects",
|
||||
"type": "boolean"
|
||||
},
|
||||
"include_projects": {
|
||||
"anyOf": [
|
||||
{
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"type": "array"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Include Projects"
|
||||
},
|
||||
"include_shared": {
|
||||
"default": true,
|
||||
"title": "Include Shared",
|
||||
"type": "boolean"
|
||||
},
|
||||
"projects": {
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"minItems": 1,
|
||||
"title": "Projects",
|
||||
"type": "array"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"projects"
|
||||
],
|
||||
"title": "Scope",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,229 @@
|
||||
{
|
||||
"$defs": {
|
||||
"Confidence": {
|
||||
"enum": [
|
||||
"low",
|
||||
"medium",
|
||||
"high"
|
||||
],
|
||||
"title": "Confidence",
|
||||
"type": "string"
|
||||
},
|
||||
"NodeType": {
|
||||
"enum": [
|
||||
"finding",
|
||||
"problem",
|
||||
"technique",
|
||||
"case",
|
||||
"entity",
|
||||
"event",
|
||||
"concept",
|
||||
"datapoint",
|
||||
"synthesis"
|
||||
],
|
||||
"title": "NodeType",
|
||||
"type": "string"
|
||||
},
|
||||
"Scope": {
|
||||
"additionalProperties": false,
|
||||
"description": "Project context plus optional project includes; all-project access is deliberate.",
|
||||
"properties": {
|
||||
"all_projects": {
|
||||
"default": false,
|
||||
"title": "All Projects",
|
||||
"type": "boolean"
|
||||
},
|
||||
"include_projects": {
|
||||
"anyOf": [
|
||||
{
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"type": "array"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Include Projects"
|
||||
},
|
||||
"include_shared": {
|
||||
"default": true,
|
||||
"title": "Include Shared",
|
||||
"type": "boolean"
|
||||
},
|
||||
"projects": {
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"minItems": 1,
|
||||
"title": "Projects",
|
||||
"type": "array"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"projects"
|
||||
],
|
||||
"title": "Scope",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"as_of_from": {
|
||||
"anyOf": [
|
||||
{
|
||||
"format": "date",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "As Of From"
|
||||
},
|
||||
"as_of_to": {
|
||||
"anyOf": [
|
||||
{
|
||||
"format": "date",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "As Of To"
|
||||
},
|
||||
"audience": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 100,
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 20,
|
||||
"title": "Audience",
|
||||
"type": "array"
|
||||
},
|
||||
"budget_tokens": {
|
||||
"maximum": 50000,
|
||||
"minimum": 256,
|
||||
"title": "Budget Tokens",
|
||||
"type": "integer"
|
||||
},
|
||||
"confidences": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/Confidence"
|
||||
},
|
||||
"maxItems": 3,
|
||||
"title": "Confidences",
|
||||
"type": "array"
|
||||
},
|
||||
"cursor": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 512,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Cursor"
|
||||
},
|
||||
"domain": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 100,
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 20,
|
||||
"title": "Domain",
|
||||
"type": "array"
|
||||
},
|
||||
"limit": {
|
||||
"default": 20,
|
||||
"maximum": 50,
|
||||
"minimum": 1,
|
||||
"title": "Limit",
|
||||
"type": "integer"
|
||||
},
|
||||
"node_types": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/NodeType"
|
||||
},
|
||||
"maxItems": 9,
|
||||
"title": "Node Types",
|
||||
"type": "array"
|
||||
},
|
||||
"query": {
|
||||
"default": "",
|
||||
"maxLength": 1000,
|
||||
"title": "Query",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"scope": {
|
||||
"$ref": "#/$defs/Scope"
|
||||
},
|
||||
"stale_only": {
|
||||
"default": false,
|
||||
"title": "Stale Only",
|
||||
"type": "boolean"
|
||||
},
|
||||
"tags": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 100,
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 20,
|
||||
"title": "Tags",
|
||||
"type": "array"
|
||||
},
|
||||
"use_for": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 100,
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 20,
|
||||
"title": "Use For",
|
||||
"type": "array"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"scope",
|
||||
"budget_tokens"
|
||||
],
|
||||
"title": "SearchRequest",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,244 @@
|
||||
{
|
||||
"$defs": {
|
||||
"Scope": {
|
||||
"additionalProperties": false,
|
||||
"description": "Project context plus optional project includes; all-project access is deliberate.",
|
||||
"properties": {
|
||||
"all_projects": {
|
||||
"default": false,
|
||||
"title": "All Projects",
|
||||
"type": "boolean"
|
||||
},
|
||||
"include_projects": {
|
||||
"anyOf": [
|
||||
{
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"type": "array"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Include Projects"
|
||||
},
|
||||
"include_shared": {
|
||||
"default": true,
|
||||
"title": "Include Shared",
|
||||
"type": "boolean"
|
||||
},
|
||||
"projects": {
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"minItems": 1,
|
||||
"title": "Projects",
|
||||
"type": "array"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"projects"
|
||||
],
|
||||
"title": "Scope",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"api_version": {
|
||||
"const": "v1",
|
||||
"default": "v1",
|
||||
"title": "Api Version",
|
||||
"type": "string"
|
||||
},
|
||||
"authentication": {
|
||||
"enum": [
|
||||
"bearer",
|
||||
"browser_session"
|
||||
],
|
||||
"title": "Authentication",
|
||||
"type": "string"
|
||||
},
|
||||
"authorized_operations": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Authorized Operations",
|
||||
"type": "array"
|
||||
},
|
||||
"authorized_projects": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Authorized Projects",
|
||||
"type": "array"
|
||||
},
|
||||
"canonical_revision": {
|
||||
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
|
||||
"title": "Canonical Revision",
|
||||
"type": "string"
|
||||
},
|
||||
"capabilities": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Capabilities",
|
||||
"type": "array"
|
||||
},
|
||||
"catalog_sha256": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Catalog Sha256",
|
||||
"type": "string"
|
||||
},
|
||||
"connection_status": {
|
||||
"const": "authenticated",
|
||||
"default": "authenticated",
|
||||
"title": "Connection Status",
|
||||
"type": "string"
|
||||
},
|
||||
"index_revision": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Index Revision"
|
||||
},
|
||||
"index_schema_version": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 1,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Index Schema Version"
|
||||
},
|
||||
"index_state": {
|
||||
"enum": [
|
||||
"current",
|
||||
"lagging",
|
||||
"not_built",
|
||||
"not_configured",
|
||||
"unavailable"
|
||||
],
|
||||
"title": "Index State",
|
||||
"type": "string"
|
||||
},
|
||||
"max_upload_bytes": {
|
||||
"minimum": 1,
|
||||
"title": "Max Upload Bytes",
|
||||
"type": "integer"
|
||||
},
|
||||
"roles": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"title": "Roles",
|
||||
"type": "array"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"selected_scope": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/$defs/Scope"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null
|
||||
},
|
||||
"service_version": {
|
||||
"maxLength": 64,
|
||||
"minLength": 1,
|
||||
"title": "Service Version",
|
||||
"type": "string"
|
||||
},
|
||||
"supported_media_types": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 20,
|
||||
"title": "Supported Media Types",
|
||||
"type": "array"
|
||||
},
|
||||
"transport": {
|
||||
"enum": [
|
||||
"http",
|
||||
"mcp"
|
||||
],
|
||||
"title": "Transport",
|
||||
"type": "string"
|
||||
},
|
||||
"upload_chunk_bytes": {
|
||||
"minimum": 1,
|
||||
"title": "Upload Chunk Bytes",
|
||||
"type": "integer"
|
||||
},
|
||||
"workflow_status": {
|
||||
"const": "not_verified",
|
||||
"default": "not_verified",
|
||||
"title": "Workflow Status",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"service_version",
|
||||
"catalog_sha256",
|
||||
"transport",
|
||||
"authentication",
|
||||
"max_upload_bytes",
|
||||
"upload_chunk_bytes",
|
||||
"canonical_revision",
|
||||
"index_state"
|
||||
],
|
||||
"title": "ServiceDiagnostics",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
{
|
||||
"$defs": {
|
||||
"ReliabilityGrade": {
|
||||
"enum": [
|
||||
"low",
|
||||
"medium",
|
||||
"high"
|
||||
],
|
||||
"title": "ReliabilityGrade",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"archive_status": {
|
||||
"enum": [
|
||||
"archived",
|
||||
"reference-only",
|
||||
"capture-failed"
|
||||
],
|
||||
"title": "Archive Status",
|
||||
"type": "string"
|
||||
},
|
||||
"artifact_sha256": {
|
||||
"anyOf": [
|
||||
{
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Artifact Sha256"
|
||||
},
|
||||
"authors": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"title": "Authors",
|
||||
"type": "array"
|
||||
},
|
||||
"byte_length": {
|
||||
"minimum": 0,
|
||||
"title": "Byte Length",
|
||||
"type": "integer"
|
||||
},
|
||||
"capture_method": {
|
||||
"default": "unspecified",
|
||||
"enum": [
|
||||
"unspecified",
|
||||
"local-file",
|
||||
"url-fetch",
|
||||
"pasted-text",
|
||||
"notebooklm-export",
|
||||
"transcript"
|
||||
],
|
||||
"title": "Capture Method",
|
||||
"type": "string"
|
||||
},
|
||||
"captured_at": {
|
||||
"format": "date-time",
|
||||
"title": "Captured At",
|
||||
"type": "string"
|
||||
},
|
||||
"final_url": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 4000,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Final Url"
|
||||
},
|
||||
"ingested_for": {
|
||||
"items": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"maxItems": 50,
|
||||
"minItems": 1,
|
||||
"title": "Ingested For",
|
||||
"type": "array"
|
||||
},
|
||||
"license": {
|
||||
"maxLength": 500,
|
||||
"minLength": 1,
|
||||
"title": "License",
|
||||
"type": "string"
|
||||
},
|
||||
"media_type": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"title": "Media Type",
|
||||
"type": "string"
|
||||
},
|
||||
"original_url": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 4000,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Original Url"
|
||||
},
|
||||
"publication_date": {
|
||||
"anyOf": [
|
||||
{
|
||||
"format": "date-time",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Publication Date"
|
||||
},
|
||||
"publisher": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 300,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Publisher"
|
||||
},
|
||||
"reliability_grade": {
|
||||
"$ref": "#/$defs/ReliabilityGrade"
|
||||
},
|
||||
"revision_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Revision Id",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"source_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Source Id",
|
||||
"type": "string"
|
||||
},
|
||||
"source_type": {
|
||||
"enum": [
|
||||
"paper",
|
||||
"review",
|
||||
"press",
|
||||
"vendor",
|
||||
"internal",
|
||||
"talk",
|
||||
"export",
|
||||
"other"
|
||||
],
|
||||
"title": "Source Type",
|
||||
"type": "string"
|
||||
},
|
||||
"title": {
|
||||
"maxLength": 500,
|
||||
"minLength": 1,
|
||||
"title": "Title",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"source_id",
|
||||
"revision_id",
|
||||
"media_type",
|
||||
"byte_length",
|
||||
"captured_at",
|
||||
"title",
|
||||
"license",
|
||||
"source_type",
|
||||
"reliability_grade",
|
||||
"ingested_for",
|
||||
"archive_status"
|
||||
],
|
||||
"title": "SourceRevisionRecord",
|
||||
"type": "object"
|
||||
}
|
||||
@@ -0,0 +1,262 @@
|
||||
{
|
||||
"$defs": {
|
||||
"EdgeEndpoint": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Id",
|
||||
"type": "string"
|
||||
},
|
||||
"kind": {
|
||||
"enum": [
|
||||
"node",
|
||||
"source",
|
||||
"project"
|
||||
],
|
||||
"title": "Kind",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"kind",
|
||||
"id"
|
||||
],
|
||||
"title": "EdgeEndpoint",
|
||||
"type": "object"
|
||||
},
|
||||
"EvidenceReference": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"assertion_digest": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Assertion Digest",
|
||||
"type": "string"
|
||||
},
|
||||
"assertion_path": {
|
||||
"maxLength": 256,
|
||||
"minLength": 1,
|
||||
"title": "Assertion Path",
|
||||
"type": "string"
|
||||
},
|
||||
"extraction_id": {
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"title": "Extraction Id",
|
||||
"type": "string"
|
||||
},
|
||||
"locator": {
|
||||
"$ref": "#/$defs/Locator"
|
||||
},
|
||||
"normalization_profile": {
|
||||
"const": "unicode-nfc-lf-v1",
|
||||
"title": "Normalization Profile",
|
||||
"type": "string"
|
||||
},
|
||||
"quote": {
|
||||
"maxLength": 8000,
|
||||
"minLength": 1,
|
||||
"title": "Quote",
|
||||
"type": "string"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"source_revision_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Source Revision Id",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"source_revision_id",
|
||||
"extraction_id",
|
||||
"assertion_path",
|
||||
"assertion_digest",
|
||||
"quote",
|
||||
"locator",
|
||||
"normalization_profile"
|
||||
],
|
||||
"title": "EvidenceReference",
|
||||
"type": "object"
|
||||
},
|
||||
"Locator": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"block_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Block Id",
|
||||
"type": "string"
|
||||
},
|
||||
"end": {
|
||||
"exclusiveMinimum": 0,
|
||||
"title": "End",
|
||||
"type": "integer"
|
||||
},
|
||||
"kind": {
|
||||
"enum": [
|
||||
"text_span",
|
||||
"pdf_page_span",
|
||||
"transcript_timestamp_span"
|
||||
],
|
||||
"title": "Kind",
|
||||
"type": "string"
|
||||
},
|
||||
"page": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 1,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Page"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"start": {
|
||||
"minimum": 0,
|
||||
"title": "Start",
|
||||
"type": "integer"
|
||||
},
|
||||
"time_end_ms": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Time End Ms"
|
||||
},
|
||||
"time_start_ms": {
|
||||
"anyOf": [
|
||||
{
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Time Start Ms"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"kind",
|
||||
"block_id",
|
||||
"start",
|
||||
"end"
|
||||
],
|
||||
"title": "Locator",
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"conditions": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 2000,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Conditions"
|
||||
},
|
||||
"edge_id": {
|
||||
"maxLength": 128,
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9._:-]*$",
|
||||
"title": "Edge Id",
|
||||
"type": "string"
|
||||
},
|
||||
"edge_type": {
|
||||
"enum": [
|
||||
"solves",
|
||||
"addresses",
|
||||
"causes",
|
||||
"supports",
|
||||
"contradicts",
|
||||
"instance_of",
|
||||
"part_of",
|
||||
"precedes",
|
||||
"supersedes",
|
||||
"compared_with",
|
||||
"derived_from",
|
||||
"applies_to"
|
||||
],
|
||||
"title": "Edge Type",
|
||||
"type": "string"
|
||||
},
|
||||
"evidence": {
|
||||
"default": [],
|
||||
"items": {
|
||||
"$ref": "#/$defs/EvidenceReference"
|
||||
},
|
||||
"title": "Evidence",
|
||||
"type": "array"
|
||||
},
|
||||
"interpretation_rationale": {
|
||||
"anyOf": [
|
||||
{
|
||||
"maxLength": 4000,
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"default": null,
|
||||
"title": "Interpretation Rationale"
|
||||
},
|
||||
"schema_version": {
|
||||
"const": 1,
|
||||
"default": 1,
|
||||
"title": "Schema Version",
|
||||
"type": "integer"
|
||||
},
|
||||
"source": {
|
||||
"$ref": "#/$defs/EdgeEndpoint"
|
||||
},
|
||||
"target": {
|
||||
"$ref": "#/$defs/EdgeEndpoint"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"edge_id",
|
||||
"edge_type",
|
||||
"source",
|
||||
"target"
|
||||
],
|
||||
"title": "TypedEdge",
|
||||
"type": "object"
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
+219
-44
@@ -1,11 +1,19 @@
|
||||
{
|
||||
"pack_id": "gewu-research",
|
||||
"pack_version": "0.1.0",
|
||||
"pack_version": "0.14.0",
|
||||
"manifest_version": "1.0.0",
|
||||
"status": "draft-service-unavailable",
|
||||
"status": "local-contract-and-checkpoint-bound-hosts-not-qualified",
|
||||
"execution": "existing-local-agent-host",
|
||||
"profile": "AGENTS.md",
|
||||
"verified_service_contracts": [],
|
||||
"verified_service_contracts": [
|
||||
{
|
||||
"contract_id": "gewu.service.v1",
|
||||
"contract_version": 1,
|
||||
"path": "contracts/service-v1.json",
|
||||
"sha256": "0bdeb121e4cca3df36c97d24e8144b87fb36215f6afce58b187708ecf0fdb32d",
|
||||
"scope": "Generated local MCP tool input schemas and v1 record schemas; native host workflows remain NOT RUN."
|
||||
}
|
||||
],
|
||||
"host_acceptance": {
|
||||
"codex": "NOT RUN",
|
||||
"claude": "NOT RUN",
|
||||
@@ -50,14 +58,14 @@
|
||||
"checkpoint_contract": {
|
||||
"id": "gewu.local-checkpoint",
|
||||
"version": "0.1.0",
|
||||
"status": "draft-instruction-contract"
|
||||
"status": "local-atomic-checkpoint-helper"
|
||||
},
|
||||
"modules": [
|
||||
{
|
||||
"module_id": "profile",
|
||||
"kind": "profile",
|
||||
"entry": "AGENTS.md",
|
||||
"implementation_version": "0.1.0",
|
||||
"implementation_version": "0.2.0",
|
||||
"provided_contract": {
|
||||
"id": "gewu.profile.profile",
|
||||
"version": "0.1.0"
|
||||
@@ -71,12 +79,21 @@
|
||||
"gewu.skill.kb-curate@0.1.0",
|
||||
"gewu.skill.kb-synthesize@0.1.0"
|
||||
],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"required_service_capabilities": [
|
||||
"knowledge:read",
|
||||
"proposal:evaluate",
|
||||
"proposal:read",
|
||||
"proposal:submit",
|
||||
"proposal:withdraw",
|
||||
"run:read",
|
||||
"run:write",
|
||||
"service:diagnostics"
|
||||
],
|
||||
"service_capability_status": "bound-to-pinned-service-v1",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "2bb326e760704bb555238f2d3e04e7cc238f01f6f281f21824f8196e700a30ef",
|
||||
"sha256": "b91fe559d5023e4fca71177f8bfe8d25eda067ed7db12692542237fabbe239a7",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
@@ -90,11 +107,11 @@
|
||||
},
|
||||
"requires_contracts": [],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"service_capability_status": "not-required",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "9b7316c02d82608c34d24d1d69f24016c33ba966373cb57e9b90b70ba76ac865",
|
||||
"sha256": "4de60c95fddabd94223df0bad3cd2090b04d6e7a484488c8ea300a9e181246e6",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
@@ -108,7 +125,7 @@
|
||||
},
|
||||
"requires_contracts": [],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"service_capability_status": "not-required",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
@@ -119,7 +136,7 @@
|
||||
"module_id": "contributions",
|
||||
"kind": "protocol",
|
||||
"entry": "protocols/CONTRIBUTIONS.md",
|
||||
"implementation_version": "0.1.0",
|
||||
"implementation_version": "0.3.0",
|
||||
"provided_contract": {
|
||||
"id": "gewu.protocol.contributions",
|
||||
"version": "0.1.0"
|
||||
@@ -127,19 +144,27 @@
|
||||
"requires_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"required_service_capabilities": [
|
||||
"proposal:evaluate",
|
||||
"proposal:read",
|
||||
"proposal:submit",
|
||||
"proposal:withdraw",
|
||||
"run:read",
|
||||
"run:write",
|
||||
"service:diagnostics"
|
||||
],
|
||||
"service_capability_status": "bound-to-pinned-service-v1",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "f66e7c97036c85f0ceeaba69caf54720ea8d98021fda73bc4a7c9667775d8387",
|
||||
"sha256": "0cb815b00b5ea65200eedaa211f7ac6dd47b87431d8ac0567a15fa6ae8cd6cea",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
"module_id": "kb-ingest",
|
||||
"kind": "skill",
|
||||
"entry": "skills/kb-ingest/SKILL.md",
|
||||
"implementation_version": "0.1.0",
|
||||
"implementation_version": "0.3.0",
|
||||
"provided_contract": {
|
||||
"id": "gewu.skill.kb-ingest",
|
||||
"version": "0.1.0"
|
||||
@@ -150,19 +175,26 @@
|
||||
"gewu.protocol.contributions@0.1.0",
|
||||
"gewu.pipeline.kb-ingest-pipeline@0.1.0"
|
||||
],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"required_service_capabilities": [
|
||||
"proposal:evaluate",
|
||||
"proposal:read",
|
||||
"proposal:submit",
|
||||
"proposal:withdraw",
|
||||
"run:read",
|
||||
"run:write"
|
||||
],
|
||||
"service_capability_status": "bound-to-pinned-service-v1",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "b0abe4d6db8020f16e86789fa409a19fda1e7385882172d84e3cc430ed4e7b6d",
|
||||
"sha256": "7c0436077d8f2227e6e8ce56b3910ae77c27c5af91a0546775d4aec46565d708",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
"module_id": "kb-ingest-pipeline",
|
||||
"kind": "pipeline",
|
||||
"entry": "pipelines/ingest.md",
|
||||
"implementation_version": "0.1.0",
|
||||
"implementation_version": "0.2.0",
|
||||
"provided_contract": {
|
||||
"id": "gewu.pipeline.kb-ingest-pipeline",
|
||||
"version": "0.1.0"
|
||||
@@ -172,12 +204,19 @@
|
||||
"gewu.protocol.scope@0.1.0",
|
||||
"gewu.protocol.contributions@0.1.0"
|
||||
],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"required_service_capabilities": [
|
||||
"proposal:evaluate",
|
||||
"proposal:read",
|
||||
"proposal:submit",
|
||||
"proposal:withdraw",
|
||||
"run:read",
|
||||
"run:write"
|
||||
],
|
||||
"service_capability_status": "bound-to-pinned-service-v1",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "ebdb65bfdb331eae1c5d0618caebac4585287c5057d64307b57b1ae7bd404962",
|
||||
"sha256": "a3cf7589e1c220e0cb1d5c8b23c4312c0e4af642a21bdcd7ff3a89ba0883bda7",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
@@ -195,12 +234,14 @@
|
||||
"gewu.protocol.contributions@0.1.0",
|
||||
"gewu.pipeline.kb-query-pipeline@0.1.0"
|
||||
],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"required_service_capabilities": [
|
||||
"knowledge:read"
|
||||
],
|
||||
"service_capability_status": "bound-to-pinned-service-v1",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "e2e1986d0c4ffc76982e76a9976f290e6eed18e469fc682acbeed898ef30775c",
|
||||
"sha256": "7cadd46dbda669f8ae23e39eeba89f1a7f687698033dfc805c57cf3509f61f63",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
@@ -217,19 +258,21 @@
|
||||
"gewu.protocol.scope@0.1.0",
|
||||
"gewu.protocol.contributions@0.1.0"
|
||||
],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"required_service_capabilities": [
|
||||
"knowledge:read"
|
||||
],
|
||||
"service_capability_status": "bound-to-pinned-service-v1",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "d78cbb2e5cb691704a7b5300856d053801b1aeaa06e6b45cb442959413735d64",
|
||||
"sha256": "b776dac041cd59cd564eae0a373499d319791d8cf1ce9628523bbd8f6509d70d",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
"module_id": "kb-curate",
|
||||
"kind": "skill",
|
||||
"entry": "skills/kb-curate/SKILL.md",
|
||||
"implementation_version": "0.1.0",
|
||||
"implementation_version": "0.2.0",
|
||||
"provided_contract": {
|
||||
"id": "gewu.skill.kb-curate",
|
||||
"version": "0.1.0"
|
||||
@@ -240,12 +283,20 @@
|
||||
"gewu.protocol.contributions@0.1.0",
|
||||
"gewu.pipeline.kb-curate-pipeline@0.1.0"
|
||||
],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"required_service_capabilities": [
|
||||
"knowledge:read",
|
||||
"proposal:evaluate",
|
||||
"proposal:read",
|
||||
"proposal:submit",
|
||||
"proposal:withdraw",
|
||||
"run:read",
|
||||
"run:write"
|
||||
],
|
||||
"service_capability_status": "bound-to-pinned-service-v1",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "ed49d08d581c92c26755944e931665e197074f32c33f44b462208398ec50e515",
|
||||
"sha256": "b423b414cc797384e7c9c6b2f06a047395aa7158952cb133e51361f3d29a8805",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
@@ -262,12 +313,20 @@
|
||||
"gewu.protocol.scope@0.1.0",
|
||||
"gewu.protocol.contributions@0.1.0"
|
||||
],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"required_service_capabilities": [
|
||||
"knowledge:read",
|
||||
"proposal:evaluate",
|
||||
"proposal:read",
|
||||
"proposal:submit",
|
||||
"proposal:withdraw",
|
||||
"run:read",
|
||||
"run:write"
|
||||
],
|
||||
"service_capability_status": "bound-to-pinned-service-v1",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "665a51f5c42a81cf37aaccfc7791b494f487fc3aa70cf8d6cfd9437dc8bfcff1",
|
||||
"sha256": "39a2e0f754bd81b6f5ccea5dd1c1c797051ac7492e97f554b9254e0e92f09ddf",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
@@ -285,8 +344,10 @@
|
||||
"gewu.protocol.contributions@0.1.0",
|
||||
"gewu.pipeline.kb-synthesize-pipeline@0.1.0"
|
||||
],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"required_service_capabilities": [
|
||||
"knowledge:read"
|
||||
],
|
||||
"service_capability_status": "bound-to-pinned-service-v1",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
@@ -307,8 +368,10 @@
|
||||
"gewu.protocol.scope@0.1.0",
|
||||
"gewu.protocol.contributions@0.1.0"
|
||||
],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"required_service_capabilities": [
|
||||
"knowledge:read"
|
||||
],
|
||||
"service_capability_status": "bound-to-pinned-service-v1",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
@@ -319,24 +382,136 @@
|
||||
"module_id": "checkpoint-guide",
|
||||
"kind": "guide",
|
||||
"entry": "README.md",
|
||||
"implementation_version": "0.1.0",
|
||||
"implementation_version": "0.3.0",
|
||||
"provided_contract": {
|
||||
"id": "gewu.local-checkpoint",
|
||||
"version": "0.1.0"
|
||||
},
|
||||
"requires_contracts": [],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "unbound-service-schema-pending",
|
||||
"service_capability_status": "not-required",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "3557c41c1db1892eeaa1f5bd3b8061e8c13b828bc6c608273836448ec2842fe4",
|
||||
"sha256": "991a629a8cbb6e31422ff3766ccd7a4d28420aa41efebc4553c4dcdabf85a1db",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
"module_id": "claude-pointer",
|
||||
"kind": "harness-pointer",
|
||||
"entry": "CLAUDE.md",
|
||||
"implementation_version": "0.1.0",
|
||||
"provided_contract": {
|
||||
"id": "gewu.harness.claude",
|
||||
"version": "0.1.0"
|
||||
},
|
||||
"requires_contracts": [
|
||||
"gewu.profile.profile@0.1.0"
|
||||
],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "not-required",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "f5a9e868f1e5ad63740620f3a113d1e79c55489076130326a4ed52d1afa90877",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
"module_id": "service-contract-v1",
|
||||
"kind": "service-contract",
|
||||
"entry": "contracts/service-v1.json",
|
||||
"implementation_version": "1.0.0",
|
||||
"provided_contract": {
|
||||
"id": "gewu.service.v1",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
"requires_contracts": [],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "source-of-pinned-contracts",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "0bdeb121e4cca3df36c97d24e8144b87fb36215f6afce58b187708ecf0fdb32d",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
"module_id": "service-catalog-v1",
|
||||
"kind": "service-contract",
|
||||
"entry": "contracts/catalog-v1.json",
|
||||
"implementation_version": "1.0.0",
|
||||
"provided_contract": {
|
||||
"id": "gewu.operation-catalog",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
"requires_contracts": [],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "source-of-pinned-contracts",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "75b8ebb3a1255b4d2ab7a81a277977dde65b34501af4d4f11a1b918b316d98ac",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
"module_id": "manifest-tool",
|
||||
"kind": "integrity-tool",
|
||||
"entry": "scripts/manifest_tool.py",
|
||||
"implementation_version": "1.0.0",
|
||||
"provided_contract": {
|
||||
"id": "gewu.manifest-integrity",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
"requires_contracts": [],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "not-required",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "00b23c0f063d2ec98791cd4bba83e77b535c3ca50f454a438b7dffb460b12d06",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
"module_id": "run-checkpoint-tool",
|
||||
"kind": "local-utility",
|
||||
"entry": "scripts/run_checkpoint.py",
|
||||
"implementation_version": "0.1.0",
|
||||
"provided_contract": {
|
||||
"id": "gewu.local-checkpoint.runtime",
|
||||
"version": "0.1.0"
|
||||
},
|
||||
"requires_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "not-required",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "31abec66a0885c67e0a54443d15f019c11b8c1ececcec5376a7f5cf90cc8f0ff",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
},
|
||||
{
|
||||
"module_id": "workspace-installer",
|
||||
"kind": "installer",
|
||||
"entry": "scripts/install.py",
|
||||
"implementation_version": "0.1.0",
|
||||
"provided_contract": {
|
||||
"id": "gewu.workspace-installer",
|
||||
"version": "0.1.0"
|
||||
},
|
||||
"requires_contracts": [],
|
||||
"required_service_capabilities": [],
|
||||
"service_capability_status": "not-required",
|
||||
"compatible_checkpoint_contracts": [
|
||||
"gewu.local-checkpoint@0.1.0"
|
||||
],
|
||||
"sha256": "953d5c615f0954470bd2ee3a7a22fa40a2efecab8715bb6158d69d49a6a448ce",
|
||||
"hash_encoding": "utf8-no-bom-lf"
|
||||
}
|
||||
],
|
||||
"snapshot": {
|
||||
"algorithm": "sha256",
|
||||
"scope": "modules array serialized as UTF-8 JSON with sorted keys and compact separators",
|
||||
"digest": "d968ab13ec3492452842f88feba763b928ece50464dddea0e2cadb91425ca6c4"
|
||||
"digest": "03d6c9f16b5b717d1709742d007eb918f23f3e41a24437fd4bbbd589c5ad0be7"
|
||||
}
|
||||
}
|
||||
+4
-3
@@ -4,8 +4,9 @@ Version 0.1.0. Host-executed procedure for `kb-curate`.
|
||||
|
||||
1. Define collection, audit type and budget. Record whether the requested output is a report or a contribution.
|
||||
2. Retrieve candidate records and their exact revisions; inspect evidence and existing relations.
|
||||
3. Classify stale, duplicate-candidate, contradiction, missing-link or insufficient-context findings. Explain the proposed change and its evidence. Similarity alone cannot decide a merge.
|
||||
4. For report-only work, stop with findings and coverage. For authorized contributions, build separate typed proposals with expected revisions and affected policy domains.
|
||||
5. Resolve validation findings and inspect receipts. A held merge or promotion is a pending exception; it is not permission to copy/delete records manually.
|
||||
3. Classify stale, duplicate-candidate, contradiction, missing-link or insufficient-context findings. Explain the proposed change and its evidence. Exact name/alias matches are review candidates only; verify identity and preserve each source's provenance before proposing a relationship. Similarity alone cannot decide a merge.
|
||||
4. Preserve claims that disagree. Propose a typed `contradicts` relationship with evidence or explicitly labeled interpretation rationale; do not collapse either claim. For substantive relationships, include the supporting evidence or rationale and record material conditions such as population, time period or setting. Record assumptions and limitations as separately assessed node claim groups with assertion paths `assumptions[n].text` and `limitations[n].text`; do not treat edge conditions as a substitute for those claims.
|
||||
5. For report-only work, stop with findings and coverage. For authorized contributions, build separate typed proposals with expected revisions and affected policy domains.
|
||||
6. Resolve validation findings and inspect receipts. A held merge or promotion is a pending exception; it is not permission to copy/delete records manually.
|
||||
|
||||
Checkpoint candidate IDs, inspected revisions, findings, proposed changes and receipts. After another agent changes a candidate, re-inspect before resuming its proposal. Keep completed findings and unexamined coverage distinct.
|
||||
+7
-6
@@ -1,15 +1,16 @@
|
||||
# Ingestion pipeline
|
||||
|
||||
Version 0.1.0. Host-executed procedure for `kb-ingest`; not a background scheduler. Follow the contribution protocol for budgets, checkpoints and retry identity.
|
||||
Version 0.2.0. Host-executed procedure for `kb-ingest`; not a background scheduler. Follow the contribution protocol for budgets, checkpoints and retry identity.
|
||||
|
||||
| Stage | Input | Output / checkpoint | Gate |
|
||||
| --- | --- | --- | --- |
|
||||
| Context | User-selected material and explicit project | Objective, lens, scope, run identity and pinned pack versions | Required tools/schema are available; otherwise report blocked. |
|
||||
| Capture | Selected bytes/URL and source candidates | Verified upload/capture IDs, archive/extraction availability | Upload is staged; retain exact source revision/map. |
|
||||
| Context | User-selected material, explicit project and `get_project_context` lens | Objective, authorized project lens, scope, run identity and pinned pack versions | Required tools/schema are available; otherwise report blocked. |
|
||||
| Capture | Explicitly selected local files, user-pasted text or an allowlisted public URL | Verified artifact digest, stable source ID, content-bound revision ID, metadata candidate and extraction availability | Use the connector for local files, `source_capture_text` for explicitly supplied UTF-8 text/Markdown (maximum 1 MB), or `source_capture_url` for a configured public host. Pasted text requires a stable capture ID and source key, and returns an archived artifact, extraction and candidate marked `pasted-text`; retry with the same ID and identical inputs after uncertainty, since changed inputs conflict. The service retains at most 1,024 private capture receipts. The capture does not register the source. The connector returns a typed `source_candidate`; `.vtt` and `.srt` files are parsed into cue-timed blocks and tagged `transcript`. Cite the precise cue times together with the quote span. The connector can record a declared NotebookLM export provenance for supported text, Markdown or PDF files, but does not verify that provenance; omit `source_revision_id` to derive a revision from file identity, content digest and its durable retry checkpoint, or supply a stable revision ID when resuming an existing workflow. Submit candidates through `proposal_submit`; staging alone does not register a source. Failed fetches return a `capture-failed` candidate without artifact bytes; register it only when a bookmark is useful. PDF extraction currently requires the supported Linux sandbox. HTML citations refer to visible extracted text, not markup-byte offsets. |
|
||||
| Triage | Source plus project lens | Included sections and skip/defer reasons | Bound the batch; preserve coverage. |
|
||||
| Extract | Included sections and immutable maps | Atomic proposal draft with field-level evidence | Exact quotes/locators; no invented revisions. |
|
||||
| Assess | Assertion/evidence bindings | Support judgments, assessor/run and rationale | Unsupported/unavailable claims remain drafts. |
|
||||
| Submit | Complete bounded bundle and base revision | Proposal identity, validation findings and eventual receipt | Every affected domain's policy applies; protected decisions remain external. |
|
||||
| Report | Receipts and coverage records | Accepted/held work, index state, limitations and resume point | Never equate partial acceptance or upload with complete processing. |
|
||||
| Evaluate | Complete bounded bundle and base revision | `proposal_evaluate` findings and eligible status | Evaluation is read-only; it does not reserve an ID or store the proposal. |
|
||||
| Submit | Evaluated bounded bundle and stable proposal identity | `proposal_submit` outcome and eventual receipt | Every affected domain's policy applies; protected decisions remain external. |
|
||||
| Report | `proposal_status`, receipts and coverage records | Accepted/held work, index state, limitations and resume point | Never equate upload, evaluation or partial acceptance with complete processing. |
|
||||
|
||||
Resume inspects service status and retained output hashes before returning to a stage. Changed assertion/evidence invalidates assessment and later stages. Correct only actionable findings; repeated identical failure stops for diagnosis. Pipeline instructions may be replaced independently of the skill's extraction criteria if these input/output and recovery obligations remain valid.
|
||||
Resume calls `source_upload_status` or `proposal_status` using the exact checkpointed ID and revision before returning to a stage. Changed assertion/evidence invalidates assessment and later stages. Correct only actionable findings; repeated identical failure stops for diagnosis. Pipeline instructions may be replaced independently of the skill's extraction criteria if these input/output and recovery obligations remain valid.
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
Version 0.1.0. Read-only host-executed procedure for `kb-query`.
|
||||
|
||||
1. Establish question, explicit scope and answer budget; inspect actual service availability.
|
||||
2. Retrieve accepted candidates with complete citation groups, scope and index metadata. Preserve degraded-mode and freshness warnings.
|
||||
2. Retrieve accepted candidates with complete citation groups, scope and index metadata. Use node-type and stale-only facets to narrow the search when useful; keep the filters in the saved URL/request context. Browse source metadata with `list_sources` under the same explicit scope. Preserve degraded-mode and freshness warnings.
|
||||
3. Inspect decisive nodes/source locations and bounded typed neighbors. Keep suggestions and established relationships distinct.
|
||||
4. Compose an answer with citations near factual claims, relevant conditions, disagreements and as-of dates. Report insufficient evidence without filling gaps from memory as if retrieved.
|
||||
5. Record the retrieved revision IDs and omissions when a resumable local work record is needed. Do not create a server mutation merely to log a read-only query.
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
# Contributions and run recovery
|
||||
|
||||
Resolve actual tool/schema versions through service diagnostics before using a connected workflow. The initial pack's manifest lists no verified service contracts; its pipelines describe intended interactions, not installed tools. Do not invent tool names or issue ad hoc REST/file writes when MCP is unavailable.
|
||||
Before a connected workflow, call `diagnostics` and compare the discovered MCP tool names and input schemas with `contracts/service-v1.json`; its catalog digest and record-schema hashes pin the local GEWU v1 contract. Diagnostics reports the authenticated role, authorized projects/capabilities, explicit selected scope, source-transfer limits, service/catalog versions and canonical/index revisions without returning credentials or principal IDs. `connection_status=authenticated` proves only this call; `workflow_status=not_verified` means native workflow acceptance remains separate. The MCP tool inventory must match exactly. If tools are absent or schemas differ, stop before mutation and report the drift. `proposal_evaluate` is the deterministic preflight; the service's `proposal_submit` response remains authoritative. Owner decisions use a separate owner transport and are not available to agents. Runs are agent-owned, explicitly scoped service records; they do not schedule work or grant capability.
|
||||
|
||||
`list_projects` exposes authorized IDs, and `get_project_context` returns the selected authorized project's north star, key questions, watch list and taxonomy extensions without exposing its autonomy policy. Use this tool for ingest/curation context; keep objective and scope explicit and never infer authority from a folder or project name.
|
||||
|
||||
Current capability gaps that must be reported when relevant: retrieval is lexical only; URL capture requires an exact operator-allowlisted public host. URL and selected-file intake support UTF-8 text/Markdown/HTML and PDF; selected `.vtt` and `.srt` files are parsed into timestamped cues and tagged `capture_method=transcript`. Transcript evidence must cite the exact text span and matching cue start/end milliseconds. `source_capture_text` accepts explicitly supplied UTF-8 plain text or Markdown up to 1 MB. It requires a stable capture ID, stores the completed metadata candidate in a private bounded receipt journal, returns the same candidate for an exact retry, and conflicts if the same ID is reused with changed inputs. Source records distinguish URL fetch, local-file, transcript, declared NotebookLM-export and pasted-text capture methods; the NotebookLM label does not verify export provenance. HTML citations refer to the visible-text extraction, not markup-byte offsets. PDF extraction is qualified only on Linux in a sandbox; scanned PDFs return `PDF_NO_TEXT`. Failed URL captures can be registered as artifact-free references, and source records include publisher, author, publication date, license and reliability fields. supplied NotebookLM exports, Windows/macOS PDF extraction, native host workflows and real-source location checks remain unqualified. There are no vector/hybrid search or project-export/import operations. Duplicate review can nominate exact entity name/alias matches only within the caller-readable explicit scope; it does not merge records. Reversible merge, protected owner decisions, promotion and synthesis-dependency warnings remain unavailable. Do not describe these as implemented merely because a pipeline or record schema can represent related data.
|
||||
|
||||
Use read tools for retrieval and typed MCP proposals for contributions. Source upload completion establishes a staged artifact, not an accepted source. Treat policy acceptance and index visibility as separate outcomes. Corrections append revisions; accepted records are corrected through new linked proposals.
|
||||
|
||||
Before a connected operation, persist run/operation identity and input digest in a local checkpoint, then associate service run/proposal IDs as returned. Checkpoints include pack/skill/pipeline versions and hashes, scope, source/extraction references, stage, output hashes, coverage, pending side effects and last receipt. Exclude secrets. Use the host's available safe file tools; these instructions alone do not establish atomic journaling or a durable scheduler.
|
||||
Create the service run with `run_create` before capture or proposal submission. Persist returned run identity and operation input digests in the private local checkpoint, then append service checkpoints with `run_checkpoint`; `run_status` is authoritative after uncertain calls and returns the latest revision. Each update uses `expected_revision`; retry the same checkpoint unchanged after uncertainty. The local helper remains a private host-side recovery mirror and is useful when offline. Checkpoints include pack/skill/pipeline versions and hashes, explicit project/shared scope and lens, source/extraction references, stage, output hashes, included/excluded/skipped coverage, pending side effects and last receipt. The helper rejects credential/source-body fields and verifies pinned module hashes on resume. The pack does not provide a host scheduler.
|
||||
|
||||
Use the checkpoint contract in the [pack README](../README.md) and resolve the module registry in the manifest. Record its snapshot digest and every applicable module's contract ID/version and file hash, including the profile and shared protocols. Verify those hashes before resuming; a mismatch requires the original snapshot or an explicitly revalidated successor run.
|
||||
|
||||
When a result is uncertain, query upload/proposal/run status using the same operation identity before retrying. Never generate a fresh proposal ID to hide network uncertainty. Resume from preserved artifacts and service receipts; changed content requires a new revision. Do not rerun a model and assume it reproduces the same output.
|
||||
When upload completion is uncertain, call `source_upload_status` with the saved upload ID and resume only from its verified offsets. When proposal submission is uncertain, call `proposal_status` with the same proposal ID and revision. If accepted, reuse the returned receipt and do not resubmit. If evaluated but not accepted, inspect findings; if withdrawn, that proposal revision cannot be submitted. Never generate a fresh proposal ID to hide network uncertainty. Resume from preserved artifacts and service receipts; changed content requires a new proposal revision. Do not rerun a model and assume it reproduces the same output.
|
||||
|
||||
Bound work by source/batch size, stage/model budget and correction attempts. After two unchanged validation failures, stop for diagnosis and report findings. Coverage/skips remain explicit at any stop. Cancellation cannot undo an accepted proposal; check status when a call may have completed.
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# Evidence and interpretation
|
||||
|
||||
Read exact source revisions and immutable extraction maps supplied by the service. Bind each factual assertion or field to source/extraction IDs, location, quote and assertion digest under the published schema. A local extraction may help prepare a draft; it cannot impersonate the service's archived revision or locator map.
|
||||
Read exact source revisions and immutable extraction maps supplied by the service. Bind each factual assertion or field to source/extraction IDs, location, quote and assertion digest under the published schema. For node claims, use the exact `claims[n].text`, `assumptions[n].text` or `limitations[n].text` assertion path that owns the statement; claim IDs must be unique across all three groups. A local extraction may help prepare a draft; it cannot impersonate the service's archived revision or locator map.
|
||||
|
||||
Record material assumptions and limitations as their own evidence-backed claim groups. Do not bury them in a summary or infer them from conditions on an edge. Each statement needs its own support assessment bound to its exact assertion and evidence, and it appears separately in the read interface. If the source does not establish a proposed assumption or limitation, keep it explicitly unsupported or omit it.
|
||||
|
||||
Quote occurrence, semantic support, source reliability, model confidence and freshness are different assessments. A matching quote does not establish that the number, unit, population or qualifiers support the assertion. Record support rationale and the actual assessor. Routine same-agent assessment is allowed when policy permits; do not describe it as independent human review.
|
||||
|
||||
|
||||
@@ -0,0 +1,315 @@
|
||||
"""Install and remove the GEWU instruction pack without replacing user files."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
PACK_ROOT = Path(__file__).resolve().parents[1]
|
||||
PACK_DIR = Path(".agents/gewu")
|
||||
STATE_PATH = Path(".agents/gewu-install.json")
|
||||
MARKER = "<!-- GEWU routing: managed by agents/gewu/scripts/install.py -->"
|
||||
ROUTES = {
|
||||
"AGENTS.md": (
|
||||
"For knowledge-base research, ingestion, curation, or synthesis, follow "
|
||||
"[the GEWU profile](.agents/gewu/AGENTS.md) and its applicable kb-* skill. "
|
||||
"Use this routing only for those research tasks."
|
||||
),
|
||||
"CLAUDE.md": (
|
||||
"For knowledge-base research, ingestion, curation, or synthesis, follow "
|
||||
"[the GEWU profile](.agents/gewu/AGENTS.md) and its applicable kb-* skill."
|
||||
),
|
||||
"GEMINI.md": (
|
||||
"For knowledge-base research, ingestion, curation, or synthesis, follow "
|
||||
"[the GEWU profile](.agents/gewu/AGENTS.md) and its applicable kb-* skill."
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
def digest(data: bytes) -> str:
|
||||
return hashlib.sha256(data).hexdigest()
|
||||
|
||||
|
||||
def _safe_regular(path: Path) -> bool:
|
||||
return not path.is_symlink() and (not path.exists() or path.is_file())
|
||||
|
||||
|
||||
def _validated_state(state: object) -> dict[str, Any]:
|
||||
if not isinstance(state, dict) or set(state) != {
|
||||
"format",
|
||||
"mode",
|
||||
"pack_path",
|
||||
"files",
|
||||
"routes",
|
||||
}:
|
||||
raise ValueError("unrecognized GEWU installation state")
|
||||
if (
|
||||
state.get("format") != "gewu-install-state@1"
|
||||
or state.get("mode") not in {"integrated", "dedicated"}
|
||||
or state.get("pack_path") != PACK_DIR.as_posix()
|
||||
):
|
||||
raise ValueError("unrecognized GEWU installation state")
|
||||
files = state.get("files")
|
||||
if not isinstance(files, dict) or "manifest.json" not in files:
|
||||
raise ValueError("GEWU installation file list is invalid")
|
||||
for relative, expected in files.items():
|
||||
if (
|
||||
not isinstance(relative, str)
|
||||
or not relative
|
||||
or "\\" in relative
|
||||
or relative.startswith("/")
|
||||
or any(part in {"", ".", ".."} for part in relative.split("/"))
|
||||
or not isinstance(expected, str)
|
||||
or not re.fullmatch(r"[a-f0-9]{64}", expected)
|
||||
):
|
||||
raise ValueError("GEWU installation file list is invalid")
|
||||
routes = state.get("routes")
|
||||
if not isinstance(routes, dict) or set(routes) != set(ROUTES):
|
||||
raise ValueError("GEWU installation routes are invalid")
|
||||
for name, route in routes.items():
|
||||
if (
|
||||
not isinstance(name, str)
|
||||
or not isinstance(route, dict)
|
||||
or set(route) != {"block_sha256"}
|
||||
or not isinstance(route.get("block_sha256"), str)
|
||||
or not re.fullmatch(r"[a-f0-9]{64}", route["block_sha256"])
|
||||
):
|
||||
raise ValueError("GEWU installation routes are invalid")
|
||||
return state
|
||||
|
||||
|
||||
def _routing_block(host_file: str, mode: str) -> bytes:
|
||||
qualifier = (
|
||||
"This workspace is dedicated to research; use GEWU for research tasks."
|
||||
if mode == "dedicated"
|
||||
else (
|
||||
"Keep existing development instructions; use GEWU only for research tasks."
|
||||
)
|
||||
)
|
||||
text = f"\n{MARKER}\n{qualifier} {ROUTES[host_file]}\n<!-- /GEWU routing -->\n"
|
||||
return text.encode("utf-8")
|
||||
|
||||
|
||||
def _merge_route(existing: bytes, block: bytes) -> bytes:
|
||||
if MARKER.encode() in existing:
|
||||
raise ValueError(
|
||||
"GEWU routing marker already exists; uninstall the recorded installation first"
|
||||
)
|
||||
return existing + block
|
||||
|
||||
|
||||
def _pack_files(source: Path) -> dict[str, Path]:
|
||||
result: dict[str, Path] = {}
|
||||
for path in source.rglob("*"):
|
||||
relative = path.relative_to(source)
|
||||
if any(part in {"__pycache__", ".git"} for part in relative.parts):
|
||||
continue
|
||||
if path.is_symlink():
|
||||
raise ValueError(f"pack contains a symlink: {relative}")
|
||||
if path.is_file():
|
||||
result[relative.as_posix()] = path
|
||||
if "manifest.json" not in result:
|
||||
raise ValueError("source is not a GEWU pack (manifest.json missing)")
|
||||
return result
|
||||
|
||||
|
||||
def _atomic_write(path: Path, content: bytes) -> None:
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
fd, temporary = tempfile.mkstemp(prefix=f".{path.name}.", dir=path.parent)
|
||||
try:
|
||||
with os.fdopen(fd, "wb") as stream:
|
||||
stream.write(content)
|
||||
stream.flush()
|
||||
os.fsync(stream.fileno())
|
||||
os.replace(temporary, path)
|
||||
finally:
|
||||
if os.path.exists(temporary):
|
||||
os.unlink(temporary)
|
||||
|
||||
|
||||
def install(workspace: Path, source: Path = PACK_ROOT, mode: str = "integrated") -> dict[str, Any]:
|
||||
"""Copy a pack and append reversible instruction pointers."""
|
||||
workspace = workspace.resolve()
|
||||
if mode not in {"dedicated", "integrated"}:
|
||||
raise ValueError("mode must be dedicated or integrated")
|
||||
destination = workspace / PACK_DIR
|
||||
state_file = workspace / STATE_PATH
|
||||
agents_dir = workspace / ".agents"
|
||||
if agents_dir.is_symlink():
|
||||
raise ValueError(".agents must not be a symlink")
|
||||
if (
|
||||
destination.exists()
|
||||
or destination.is_symlink()
|
||||
or state_file.exists()
|
||||
or state_file.is_symlink()
|
||||
):
|
||||
raise FileExistsError("GEWU is already installed or the managed destination is occupied")
|
||||
source_files = _pack_files(source.resolve())
|
||||
targets = {name: workspace / name for name in ROUTES}
|
||||
for target in targets.values():
|
||||
if not _safe_regular(target):
|
||||
raise ValueError(f"routing target is not a regular file: {target.name}")
|
||||
|
||||
# Prepare all bytes and validate the destinations before mutating the workspace.
|
||||
copied = {name: path.read_bytes() for name, path in source_files.items()}
|
||||
route_originals = {
|
||||
name: target.read_bytes() if target.exists() else None for name, target in targets.items()
|
||||
}
|
||||
route_blocks = {name: _routing_block(name, mode) for name in ROUTES}
|
||||
route_results = {
|
||||
name: _merge_route(route_originals[name] or b"", route_blocks[name]) for name in ROUTES
|
||||
}
|
||||
state: dict[str, Any] = {
|
||||
"format": "gewu-install-state@1",
|
||||
"mode": mode,
|
||||
"pack_path": PACK_DIR.as_posix(),
|
||||
"files": {name: digest(content) for name, content in copied.items()},
|
||||
"routes": {
|
||||
name: {
|
||||
"block_sha256": digest(route_blocks[name]),
|
||||
}
|
||||
for name in ROUTES
|
||||
},
|
||||
}
|
||||
state_bytes = (json.dumps(state, sort_keys=True, indent=2) + "\n").encode()
|
||||
|
||||
created_destination = False
|
||||
try:
|
||||
destination.mkdir(parents=True)
|
||||
created_destination = True
|
||||
for name, content in copied.items():
|
||||
target = destination / name
|
||||
target.parent.mkdir(parents=True, exist_ok=True)
|
||||
_atomic_write(target, content)
|
||||
for name, content in route_results.items():
|
||||
_atomic_write(targets[name], content)
|
||||
_atomic_write(state_file, state_bytes)
|
||||
except BaseException:
|
||||
# A racing installer that failed to create the destination owns nothing.
|
||||
if created_destination:
|
||||
for name, original in route_originals.items():
|
||||
target = targets[name]
|
||||
if original is None:
|
||||
target.unlink(missing_ok=True)
|
||||
else:
|
||||
_atomic_write(target, original)
|
||||
shutil.rmtree(destination, ignore_errors=True)
|
||||
state_file.unlink(missing_ok=True)
|
||||
raise
|
||||
return state
|
||||
|
||||
|
||||
def uninstall(workspace: Path) -> None:
|
||||
"""Remove unchanged GEWU-owned files and routing blocks; preserve edits."""
|
||||
workspace = workspace.resolve()
|
||||
agents_dir = workspace / ".agents"
|
||||
if agents_dir.is_symlink():
|
||||
raise ValueError(".agents must not be a symlink")
|
||||
state_file = workspace / STATE_PATH
|
||||
if not _safe_regular(state_file) or not state_file.is_file():
|
||||
raise FileNotFoundError("GEWU installation state is missing or unsafe")
|
||||
if state_file.stat().st_size > 2_000_000:
|
||||
raise ValueError("GEWU installation state is too large")
|
||||
state = _validated_state(json.loads(state_file.read_text(encoding="utf-8")))
|
||||
conflicts: list[str] = []
|
||||
destination = workspace / PACK_DIR
|
||||
if destination.is_symlink() or not destination.is_dir():
|
||||
raise ValueError("GEWU pack destination is missing or unsafe")
|
||||
for relative, expected in state.get("files", {}).items():
|
||||
target = destination / relative
|
||||
parent = target.parent
|
||||
unsafe_parent = False
|
||||
while parent != destination.parent:
|
||||
if parent.is_symlink() or not parent.is_dir():
|
||||
unsafe_parent = True
|
||||
break
|
||||
parent = parent.parent
|
||||
if (
|
||||
unsafe_parent
|
||||
or not target.is_file()
|
||||
or target.is_symlink()
|
||||
or digest(target.read_bytes()) != expected
|
||||
):
|
||||
conflicts.append(f"edited or missing pack file: {PACK_DIR / relative}")
|
||||
route_data: dict[str, bytes] = {}
|
||||
for name, _route in state.get("routes", {}).items():
|
||||
target = workspace / name
|
||||
if not _safe_regular(target):
|
||||
conflicts.append(f"unsafe routing file: {name}")
|
||||
continue
|
||||
current = target.read_bytes() if target.exists() else b""
|
||||
block = _routing_block(name, state["mode"])
|
||||
if not target.exists() or not current.endswith(block):
|
||||
conflicts.append(f"edited routing block: {name}")
|
||||
route_data[name] = current
|
||||
if conflicts:
|
||||
raise ValueError("uninstall refused to remove changed content: " + "; ".join(conflicts))
|
||||
|
||||
# Verify ownership of the exact suffix before removing it.
|
||||
for name, route in state["routes"].items():
|
||||
block = _routing_block(name, state["mode"])
|
||||
current = route_data[name]
|
||||
if digest(block) != route["block_sha256"] or not current.endswith(block):
|
||||
raise ValueError(f"routing ownership check failed: {name}")
|
||||
for name, _route in state["routes"].items():
|
||||
target = workspace / name
|
||||
current = route_data[name]
|
||||
original = current[: -len(_routing_block(name, state["mode"]))]
|
||||
if original:
|
||||
_atomic_write(target, original)
|
||||
else:
|
||||
target.unlink()
|
||||
for relative in sorted(state["files"], key=lambda item: len(Path(item).parts), reverse=True):
|
||||
(destination / relative).unlink()
|
||||
for directory in sorted(
|
||||
(path for path in destination.rglob("*") if path.is_dir() and not path.is_symlink()),
|
||||
key=lambda path: len(path.parts),
|
||||
reverse=True,
|
||||
):
|
||||
try:
|
||||
directory.rmdir()
|
||||
except OSError:
|
||||
pass
|
||||
try:
|
||||
destination.rmdir()
|
||||
except OSError:
|
||||
pass
|
||||
state_file.unlink()
|
||||
for parent in (workspace / ".agents",):
|
||||
try:
|
||||
parent.rmdir()
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
commands = parser.add_subparsers(dest="command", required=True)
|
||||
add = commands.add_parser("install")
|
||||
add.add_argument("workspace", type=Path)
|
||||
add.add_argument("--source", type=Path, default=PACK_ROOT)
|
||||
add.add_argument("--mode", choices=("dedicated", "integrated"), default="integrated")
|
||||
remove = commands.add_parser("uninstall")
|
||||
remove.add_argument("workspace", type=Path)
|
||||
arguments = parser.parse_args()
|
||||
try:
|
||||
if arguments.command == "install":
|
||||
install(arguments.workspace, arguments.source, arguments.mode)
|
||||
print(f"GEWU pack and reversible routing installed in {arguments.workspace.resolve()}")
|
||||
else:
|
||||
uninstall(arguments.workspace)
|
||||
print(f"GEWU-owned pack and routing removed from {arguments.workspace.resolve()}")
|
||||
except (OSError, ValueError, json.JSONDecodeError) as error:
|
||||
parser.error(str(error))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,115 @@
|
||||
"""Verify or refresh the portable GEWU instruction-pack integrity manifest."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import hashlib
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
MANIFEST = ROOT / "manifest.json"
|
||||
|
||||
|
||||
def normalized_bytes(path: Path) -> bytes:
|
||||
text = path.read_text(encoding="utf-8-sig")
|
||||
return text.replace("\r\n", "\n").replace("\r", "\n").encode("utf-8")
|
||||
|
||||
|
||||
def sha256(path: Path) -> str:
|
||||
return hashlib.sha256(normalized_bytes(path)).hexdigest()
|
||||
|
||||
|
||||
def snapshot_digest(modules: list[dict[str, Any]]) -> str:
|
||||
compact = json.dumps(modules, ensure_ascii=False, sort_keys=True, separators=(",", ":"))
|
||||
return hashlib.sha256(compact.encode("utf-8")).hexdigest()
|
||||
|
||||
|
||||
def load_manifest() -> dict[str, Any]:
|
||||
manifest = json.loads(MANIFEST.read_text(encoding="utf-8"))
|
||||
if not isinstance(manifest, dict) or not isinstance(manifest.get("modules"), list):
|
||||
raise ValueError("manifest.json has an invalid structure")
|
||||
return manifest
|
||||
|
||||
|
||||
def module_path(entry: str) -> Path:
|
||||
path = (ROOT / entry).resolve()
|
||||
if path != ROOT and ROOT not in path.parents:
|
||||
raise ValueError(f"module path escapes pack: {entry}")
|
||||
if not path.is_file():
|
||||
raise ValueError(f"module file is missing: {entry}")
|
||||
return path
|
||||
|
||||
|
||||
def verify(manifest: dict[str, Any]) -> None:
|
||||
modules = manifest["modules"]
|
||||
for module in modules:
|
||||
if not isinstance(module, dict) or not isinstance(module.get("entry"), str):
|
||||
raise ValueError("manifest module descriptor is invalid")
|
||||
if module.get("sha256") != sha256(module_path(module["entry"])):
|
||||
raise ValueError(f"module hash mismatch: {module.get('module_id')}")
|
||||
expected_snapshot = manifest.get("snapshot", {}).get("digest")
|
||||
if expected_snapshot != snapshot_digest(modules):
|
||||
raise ValueError("module snapshot digest mismatch")
|
||||
for contract in manifest.get("verified_service_contracts", []):
|
||||
if not isinstance(contract, dict) or not isinstance(contract.get("path"), str):
|
||||
raise ValueError("service contract descriptor is invalid")
|
||||
contract_path = module_path(contract["path"])
|
||||
if contract.get("sha256") != sha256(contract_path):
|
||||
raise ValueError(f"service contract hash mismatch: {contract.get('contract_id')}")
|
||||
service_contract = json.loads(contract_path.read_text(encoding="utf-8"))
|
||||
catalog_path = module_path(str(contract_path.parent / "catalog-v1.json"))
|
||||
catalog = json.loads(catalog_path.read_text(encoding="utf-8"))
|
||||
if service_contract.get("catalog_sha256") != sha256(catalog_path):
|
||||
raise ValueError("bundled service catalog hash mismatch")
|
||||
catalog_capabilities = {
|
||||
operation["capability"]
|
||||
for operation in catalog.get("operations", [])
|
||||
if "mcp" in operation.get("transports", [])
|
||||
}
|
||||
tool_names = {tool.get("name") for tool in service_contract.get("tools", [])}
|
||||
catalog_tool_names = {
|
||||
operation["name"]
|
||||
for operation in catalog.get("operations", [])
|
||||
if "mcp" in operation.get("transports", [])
|
||||
}
|
||||
if tool_names != catalog_tool_names:
|
||||
raise ValueError("MCP tool snapshot differs from the bundled catalog")
|
||||
for module in modules:
|
||||
required = module.get("required_service_capabilities", [])
|
||||
if not isinstance(required, list) or not set(required).issubset(catalog_capabilities):
|
||||
raise ValueError(
|
||||
f"service capability is not in the pinned catalog: {module.get('module_id')}"
|
||||
)
|
||||
for schema in service_contract.get("record_schemas", []):
|
||||
schema_path = module_path(str(contract_path.parent / schema["path"]))
|
||||
if schema.get("sha256") != sha256(schema_path):
|
||||
raise ValueError(f"bundled record schema hash mismatch: {schema.get('path')}")
|
||||
|
||||
|
||||
def refresh(manifest: dict[str, Any]) -> None:
|
||||
modules = manifest["modules"]
|
||||
for module in modules:
|
||||
if not isinstance(module, dict) or not isinstance(module.get("entry"), str):
|
||||
raise ValueError("manifest module descriptor is invalid")
|
||||
module["sha256"] = sha256(module_path(module["entry"]))
|
||||
module["hash_encoding"] = "utf8-no-bom-lf"
|
||||
manifest.setdefault("snapshot", {})["digest"] = snapshot_digest(modules)
|
||||
for contract in manifest.get("verified_service_contracts", []):
|
||||
contract["sha256"] = sha256(module_path(contract["path"]))
|
||||
MANIFEST.write_text(json.dumps(manifest, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
if len(sys.argv) != 2 or sys.argv[1] not in {"refresh", "verify"}:
|
||||
raise SystemExit("usage: python scripts/manifest_tool.py refresh|verify")
|
||||
manifest = load_manifest()
|
||||
if sys.argv[1] == "refresh":
|
||||
refresh(manifest)
|
||||
manifest = load_manifest()
|
||||
verify(manifest)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,429 @@
|
||||
"""Private, atomic checkpoints for host-executed GEWU research runs."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import importlib
|
||||
import json
|
||||
import math
|
||||
import os
|
||||
import re
|
||||
import secrets
|
||||
import stat
|
||||
import sys
|
||||
from datetime import UTC, datetime
|
||||
from pathlib import Path
|
||||
from types import ModuleType
|
||||
from typing import Any
|
||||
|
||||
if __package__:
|
||||
manifest_module: ModuleType = importlib.import_module(".manifest_tool", __package__)
|
||||
else:
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
manifest_module = importlib.import_module("manifest_tool")
|
||||
|
||||
load_manifest = manifest_module.load_manifest
|
||||
verify = manifest_module.verify
|
||||
|
||||
_RUN_ID = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._-]{1,63}$")
|
||||
_SHA256 = re.compile(r"^[a-f0-9]{64}$")
|
||||
_MUTABLE = {
|
||||
"stage",
|
||||
"sources",
|
||||
"coverage",
|
||||
"budgets",
|
||||
"pending_operations",
|
||||
"proposals",
|
||||
"outputs",
|
||||
"last_failure",
|
||||
"runtime",
|
||||
}
|
||||
_FORBIDDEN_KEYS = {
|
||||
"token",
|
||||
"secret",
|
||||
"password",
|
||||
"credential",
|
||||
"source_body",
|
||||
"content",
|
||||
"cookie",
|
||||
"authorization",
|
||||
"auth_header",
|
||||
}
|
||||
|
||||
|
||||
def _reject_duplicate_keys(pairs: list[tuple[str, Any]]) -> dict[str, Any]:
|
||||
result: dict[str, Any] = {}
|
||||
for key, value in pairs:
|
||||
if key in result:
|
||||
raise ValueError("checkpoint JSON contains a duplicate key")
|
||||
result[key] = value
|
||||
return result
|
||||
|
||||
|
||||
def _safe_payload(value: Any) -> None:
|
||||
if isinstance(value, dict):
|
||||
for key, item in value.items():
|
||||
normalized = str(key).lower().replace("-", "_")
|
||||
if (
|
||||
normalized in _FORBIDDEN_KEYS
|
||||
or any(
|
||||
part in normalized
|
||||
for part in ("secret", "password", "credential", "bearer", "api_key")
|
||||
)
|
||||
or normalized.endswith("_token")
|
||||
):
|
||||
raise ValueError("checkpoint cannot store credentials or source bodies")
|
||||
_safe_payload(item)
|
||||
elif isinstance(value, list):
|
||||
for item in value:
|
||||
_safe_payload(item)
|
||||
elif isinstance(value, float) and not math.isfinite(value):
|
||||
raise ValueError("checkpoint contains a non-finite number")
|
||||
elif not isinstance(value, (str, int, float, bool, type(None))):
|
||||
raise ValueError("checkpoint contains a non-JSON value")
|
||||
|
||||
|
||||
def _runs_directory(workspace: Path) -> Path:
|
||||
root = workspace.expanduser().absolute()
|
||||
if root.is_symlink():
|
||||
raise ValueError("workspace root must not be a symbolic link")
|
||||
runs = root / "Runs"
|
||||
if runs.is_symlink():
|
||||
raise ValueError("Runs directory must not be a symbolic link")
|
||||
runs.mkdir(parents=True, exist_ok=True, mode=0o700)
|
||||
if not runs.is_dir() or runs.is_symlink():
|
||||
raise ValueError("Runs path is unavailable")
|
||||
if os.name != "nt":
|
||||
runs.chmod(stat.S_IRWXU)
|
||||
return runs
|
||||
|
||||
|
||||
def _checkpoint_path(workspace: Path, run_id: str) -> Path:
|
||||
if not _RUN_ID.fullmatch(run_id):
|
||||
raise ValueError("run ID is invalid")
|
||||
return _runs_directory(workspace) / f"{run_id}.json"
|
||||
|
||||
|
||||
def _write_atomic(path: Path, value: dict[str, Any]) -> None:
|
||||
_safe_payload(value)
|
||||
payload = json.dumps(value, ensure_ascii=False, sort_keys=True, separators=(",", ":"))
|
||||
if len(payload.encode("utf-8")) > 1_000_000:
|
||||
raise ValueError("checkpoint exceeds the one-megabyte limit")
|
||||
temporary = path.with_name(f".{path.name}.{secrets.token_hex(8)}.tmp")
|
||||
try:
|
||||
descriptor = os.open(temporary, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o600)
|
||||
with os.fdopen(descriptor, "w", encoding="utf-8", newline="\n") as stream:
|
||||
stream.write(payload + "\n")
|
||||
stream.flush()
|
||||
os.fsync(stream.fileno())
|
||||
os.replace(temporary, path)
|
||||
if os.name != "nt":
|
||||
path.chmod(stat.S_IRUSR | stat.S_IWUSR)
|
||||
directory_fd = os.open(path.parent, os.O_RDONLY)
|
||||
try:
|
||||
os.fsync(directory_fd)
|
||||
finally:
|
||||
os.close(directory_fd)
|
||||
finally:
|
||||
temporary.unlink(missing_ok=True)
|
||||
|
||||
|
||||
def _module_pins(manifest: dict[str, Any]) -> list[dict[str, str]]:
|
||||
return [
|
||||
{
|
||||
"module_id": module["module_id"],
|
||||
"entry": module["entry"],
|
||||
"contract_id": module["provided_contract"]["id"],
|
||||
"contract_version": module["provided_contract"]["version"],
|
||||
"implementation_version": module["implementation_version"],
|
||||
"sha256": module["sha256"],
|
||||
}
|
||||
for module in manifest["modules"]
|
||||
]
|
||||
|
||||
|
||||
def create_checkpoint(
|
||||
workspace: Path,
|
||||
*,
|
||||
run_id: str,
|
||||
objective: str,
|
||||
projects: list[str],
|
||||
include_shared: bool,
|
||||
lens: str,
|
||||
budgets: dict[str, int] | None = None,
|
||||
) -> dict[str, Any]:
|
||||
manifest = load_manifest()
|
||||
verify(manifest)
|
||||
if not objective.strip() or len(objective) > 4_000:
|
||||
raise ValueError("objective must contain 1 to 4000 characters")
|
||||
if (
|
||||
not projects
|
||||
or len(projects) > 100
|
||||
or len(set(projects)) != len(projects)
|
||||
or any(
|
||||
not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9._:-]{0,127}", project) for project in projects
|
||||
)
|
||||
):
|
||||
raise ValueError("scope must contain distinct explicit project IDs")
|
||||
if not lens.strip() or len(lens) > 2_000:
|
||||
raise ValueError("lens must contain 1 to 2000 characters")
|
||||
path = _checkpoint_path(workspace, run_id)
|
||||
if path.is_symlink() or path.exists():
|
||||
raise ValueError("run checkpoint already exists")
|
||||
now = datetime.now(UTC).isoformat()
|
||||
checkpoint: dict[str, Any] = {
|
||||
"checkpoint_version": "0.1.0",
|
||||
"run_id": run_id,
|
||||
"created_at": now,
|
||||
"updated_at": now,
|
||||
"pack": {
|
||||
"pack_id": manifest["pack_id"],
|
||||
"pack_version": manifest["pack_version"],
|
||||
"snapshot_digest": manifest["snapshot"]["digest"],
|
||||
"modules": _module_pins(manifest),
|
||||
"service_contracts": [
|
||||
{"contract_id": item["contract_id"], "sha256": item["sha256"]}
|
||||
for item in manifest["verified_service_contracts"]
|
||||
],
|
||||
},
|
||||
"objective": objective,
|
||||
"scope": {"projects": projects, "include_shared": include_shared},
|
||||
"lens": lens,
|
||||
"stage": "context",
|
||||
"sources": [],
|
||||
"coverage": {"selected": [], "included": [], "excluded": [], "skipped": []},
|
||||
"budgets": budgets or {},
|
||||
"runtime": {"host": None, "model": None},
|
||||
"pending_operations": [],
|
||||
"proposals": [],
|
||||
"outputs": [],
|
||||
"last_failure": None,
|
||||
}
|
||||
_validate_checkpoint(checkpoint)
|
||||
_write_atomic(path, checkpoint)
|
||||
return checkpoint
|
||||
|
||||
|
||||
def load_checkpoint(workspace: Path, run_id: str) -> dict[str, Any]:
|
||||
manifest = load_manifest()
|
||||
verify(manifest)
|
||||
path = _checkpoint_path(workspace, run_id)
|
||||
if path.is_symlink() or not path.is_file() or path.stat().st_size > 1_000_000:
|
||||
raise ValueError("run checkpoint is unavailable")
|
||||
checkpoint = json.loads(
|
||||
path.read_text(encoding="utf-8"), object_pairs_hook=_reject_duplicate_keys
|
||||
)
|
||||
if not isinstance(checkpoint, dict) or checkpoint.get("run_id") != run_id:
|
||||
raise ValueError("run checkpoint identity is invalid")
|
||||
pinned_pack = checkpoint.get("pack")
|
||||
if not isinstance(pinned_pack, dict) or (
|
||||
pinned_pack.get("snapshot_digest") != manifest["snapshot"]["digest"]
|
||||
or pinned_pack.get("modules") != _module_pins(manifest)
|
||||
):
|
||||
raise ValueError("pack changed since this run; revalidate before resuming")
|
||||
_safe_payload(checkpoint)
|
||||
_validate_checkpoint(checkpoint)
|
||||
return checkpoint
|
||||
|
||||
|
||||
def update_checkpoint(workspace: Path, run_id: str, patch: dict[str, Any]) -> dict[str, Any]:
|
||||
checkpoint = load_checkpoint(workspace, run_id)
|
||||
if not patch or not set(patch).issubset(_MUTABLE):
|
||||
raise ValueError("checkpoint update contains unsupported fields")
|
||||
_safe_payload(patch)
|
||||
updated = {**checkpoint, **patch, "updated_at": datetime.now(UTC).isoformat()}
|
||||
_validate_checkpoint(updated)
|
||||
_write_atomic(_checkpoint_path(workspace, run_id), updated)
|
||||
return updated
|
||||
|
||||
|
||||
def _validate_checkpoint(checkpoint: dict[str, Any]) -> None:
|
||||
required = {
|
||||
"checkpoint_version",
|
||||
"run_id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"pack",
|
||||
"objective",
|
||||
"scope",
|
||||
"lens",
|
||||
"stage",
|
||||
"sources",
|
||||
"coverage",
|
||||
"budgets",
|
||||
"runtime",
|
||||
"pending_operations",
|
||||
"proposals",
|
||||
"outputs",
|
||||
"last_failure",
|
||||
}
|
||||
if set(checkpoint) != required or checkpoint.get("checkpoint_version") != "0.1.0":
|
||||
raise ValueError("checkpoint fields or version are invalid")
|
||||
if not isinstance(checkpoint["objective"], str) or not checkpoint["objective"].strip():
|
||||
raise ValueError("checkpoint objective is required")
|
||||
if not isinstance(checkpoint["lens"], str) or not checkpoint["lens"].strip():
|
||||
raise ValueError("checkpoint lens is required")
|
||||
scope = checkpoint["scope"]
|
||||
if (
|
||||
not isinstance(scope, dict)
|
||||
or set(scope) != {"projects", "include_shared"}
|
||||
or not isinstance(scope["projects"], list)
|
||||
or not scope["projects"]
|
||||
or len(scope["projects"]) > 100
|
||||
or any(
|
||||
not isinstance(project, str)
|
||||
or not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9._:-]{0,127}", project)
|
||||
for project in scope["projects"]
|
||||
)
|
||||
or len(set(scope["projects"])) != len(scope["projects"])
|
||||
or type(scope["include_shared"]) is not bool
|
||||
):
|
||||
raise ValueError("checkpoint scope is invalid")
|
||||
for field in ("sources", "pending_operations", "proposals", "outputs"):
|
||||
if not isinstance(checkpoint[field], list) or len(checkpoint[field]) > 10_000:
|
||||
raise ValueError(f"{field} must be a bounded list")
|
||||
for source in checkpoint["sources"]:
|
||||
if (
|
||||
not isinstance(source, dict)
|
||||
or not isinstance(source.get("source_revision_id"), str)
|
||||
or not isinstance(source.get("status"), str)
|
||||
):
|
||||
raise ValueError("source records require a revision ID and capture status")
|
||||
extraction_id = source.get("extraction_id")
|
||||
if extraction_id is not None and not _SHA256.fullmatch(str(extraction_id)):
|
||||
raise ValueError("source extraction references must use a SHA-256 ID")
|
||||
if not isinstance(checkpoint["coverage"], dict) or set(checkpoint["coverage"]) != {
|
||||
"selected",
|
||||
"included",
|
||||
"excluded",
|
||||
"skipped",
|
||||
}:
|
||||
raise ValueError("coverage must record selected, included, excluded and skipped items")
|
||||
for key, items in checkpoint["coverage"].items():
|
||||
if not isinstance(items, list) or len(items) > 10_000:
|
||||
raise ValueError("coverage categories must be bounded lists")
|
||||
if key in {"selected", "included"} and any(not isinstance(item, str) for item in items):
|
||||
raise ValueError("selected and included coverage entries must be strings")
|
||||
if key in {"excluded", "skipped"} and any(
|
||||
not isinstance(item, dict)
|
||||
or not isinstance(item.get("item"), str)
|
||||
or not isinstance(item.get("reason"), str)
|
||||
or not item["reason"].strip()
|
||||
for item in items
|
||||
):
|
||||
raise ValueError("excluded and skipped coverage items require a reason")
|
||||
if not isinstance(checkpoint["budgets"], dict) or len(checkpoint["budgets"]) > 100:
|
||||
raise ValueError("budgets must be a bounded object")
|
||||
if any(type(value) is not int or value < 0 for value in checkpoint["budgets"].values()):
|
||||
raise ValueError("budget values must be non-negative integers")
|
||||
if (
|
||||
not isinstance(checkpoint["runtime"], dict)
|
||||
or set(checkpoint["runtime"]) != {"host", "model"}
|
||||
or any(
|
||||
value is not None and not isinstance(value, str)
|
||||
for value in checkpoint["runtime"].values()
|
||||
)
|
||||
):
|
||||
raise ValueError(
|
||||
"runtime metadata must identify the host and model or explicitly omit them"
|
||||
)
|
||||
if not isinstance(checkpoint["stage"], str) or not checkpoint["stage"]:
|
||||
raise ValueError("stage must be explicit")
|
||||
for operation in checkpoint["pending_operations"]:
|
||||
if (
|
||||
not isinstance(operation, dict)
|
||||
or not isinstance(operation.get("operation_id"), str)
|
||||
or not isinstance(operation.get("tool_name"), str)
|
||||
or not _SHA256.fullmatch(str(operation.get("input_sha256", "")))
|
||||
or not isinstance(operation.get("status"), str)
|
||||
or operation["status"] not in {"pending", "uncertain", "complete", "failed"}
|
||||
):
|
||||
raise ValueError("pending operation identity, input hash and status are required")
|
||||
for proposal in checkpoint["proposals"]:
|
||||
if (
|
||||
not isinstance(proposal, dict)
|
||||
or not isinstance(proposal.get("proposal_id"), str)
|
||||
or type(proposal.get("revision")) is not int
|
||||
or proposal["revision"] < 1
|
||||
or not isinstance(proposal.get("status"), str)
|
||||
or proposal["status"]
|
||||
not in {
|
||||
"staged",
|
||||
"evaluated",
|
||||
"eligible",
|
||||
"needs-review",
|
||||
"invalid",
|
||||
"conflict",
|
||||
"publishing",
|
||||
"accepted",
|
||||
"rejected",
|
||||
"withdrawn",
|
||||
"uncertain",
|
||||
}
|
||||
or (
|
||||
proposal.get("status") == "accepted"
|
||||
and not isinstance(proposal.get("receipt"), dict)
|
||||
)
|
||||
):
|
||||
raise ValueError(
|
||||
"proposal records require an ID, revision, status and accepted receipt"
|
||||
)
|
||||
if proposal["status"] == "accepted":
|
||||
receipt = proposal["receipt"]
|
||||
if (
|
||||
receipt.get("proposal_id") != proposal["proposal_id"]
|
||||
or receipt.get("revision") != proposal["revision"]
|
||||
or receipt.get("state") != "accepted"
|
||||
or not re.fullmatch(
|
||||
r"(?:[a-f0-9]{40}|[a-f0-9]{64})", str(receipt.get("commit_id", ""))
|
||||
)
|
||||
):
|
||||
raise ValueError("accepted proposal receipt does not match its revision")
|
||||
for output in checkpoint["outputs"]:
|
||||
if not isinstance(output, dict) or not _SHA256.fullmatch(str(output.get("sha256", ""))):
|
||||
raise ValueError("output records require a SHA-256")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
subparsers = parser.add_subparsers(dest="command", required=True)
|
||||
init = subparsers.add_parser("init")
|
||||
init.add_argument("--workspace", type=Path, default=Path.cwd())
|
||||
init.add_argument("--run-id", required=True)
|
||||
init.add_argument("--objective", required=True)
|
||||
init.add_argument("--projects", required=True)
|
||||
init.add_argument("--include-shared", action="store_true")
|
||||
init.add_argument("--lens", required=True)
|
||||
init.add_argument("--budgets-json", default="{}")
|
||||
update = subparsers.add_parser("update")
|
||||
update.add_argument("--workspace", type=Path, default=Path.cwd())
|
||||
update.add_argument("--run-id", required=True)
|
||||
show = subparsers.add_parser("show")
|
||||
show.add_argument("--workspace", type=Path, default=Path.cwd())
|
||||
show.add_argument("--run-id", required=True)
|
||||
arguments = parser.parse_args()
|
||||
if arguments.command == "init":
|
||||
checkpoint = create_checkpoint(
|
||||
arguments.workspace,
|
||||
run_id=arguments.run_id,
|
||||
objective=arguments.objective,
|
||||
projects=[item for item in arguments.projects.split(",") if item],
|
||||
include_shared=arguments.include_shared,
|
||||
lens=arguments.lens,
|
||||
budgets=json.loads(arguments.budgets_json),
|
||||
)
|
||||
elif arguments.command == "show":
|
||||
checkpoint = load_checkpoint(arguments.workspace, arguments.run_id)
|
||||
else:
|
||||
patch_text = sys.stdin.read(64_001)
|
||||
if len(patch_text.encode("utf-8")) > 64_000:
|
||||
raise SystemExit("checkpoint update exceeds 64 KiB")
|
||||
patch = json.loads(patch_text, object_pairs_hook=_reject_duplicate_keys)
|
||||
if not isinstance(patch, dict):
|
||||
raise SystemExit("checkpoint update must be one JSON object on stdin")
|
||||
checkpoint = update_checkpoint(arguments.workspace, arguments.run_id, patch)
|
||||
print(json.dumps(checkpoint, ensure_ascii=False, sort_keys=True))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -8,6 +8,6 @@ Read the pack's [evidence](../../protocols/EVIDENCE.md), [scope](../../protocols
|
||||
|
||||
Identify the requested audit and bound its collection/budget. For a report-only request, do not submit proposals. Inspect candidate nodes, source revisions, dates and relationships before recommending a change. Similarity nominates candidates; it does not prove duplicates. Preserve incompatible claims and explain the conditions under which they differ.
|
||||
|
||||
For requested corrections, submit typed stale flags, supersession or relationship proposals supported by inspected records. Merges, promotion and protected changes follow their separate policy/owner gates. Never silently delete a node, rewrite canonical files or treat read scope as change authority.
|
||||
For requested corrections, submit typed stale flags, supersession or relationship proposals supported by inspected records. Record material assumptions and limitations as distinct evidence-backed claim groups on the relevant node; do not infer them from an approach summary or relationship condition. Merges, promotion and protected changes follow their separate policy/owner gates. Never silently delete a node, rewrite canonical files or treat read scope as change authority.
|
||||
|
||||
Report examined coverage, findings, proposed/accepted changes and unresolved exceptions. Unsupported curation tools remain unavailable; do not substitute raw SQL or filesystem edits.
|
||||
Report examined coverage, findings, proposed/accepted changes and unresolved exceptions. The service exposes typed `flag_stale`, `add_edge` and `upsert_node` proposals, but no duplicate merge, unlink or promotion operation. Keep those unavailable cases explicit; do not substitute raw SQL or filesystem edits.
|
||||
@@ -6,7 +6,7 @@ description: Process explicitly selected sources for a GEWU project into evidenc
|
||||
|
||||
Read the pack's [evidence](../../protocols/EVIDENCE.md), [scope](../../protocols/SCOPE.md) and [contribution](../../protocols/CONTRIBUTIONS.md) protocols, then use the [ingestion pipeline](../../pipelines/ingest.md).
|
||||
|
||||
Inputs are the selected source(s), explicit project and the user's research objective. Inspect existing source identity/revisions before creating duplicates. Retrieve the project lens and supported tool/schema contract; use the connector for local byte transfer. If the service is unavailable, report the blocked stage and only prepare an unaccepted local draft when that work was requested.
|
||||
Inputs are the selected source(s), explicit project and the user's research objective. Use `get_project_context` for the selected project’s authoritative north star, key questions, watch list and taxonomy extensions. The tool requires project read permission and does not expose the autonomy policy. Verify the supported tool/schema contract. Use the connector for local byte transfer; it returns a typed source metadata candidate without exposing the selected path or bytes. Selected `.vtt` and `.srt` files produce timestamped transcript cues; cite exact cue start/end times and the quote span. A declared NotebookLM export label is metadata only and is not export verification. For text explicitly pasted by the user, use `source_capture_text` with a stable capture ID and source key; it accepts UTF-8 plain text or Markdown up to 1 MB, archives and extracts it, and returns a typed candidate marked `capture_method=pasted-text`. Retry uncertain calls with the same capture ID and identical inputs; changed input under that ID conflicts. It does not register the candidate. `source_capture_url` fetches only operator-allowlisted public hosts and stages supported text, Markdown, HTML or PDF bytes; it also returns a source metadata candidate but does not register it. Submit candidates with the normal typed proposal flow, and use `capture-failed` candidates only as bookmarks, never as factual evidence. URL source IDs follow the sanitized URL; local source IDs follow the connector's configured file ID; pasted-text source IDs are derived from the supplied stable key and revision IDs include the content digest. PDF extraction currently requires Linux bubblewrap, Poppler and prlimit. Unsupported formats and unavailable parsers must be reported without inventing an extraction. If the service is unavailable, report the blocked stage and only prepare an unaccepted local draft when that work was requested.
|
||||
|
||||
Extract useful atomic assertions, problems, techniques or cases with their conditions. Preserve the service's exact source/extraction/location bindings. Map each factual field to evidence; assess semantic support separately. Record triage exclusions and skipped/deferred sections. Optimize for useful coverage rather than maximum note count.
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ description: Search and explain accepted GEWU knowledge within an explicit proje
|
||||
|
||||
Read the pack's [evidence](../../protocols/EVIDENCE.md) and [scope](../../protocols/SCOPE.md) protocols, then use the [query pipeline](../../pipelines/query.md). Consult [contributions](../../protocols/CONTRIBUTIONS.md) for connection/availability rules; this skill performs no knowledge writes.
|
||||
|
||||
Establish the question, scope and response budget. Use supported search/read tools and inspect the sources behind the strongest results. Preserve complete citation groups and required warnings. Widen scope only through an explicit request consistent with the user's task.
|
||||
Establish the question, scope and response budget. Use supported search/read tools and inspect the sources behind the strongest results. Use `list_sources` to browse the archived source catalog within that same authorized scope. Narrow searches with node-type or past-freshness filters when they match the question; filters do not widen authorization scope. Preserve complete citation groups and required warnings. Widen scope only through an explicit request consistent with the user's task.
|
||||
|
||||
Separate accepted relationships from suggestions and distinguish disagreement from missing evidence. Answer with relevant conditions, as-of dates and source references near the claim. If retrieval is degraded, index-lagged or insufficient, state the observed limitation. Do not present a local draft, model recollection or unavailable service as an accepted GEWU result.
|
||||
|
||||
|
||||
Reference in new issue
Block a user