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 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.0...HEAD
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tinker-agent",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "A personal coding agent with an interactive TUI and one-shot CLI.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -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 (