feat(addons): declare document slots and legacy arguments in the manifest

The four document skill names were code in the contract, the hint for
binary files kept its own list of formats and libraries, and the chat
boundary rewrote the old arguments of one add-on by its ID.

A skill that shadows a name can now declare the slot it serves: kind,
file extensions, name words and a library hint. A tool can declare
legacyArgs, the arguments it refuses now, each with a hint. Both need
manifest api 2. The four default slots move to a data file that the
contract reads, so a manifest that declares nothing keeps working.

The host takes the replaceable names, the files a skill covers and the
hint for a script from the skills the add-ons list. It compares no
format or add-on ID. A guard spec fails when it does again. The Office
manifest declares its slots and legacy arguments and accepts api 2.

Assisted-by: Claude:claude-sonnet-5-5 go gofmt
This commit is contained in:
Ettore Di Giacinto committed 2026-11-03 14:45:43 +00:00
1 parent b8626132ae
commit 337a034601
22 files changed
+648 -104

No files matched your search

+10 -1
View File
@@ -404,6 +404,14 @@
"fails closed for a commands tool without a descriptor",
"names nothing for a descriptor that does not supply the runtime of documents",
"names nothing for an add-on without a commands tool",
"reads the default slots from data",
"lets an add-on declare a slot the contract has never heard of",
"needs the manifest to accept API 2 to declare a slot",
"keeps a skill that shadows a default slot and declares nothing working",
"refuses a shadow of an unknown slot without a declaration, and bad declarations",
"answers with the hint when a call carries the old argument",
"says nothing without the argument, without a declaration or for a forbidden property",
"is validated: bounded, plain, not in the schema, and API 2",
"reports network-policy enforcement only for an available isolated provider",
"refuses a non-boolean enforcement claim",
"accepts a listing declared with API 2",
@@ -3504,7 +3512,8 @@
"go: are listed in any state, with the names they replace and whether they run",
"go: are listed in any state, with their files and whether they run",
"go: keeps its namespaced name and carries the built-in it shadows, only for a replaceable name",
"go: names the replacement string for legacy arguments at the chat boundary without sending them",
"go: names the replacement string for the legacy arguments the shipped Office manifest declares, without sending them",
"go: works for any add-on that declares legacyArgs, and for none that does not",
"go: synthesizes exactly one strict host read, without enumerating resources at discovery",
"go: projects only opaque IDs, optional names and caller roles through a normal data envelope",
"go: returns an array even for empty success and truthfully bounds sorted 100/101 results",