@intentius/chant-lexicon-fountain 0.76.0 → 0.78.0
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.
- package/README.md +6 -5
- package/dist/coverage.d.ts +6 -5
- package/dist/coverage.d.ts.map +1 -1
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/integrity.json +10 -9
- package/dist/lint/audit-catalog.d.ts.map +1 -1
- package/dist/lint/post-synth/ftn023-acp-runtime-command.d.ts +3 -2
- package/dist/lint/post-synth/ftn023-acp-runtime-command.d.ts.map +1 -1
- package/dist/lint/post-synth/ftn024-setup-timeout-range.d.ts +3 -0
- package/dist/lint/post-synth/ftn024-setup-timeout-range.d.ts.map +1 -0
- package/dist/lint/post-synth/index.d.ts.map +1 -1
- package/dist/lsp/hover.d.ts.map +1 -1
- package/dist/manifest.json +2 -2
- package/dist/meta.json +14 -2
- package/dist/okf/index.md +2 -1
- package/dist/okf/rules/FTN023.md +2 -2
- package/dist/okf/rules/FTN024.md +15 -0
- package/dist/okf/types/Agent.md +7 -5
- package/dist/okf/types/Environment.md +3 -0
- package/dist/okf/types/Vault.md +1 -0
- package/dist/rules/ftn016-runtime-model-valid.ts +5 -5
- package/dist/rules/ftn023-acp-runtime-command.ts +4 -3
- package/dist/rules/ftn024-setup-timeout-range.ts +48 -0
- package/dist/skills/chant-fountain-ops.md +6 -5
- package/dist/skills/chant-fountain-secrets.md +2 -2
- package/dist/skills/chant-fountain.md +2 -2
- package/dist/spec/fetch.d.ts +18 -3
- package/dist/spec/fetch.d.ts.map +1 -1
- package/dist/spec/parse.d.ts +5 -3
- package/dist/spec/parse.d.ts.map +1 -1
- package/dist/types/index.d.ts +14 -6
- package/package.json +2 -2
- package/src/codegen/docs.ts +2 -2
- package/src/composites/composites.test.ts +19 -0
- package/src/coverage.test.ts +8 -0
- package/src/coverage.ts +24 -8
- package/src/generated/index.d.ts +14 -6
- package/src/generated/index.ts +2 -2
- package/src/generated/lexicon-fountain.json +14 -2
- package/src/lint/audit-catalog.ts +11 -3
- package/src/lint/post-synth/ftn016-runtime-model-valid.ts +5 -5
- package/src/lint/post-synth/ftn023-acp-runtime-command.ts +4 -3
- package/src/lint/post-synth/ftn024-setup-timeout-range.ts +48 -0
- package/src/lint/post-synth/index.ts +2 -0
- package/src/lint/post-synth/post-synth.test.ts +24 -0
- package/src/lsp/hover.test.ts +9 -2
- package/src/lsp/hover.ts +6 -4
- package/src/plugin.test.ts +1 -1
- package/src/serializer.test.ts +2 -2
- package/src/skills/chant-fountain-ops.md +6 -5
- package/src/skills/chant-fountain-secrets.md +2 -2
- package/src/skills/chant-fountain.md +2 -2
- package/src/spec/fetch.ts +46 -6
- package/src/spec/fountain-openapi.snapshot.json +12221 -4739
- package/src/spec/parse.ts +84 -41
- package/src/spec/spec.test.ts +163 -0
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
fountain lexicon plugin for [chant](https://github.com/intentius/chant).
|
|
4
4
|
|
|
5
|
-
[fountain](https://github.com/
|
|
5
|
+
[fountain](https://github.com/managoat/fountain) runs coding agents in
|
|
6
6
|
sandboxed VMs. This lexicon declares its workload layer as typed chant
|
|
7
7
|
resources: `Environment` (sandbox baseline), `Vault` (env-var overrides),
|
|
8
8
|
`Agent` (a runnable agent config), `Teammate` (an agent seated on the team,
|
|
@@ -41,10 +41,11 @@ export const nightly = new Schedule({
|
|
|
41
41
|
});
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
Types are generated from fountain v0.21.0. That release describes
|
|
45
|
+
`runtime: "acp"` and `runtime_command` on `Agent` itself, so an older instance
|
|
46
|
+
rejects the pair at apply. `secrets` on `Environment` and `Vault` is the one
|
|
47
|
+
field the lexicon adds to the request schemas, taken from fountain's manifest
|
|
48
|
+
format.
|
|
48
49
|
|
|
49
50
|
For agents handling anything sensitive, `ConciergeStack` bundles the
|
|
50
51
|
locked-down defaults (deny-all egress, no vault overrides, ownership marker
|
package/dist/coverage.d.ts
CHANGED
|
@@ -18,11 +18,12 @@
|
|
|
18
18
|
/**
|
|
19
19
|
* Request schemas with no typed resource, and why.
|
|
20
20
|
*
|
|
21
|
-
* Every `*Request` schema in the pinned spec is either modeled or listed here
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* and
|
|
21
|
+
* Every `*Request` schema in the pinned spec is either modeled or listed here,
|
|
22
|
+
* and every name listed here is a schema the pinned spec has (the coverage test
|
|
23
|
+
* holds both). The spec describes the whole product, not just the workload
|
|
24
|
+
* layer, so most of this list restates three reasons: it is a session and not a
|
|
25
|
+
* thing, it is an account operation and not estate, or it is write-only and so
|
|
26
|
+
* could never be diffed.
|
|
26
27
|
*/
|
|
27
28
|
export declare const EXCLUDED_KINDS: Record<string, string>;
|
|
28
29
|
/**
|
package/dist/coverage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../src/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../src/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkEjD,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKxD,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,yEAAyE;IACzE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,iEAAiE;IACjE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,+EAA+E;IAC/E,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC7D;AAOD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,OAAO,EAAE,eAAe,GACvB,sBAAsB,CAqDxB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAGpE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAkCpE;AAED,sDAAsD;AACtD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,sBAAsB,CASrF;AAED,wBAAsB,uBAAuB,CAAC,IAAI,CAAC,EAAE;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAsBlC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generated/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,KAAK,+IAAqN,CAAC;AACxO,eAAO,MAAM,WAAW,+
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generated/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,KAAK,+IAAqN,CAAC;AACxO,eAAO,MAAM,WAAW,+IAAuL,CAAC;AAChN,eAAO,MAAM,QAAQ,+IAAgR,CAAC;AACtS,eAAO,MAAM,QAAQ,+IAAwM,CAAC;AAC9N,eAAO,MAAM,KAAK,+IAAqJ,CAAC;AACxK,eAAO,MAAM,OAAO,+IAAyP,CAAC;AAE9Q,eAAO,MAAM,UAAU,0GAAyD,CAAC"}
|
package/dist/integrity.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"algorithm": "sha256",
|
|
3
3
|
"artifacts": {
|
|
4
|
-
"manifest.json": "
|
|
5
|
-
"meta.json": "
|
|
6
|
-
"types/index.d.ts": "
|
|
4
|
+
"manifest.json": "aa3acd6881163a56c6439a5bc69623fa527034d04d4344a0fceccb01602769ee",
|
|
5
|
+
"meta.json": "3301437a2a56eaf1a5cc8f6eabb18a40767f916e09701b2d9bf20aba4066738c",
|
|
6
|
+
"types/index.d.ts": "cf6b634fe0a8e9e96f1d9d07e3df53838def2683dc93dbe3c7fd971c6d3908ae",
|
|
7
7
|
"rules/ftn001-no-secret-literals.ts": "a417b194cd7039911cca9a0f14c49b042dfa6b1ee48517f7c2e22b16590a8599",
|
|
8
8
|
"rules/ftn010-networking-explicit.ts": "29d62025b456b207758a32d463b686e1acc5f1d39e36a6e8999946df26bbe1fc",
|
|
9
9
|
"rules/ftn011-no-unrestricted-networking.ts": "2bf44295dfa5825a7863e49514f75ea9a74fe2658869d908a50de3a287a398a8",
|
|
@@ -11,16 +11,17 @@
|
|
|
11
11
|
"rules/ftn013-substitution-resolvable.ts": "1425ca7de9494725ad4ec0bcb22abc30cff718d3fc3816fb86322897ebcaf451",
|
|
12
12
|
"rules/ftn014-vault-shadowing.ts": "e966a441c52f57fee059e3e4834da2c5f9d12c71e551924beebd7d0740f714e1",
|
|
13
13
|
"rules/ftn015-mcp-secret-env-substitution.ts": "88dc87c8f403a2fe48ee43bc4a4678d95273dba810135c8e74750f1bd62d2564",
|
|
14
|
-
"rules/ftn016-runtime-model-valid.ts": "
|
|
14
|
+
"rules/ftn016-runtime-model-valid.ts": "5bb5e399ab4efd764816dec221e3ca424ba1ce2470d00b034fbcc95b12de4979",
|
|
15
15
|
"rules/ftn017-unique-resource-names.ts": "866f3f385083f96b6e8a18fa6f5624bab43752c5d22e7291e95835e62745d26c",
|
|
16
16
|
"rules/ftn020-schedule-cron-syntax.ts": "a4291345035fbfddfa443aeae59c08be4d35f383a28cd19c827bf162b79f7703",
|
|
17
17
|
"rules/ftn021-typed-references-resolve.ts": "1f62b4d1a47707b00634a50960bdd8233c292898a76aac0089ab02de76460d96",
|
|
18
18
|
"rules/ftn022-webhook-url-public-https.ts": "06c4997350d6ad5b713b5f205becf89f9479136f015a76ebfff79938b45c6206",
|
|
19
|
-
"rules/ftn023-acp-runtime-command.ts": "
|
|
20
|
-
"
|
|
21
|
-
"skills/chant-fountain
|
|
22
|
-
"skills/chant-fountain-
|
|
19
|
+
"rules/ftn023-acp-runtime-command.ts": "1c46442052061d0f817afcf12b37880c1b261f9b4cffdbe9dcf87c7967383f6d",
|
|
20
|
+
"rules/ftn024-setup-timeout-range.ts": "2f292f3ecc3175604a47f03ff0e783b25b125f2d040684f189ce17650f78f121",
|
|
21
|
+
"skills/chant-fountain.md": "906a312756a02c88de634915f63ab4dfe1b1078ff4d8cfb4b6dc97eec14bc237",
|
|
22
|
+
"skills/chant-fountain-secrets.md": "40aa847d62547581bebdde630b54796c4e1cbf498869392e0d396d96a75c0ab6",
|
|
23
|
+
"skills/chant-fountain-ops.md": "4e72f0a0c7477a9e98f85ea45e49ba69e8a699f9c13ba0f0cf1cb20a88151373",
|
|
23
24
|
"skills/chant-fountain-locked-sandboxes.md": "de82f06cb3a08ba6bf3ae45fb9869e21d6da18b9ebe0fc769da8aebaceea7dd1"
|
|
24
25
|
},
|
|
25
|
-
"composite": "
|
|
26
|
+
"composite": "ee2fae5b543bbf3521c91d488db426aadd40cb6825299244b3432e3e91e06dc9"
|
|
26
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-catalog.d.ts","sourceRoot":"","sources":["../../src/lint/audit-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAa,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AA+B1E,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"audit-catalog.d.ts","sourceRoot":"","sources":["../../src/lint/audit-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAa,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AA+B1E,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CA8GzD,CAAC"}
|
|
@@ -9,8 +9,9 @@ import type { PostSynthCheck } from "@intentius/chant/lint/post-synth";
|
|
|
9
9
|
* expects to run that nothing will ever execute, which is worse than an error
|
|
10
10
|
* because it looks configured.
|
|
11
11
|
*
|
|
12
|
-
* Both fields are
|
|
13
|
-
*
|
|
12
|
+
* Both fields are in the spec since fountain v0.21.0, and the server refuses
|
|
13
|
+
* either half without the other at apply. The rule moves that refusal to
|
|
14
|
+
* build, where it is a diagnostic in review instead of a 422 in a run.
|
|
14
15
|
*/
|
|
15
16
|
export declare const acpRuntimeCommandCheck: PostSynthCheck;
|
|
16
17
|
//# sourceMappingURL=ftn023-acp-runtime-command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ftn023-acp-runtime-command.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/ftn023-acp-runtime-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,kCAAkC,CAAC;AAG9G
|
|
1
|
+
{"version":3,"file":"ftn023-acp-runtime-command.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/ftn023-acp-runtime-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,kCAAkC,CAAC;AAG9G;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB,EAAE,cAwCpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ftn024-setup-timeout-range.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/ftn024-setup-timeout-range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,kCAAkC,CAAC;AAoB9G,eAAO,MAAM,sBAAsB,EAAE,cA2BpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAevE,eAAO,MAAM,eAAe,EAAE,cAAc,EAc3C,CAAC"}
|
package/dist/lsp/hover.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../../src/lsp/hover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../../src/lsp/hover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AA4E1E,4DAA4D;AAC5D,wBAAgB,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,CAE9D"}
|
package/dist/manifest.json
CHANGED
package/dist/meta.json
CHANGED
|
@@ -5,9 +5,11 @@
|
|
|
5
5
|
"lexicon": "fountain",
|
|
6
6
|
"props": [
|
|
7
7
|
"allowed_environment_ids",
|
|
8
|
+
"allowed_inference_credential_ids",
|
|
8
9
|
"allowed_vault_ids",
|
|
9
10
|
"description",
|
|
10
11
|
"environment_id",
|
|
12
|
+
"inference_credential_id",
|
|
11
13
|
"mcp_servers",
|
|
12
14
|
"metadata",
|
|
13
15
|
"model",
|
|
@@ -24,6 +26,9 @@
|
|
|
24
26
|
"environment_id": {
|
|
25
27
|
"format": "uuid"
|
|
26
28
|
},
|
|
29
|
+
"inference_credential_id": {
|
|
30
|
+
"format": "uuid"
|
|
31
|
+
},
|
|
27
32
|
"model": {
|
|
28
33
|
"pattern": "^[a-z0-9_-]+/[a-z0-9._-]+$"
|
|
29
34
|
},
|
|
@@ -68,7 +73,9 @@
|
|
|
68
73
|
"networking_type",
|
|
69
74
|
"packages",
|
|
70
75
|
"repositories",
|
|
71
|
-
"
|
|
76
|
+
"secrets",
|
|
77
|
+
"setup_script",
|
|
78
|
+
"setup_timeout_seconds"
|
|
72
79
|
],
|
|
73
80
|
"propertyConstraints": {
|
|
74
81
|
"name": {
|
|
@@ -80,6 +87,10 @@
|
|
|
80
87
|
"unrestricted",
|
|
81
88
|
"limited"
|
|
82
89
|
]
|
|
90
|
+
},
|
|
91
|
+
"setup_timeout_seconds": {
|
|
92
|
+
"minimum": 1,
|
|
93
|
+
"maximum": 900
|
|
83
94
|
}
|
|
84
95
|
}
|
|
85
96
|
},
|
|
@@ -154,7 +165,8 @@
|
|
|
154
165
|
"props": [
|
|
155
166
|
"description",
|
|
156
167
|
"metadata",
|
|
157
|
-
"name"
|
|
168
|
+
"name",
|
|
169
|
+
"secrets"
|
|
158
170
|
],
|
|
159
171
|
"propertyConstraints": {
|
|
160
172
|
"name": {
|
package/dist/okf/index.md
CHANGED
|
@@ -25,4 +25,5 @@ okf_version: '0.2'
|
|
|
25
25
|
* [FTN020](/rules/FTN020.md) - Schedule cron must be five- or six-field UTC cron (no @nickname shorthands)
|
|
26
26
|
* [FTN021](/rules/FTN021.md) - A Teammate's agent and a Schedule's teammate must resolve within the build
|
|
27
27
|
* [FTN022](/rules/FTN022.md) - Webhook url must be https and must not be a loopback or private address
|
|
28
|
-
* [FTN023](/rules/FTN023.md) -
|
|
28
|
+
* [FTN023](/rules/FTN023.md) - Agent runtime "acp" requires runtime_command, and no other runtime accepts one
|
|
29
|
+
* [FTN024](/rules/FTN024.md) - Environment setup_timeout_seconds must be an integer from 1 to 900
|
package/dist/okf/rules/FTN023.md
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: post-synth-check
|
|
3
3
|
title: FTN023
|
|
4
|
-
description:
|
|
4
|
+
description: Agent runtime "acp" requires runtime_command, and no other runtime accepts one
|
|
5
5
|
id: FTN023
|
|
6
6
|
severity: error
|
|
7
7
|
category: post-synth
|
|
8
8
|
lexicon: fountain
|
|
9
9
|
docs: https://intentius.io/chant/lexicons/fountain/rules/
|
|
10
10
|
---
|
|
11
|
-
|
|
11
|
+
Agent runtime "acp" requires runtime_command, and no other runtime accepts one
|
|
12
12
|
|
|
13
13
|
## Applies to
|
|
14
14
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: post-synth-check
|
|
3
|
+
title: FTN024
|
|
4
|
+
description: Environment setup_timeout_seconds must be an integer from 1 to 900
|
|
5
|
+
id: FTN024
|
|
6
|
+
severity: error
|
|
7
|
+
category: post-synth
|
|
8
|
+
lexicon: fountain
|
|
9
|
+
docs: https://intentius.io/chant/lexicons/fountain/rules/
|
|
10
|
+
---
|
|
11
|
+
Environment setup_timeout_seconds must be an integer from 1 to 900
|
|
12
|
+
|
|
13
|
+
## Applies to
|
|
14
|
+
|
|
15
|
+
- [Environment](/types/Environment.md)
|
package/dist/okf/types/Agent.md
CHANGED
|
@@ -10,17 +10,19 @@ resource_type: Fountain::V1::Agent
|
|
|
10
10
|
|
|
11
11
|
## Properties
|
|
12
12
|
|
|
13
|
-
- `model` (`string`, required)
|
|
14
13
|
- `name` (`string`, required)
|
|
15
14
|
- `runtime` (`"acp" | "claude" | "codex" | "gemini" | "opencode"`, required)
|
|
16
|
-
- `allowed_environment_ids` (`string[]`, optional): Environments a conversation may launch this agent under instead of its own. Same shape as allowed_vault_ids: null (default) allows any environment the tenant owns; an empty list forbids overriding; a non-empty list is an allowlist. The agent's own environment always passes.
|
|
15
|
+
- `allowed_environment_ids` (`string[]`, optional): Environments a conversation may launch this agent under instead of its own (environment_id on create). Same shape as allowed_vault_ids: null (default) allows any environment the tenant owns; an empty list forbids overriding; a non-empty list is an allowlist. The agent's own environment always passes.
|
|
16
|
+
- `allowed_inference_credential_ids` (`string[]`, optional): Credential sets a conversation may launch this agent on instead of the agent's (inference_credential_id on create). Same shape as allowed_vault_ids: null (default) allows any set the tenant owns; an empty list forbids overriding; a non-empty list is an allowlist. The agent's own set always passes.
|
|
17
17
|
- `allowed_vault_ids` (`string[]`, optional): Vaults a conversation may attach to this agent. null (default) allows any vault the tenant owns; an empty list forbids attaching any vault; a non-empty list is an allowlist.
|
|
18
18
|
- `description` (`string`, optional)
|
|
19
19
|
- `environment_id` (`string`, optional)
|
|
20
|
+
- `inference_credential_id` (`string`, optional): The credential set this agent's conversations run on. null (default) is the account's default set, which is what every agent had before an account could hold more than one.
|
|
20
21
|
- `mcp_servers` (`Record<string, unknown>`, optional)
|
|
21
22
|
- `metadata` (`Record<string, unknown>`, optional)
|
|
22
|
-
- `
|
|
23
|
-
- `
|
|
23
|
+
- `model` (`string`, optional)
|
|
24
|
+
- `permission_policy` (`Record<string, "ask" | "auto_allow" | "auto_deny" | number>`, optional): Per-tool permission policy: a map of key to verdict, plus an optional "default" key. A key is matched against the tool card's title first and then ACP's kind (execute, edit, read, fetch, …); prefer a kind, because claude titles a tool call with the command it is about to run. Unset keys fall back to the default, and an unset default is auto_allow. "ask" holds the tool until a human answers it on the conversation stream, and denies if nobody does before the timeout. A conversation may narrow this at launch, never widen it. A runtime that never asks (opencode) refuses anything stricter than auto_allow with 422 permission_policy_unenforceable.
|
|
25
|
+
- `runtime_command` (`string`, optional): The command the acp runtime launches inside the sandbox, as a shell line resolved there (for example `chant acp`). Required when runtime is acp, and rejected on every other runtime, which resolves its own executable. A free string by design: it runs under the same isolation as an environment's setup script.
|
|
24
26
|
- `sandbox_mode` (`"ephemeral" | "persistent"`, optional): Where a conversation of this agent runs by default (ADR 0023). ephemeral: a sandbox per conversation, reclaimed with it. persistent: one sandbox per agent identity (agent, environment, vault) — the agent's computer — that every conversation of that identity lands on and shares; it survives a conversation ending and is parked, not destroyed, at the ceiling. A launch may name the other with sandbox_mode on POST /api/conversations.
|
|
25
27
|
- `sandbox_provider` (`"daytona" | "e2b" | "runner" | "sprites"`, optional): Sandbox backend override; null inherits the instance default (SANDBOX_PROVIDER). Only providers configured on this instance are accepted
|
|
26
28
|
- `skills` (`Record<string, unknown>[]`, optional): Each entry is either inline (`{name, content}` — full SKILL.md text written to the sprite) or github (`{source, ref?, name?}` — installed on the sprite via the skills.sh CLI, optionally pinned to a tag/branch/sha via `ref`). Exactly one of `content` or `source` must be set on each entry.
|
|
@@ -33,4 +35,4 @@ resource_type: Fountain::V1::Agent
|
|
|
33
35
|
- [FTN015](/rules/FTN015.md): Secret-shaped MCP env keys must be ${VAR} references, not literals
|
|
34
36
|
- [FTN016](/rules/FTN016.md): Agent runtime must be a known runtime and model canonical provider/model_id
|
|
35
37
|
- [FTN021](/rules/FTN021.md): A Teammate's agent and a Schedule's teammate must resolve within the build
|
|
36
|
-
- [FTN023](/rules/FTN023.md):
|
|
38
|
+
- [FTN023](/rules/FTN023.md): Agent runtime "acp" requires runtime_command, and no other runtime accepts one
|
|
@@ -17,7 +17,9 @@ resource_type: Fountain::V1::Environment
|
|
|
17
17
|
- `networking_type` (`"limited" | "unrestricted"`, optional)
|
|
18
18
|
- `packages` (`Record<string, unknown>`, optional)
|
|
19
19
|
- `repositories` (`Repository[]`, optional)
|
|
20
|
+
- `secrets` (`{ key: string; value: string }[]`, optional): Secrets upserted with the resource at apply, as key/value pairs; fountainApply sends them as the manifest's inline `secrets` map. Values are write-only upstream and can never be read back or diffed. Write a reference that resolves at build (an env var, a secret-manager lookup), never a literal: FTN001 flags a literal here as it does anywhere else in a declaration.
|
|
20
21
|
- `setup_script` (`string`, optional)
|
|
22
|
+
- `setup_timeout_seconds` (`number`, optional): Setup exec timeout in seconds; defaults to 120. The overall provisioning deadline still applies.
|
|
21
23
|
|
|
22
24
|
## Governed by
|
|
23
25
|
|
|
@@ -27,3 +29,4 @@ resource_type: Fountain::V1::Environment
|
|
|
27
29
|
- [FTN012](/rules/FTN012.md): Environment env_vars must not carry cloud-credential-shaped keys or values
|
|
28
30
|
- [FTN013](/rules/FTN013.md): Agent ${VAR} references should resolve against the environment's declared keys
|
|
29
31
|
- [FTN014](/rules/FTN014.md): Vault keys shadowing a declared Environment key should be visible in review
|
|
32
|
+
- [FTN024](/rules/FTN024.md): Environment setup_timeout_seconds must be an integer from 1 to 900
|
package/dist/okf/types/Vault.md
CHANGED
|
@@ -13,6 +13,7 @@ resource_type: Fountain::V1::Vault
|
|
|
13
13
|
- `name` (`string`, required)
|
|
14
14
|
- `description` (`string`, optional)
|
|
15
15
|
- `metadata` (`Record<string, unknown>`, optional)
|
|
16
|
+
- `secrets` (`{ key: string; value: string }[]`, optional): Secrets upserted with the resource at apply, as key/value pairs; fountainApply sends them as the manifest's inline `secrets` map. Values are write-only upstream and can never be read back or diffed. Write a reference that resolves at build (an env var, a secret-manager lookup), never a literal: FTN001 flags a literal here as it does anywhere else in a declaration.
|
|
16
17
|
|
|
17
18
|
## Governed by
|
|
18
19
|
|
|
@@ -8,11 +8,11 @@ import { propsOf } from "../../entity-props";
|
|
|
8
8
|
* this backstops untyped construction (imported templates, hand-built
|
|
9
9
|
* plans) so a typo fails the build instead of a 422 at apply.
|
|
10
10
|
*
|
|
11
|
-
* `acp` is the exception on
|
|
12
|
-
*
|
|
13
|
-
* model: the model is whatever the command on the
|
|
14
|
-
* decides to use, so a `model` on an acp agent is a
|
|
15
|
-
* command itself is FTN023's business.
|
|
11
|
+
* `acp` is the exception on the model. The runtime is in the spec since
|
|
12
|
+
* fountain v0.21.0, which also stopped requiring `model`, and it names a
|
|
13
|
+
* process rather than a hosted model: the model is whatever the command on the
|
|
14
|
+
* other end of the protocol decides to use, so a `model` on an acp agent is a
|
|
15
|
+
* value nothing reads. The command itself is FTN023's business.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
const RUNTIMES = new Set(["claude", "codex", "gemini", "opencode", "acp"]);
|
|
@@ -11,12 +11,13 @@ import { propsOf } from "../../entity-props";
|
|
|
11
11
|
* expects to run that nothing will ever execute, which is worse than an error
|
|
12
12
|
* because it looks configured.
|
|
13
13
|
*
|
|
14
|
-
* Both fields are
|
|
15
|
-
*
|
|
14
|
+
* Both fields are in the spec since fountain v0.21.0, and the server refuses
|
|
15
|
+
* either half without the other at apply. The rule moves that refusal to
|
|
16
|
+
* build, where it is a diagnostic in review instead of a 422 in a run.
|
|
16
17
|
*/
|
|
17
18
|
export const acpRuntimeCommandCheck: PostSynthCheck = {
|
|
18
19
|
id: "FTN023",
|
|
19
|
-
description:
|
|
20
|
+
description: "Agent runtime \"acp\" requires runtime_command, and no other runtime accepts one",
|
|
20
21
|
|
|
21
22
|
check(ctx: PostSynthContext): PostSynthDiagnostic[] {
|
|
22
23
|
const diagnostics: PostSynthDiagnostic[] = [];
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { PostSynthCheck, PostSynthContext, PostSynthDiagnostic } from "@intentius/chant/lint/post-synth";
|
|
2
|
+
import { propsOf } from "../../entity-props";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* FTN024: an Environment's `setup_timeout_seconds` is a whole number from 1 to 900.
|
|
6
|
+
*
|
|
7
|
+
* fountain v0.21.0 declares the field as an integer with `minimum: 1` and
|
|
8
|
+
* `maximum: 900`, and defaults it to 120 when it is absent. Codegen types it as
|
|
9
|
+
* `number` and carries neither bound into validation, so without this rule a
|
|
10
|
+
* 901 or a 12.5 builds cleanly and the first anyone hears of it is a 422 at
|
|
11
|
+
* apply.
|
|
12
|
+
*
|
|
13
|
+
* A value in range is still worth a second look in review. Changing it
|
|
14
|
+
* invalidates the environment's checkpoints (recorded on chant#2391), so an
|
|
15
|
+
* edit to this field costs what an edit to `setup_script` costs.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const MIN = 1;
|
|
19
|
+
const MAX = 900;
|
|
20
|
+
|
|
21
|
+
export const setupTimeoutRangeCheck: PostSynthCheck = {
|
|
22
|
+
id: "FTN024",
|
|
23
|
+
description: "Environment setup_timeout_seconds must be an integer from 1 to 900",
|
|
24
|
+
|
|
25
|
+
check(ctx: PostSynthContext): PostSynthDiagnostic[] {
|
|
26
|
+
const diagnostics: PostSynthDiagnostic[] = [];
|
|
27
|
+
|
|
28
|
+
for (const [name, entity] of ctx.entities) {
|
|
29
|
+
if (entity.entityType !== "Fountain::V1::Environment") continue;
|
|
30
|
+
const timeout = propsOf(entity).setup_timeout_seconds;
|
|
31
|
+
if (timeout === undefined || timeout === null) continue;
|
|
32
|
+
|
|
33
|
+
if (typeof timeout !== "number" || !Number.isInteger(timeout) || timeout < MIN || timeout > MAX) {
|
|
34
|
+
diagnostics.push({
|
|
35
|
+
checkId: "FTN024",
|
|
36
|
+
severity: "error",
|
|
37
|
+
message:
|
|
38
|
+
`Environment "${name}" setup_timeout_seconds ${JSON.stringify(timeout)} is not an integer ` +
|
|
39
|
+
`from ${MIN} to ${MAX}; fountain refuses it at apply`,
|
|
40
|
+
entity: name,
|
|
41
|
+
lexicon: "fountain",
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return diagnostics;
|
|
47
|
+
},
|
|
48
|
+
};
|
|
@@ -125,7 +125,8 @@ The second posts `chant run <op>` back onto the steward's thread, with
|
|
|
125
125
|
now-resolved fact.
|
|
126
126
|
|
|
127
127
|
`--durable-requests` (answering fountain's own permission card instead) is
|
|
128
|
-
refused by name: it needs
|
|
128
|
+
refused by name: it needs fountain#1635's request-answer path, which fountain
|
|
129
|
+
v0.21.0 carries and chant does not use yet (chant#2391).
|
|
129
130
|
|
|
130
131
|
## When the steward is busy
|
|
131
132
|
|
|
@@ -158,7 +159,7 @@ success nobody saw.
|
|
|
158
159
|
|
|
159
160
|
## Two upstream caveats
|
|
160
161
|
|
|
161
|
-
- `runtime: "acp"` with `runtime_command`
|
|
162
|
-
|
|
163
|
-
- Bulk apply covering the team-side kinds is
|
|
164
|
-
|
|
162
|
+
- `runtime: "acp"` with `runtime_command` needs fountain v0.21.0 or later. An
|
|
163
|
+
older instance rejects the pair at apply.
|
|
164
|
+
- Bulk apply covering the team-side kinds is fountain#1636. Until chant uses it,
|
|
165
|
+
they go through their own routes, which is what `fountainApply` does.
|
|
@@ -11,7 +11,7 @@ user-invocable: true
|
|
|
11
11
|
Everything materialized into a fountain sandbox must be presumed exfiltrated once untrusted agent code runs. Order of preference:
|
|
12
12
|
|
|
13
13
|
1. **`${VAR}` substitution references** in agent config (MCP server env, system prompts). Resolved at spawn from the merged environment + vault sets. Never a value in source.
|
|
14
|
-
2. **Environment secrets** (`spec.secrets`)
|
|
14
|
+
2. **Environment and Vault secrets** (`spec.secrets`), typed on both kinds as `secrets: { key: string; value: string }[]`. Encrypted at rest, write-only over the API (values are never returned once stored). Write the value as a reference your build resolves, not the secret itself. `fountainApply` sends them inline with the rest of the resource in the bulk apply request, and the server upserts them through the encrypted envelope path; a changed value cannot be detected, only overwritten.
|
|
15
15
|
3. **`env_vars`** — plaintext config only. FTN012 errors on credential-shaped keys or values here.
|
|
16
16
|
|
|
17
17
|
Never put a literal credential anywhere in a declaration: FTN001 catches known shapes (AWS keys, GitHub/Slack tokens, `sk-`/`ftn_` keys, private key material) at the AST; FTN015 errors on secret-shaped MCP env keys that are not `${VAR}` references.
|
|
@@ -26,4 +26,4 @@ FTN013 warns when an agent references `${VAR}` and its declared environment has
|
|
|
26
26
|
|
|
27
27
|
## Round-trips and their limits
|
|
28
28
|
|
|
29
|
-
`chant import --from` exports live resources but never secrets: values are write-only upstream,
|
|
29
|
+
`chant import --from` exports live resources but never secrets: values are write-only upstream, so there is nothing to read back into `secrets`. Re-declare imported environments' secrets through your secret provider. Upstream discussion of a reference-based model that would fix this: BinaryBourbon/fountain#148.
|
|
@@ -8,7 +8,7 @@ user-invocable: true
|
|
|
8
8
|
|
|
9
9
|
## What this lexicon covers
|
|
10
10
|
|
|
11
|
-
[fountain](https://github.com/
|
|
11
|
+
[fountain](https://github.com/managoat/fountain) runs coding agents in sandboxed VMs. Six kinds are declarable, and this lexicon types all of them. `Environment` (sandbox baseline), `Vault` (env-var overrides) and `Agent` (a runnable agent config) are the workload layer; `Teammate` (an agent seated on the team, with a thread of its own), `Schedule` (a cron prompt into that thread) and `Webhook` (where the estate's events leave it) are the team, schedule and webhook routes. Conversations are runs, not resources: start them with the `fountainRun` op, never declare them.
|
|
12
12
|
|
|
13
13
|
The source of truth is the TypeScript in `src/`. `chant build` serializes it to fountain's own manifest YAML (ejectable — `fountain apply -f` accepts it verbatim). `fountainApply` sends that same YAML to fountain's bulk `POST /api/apply` endpoint in one request: create-if-new, update-by-name, opt-in owned-only prune keyed on the `managed-by: chant` metadata marker. Bulk apply covers Environment, Vault and Agent only — a Teammate, Schedule or Webhook document is emitted and valid, and applying it through its own route waits on chant #2127.
|
|
14
14
|
|
|
@@ -64,6 +64,6 @@ What a client sees:
|
|
|
64
64
|
- A run that stops at an unapproved gate replies with the pending fact and the `chant approve <op> <gate>` line, and the turn ends. The gate is a fact on chant's ledger, not a wait — the next run re-evaluates it.
|
|
65
65
|
- `session/cancel` aborts the in-flight step, runs the op's `onFailure` phases, and ends the turn `cancelled`.
|
|
66
66
|
|
|
67
|
-
`--durable-requests` turns the gated reply into a `session/request_permission` with `allow_once`/`reject_once` and ends the turn `waiting`; the client answers on a later prompt carrying `_meta.chant.permission`, which records the resolution and re-runs. It is off by default because a request that outlives a turn needs
|
|
67
|
+
`--durable-requests` turns the gated reply into a `session/request_permission` with `allow_once`/`reject_once` and ends the turn `waiting`; the client answers on a later prompt carrying `_meta.chant.permission`, which records the resolution and re-runs. It is off by default because a request that outlives a turn needs fountain#1635, which v0.21.0 carries and chant does not answer through yet (chant#2391).
|
|
68
68
|
|
|
69
69
|
The server does not redact. A step's output reaches the thread verbatim and fountain redacts secrets on the way in; chant never reads or prints the environment it was spawned with.
|
package/dist/spec/fetch.d.ts
CHANGED
|
@@ -16,7 +16,10 @@
|
|
|
16
16
|
* The committed snapshot is now only the offline path. It is not a silent
|
|
17
17
|
* substitute for the pin: both routes log which one was taken and at what
|
|
18
18
|
* version, because a fallback nobody can see is how you end up debugging types
|
|
19
|
-
* that came from somewhere you did not expect.
|
|
19
|
+
* that came from somewhere you did not expect. And it is refused outright when
|
|
20
|
+
* its own `info.version` is not the pin (#2389). A bump that changes the
|
|
21
|
+
* constant but not the snapshot would otherwise generate the old surface on
|
|
22
|
+
* any machine without a network and label it with the new version.
|
|
20
23
|
*/
|
|
21
24
|
/**
|
|
22
25
|
* The pinned upstream spec.
|
|
@@ -24,10 +27,13 @@
|
|
|
24
27
|
* v0.3.0 was the first release to carry the `openapi.json` asset. v0.16.0 is
|
|
25
28
|
* the first that describes team, schedules, webhooks, sandboxes and the event
|
|
26
29
|
* stream, which is what the Teammate, Schedule and Webhook kinds are generated
|
|
27
|
-
* from.
|
|
30
|
+
* from. v0.21.0 adds `setup_timeout_seconds` to Environment and describes the
|
|
31
|
+
* acp runtime itself (`runtime: "acp"` and `runtime_command` on Agent, with
|
|
32
|
+
* `model` no longer required), which chant had modeled as an extension until
|
|
33
|
+
* then. Bumping this changes the generated surface, so it belongs in its own
|
|
28
34
|
* commit with the regenerated snapshot beside it.
|
|
29
35
|
*/
|
|
30
|
-
export declare const FOUNTAIN_SPEC_VERSION = "v0.
|
|
36
|
+
export declare const FOUNTAIN_SPEC_VERSION = "v0.21.0";
|
|
31
37
|
/**
|
|
32
38
|
* Fetch the pinned fountain OpenAPI spec, falling back to the committed
|
|
33
39
|
* snapshot when there is no network. Returns a single-entry map — the whole
|
|
@@ -35,5 +41,14 @@ export declare const FOUNTAIN_SPEC_VERSION = "v0.16.0";
|
|
|
35
41
|
*/
|
|
36
42
|
export declare function fetchSchemas(options?: {
|
|
37
43
|
force?: boolean;
|
|
44
|
+
/** The offline fallback's file. Tests point it at a snapshot of another release. */
|
|
45
|
+
snapshotFile?: string;
|
|
38
46
|
}): Promise<Map<string, Buffer>>;
|
|
47
|
+
/**
|
|
48
|
+
* Read the committed snapshot, refusing it when it describes a release other
|
|
49
|
+
* than the pinned one. The spec's `info.version` carries no leading `v`
|
|
50
|
+
* (`0.21.0`) where the release tag does (`v0.21.0`), so both are compared
|
|
51
|
+
* without it.
|
|
52
|
+
*/
|
|
53
|
+
export declare function readSnapshot(file?: string, pinned?: string): Buffer;
|
|
39
54
|
//# sourceMappingURL=fetch.d.ts.map
|
package/dist/spec/fetch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/spec/fetch.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/spec/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAU/C;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAiB/B;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,GAAE,MAAsB,EAAE,MAAM,GAAE,MAA8B,GAAG,MAAM,CAoBzG"}
|
package/dist/spec/parse.d.ts
CHANGED
|
@@ -20,9 +20,11 @@
|
|
|
20
20
|
* add one that reaches the API only as a path parameter (a schedule's
|
|
21
21
|
* teammate), into a by-name reference the serializer resolves and FTN021
|
|
22
22
|
* proves resolvable — the same shape an Agent's `environment` has.
|
|
23
|
-
* - Extensions. A prop chant accepts
|
|
24
|
-
* generated type documents it instead of
|
|
25
|
-
* through `metadata
|
|
23
|
+
* - Extensions. A prop chant accepts that the request schema does not
|
|
24
|
+
* describe, declared here so the generated type documents it instead of
|
|
25
|
+
* leaving authors to smuggle it through `metadata` or a cast. Today that is
|
|
26
|
+
* the inline `secrets` on Environment and Vault, which upstream documents
|
|
27
|
+
* on its manifest format rather than on either request schema.
|
|
26
28
|
*/
|
|
27
29
|
import { type PropertyConstraints } from "@intentius/chant/codegen/json-schema";
|
|
28
30
|
export type { PropertyConstraints };
|
package/dist/spec/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/spec/parse.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/spec/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,sCAAsC,CAAC;AAI9C,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,mBAAmB,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,CAAC;IACzB,0EAA0E;IAC1E,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,iEAAiE;IACjE,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACjD,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA6ID;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,EAAoC,CAAC;AAqBjF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,mBAAmB,EAAE,CA6GjF;AAwKD,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,0DAA0D;AAC1D,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG5D"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -4,20 +4,24 @@
|
|
|
4
4
|
|
|
5
5
|
export declare class Agent {
|
|
6
6
|
constructor(props: {
|
|
7
|
-
model: string;
|
|
8
7
|
name: string;
|
|
9
8
|
runtime: "acp" | "claude" | "codex" | "gemini" | "opencode";
|
|
10
|
-
/** Environments a conversation may launch this agent under instead of its own. Same shape as allowed_vault_ids: null (default) allows any environment the tenant owns; an empty list forbids overriding; a non-empty list is an allowlist. The agent's own environment always passes. */
|
|
9
|
+
/** Environments a conversation may launch this agent under instead of its own (environment_id on create). Same shape as allowed_vault_ids: null (default) allows any environment the tenant owns; an empty list forbids overriding; a non-empty list is an allowlist. The agent's own environment always passes. */
|
|
11
10
|
allowed_environment_ids?: string[];
|
|
11
|
+
/** Credential sets a conversation may launch this agent on instead of the agent's (inference_credential_id on create). Same shape as allowed_vault_ids: null (default) allows any set the tenant owns; an empty list forbids overriding; a non-empty list is an allowlist. The agent's own set always passes. */
|
|
12
|
+
allowed_inference_credential_ids?: string[];
|
|
12
13
|
/** Vaults a conversation may attach to this agent. null (default) allows any vault the tenant owns; an empty list forbids attaching any vault; a non-empty list is an allowlist. */
|
|
13
14
|
allowed_vault_ids?: string[];
|
|
14
15
|
description?: string;
|
|
15
16
|
environment_id?: string;
|
|
17
|
+
/** The credential set this agent's conversations run on. null (default) is the account's default set, which is what every agent had before an account could hold more than one. */
|
|
18
|
+
inference_credential_id?: string;
|
|
16
19
|
mcp_servers?: Record<string, unknown>;
|
|
17
20
|
metadata?: Record<string, unknown>;
|
|
21
|
+
model?: string;
|
|
18
22
|
/** Per-tool permission policy: a map of key to verdict, plus an optional "default" key. A key is matched against the tool card's title first and then ACP's kind (execute, edit, read, fetch, …); prefer a kind, because claude titles a tool call with the command it is about to run. Unset keys fall back to the default, and an unset default is auto_allow. "ask" holds the tool until a human answers it on the conversation stream, and denies if nobody does before the timeout. A conversation may narrow this at launch, never widen it. A runtime that never asks (opencode) refuses anything stricter than auto_allow with 422 permission_policy_unenforceable. */
|
|
19
|
-
permission_policy?: Record<string, "ask" | "auto_allow" | "auto_deny">;
|
|
20
|
-
/** The command
|
|
23
|
+
permission_policy?: Record<string, "ask" | "auto_allow" | "auto_deny" | number>;
|
|
24
|
+
/** The command the acp runtime launches inside the sandbox, as a shell line resolved there (for example `chant acp`). Required when runtime is acp, and rejected on every other runtime, which resolves its own executable. A free string by design: it runs under the same isolation as an environment's setup script. */
|
|
21
25
|
runtime_command?: string;
|
|
22
26
|
/** Where a conversation of this agent runs by default (ADR 0023). ephemeral: a sandbox per conversation, reclaimed with it. persistent: one sandbox per agent identity (agent, environment, vault) — the agent's computer — that every conversation of that identity lands on and shares; it survives a conversation ending and is parked, not destroyed, at the ceiling. A launch may name the other with sandbox_mode on POST /api/conversations. */
|
|
23
27
|
sandbox_mode?: "ephemeral" | "persistent";
|
|
@@ -45,10 +49,13 @@ export declare class Environment {
|
|
|
45
49
|
networking_type?: "limited" | "unrestricted";
|
|
46
50
|
packages?: Record<string, unknown>;
|
|
47
51
|
repositories?: Repository[];
|
|
52
|
+
/** Secrets upserted with the resource at apply, as key/value pairs; fountainApply sends them as the manifest's inline `secrets` map. Values are write-only upstream and can never be read back or diffed. Write a reference that resolves at build (an env var, a secret-manager lookup), never a literal: FTN001 flags a literal here as it does anywhere else in a declaration. */
|
|
53
|
+
secrets?: { key: string; value: string }[];
|
|
48
54
|
setup_script?: string;
|
|
55
|
+
/** Setup exec timeout in seconds; defaults to 120. The overall provisioning deadline still applies. */
|
|
56
|
+
setup_timeout_seconds?: number;
|
|
49
57
|
});
|
|
50
58
|
readonly agent_count: number;
|
|
51
|
-
readonly allowed_environment_ids: string[];
|
|
52
59
|
readonly id: string;
|
|
53
60
|
readonly inserted_at: string;
|
|
54
61
|
readonly secret_count: number;
|
|
@@ -87,7 +94,6 @@ export declare class Teammate {
|
|
|
87
94
|
/** Layer this vault's secrets on top. Must satisfy allowed_vault_ids. */
|
|
88
95
|
vault?: Vault | string;
|
|
89
96
|
});
|
|
90
|
-
readonly contact: Record<string, unknown>;
|
|
91
97
|
readonly conversation: Record<string, unknown>;
|
|
92
98
|
readonly last_turn: Record<string, unknown>;
|
|
93
99
|
readonly presence: Record<string, unknown>;
|
|
@@ -101,6 +107,8 @@ export declare class Vault {
|
|
|
101
107
|
name: string;
|
|
102
108
|
description?: string;
|
|
103
109
|
metadata?: Record<string, unknown>;
|
|
110
|
+
/** Secrets upserted with the resource at apply, as key/value pairs; fountainApply sends them as the manifest's inline `secrets` map. Values are write-only upstream and can never be read back or diffed. Write a reference that resolves at build (an env var, a secret-manager lookup), never a literal: FTN001 flags a literal here as it does anywhere else in a declaration. */
|
|
111
|
+
secrets?: { key: string; value: string }[];
|
|
104
112
|
});
|
|
105
113
|
readonly id: string;
|
|
106
114
|
readonly inserted_at: string;
|