feat: integrate value-based Workspace Profiles
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
[
|
||||
{
|
||||
"name": "canonical_compaction_tokens",
|
||||
"profile": {
|
||||
"compaction": {
|
||||
"kind": "tokens",
|
||||
"prune_enabled": false,
|
||||
"prune_protected_tokens": 3000,
|
||||
"prune_min_savings": 1000,
|
||||
"threshold": 80000,
|
||||
"request_threshold": 90000,
|
||||
"retained_tokens": 12000,
|
||||
"overview_target_tokens": 1000,
|
||||
"overview_warning_tokens": 2000,
|
||||
"overview_deadline_tokens": 3000,
|
||||
"worker_context_max_tokens": 20000,
|
||||
"finish_warning_remaining_tokens": 1000,
|
||||
"final_reserve_tokens": 2000,
|
||||
"worker_max_turns": 5,
|
||||
"summary_target_tokens": 1000,
|
||||
"summary_max_tokens": 2000,
|
||||
"auto_read_budget_tokens": 500,
|
||||
"result_context_max_tokens": 4000,
|
||||
"model": { "ref": "codex-oauth/gpt-5.6-sol" }
|
||||
}
|
||||
},
|
||||
"manifest_expect": {
|
||||
"/compaction/prune_enabled": false,
|
||||
"/compaction/prune_protected_tokens": 3000,
|
||||
"/compaction/prune_min_savings": 1000,
|
||||
"/compaction/threshold": 80000,
|
||||
"/compaction/request_threshold": 90000,
|
||||
"/compaction/retained_tokens": 12000,
|
||||
"/compaction/overview_target_tokens": 1000,
|
||||
"/compaction/overview_warning_tokens": 2000,
|
||||
"/compaction/overview_deadline_tokens": 3000,
|
||||
"/compaction/worker_context_max_tokens": 20000,
|
||||
"/compaction/finish_warning_remaining_tokens": 1000,
|
||||
"/compaction/final_reserve_tokens": 2000,
|
||||
"/compaction/worker_max_turns": 5,
|
||||
"/compaction/summary_target_tokens": 1000,
|
||||
"/compaction/summary_max_tokens": 2000,
|
||||
"/compaction/auto_read_budget_tokens": 500,
|
||||
"/compaction/result_context_max_tokens": 4000,
|
||||
"/compaction/model/ref": "codex-oauth/gpt-5.6-sol"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "compaction_token_aliases_without_kind",
|
||||
"profile": {
|
||||
"compaction": {
|
||||
"compact_threshold": 80000,
|
||||
"compact_request_threshold": 90000,
|
||||
"compact_retained_tokens": 12000,
|
||||
"compact_worker_max_input_tokens": 20000,
|
||||
"compact_worker_max_turns": 5,
|
||||
"compact_auto_read_budget": 500
|
||||
}
|
||||
},
|
||||
"manifest_expect": {
|
||||
"/compaction/threshold": 80000,
|
||||
"/compaction/request_threshold": 90000,
|
||||
"/compaction/retained_tokens": 12000,
|
||||
"/compaction/worker_context_max_tokens": 20000,
|
||||
"/compaction/worker_max_turns": 5,
|
||||
"/compaction/auto_read_budget_tokens": 500
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "compaction_ratio_aliases",
|
||||
"profile": {
|
||||
"model": { "context_window": 100000 },
|
||||
"compaction": {
|
||||
"kind": "ratio",
|
||||
"threshold": 0.9,
|
||||
"request": 0.8,
|
||||
"worker": 0.2
|
||||
}
|
||||
},
|
||||
"manifest_expect": {
|
||||
"/compaction/threshold": 90000,
|
||||
"/compaction/request_threshold": 80000,
|
||||
"/compaction/worker_context_max_tokens": 20000
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "numeric_extraction_reasoning",
|
||||
"profile": {
|
||||
"engine": { "reasoning": -1 },
|
||||
"feature": {
|
||||
"memory": { "extraction": { "enabled": true, "reasoning": 4096 } },
|
||||
"subjektiv": { "extraction": { "enabled": true, "reasoning": 4096 } }
|
||||
}
|
||||
},
|
||||
"manifest_expect": {
|
||||
"/engine/reasoning": -1,
|
||||
"/feature/memory/profile/extraction/reasoning": 4096,
|
||||
"/feature/subjektiv/profile/extraction/reasoning": 4096
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "string_extraction_reasoning",
|
||||
"profile": {
|
||||
"feature": {
|
||||
"memory": { "extraction": { "enabled": true, "reasoning": "high" } },
|
||||
"subjektiv": {
|
||||
"extraction": { "enabled": true, "reasoning": "medium" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"manifest_expect": {
|
||||
"/feature/memory/profile/extraction/reasoning": "high",
|
||||
"/feature/subjektiv/profile/extraction/reasoning": "medium"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,88 @@
|
||||
# Editor-only shape of partial Profile values, used for completion and constraint
|
||||
# analysis without materialization. Never used as defaults: omitted fields remain
|
||||
# omitted until Manifest resolution.
|
||||
let
|
||||
Flag = { enabled = Bool; };
|
||||
Model = {
|
||||
ref = String; scheme = String; base_url = String; model_id = String;
|
||||
auth = { kind = String; ref = String; file = String; };
|
||||
capability = Unknown; context_window = Int; max_context_window = Int;
|
||||
};
|
||||
Extraction = {
|
||||
# ReasoningControl accepts string effort or signed integer budget.
|
||||
enabled = Bool; model = Model; reasoning = Unknown;
|
||||
threshold = Int; worker_max_turns = Int;
|
||||
};
|
||||
# Profile scope accepts either a string intent or a table. Decodal 0.4 has
|
||||
# no union range; keep this field opaque to constraint analysis and expose
|
||||
# the table only as a completion hint. This shape is never materialized;
|
||||
# actual scope forms, intent values and table fields are checked on save.
|
||||
Scope = Unknown default { intent = String; deny_write = [...String]; symlink_policy = String; };
|
||||
Profile = {
|
||||
slug = String;
|
||||
description = String;
|
||||
worker = { mode = String; };
|
||||
model = Model;
|
||||
engine = {
|
||||
instruction = String; language = String; reasoning = Unknown;
|
||||
max_tokens = Int; max_turns = Int; temperature = Unknown; top_p = Unknown;
|
||||
top_k = Int; stop_sequences = [...String]; tool_call_dispatch = String;
|
||||
tool_output = { default_max_bytes = Int; per_tool = { ...Int }; };
|
||||
file_upload = { max_bytes = Int; };
|
||||
};
|
||||
scope = Scope;
|
||||
delegation_scope = Scope;
|
||||
session = {
|
||||
record_event_trace = Bool;
|
||||
};
|
||||
permissions = { default_action = String; rule = [...{ tool = String; pattern = String; action = String; }]; };
|
||||
feature = {
|
||||
task = Flag; web = Flag; image = Flag; sub_worker = Flag; flow = Flag;
|
||||
worker = { enabled = Bool; direct_spawn = Bool; };
|
||||
workspace_worker_discovery = Flag; objective = Flag; manage_workdir = Flag;
|
||||
workdir_catalog = Flag; workspace_config = Flag; orchestration = Flag;
|
||||
ticket = { enabled = Bool; authoring = Bool; thread = Bool; intake = Bool; workflow = Bool; };
|
||||
merge_request = { show = Bool; open = Bool; review = Bool; readiness_check = Bool; complete = Bool; };
|
||||
memory = {
|
||||
enabled = Bool; staging_tools = Bool;
|
||||
resident = { inject_summary = Bool; };
|
||||
extraction = Extraction;
|
||||
consolidation = { request_enabled = Bool; };
|
||||
};
|
||||
subjektiv = { enabled = Bool; consolidation_tools = Bool; extraction = Extraction; };
|
||||
};
|
||||
mcp = { stdio_server = [...{
|
||||
name = String; command = String; args = [...String];
|
||||
cwd = { kind = String; path = String; };
|
||||
env = { inherit = [...String]; set = { ...Unknown }; };
|
||||
}]; };
|
||||
compaction = {
|
||||
# Token settings (CompactionConfigPartial) and ratio helper fields.
|
||||
# Threshold/context values accept integer tokens or numeric ratios.
|
||||
kind = String; threshold = Unknown; request_threshold = Unknown;
|
||||
worker_context_max_tokens = Unknown; request = Unknown; worker = Unknown;
|
||||
prune_enabled = Bool; prune_protected_tokens = Int; prune_min_savings = Int;
|
||||
retained_tokens = Int;
|
||||
overview_target_tokens = Int; overview_warning_tokens = Int; overview_deadline_tokens = Int;
|
||||
finish_warning_remaining_tokens = Int; final_reserve_tokens = Int;
|
||||
worker_max_turns = Int; summary_target_tokens = Int; summary_max_tokens = Int;
|
||||
auto_read_budget_tokens = Int; result_context_max_tokens = Int; model = Model;
|
||||
# Supported token aliases remain authorable without rewriting recipes.
|
||||
compact_threshold = Int; compact_request_threshold = Int; compact_retained_tokens = Int;
|
||||
compact_worker_max_input_tokens = Int; compact_worker_max_turns = Int; compact_auto_read_budget = Int;
|
||||
};
|
||||
web = {
|
||||
enabled = Bool; allow_private_addresses = Bool;
|
||||
search = { enabled = Bool; provider = String; api_key_secret = String; timeout_secs = Int; base_url = String; country = String; search_lang = String; ui_lang = String; safesearch = String; };
|
||||
fetch = { enabled = Bool; timeout_secs = Int; redirect_limit = Int; max_response_bytes = Int; max_output_bytes = Int; allow_private_addresses = Bool; };
|
||||
};
|
||||
skills = { directories = [...String]; };
|
||||
};
|
||||
in {
|
||||
profile = {
|
||||
default_profile = String;
|
||||
entries = [...{
|
||||
selector = String; profile = Profile; label = String; description = String;
|
||||
}];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
profile = {
|
||||
default_profile = String default "builtin:companion";
|
||||
entries = [...{
|
||||
selector = String;
|
||||
profile = { ...Unknown };
|
||||
label = String default "";
|
||||
description = String default "";
|
||||
}] default [];
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user