-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpackage.json
More file actions
141 lines (141 loc) · 5.28 KB
/
package.json
File metadata and controls
141 lines (141 loc) · 5.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
{
"name": "token-proctor",
"displayName": "Token Proctor",
"description": "Prompt validation, model routing, and token/turn cost projection for GitHub Copilot and other token-priced LLM plans.",
"version": "0.4.2",
"icon": "media/icon.png",
"publisher": "token-proctor",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/navintkr/token-proctor.git"
},
"homepage": "https://github.com/navintkr/token-proctor#readme",
"bugs": {
"url": "https://github.com/navintkr/token-proctor/issues"
},
"engines": {
"vscode": "^1.95.0",
"node": ">=20"
},
"categories": [
"AI",
"Chat",
"Other"
],
"keywords": [
"copilot",
"model routing",
"prompt validation",
"cost",
"token",
"llm",
"agent"
],
"activationEvents": [],
"main": "./out/extension.js",
"bin": {
"token-proctor-mcp": "./out/mcp-server.js"
},
"contributes": {
"chatParticipants": [
{
"id": "token-proctor.proctor",
"name": "proctor",
"fullName": "Token Proctor",
"description": "Validate prompt, route to best model, project turns and token cost.",
"isSticky": true,
"commands": [
{ "name": "route", "description": "Pick the best model for this prompt" },
{ "name": "validate", "description": "Score prompt completeness; ask follow-ups if weak" },
{ "name": "cost", "description": "Estimate tokens, turns and $ for this prompt" },
{ "name": "explain", "description": "Explain the routing/validation decision" },
{ "name": "confirm", "description": "Confirm the previous recommendation and forward to the chosen model" },
{ "name": "cancel", "description": "Cancel a pending confirmation — no model will be called" }
]
}
],
"commands": [
{
"command": "token-proctor.diagnoseModelCommands",
"title": "Token Proctor: Diagnose Model Commands",
"category": "Token Proctor"
}
],
"configuration": {
"title": "Token Proctor",
"properties": {
"tokenProctor.completenessThreshold": {
"type": "number",
"default": 60,
"minimum": 0,
"maximum": 100,
"description": "Below this score, Token Proctor asks follow-up questions instead of invoking a model."
},
"tokenProctor.autoForward": {
"type": "boolean",
"default": true,
"description": "After routing, forward the prompt to the chosen model and stream the answer."
},
"tokenProctor.requireConfirmation": {
"type": "boolean",
"default": true,
"description": "Show the recommended model and wait for user confirmation (Accept & hand off button or /confirm) before calling the model."
},
"tokenProctor.handoffToCopilot": {
"type": "boolean",
"default": true,
"description": "When confirmed, hand the prompt off to the GitHub Copilot agent (which has file-edit tools) instead of streaming a plain text answer from vscode.lm. User should pick the recommended model in the chat model picker first."
},
"tokenProctor.handoffParticipant": {
"type": "string",
"default": "github.copilot",
"description": "Chat participant id to hand off to when handoffToCopilot is enabled. Defaults to the GitHub Copilot agent."
},
"tokenProctor.preferCheap": {
"type": "boolean",
"default": false,
"description": "Bias routing toward the cheapest model that clears the quality bar."
},
"tokenProctor.optimizeFor": {
"type": "string",
"enum": ["tokens", "turns", "balanced"],
"default": "tokens",
"markdownDescription": "How to weigh cost axes in routing:\n- `tokens` — **default** — minimize $/M token price (classic); best for one-shot tasks.\n- `turns` — minimize premium-multiplier × turns; best when agent loops run many turns (e.g. `code_large`, `agentic`).\n- `balanced` — weighted compromise between the two."
},
"tokenProctor.exactTokenCounts": {
"type": "boolean",
"default": true,
"description": "Use js-tiktoken for exact token counts. Falls back to a chars/4 heuristic if unavailable."
},
"tokenProctor.llmJudge.enabled": {
"type": "boolean",
"default": true,
"description": "When rule-based classifier confidence is low, escalate to an LLM judge that auto-picks the cheapest available model via vscode.lm."
},
"tokenProctor.llmJudge.confidenceThreshold": {
"type": "number",
"default": 0.85,
"minimum": 0,
"maximum": 1,
"description": "Rule-based confidence below this triggers the LLM-judge. Default 0.85 = judge is consulted on most prompts. 0 = always consult, 1 = never."
}
}
}
},
"scripts": {
"compile": "tsc -p .",
"watch": "tsc -w -p .",
"vscode:prepublish": "npm run compile",
"mcp": "node ./out/mcp-server.js"
},
"devDependencies": {
"@types/node": "^20.11.0",
"@types/vscode": "^1.95.0",
"typescript": "^5.4.0"
},
"dependencies": {
"@modelcontextprotocol/sdk": "^1.0.4",
"js-tiktoken": "^1.0.21"
}
}