@zibby/skill-ids 0.1.0 → 0.2.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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.js +63 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zibby/skill-ids",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Single authoritative Zibby skill-id map (zero-dep leaf). The one source of truth for well-known skill ids — every consumer (agent-workflow, core, skills, backend, templates) imports it, so the ids can never drift.",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
package/src/index.js CHANGED
@@ -142,9 +142,67 @@ export const SKILL_IDS = Object.freeze({
142
142
 
143
143
  /**
144
144
  * SKILL_META — pure-data static metadata per id (toggleable / requiresIntegration
145
- * / tier / display / binary). STUB for now: Phase 2 of the skills-platform
146
- * migration populates this and points each skill object's `meta` at
147
- * SKILL_META[id]. Exported empty today so P2 can fill it without another wiring
148
- * change. See strategy/skills-platform-architecture.md.
145
+ * / tier / display / binary). Phase 2 of the skills-platform migration.
146
+ *
147
+ * This is the SINGLE SOURCE OF TRUTH for a skill's toggle metadata. Every one of
148
+ * the five toggle surfaces derives from here:
149
+ * 1. engine gate — the skill object sets `meta = SKILL_META[id]` by
150
+ * reference (@zibby/skills), and claude-strategy's
151
+ * isToggleableOff() reads `skill.meta.toggleable`.
152
+ * 2. backend registry — a build-emitted JSON manifest (backend cannot ESM-
153
+ * import() this ESM leaf: it's CJS, this isn't a backend
154
+ * dep, and the .jsc control-plane can't dynamic-import) —
155
+ * see backend/scripts/gen-skill-meta.mjs →
156
+ * backend/src/services/skill-meta.json.
157
+ * 3. cloud marketplace sync, 4. self-host deploy, 5. self-host catalog list —
158
+ * all flow from the backend registry (#2).
159
+ *
160
+ * Shape per id:
161
+ * { toggleable, requiresIntegration, tier, display:{ name, description },
162
+ * binary?:{ name, version, sha256 } }
163
+ *
164
+ * A skill absent from this map is "not toggleable" (the default for everything
165
+ * except the two no-connection toggleable skills). Ids are append-only (see the
166
+ * governance note above). Objects are DEEP-frozen so a skill object that shares a
167
+ * `meta` reference cannot mutate the static map.
168
+ *
169
+ * NOTE (byte-identical contract): `display.name`/`display.description` MUST equal
170
+ * the strings the backend previously hardcoded in NO_INTEGRATION_TOGGLEABLE_SKILLS
171
+ * (skill-integrations.js) — the backend now derives that map from here, so any
172
+ * edit changes the marketplace/status display. See strategy/skills-platform-architecture.md.
149
173
  */
150
- export const SKILL_META = Object.freeze({});
174
+ const deepFreeze = (o) => {
175
+ if (o && typeof o === 'object' && !Object.isFrozen(o)) {
176
+ Object.values(o).forEach(deepFreeze);
177
+ Object.freeze(o);
178
+ }
179
+ return o;
180
+ };
181
+
182
+ export const SKILL_META = deepFreeze({
183
+ 'codebase-memory': {
184
+ toggleable: true,
185
+ requiresIntegration: false,
186
+ tier: 2,
187
+ display: {
188
+ name: 'Codebase memory',
189
+ description:
190
+ 'Code-graph + semantic index over the checked-out repo (architecture map, '
191
+ + 'dependency/call-path tracing, change detection). Runs locally on the '
192
+ + 'agent image — no connection required.',
193
+ },
194
+ },
195
+ 'code-scan': {
196
+ toggleable: true,
197
+ requiresIntegration: false,
198
+ tier: 2,
199
+ display: {
200
+ name: 'Code scan',
201
+ description:
202
+ 'Stack-smart deterministic linter (oxlint for JS/TS, …). Detects the repo\'s '
203
+ + 'stack and runs the matching baked linter over the changed code, feeding '
204
+ + 'structured findings to the reviewer. Runs locally on the agent image — '
205
+ + 'no connection required.',
206
+ },
207
+ },
208
+ });