Repository navigation
Releases
Releases · katbyte/go-kt
v0.9.1
v0.9.0
- prometheus/metrics (breaking): the reading that says which build wrote the page is named for the tool, as Prometheus's own tools name theirs: sas-exporter gives sas_exporter_build_info.
Options.Namespaceis gone, so a tool drops it;Options.BuildInfonames the reading outright, to keep a name a dashboard already uses - prometheus/metricstest: a saved page leaves out the build's reading whatever the tool is called
v0.8.0
- httpc (breaking): chttp is renamed httpc. A tool changes its import and calls
httpc.Newwhere it calledchttp.New; nothing else changes - httpd: add the package, the HTTP server under a tool's routes: it listens, answers a health check, and on stop lets requests under way finish. mcp/server and prometheus/metrics serve through it, with nothing changed for a tool
- text: add the package, small helpers for wording more than one tool needs: a description's first sentence or first line, and the article a word takes
- mcp/registry: the page size a call asked for, where the next page starts, and how long a call asked to wait, which four MCP servers each kept a copy of
- prometheus/metrics (breaking): pmetrics moves here, beside the other Prometheus pieces. A tool changes its import and calls
metrics.Newwhere it calledpmetrics.New; nothing else changes - prometheus/metrics: a tool lists its readings in one place and writes them with the package's writer, in place of its own copy of both. A reading given twice is left off rather than spoiling the page
- prometheus/metrics (fix): a page with one reading that cannot be written is printed without that reading, where it printed nothing at all
- prometheus/metricstest: add the package, the checks a tool's tests make of its metrics page: against a saved copy, against Prometheus's naming rules, and of a running tool's page
- prometheus/poller: add the package. It asks what a tool reports on, on schedules of the tool's own, and keeps the last good answers, so the page is served from memory; one slow or missing target holds up no other. Every tool reads its --intervals setting the same way
- prometheus/exporter: add the package, a tool's print and serve commands in two calls
v0.7.0
- pmetrics: add the package, a tool's Prometheus metrics page. It holds the tool's own readings and nothing of the Go runtime's, puts the labels whoever runs the tool asks for on every reading, and says which build wrote it. It is written as text or served over HTTP beside a health check. Only this package uses the Prometheus client, so a tool without a metrics page does not build it in
- every package: asks for Go 1.27, where it asked for 1.26, as every project that uses the library already does
v0.6.4
- chttp, mcp/registry (fix): a name with
password,passphraseorsecretanywhere in it is a credential's, where only a name ending in one was.passwordConfirmationwas written to the write log in clear under an argument a server said was safe to show, and was shown in a trace; so was any name with something after the word.SecretName,RedactJSON, a trace and the line written for a write all go by the one rule. The price is a harmless name with the word in it,passwordHint, hidden too. A token, a cookie or a key is still known only by how its name ends, somaxTokensis left alone - chttp, cout, mcp/registry, test/replayproxy, test/services/sabnzbd: tidied for three rules a newer lint asks for, with no change in what any of them does: a pointer is checked before it is followed, a field set to its empty value is left out, and an import lost a second name it did not need. Nine Go files changed for this alone
- every package: built, linted and tested with Go 1.27.2, where it was 1.26.6.
go.modstill asks for Go 1.26 and the tests still run on 1.26.0, so nothing changes for a project that uses the library
v0.6.3
- mcp/registry (fix): a free-form argument a server names in
Config.ShownArgumentsis written as sent only for a call the tool answered. A call the tool failed, or one refused before it ran, was written the same way, though it was never held to the tool's own list of names: a setting the tool would not take, one that carries every signing key's secret, went into the line in clear. Such a call is now written with every value under the argument blanked, like any other - mcp/registry:
Config.LogWrite's doc says the line is not shown at a tool's default log level: it goes to the shared log at info, for whoever sets the log to info - mcp/acctest:
Suite.Secret's doc says a secret must be a string that is nothing's name and too long to turn up by chance; a password that is also a token's name is found wherever the name is listed
v0.6.2
- mcp/registry (fix): the line written for a write blanked only an argument named as a credential, so a key, a cookie or a passkey under a name of someone else's choosing, in a settings object, was written in clear to a log at info. Blanked now, with its names kept, is everything under an argument a tool takes as a free-form object; in an address anywhere in what is left, who it signs in as, the value of every parameter and what follows its
#; and whateverConfig.SecretArgumentsnames, whole, for a file's text, a command or an address whose path is the secret.Config.ShownArgumentsnames, by tool, a free-form argument that holds no credential and is written as sent. What was blanked is blanked in the failure beside it too, which is apt to repeat what it was sent. The arguments are written with their names in order, where they were written as the caller had them - mcp/registry: a failure's words reach the caller with what an address in them may carry a credential in taken out, around every tool: who it signs in as, the value of every parameter and what follows its
#. A server quotes an address back in an error with a credential of its own on the end, an indexer's stored key, and the tool handed that to the model as it was. An answer's addresses are left as they are - outside: add
BlankAddresses, text with what each address in it may carry a credential in blanked, who it signs in as, the value of every parameter and what follows its#: for a server's own words about what went wrong, a failed test's reason or a line of a log, which quote the address it called with its own key on the end. It is the rule a failure's words and the line written for a write are held to. An address written inside brackets, asat [http://host/api?apikey=...]is, keeps the bracket that closes them - mcp/registry:
Config.BlankAddressesnames the values in an answer that are a server's own words for what went wrong, by the JSON names they are answered under, and each address under such a name is answered as one in a failure is, however deep and whether or not answers are cleaned; every other address in an answer is the caller's to use and is left.BlankAddressesUnusedis the names on that list no tool answers under, for a server's test to hold to none - mcp/registry (fix): an empty map in an answer is sent as
{}, as an empty list is sent as[]; it was sent as null, which the SDK refused the whole call for, the tool's own schema saying an object - mcp/registry: a tool whose input is
anytakes no arguments, and refuses one as every other tool does and as the shared instructions say; the SDK's schema for such a tool took whatever it was sent. This changes what a server lists for such a tool, whose input schema now says it takes no properties; a call with no arguments, or with{}, is answered as before - chttp (fix): a
StatusErrorand aPreviewcarry the start of a server's answer with its credentials blanked; a server that refuses a save echoes the record back, key and all, and the error reaches a log and whoever called with it in clear - chttp: add
SecretName, whether a name is a credential's by the rule a trace hides one by; a name that endspassphrase,passkey,cookie,private_keyorprivatekeyis one now, in a trace as well - mcp/acctest:
Suite.Secrethas everything a tool answers or refuses with read, all run long, for a credential the suite gives the server or the server's own, andSuite.LeakReportsays where one was shown, for a suite'sTestMainto fail on: a server hands a key back where nobody thinks to test, and it takes no test to think of the tool that shows it; sonarr-mcp's, which radarr-mcp and prowlarr-mcp had each copied - mcp/registry:
Config.CleanAnswershas every piece of text in every tool's answer, and in its refusal, cleaned as text from outside is and cut to a length, once around every tool where a tool cleaning its own fields can miss one;Config.LeaveAsIsnames the values a later call hands back, a path or a release's id, which are answered as they are; andLeaveAsIsUnusedis the names on that list no tool answers under, for a server's test to hold to none - test/replayproxy: a proxy with no
CassetteDirkeeps no recordings and replays alone, for a suite that keeps its server from the internet and answers what it asks itself; one that records or verifies still needs somewhere to keep them - test/env: a miss says what to do about it in the suite's own words when it gave a
RecordHint, in the report at the end of a run as well as in the log, and a suite with no recordings is told that a request had no answer, and to answer it or find what asked, where both were told it had no recording and to record one - every package: comments say what a thing is for first and why in a clause, and are reflowed to 150 columns. 27 of the 44 Go files this release touches changed in comments alone, with no change in what they do: all of
clog,cout,lock,parallel,pointer,spelling,version,whitespace,mcp/serverand the three undertest/services
v0.6.1
- add
outside: text that came from outside, a release's name or a file's or a description anyone can write, made safe to hand a model:Texttakes out every character that does not show (control and format characters, among them the zero-width ones and those that override the direction text runs in, and the tag characters and variation selectors a message can be hidden in) and cuts what is left to a length - mcp/server: add
Instructions, what a server tells a client that connects:DefaultInstructions, the words every server shares, and then the server's own - mcp/registry: one line is written for every call of a write or a delete tool (
Config.LogWrite, by default the log): the kind, the tool, what the call sent with its credentials blanked, and whether it was refused, failed or answered - mcp/registry: a call with an argument the tool does not take is told the arguments it does take, after the SDK's own refusal
- chttp: add
RedactJSON, JSON text with its credentials blanked by the rule a trace hides them by - mcp/registry: add
Hints.Installs, for a tool that has the server bring something in from outside and run it, an app or a plug-in; a client is told it is open world, the one hint MCP has for that and forSendsOut
v0.6.0
- add
test/services/arrserver: the servers a Sonarr, Radarr or Prowlarr calls home to, as a handler for a live suite to put behind its proxy: the update server, which is asked once a build is two weeks old, and the clock, whose recorded answer is wrong the next day; prowlarr-mcp's, brought over - add
test/services/newznab: Newznab and Torznab indexers for a live suite to run beside the server under test, any number on one listener, each usenet or torrent, with a catalogue the test changes as it goes and failures it sets; a release says its title and category, and the date and the torrent size it does not say are picked from a spread by a seed that can be given again, so no test leans on one made-up value; the three indexers of sonarr-mcp, radarr-mcp and prowlarr-mcp made one - add
test/services/sabnzbd: a SABnzbd for a live suite to run beside the server under test, a download client that downloads nothing and whose jobs the test progresses, pauses, completes with the files it names, or fails; sonarr-mcp's, brought over - mcp/registry (breaking):
Hints.OpenWorldisHints.SendsOut, and it is for a tool that itself sends something to a person or a service beyond the server, an email or a notification; a tool that makes the server fetch from its own providers or hand work to its own download client is not one - mcp/acctest:
DecimalOr0reads a fraction that may be absent, 0 when it is, besideNumOr0, which reads 1.5 as 1 - test/replayproxy:
Servetakes a host and a path ("clock.example.org/v1/time") to answer that one path from the test while the host's other paths replay: a recorded time of day is wrong from the next day on - test/env:
ListenProxybrings the proxy up without asking the container anything, for a server that calls out as it starts and so is started only once the proxy listens;StartProxyisListenProxyand then the check - test/env (breaking):
CheckReachable(ctx, what, port)replacesCheckProxyReachable(ctx, port)and names what could not be reached, so a suite can check the port of each service it runs as well as the proxy's - test/env: the check probes the name the server was given for the host,
APP_TEST_HOST(Host), where it probedhost.docker.internalwhatever the test script had told the container
v0.5.1
- whitespace: a space that is not the ordinary one is out of place where an ordinary one would be: two no-break spaces are a double space, and one before a colon is a space before a colon
- whitespace: a space after a file's extension no longer hides one before it;
SplitExtreads a name without the spaces after it - whitespace:
Fixedis empty when nothing is left of a name but spaces or its extension, where " .mkv" was put right as ".mkv" - whitespace:
Visiblemarks the ordinary space beside an odd one