tinker-agent 1.2.0 → 1.2.1
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/CHANGELOG.md +11 -1
- package/package.json +1 -1
- package/src/skills/skill-loader.ts +0 -20
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,15 @@ All notable user-facing changes to Tinker are documented here. The project follo
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [1.2.1] - 2026-07-22
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Ignore unrecognized top-level Agent Skill frontmatter fields while continuing to
|
|
13
|
+
validate Tinker's supported fields, so harmless extensions such as `version` no
|
|
14
|
+
longer prevent the CLI from starting. Unknown fields remain available in the
|
|
15
|
+
original `SKILL.md` content when the skill is activated.
|
|
16
|
+
|
|
8
17
|
## [1.2.0] - 2026-07-21
|
|
9
18
|
|
|
10
19
|
### Added
|
|
@@ -31,6 +40,7 @@ All notable user-facing changes to Tinker are documented here. The project follo
|
|
|
31
40
|
- First formal npm release under the `tinker-agent` package name with the `tinker`
|
|
32
41
|
executable.
|
|
33
42
|
|
|
34
|
-
[Unreleased]: https://github.com/ishowshao/tinker/compare/v1.2.
|
|
43
|
+
[Unreleased]: https://github.com/ishowshao/tinker/compare/v1.2.1...HEAD
|
|
44
|
+
[1.2.1]: https://github.com/ishowshao/tinker/releases/tag/v1.2.1
|
|
35
45
|
[1.2.0]: https://github.com/ishowshao/tinker/releases/tag/v1.2.0
|
|
36
46
|
[1.1.0]: https://www.npmjs.com/package/tinker-agent/v/1.1.0
|
package/package.json
CHANGED
|
@@ -86,15 +86,6 @@ type ScopeRoot = {
|
|
|
86
86
|
canonicalRoot: string;
|
|
87
87
|
};
|
|
88
88
|
|
|
89
|
-
const SKILL_FIELDS = Object.freeze([
|
|
90
|
-
"name",
|
|
91
|
-
"description",
|
|
92
|
-
"license",
|
|
93
|
-
"compatibility",
|
|
94
|
-
"metadata",
|
|
95
|
-
"allowed-tools",
|
|
96
|
-
] as const);
|
|
97
|
-
|
|
98
89
|
const SKILL_NAME_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
99
90
|
|
|
100
91
|
export async function loadSkillCatalog(input: {
|
|
@@ -519,17 +510,6 @@ function parseSkillDocument(
|
|
|
519
510
|
if (!isPlainRecord(value)) {
|
|
520
511
|
throw frontmatterError(scope, directoryName, "root must be a plain mapping");
|
|
521
512
|
}
|
|
522
|
-
const unknown = Object.keys(value).filter(
|
|
523
|
-
(key) => !(SKILL_FIELDS as readonly string[]).includes(key),
|
|
524
|
-
);
|
|
525
|
-
if (unknown.length > 0) {
|
|
526
|
-
throw fieldError(
|
|
527
|
-
scope,
|
|
528
|
-
directoryName,
|
|
529
|
-
`contains unknown field ${JSON.stringify(unknown.sort(compareText)[0])}`,
|
|
530
|
-
);
|
|
531
|
-
}
|
|
532
|
-
|
|
533
513
|
const name = requireStringField(value, "name", scope, directoryName);
|
|
534
514
|
const description = requireStringField(value, "description", scope, directoryName);
|
|
535
515
|
if (
|