bantamkit 0.27.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bantamkit/__init__.py +32 -0
- bantamkit/agent.py +458 -0
- bantamkit/assets/contracts/default.yaml +90 -0
- bantamkit/assets/evals/devteam/manifest.yaml +351 -0
- bantamkit/assets/evals/devteam/repo/HISTORY.md +18 -0
- bantamkit/assets/evals/devteam/repo/README.md +12 -0
- bantamkit/assets/evals/devteam/repo/docs/architecture.md +17 -0
- bantamkit/assets/evals/devteam/repo/docs/runbook.md +10 -0
- bantamkit/assets/evals/devteam/repo/issues/142-settlement-timeout.md +23 -0
- bantamkit/assets/evals/devteam/repo/patches/0009-retry-budget.patch +38 -0
- bantamkit/assets/evals/devteam/repo/src/ledger/__init__.py +3 -0
- bantamkit/assets/evals/devteam/repo/src/ledger/config.py +35 -0
- bantamkit/assets/evals/devteam/repo/src/ledger/errors.py +13 -0
- bantamkit/assets/evals/devteam/repo/src/ledger/posting.py +12 -0
- bantamkit/assets/evals/devteam/repo/src/ledger/registry.py +7 -0
- bantamkit/assets/evals/devteam/repo/src/ledger/report.py +9 -0
- bantamkit/assets/evals/devteam/repo/src/ledger/retry.py +17 -0
- bantamkit/assets/evals/devteam/repo/src/ledger/settle.py +16 -0
- bantamkit/assets/evals/devteam/repo/src/ledger/validate.py +14 -0
- bantamkit/assets/evals/devteam/repo/tests/test_posting.py +13 -0
- bantamkit/assets/evals/devteam/repo/tests/test_settle.py +9 -0
- bantamkit/assets/evals/devteam/tasks/dt-error-contract.yaml +186 -0
- bantamkit/assets/evals/devteam/tasks/dt-handler-map.yaml +183 -0
- bantamkit/assets/evals/devteam/tasks/dt-patch-before-after.yaml +182 -0
- bantamkit/assets/evals/devteam/tasks/dt-retry-attempts.yaml +181 -0
- bantamkit/assets/evals/devteam/tasks/dt-settlement-config.yaml +185 -0
- bantamkit/assets/evals/devteam/tasks/dt-symbol-home.yaml +181 -0
- bantamkit/assets/evals/devteam/tasks/dt-trace-blame.yaml +182 -0
- bantamkit/assets/evals/devteam/tasks/dt-unread-key.yaml +180 -0
- bantamkit/assets/evals/document/tasks/doc-large-in-137.yaml +38 -0
- bantamkit/assets/evals/document/tasks/doc-large-in-359.yaml +44 -0
- bantamkit/assets/evals/document/tasks/doc-large-in-372.yaml +38 -0
- bantamkit/assets/evals/document/tasks/doc-large-out-11764.yaml +37 -0
- bantamkit/assets/evals/document/tasks/doc-large-out-4137.yaml +37 -0
- bantamkit/assets/evals/document/tasks/doc-large-out-8022.yaml +37 -0
- bantamkit/assets/evals/document/tasks/doc-small-137.yaml +37 -0
- bantamkit/assets/evals/document/tasks/doc-small-261.yaml +37 -0
- bantamkit/assets/evals/document/tasks/doc-small-388.yaml +37 -0
- bantamkit/assets/evals/fixtures/.gitkeep +0 -0
- bantamkit/assets/evals/fixtures/catalog.json +6 -0
- bantamkit/assets/evals/perturbations/task-completion.yaml +576 -0
- bantamkit/assets/evals/tasks/.gitkeep +0 -0
- bantamkit/assets/evals/tasks/extract-contact.yaml +14 -0
- bantamkit/assets/evals/tasks/extract-invoice.yaml +14 -0
- bantamkit/assets/evals/tasks/extract-order.yaml +15 -0
- bantamkit/assets/evals/tasks/extract-schedule.yaml +14 -0
- bantamkit/assets/evals/tasks/extract-versions.yaml +17 -0
- bantamkit/assets/evals/tasks/nav-prod-port.yaml +84 -0
- bantamkit/assets/evals/tasks/nav-release-bundle.yaml +87 -0
- bantamkit/assets/evals/tasks/recall-audit-retention.yaml +17 -0
- bantamkit/assets/evals/tasks/recall-cache-ttl.yaml +13 -0
- bantamkit/assets/evals/tasks/recall-db-port.yaml +17 -0
- bantamkit/assets/evals/tasks/recall-deploy.yaml +13 -0
- bantamkit/assets/evals/tasks/recall-env-endpoint.yaml +18 -0
- bantamkit/assets/evals/tasks/recall-oncall-rotation.yaml +21 -0
- bantamkit/assets/evals/tasks/recall-oncall.yaml +13 -0
- bantamkit/assets/evals/tasks/recall-org-quota.yaml +18 -0
- bantamkit/assets/evals/tasks/recall-owner.yaml +13 -0
- bantamkit/assets/evals/tasks/shop-basket-total.yaml +10 -0
- bantamkit/assets/evals/tasks/shop-cheapest.yaml +9 -0
- bantamkit/assets/evals/tasks/shop-compare.yaml +9 -0
- bantamkit/assets/evals/tasks/shop-gadget-value.yaml +9 -0
- bantamkit/assets/evals/tasks/shop-stock-total.yaml +9 -0
- bantamkit/assets/evals/tasks/shop-total.yaml +9 -0
- bantamkit/assets/profiles/default.yaml +31 -0
- bantamkit/assets/profiles/patient.yaml +31 -0
- bantamkit/assets/rubrics/.gitkeep +0 -0
- bantamkit/assets/rubrics/code-quality.yaml +20 -0
- bantamkit/assets/rubrics/grounded-completion.yaml +37 -0
- bantamkit/assets/rubrics/task-completion.yaml +28 -0
- bantamkit/assets/schemas/shiftwork-checkpoint.json +188 -0
- bantamkit/assets/skills/.gitkeep +0 -0
- bantamkit/assets/skills/file-graph.md +7 -0
- bantamkit/assets/skills/memory.md +35 -0
- bantamkit/assets/tools/.gitkeep +0 -0
- bantamkit/assets/tools/bantamkit_read.json +48 -0
- bantamkit/assets/tools/bantamkit_status.json +25 -0
- bantamkit/assets/tools/build_identity.json +17 -0
- bantamkit/assets/tools/document_list.json +12 -0
- bantamkit/assets/tools/document_read.json +31 -0
- bantamkit/assets/tools/file_graph.json +12 -0
- bantamkit/assets/tools/memory_compact.json +31 -0
- bantamkit/assets/tools/memory_recall.json +38 -0
- bantamkit/assets/tools/memory_save.json +61 -0
- bantamkit/assets/tools/shiftwork_clock_in.json +25 -0
- bantamkit/assets/tools/shiftwork_clock_out.json +60 -0
- bantamkit/assets/tools/shiftwork_status.json +25 -0
- bantamkit/assets/tools/skill_audit.json +70 -0
- bantamkit/assets/tools/validate_json.json +31 -0
- bantamkit/assets.py +67 -0
- bantamkit/budget.py +114 -0
- bantamkit/client.py +329 -0
- bantamkit/contract.py +522 -0
- bantamkit/criticreplay.py +3241 -0
- bantamkit/critique.py +301 -0
- bantamkit/docread.py +1744 -0
- bantamkit/evalrun.py +2003 -0
- bantamkit/eventlog.py +282 -0
- bantamkit/filegraph.py +218 -0
- bantamkit/loopguard.py +101 -0
- bantamkit/mcpreport.py +763 -0
- bantamkit/mcpserver.py +1334 -0
- bantamkit/memory/__init__.py +28 -0
- bantamkit/memory/__main__.py +291 -0
- bantamkit/memory/component.py +569 -0
- bantamkit/memory/divergence.py +744 -0
- bantamkit/memory/layers.py +257 -0
- bantamkit/memory/store.py +940 -0
- bantamkit/pdfread.py +1402 -0
- bantamkit/profile.py +46 -0
- bantamkit/shiftwork.py +212 -0
- bantamkit/skillaudit.py +853 -0
- bantamkit/statusline.py +313 -0
- bantamkit/structured.py +125 -0
- bantamkit/textutil.py +30 -0
- bantamkit-0.27.0.dist-info/METADATA +207 -0
- bantamkit-0.27.0.dist-info/RECORD +119 -0
- bantamkit-0.27.0.dist-info/WHEEL +4 -0
- bantamkit-0.27.0.dist-info/entry_points.txt +2 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://bantamkit.dev/schemas/shiftwork-checkpoint.json",
|
|
4
|
+
"title": "Shift-work checkpoint contract v1",
|
|
5
|
+
"$comment": "Encodes checkpoint contract v1 (docs/superpowers/specs/2026-08-10-shift-work-checkpoint-contract-draft.md) plus the two driver-forced deltas: plan.units[].role (model dispatch without reading briefs) and state.external[].until_cmd (machine-checkable wait, replacing prose `until`). Re-planning needs no schema change: a planner unit is just a unit. STRICTNESS POSTURE: `version` is const-pinned to 1 so a reader can refuse unknown majors; every object the driver or a session reads by field name sets additionalProperties:false, and every field the draft's schema block shows on every instance is required (empty arrays are legal, so a fresh checkpoint is cheap to write). The two exceptions are `history[]` and `retro[]` items: those are the free-text annotation space the draft treats as notes, so they allow extra keys (e.g. a session adding `seq` or `tokens`) while still requiring their load-bearing fields. `units[].commits` is optional because the draft only carries it on completed units. `state.external[].status` is a non-empty string rather than an enum: the draft closes the enum for unit status (the driver's SUCCESS test) but never enumerates external status, and inventing values here would reject honest checkpoints. `plan.cursor` must name an existing unit id — JSON Schema cannot express that cross-reference, so the driver checks it structurally and escalates on a dangling cursor. Serialization: checkpoints are YAML for humans per the draft, but the v1 driver reads JSON only (stdlib-only rule), so sessions driven by driver.py write .json; this schema validates the parsed document either way.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["version", "job", "plan", "state", "history", "retro", "handoff"],
|
|
8
|
+
"additionalProperties": false,
|
|
9
|
+
"properties": {
|
|
10
|
+
"version": {
|
|
11
|
+
"const": 1,
|
|
12
|
+
"description": "Contract major version. A reader that does not know this value must refuse the file."
|
|
13
|
+
},
|
|
14
|
+
"job": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"required": ["id", "goal", "done_definition", "constraints"],
|
|
17
|
+
"additionalProperties": false,
|
|
18
|
+
"properties": {
|
|
19
|
+
"id": {"type": "string", "minLength": 1, "description": "Stable job slug."},
|
|
20
|
+
"goal": {"type": "string", "minLength": 1, "description": "One sentence, never edited mid-job."},
|
|
21
|
+
"done_definition": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"minLength": 1,
|
|
24
|
+
"description": "Ground truth that ends the job — a check, not a vibe."
|
|
25
|
+
},
|
|
26
|
+
"constraints": {
|
|
27
|
+
"type": "array",
|
|
28
|
+
"items": {"type": "string", "minLength": 1},
|
|
29
|
+
"description": "Invariants binding every unit, copied verbatim into each session."
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"plan": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"required": ["cursor", "units"],
|
|
36
|
+
"additionalProperties": false,
|
|
37
|
+
"properties": {
|
|
38
|
+
"cursor": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"minLength": 1,
|
|
41
|
+
"description": "THE next unit id. Single pointer — the executor never chooses."
|
|
42
|
+
},
|
|
43
|
+
"units": {
|
|
44
|
+
"type": "array",
|
|
45
|
+
"description": "Flat list, soft cap ~30 units; bigger jobs re-cut via a planner unit.",
|
|
46
|
+
"items": {
|
|
47
|
+
"type": "object",
|
|
48
|
+
"required": ["id", "title", "brief_path", "status", "role", "depends_on", "verify"],
|
|
49
|
+
"additionalProperties": false,
|
|
50
|
+
"properties": {
|
|
51
|
+
"id": {"type": "string", "minLength": 1},
|
|
52
|
+
"title": {"type": "string", "minLength": 1},
|
|
53
|
+
"brief_path": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"minLength": 1,
|
|
56
|
+
"description": "Full brief lives in a file, not in the checkpoint."
|
|
57
|
+
},
|
|
58
|
+
"status": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"enum": ["todo", "in_progress", "done", "blocked", "dropped"]
|
|
61
|
+
},
|
|
62
|
+
"role": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"enum": ["planner", "implementer", "reviewer"],
|
|
65
|
+
"description": "Driver dispatch key: role -> model/allowed tools, set in driver config."
|
|
66
|
+
},
|
|
67
|
+
"depends_on": {"type": "array", "items": {"type": "string", "minLength": 1}},
|
|
68
|
+
"verify": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"minLength": 1,
|
|
71
|
+
"description": "Command proving done-ness. Done-ness is a command, not a claim."
|
|
72
|
+
},
|
|
73
|
+
"commits": {
|
|
74
|
+
"type": "array",
|
|
75
|
+
"items": {"type": "string", "minLength": 1},
|
|
76
|
+
"description": "Present once a unit has landed work."
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"state": {
|
|
84
|
+
"type": "object",
|
|
85
|
+
"required": ["repo", "artifacts", "external"],
|
|
86
|
+
"additionalProperties": false,
|
|
87
|
+
"properties": {
|
|
88
|
+
"repo": {
|
|
89
|
+
"type": "object",
|
|
90
|
+
"required": ["branch", "head_sha", "dirty"],
|
|
91
|
+
"additionalProperties": false,
|
|
92
|
+
"description": "Staleness guard: must match the working tree at clock-in.",
|
|
93
|
+
"properties": {
|
|
94
|
+
"branch": {"type": "string", "minLength": 1},
|
|
95
|
+
"head_sha": {"type": "string", "minLength": 1},
|
|
96
|
+
"dirty": {"type": "boolean"}
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"artifacts": {
|
|
100
|
+
"type": "array",
|
|
101
|
+
"description": "Files the next session MUST read, with roles.",
|
|
102
|
+
"items": {
|
|
103
|
+
"type": "object",
|
|
104
|
+
"required": ["path", "role"],
|
|
105
|
+
"additionalProperties": false,
|
|
106
|
+
"properties": {
|
|
107
|
+
"path": {"type": "string", "minLength": 1},
|
|
108
|
+
"role": {
|
|
109
|
+
"type": "string",
|
|
110
|
+
"minLength": 1,
|
|
111
|
+
"description": "Free-form reading role (spec, ledger, ...) — not the unit role enum."
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"external": {
|
|
117
|
+
"type": "array",
|
|
118
|
+
"description": "World-state git cannot see: detached processes, PRs, CI.",
|
|
119
|
+
"items": {
|
|
120
|
+
"type": "object",
|
|
121
|
+
"required": ["kind", "ref", "status"],
|
|
122
|
+
"additionalProperties": false,
|
|
123
|
+
"properties": {
|
|
124
|
+
"kind": {"type": "string", "enum": ["process", "pr", "ci"]},
|
|
125
|
+
"ref": {"type": "string", "minLength": 1},
|
|
126
|
+
"until_cmd": {
|
|
127
|
+
"type": "string",
|
|
128
|
+
"minLength": 1,
|
|
129
|
+
"description": "Wait condition as a shell command; exit 0 = met. The driver waits on this."
|
|
130
|
+
},
|
|
131
|
+
"status": {"type": "string", "minLength": 1}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"history": {
|
|
138
|
+
"type": "array",
|
|
139
|
+
"description": "Ring buffer, last 5 units only — the full record is git plus the ledger.",
|
|
140
|
+
"maxItems": 5,
|
|
141
|
+
"items": {
|
|
142
|
+
"type": "object",
|
|
143
|
+
"required": ["unit", "outcome"],
|
|
144
|
+
"additionalProperties": true,
|
|
145
|
+
"properties": {
|
|
146
|
+
"unit": {"type": "string", "minLength": 1},
|
|
147
|
+
"outcome": {"type": "string", "minLength": 1},
|
|
148
|
+
"notes": {"type": "string"}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"retro": {
|
|
153
|
+
"type": "array",
|
|
154
|
+
"description": "What this job taught the loop; patches already applied.",
|
|
155
|
+
"items": {
|
|
156
|
+
"type": "object",
|
|
157
|
+
"required": ["trigger", "patch_applied_to"],
|
|
158
|
+
"additionalProperties": true,
|
|
159
|
+
"properties": {
|
|
160
|
+
"trigger": {"type": "string", "minLength": 1},
|
|
161
|
+
"patch_applied_to": {"type": "string", "minLength": 1}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"handoff": {
|
|
166
|
+
"type": "object",
|
|
167
|
+
"required": ["next_action", "open_questions", "do_not"],
|
|
168
|
+
"additionalProperties": false,
|
|
169
|
+
"properties": {
|
|
170
|
+
"next_action": {
|
|
171
|
+
"type": "string",
|
|
172
|
+
"minLength": 1,
|
|
173
|
+
"description": "Imperative first move — zero re-derivation."
|
|
174
|
+
},
|
|
175
|
+
"open_questions": {
|
|
176
|
+
"type": "array",
|
|
177
|
+
"items": {"type": "string", "minLength": 1},
|
|
178
|
+
"description": "The autonomy switch: empty = driver keeps cycling, non-empty = STOP and ask."
|
|
179
|
+
},
|
|
180
|
+
"do_not": {
|
|
181
|
+
"type": "array",
|
|
182
|
+
"items": {"type": "string", "minLength": 1},
|
|
183
|
+
"description": "Negative space — near-mistakes past sessions made."
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# File-access graph
|
|
2
|
+
|
|
3
|
+
A ledger of every file you read is kept for you automatically. Before
|
|
4
|
+
reading any file, call the `file_graph` tool to see what you already read
|
|
5
|
+
and whether it changed. Never re-read a file the ledger lists as
|
|
6
|
+
unchanged — use what you already saw. Re-reads of unchanged files return a
|
|
7
|
+
short `[file-graph]` marker instead of the content.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Memory
|
|
2
|
+
|
|
3
|
+
The runtime enforces format, dedupe, and budgets. You only decide WHEN and WHAT.
|
|
4
|
+
|
|
5
|
+
## Recall first
|
|
6
|
+
|
|
7
|
+
Before a task that resembles past work, call memory_recall with the words a
|
|
8
|
+
past-you would have used. Do this before acting, not after.
|
|
9
|
+
|
|
10
|
+
## When to save
|
|
11
|
+
|
|
12
|
+
- The user corrects you or states a preference → type "feedback"
|
|
13
|
+
- A durable fact about the user → "user", about ongoing work → "project",
|
|
14
|
+
a URL/dashboard/ticket → "reference"
|
|
15
|
+
|
|
16
|
+
## When NOT to save
|
|
17
|
+
|
|
18
|
+
- Anything derivable from the repo, git history, or docs
|
|
19
|
+
- One-off state that only matters in this conversation
|
|
20
|
+
|
|
21
|
+
## Writing the description
|
|
22
|
+
|
|
23
|
+
Write it to match the future recall QUERY, not to summarize the body.
|
|
24
|
+
Ask: "what words will future-me search with?" Put related memory names in links.
|
|
25
|
+
|
|
26
|
+
## On "duplicate" replies
|
|
27
|
+
|
|
28
|
+
If memory_save answers that a similar memory exists, either update it by
|
|
29
|
+
saving under that SAME name, or skip — never rename to force a second copy.
|
|
30
|
+
|
|
31
|
+
## Layers
|
|
32
|
+
|
|
33
|
+
Recall lines may start with `[project]`, `[extra:<name>]`, or `[profile]` —
|
|
34
|
+
where the fact came from. Prefer `[project]` when they conflict; saves always
|
|
35
|
+
go to the project store.
|
|
File without changes
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bantamkit_read",
|
|
3
|
+
"description": "Read a document through a program, never its raw bytes. Call with `path` alone for the manifest: the file's kind, every part (sheet, document, page) with its row count and byte size, and every omission the reader had to make (embedded images, blank rows, unmapped glyphs, unread pages). Then call with `part` (and `offset`) to page rows; row 0 is the header and each page ends with a continuation line naming the next offset or the end of the part. Do not page through a part to find a row: estimate its offset from the row count and jump. Supported kinds: text/markdown/code, docx, xlsx, html, mhtml; pdf on the Python server only. The Node server refuses pdf, doc and rtf until its reader is ported. A refusal names what the reader actually saw in the file rather than the format's error.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"mcp"
|
|
6
|
+
],
|
|
7
|
+
"parameters": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"required": [
|
|
10
|
+
"path"
|
|
11
|
+
],
|
|
12
|
+
"properties": {
|
|
13
|
+
"path": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Path to the document, absolute or relative to the server's working directory"
|
|
16
|
+
},
|
|
17
|
+
"part": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"description": "Part name as the manifest reports it (a sheet name, \"document\", a page); omit to get the manifest"
|
|
20
|
+
},
|
|
21
|
+
"offset": {
|
|
22
|
+
"type": "integer",
|
|
23
|
+
"minimum": 0,
|
|
24
|
+
"maximum": 9007199254740991,
|
|
25
|
+
"description": "Row number of the first row to return; default 0"
|
|
26
|
+
},
|
|
27
|
+
"limit": {
|
|
28
|
+
"type": "integer",
|
|
29
|
+
"minimum": 1,
|
|
30
|
+
"maximum": 200,
|
|
31
|
+
"description": "How many rows; default 50, a 3072-byte page ceiling may return fewer"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"output_schema": {
|
|
36
|
+
"properties": {
|
|
37
|
+
"result": {
|
|
38
|
+
"title": "Result",
|
|
39
|
+
"type": "string"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"required": [
|
|
43
|
+
"result"
|
|
44
|
+
],
|
|
45
|
+
"type": "object",
|
|
46
|
+
"title": "bantamkit_readOutput"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bantamkit_status",
|
|
3
|
+
"description": "Is bantamkit working, and which bantamkit? Returns a short report a person can read in the transcript: `bantamkit Active 🟢` or `bantamkit Degraded 🟠` on the first line, then the version and `build_id` of the code answering, the surfaces it serves, the memory store it is bound to with its index size against its budget, whether the event log is on, and — when degraded — every condition in full with what to do about it. Call it when the user asks whether the server is alive or working, when a bantamkit tool answered oddly and you need to know whether the server is the reason, or when a reply arrived carrying a `bantamkit degraded` footer and you want the rest of it. Every fact is observed at call time from the server's own state; nothing is a heartbeat or a cached verdict. Takes no arguments, writes nothing, and never echoes another call's arguments.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"mcp"
|
|
6
|
+
],
|
|
7
|
+
"parameters": {
|
|
8
|
+
"properties": {},
|
|
9
|
+
"type": "object",
|
|
10
|
+
"title": "bantamkit_statusArguments"
|
|
11
|
+
},
|
|
12
|
+
"output_schema": {
|
|
13
|
+
"properties": {
|
|
14
|
+
"result": {
|
|
15
|
+
"title": "Result",
|
|
16
|
+
"type": "string"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"required": [
|
|
20
|
+
"result"
|
|
21
|
+
],
|
|
22
|
+
"type": "object",
|
|
23
|
+
"title": "bantamkit_statusOutput"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "build_identity",
|
|
3
|
+
"description": "Which bantamkit build is answering you, readable mid-call. Returns `build_id` — a content fingerprint of the running source and the asset pack it loads — plus the paths it was computed over. Call it when one MCP server name may resolve to more than one install: two endpoints reporting the same `version` are the SAME build only if their `build_id` matches, because a version string moves on release bumps and not on builds. Any fact that cannot be derived comes back as {\"unavailable\": \"<reason>\"} and is named in the `unavailable` list — never omitted, never a placeholder that reads as a value. Takes no arguments and reads no state.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"mcp"
|
|
6
|
+
],
|
|
7
|
+
"parameters": {
|
|
8
|
+
"properties": {},
|
|
9
|
+
"type": "object",
|
|
10
|
+
"title": "build_identity_toolArguments"
|
|
11
|
+
},
|
|
12
|
+
"output_schema": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"additionalProperties": true,
|
|
15
|
+
"title": "build_identity_toolDictOutput"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "document_list",
|
|
3
|
+
"description": "Describe every document attached to this task: file name, its parts (a worksheet, or the body of a Word file), how many rows each part has, and that part's header row, first row and last row. Call this FIRST — it is the only place the part names and row numbers document_read accepts are stated.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"agent"
|
|
6
|
+
],
|
|
7
|
+
"parameters": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {}
|
|
10
|
+
},
|
|
11
|
+
"output_schema": null
|
|
12
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "document_read",
|
|
3
|
+
"description": "Read one page of rows from one part of one document. Rows keep their file order and are numbered from 0; row 0 is the header. The document does not fit in one page, so pick the page with offset. Do not page through it to find a row: use the row count and the first and last row that document_list reported to estimate the row's number, jump straight to that offset, and correct from what comes back.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"agent"
|
|
6
|
+
],
|
|
7
|
+
"parameters": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {
|
|
10
|
+
"document": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "File name as document_list reported it; omit if the task has one"
|
|
13
|
+
},
|
|
14
|
+
"part": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "Part name as document_list reported it; omit for the first"
|
|
17
|
+
},
|
|
18
|
+
"offset": {
|
|
19
|
+
"type": "integer",
|
|
20
|
+
"minimum": 0,
|
|
21
|
+
"description": "Row number of the first row to return"
|
|
22
|
+
},
|
|
23
|
+
"limit": {
|
|
24
|
+
"type": "integer",
|
|
25
|
+
"minimum": 1,
|
|
26
|
+
"description": "How many rows; default 50, a byte ceiling may return fewer"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"output_schema": null
|
|
31
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "file_graph",
|
|
3
|
+
"description": "List every file you have already read this session: path, read count, the tool that read it, and whether it changed since. Consult this before re-reading any file.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"agent"
|
|
6
|
+
],
|
|
7
|
+
"parameters": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {}
|
|
10
|
+
},
|
|
11
|
+
"output_schema": null
|
|
12
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "memory_compact",
|
|
3
|
+
"description": "Free room in persistent memory when `memory_save` was refused for budget. Archives the stalest facts of the writable project store until a fact as large as the biggest one kept will fit, and returns what moved — every archived name with its type and description. Nothing is deleted: archived facts leave the index but stay on disk, and the operator can restore any of them by name. Read-only grants and the profile layer are never touched. Call it after a budget refusal, then retry the save; calling it under budget archives nothing and says so.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"agent",
|
|
6
|
+
"mcp"
|
|
7
|
+
],
|
|
8
|
+
"parameters": {
|
|
9
|
+
"type": "object",
|
|
10
|
+
"properties": {
|
|
11
|
+
"reserve": {
|
|
12
|
+
"type": "integer",
|
|
13
|
+
"minimum": 0,
|
|
14
|
+
"description": "Bytes of index headroom to free below the budget. Omit for the default: the size of the largest index line the store holds, capped at half the budget."
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"output_schema": {
|
|
19
|
+
"properties": {
|
|
20
|
+
"result": {
|
|
21
|
+
"title": "Result",
|
|
22
|
+
"type": "string"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"required": [
|
|
26
|
+
"result"
|
|
27
|
+
],
|
|
28
|
+
"type": "object",
|
|
29
|
+
"title": "memory_compactOutput"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "memory_recall",
|
|
3
|
+
"description": "Search persistent memory. Call BEFORE starting a task that resembles past work. Returns at most k matching facts.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"agent",
|
|
6
|
+
"mcp"
|
|
7
|
+
],
|
|
8
|
+
"parameters": {
|
|
9
|
+
"type": "object",
|
|
10
|
+
"required": [
|
|
11
|
+
"query"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"query": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "Words a past-you would have used to describe the fact"
|
|
17
|
+
},
|
|
18
|
+
"k": {
|
|
19
|
+
"type": "integer",
|
|
20
|
+
"minimum": 1,
|
|
21
|
+
"maximum": 5
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"output_schema": {
|
|
26
|
+
"properties": {
|
|
27
|
+
"result": {
|
|
28
|
+
"title": "Result",
|
|
29
|
+
"type": "string"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"required": [
|
|
33
|
+
"result"
|
|
34
|
+
],
|
|
35
|
+
"type": "object",
|
|
36
|
+
"title": "memory_recallOutput"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "memory_save",
|
|
3
|
+
"description": "Save ONE durable fact to persistent memory. Use only for facts needed in a future session; never for things derivable from the repo or one-off state.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"agent",
|
|
6
|
+
"mcp"
|
|
7
|
+
],
|
|
8
|
+
"parameters": {
|
|
9
|
+
"type": "object",
|
|
10
|
+
"required": [
|
|
11
|
+
"type",
|
|
12
|
+
"name",
|
|
13
|
+
"description",
|
|
14
|
+
"body"
|
|
15
|
+
],
|
|
16
|
+
"properties": {
|
|
17
|
+
"type": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"enum": [
|
|
20
|
+
"user",
|
|
21
|
+
"feedback",
|
|
22
|
+
"project",
|
|
23
|
+
"reference"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"name": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"pattern": "^[a-z0-9][a-z0-9-]*$",
|
|
29
|
+
"description": "short-kebab-case slug"
|
|
30
|
+
},
|
|
31
|
+
"description": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "One line written to match the FUTURE recall query, not to summarize the body"
|
|
34
|
+
},
|
|
35
|
+
"body": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"description": "The fact itself, terse"
|
|
38
|
+
},
|
|
39
|
+
"links": {
|
|
40
|
+
"type": "array",
|
|
41
|
+
"items": {
|
|
42
|
+
"type": "string"
|
|
43
|
+
},
|
|
44
|
+
"description": "names of related memories"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"output_schema": {
|
|
49
|
+
"properties": {
|
|
50
|
+
"result": {
|
|
51
|
+
"title": "Result",
|
|
52
|
+
"type": "string"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"required": [
|
|
56
|
+
"result"
|
|
57
|
+
],
|
|
58
|
+
"type": "object",
|
|
59
|
+
"title": "memory_saveOutput"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "shiftwork_clock_in",
|
|
3
|
+
"description": "Shift-work clock-in: schema-validate the checkpoint file and return the brief for the unit at plan.cursor — {unit, role, invariants, handoff, do_not, files} — to hand to the spawned agent verbatim. Structured refusals, never exceptions: result=escalate when handoff.open_questions is non-empty, result=success when every unit is done or dropped, result=error when the checkpoint fails validation.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"mcp"
|
|
6
|
+
],
|
|
7
|
+
"parameters": {
|
|
8
|
+
"properties": {
|
|
9
|
+
"checkpoint": {
|
|
10
|
+
"title": "Checkpoint",
|
|
11
|
+
"type": "string"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"required": [
|
|
15
|
+
"checkpoint"
|
|
16
|
+
],
|
|
17
|
+
"type": "object",
|
|
18
|
+
"title": "shiftwork_clock_inArguments"
|
|
19
|
+
},
|
|
20
|
+
"output_schema": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"additionalProperties": true,
|
|
23
|
+
"title": "shiftwork_clock_inDictOutput"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "shiftwork_clock_out",
|
|
3
|
+
"description": "Shift-work clock-out: record a finished unit — set its status, advance plan.cursor, merge handoff_patch, push history_entry onto the 5-entry ring — validating the whole mutated document against the checkpoint schema BEFORE an atomic write (a failure writes nothing and returns result=error). Every success appends one accounting line (unit, role, status, ts, plus your accounting fields, e.g. tokens/duration/model) to <checkpoint>.log.jsonl.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"mcp"
|
|
6
|
+
],
|
|
7
|
+
"parameters": {
|
|
8
|
+
"properties": {
|
|
9
|
+
"checkpoint": {
|
|
10
|
+
"title": "Checkpoint",
|
|
11
|
+
"type": "string"
|
|
12
|
+
},
|
|
13
|
+
"unit_id": {
|
|
14
|
+
"title": "Unit Id",
|
|
15
|
+
"type": "string"
|
|
16
|
+
},
|
|
17
|
+
"status": {
|
|
18
|
+
"title": "Status",
|
|
19
|
+
"type": "string"
|
|
20
|
+
},
|
|
21
|
+
"handoff_patch": {
|
|
22
|
+
"additionalProperties": true,
|
|
23
|
+
"title": "Handoff Patch",
|
|
24
|
+
"type": "object"
|
|
25
|
+
},
|
|
26
|
+
"history_entry": {
|
|
27
|
+
"additionalProperties": true,
|
|
28
|
+
"title": "History Entry",
|
|
29
|
+
"type": "object"
|
|
30
|
+
},
|
|
31
|
+
"accounting": {
|
|
32
|
+
"anyOf": [
|
|
33
|
+
{
|
|
34
|
+
"additionalProperties": true,
|
|
35
|
+
"type": "object"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"type": "null"
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"default": null,
|
|
42
|
+
"title": "Accounting"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"required": [
|
|
46
|
+
"checkpoint",
|
|
47
|
+
"unit_id",
|
|
48
|
+
"status",
|
|
49
|
+
"handoff_patch",
|
|
50
|
+
"history_entry"
|
|
51
|
+
],
|
|
52
|
+
"type": "object",
|
|
53
|
+
"title": "shiftwork_clock_outArguments"
|
|
54
|
+
},
|
|
55
|
+
"output_schema": {
|
|
56
|
+
"type": "object",
|
|
57
|
+
"additionalProperties": true,
|
|
58
|
+
"title": "shiftwork_clock_outDictOutput"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "shiftwork_status",
|
|
3
|
+
"description": "Shift-work status: read-only progress summary of a checkpoint — units by status, cursor, open-question count, last history entry. Never mutates.",
|
|
4
|
+
"surfaces": [
|
|
5
|
+
"mcp"
|
|
6
|
+
],
|
|
7
|
+
"parameters": {
|
|
8
|
+
"properties": {
|
|
9
|
+
"checkpoint": {
|
|
10
|
+
"title": "Checkpoint",
|
|
11
|
+
"type": "string"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"required": [
|
|
15
|
+
"checkpoint"
|
|
16
|
+
],
|
|
17
|
+
"type": "object",
|
|
18
|
+
"title": "shiftwork_statusArguments"
|
|
19
|
+
},
|
|
20
|
+
"output_schema": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"additionalProperties": true,
|
|
23
|
+
"title": "shiftwork_statusDictOutput"
|
|
24
|
+
}
|
|
25
|
+
}
|