@su-record/vibe 4.2.39 → 4.2.40
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/dist/cli/common.js +1 -1
- package/dist/cli/heldout.js +3 -3
- package/dist/cli/heldout.js.map +1 -1
- package/dist/cli/human.js +4 -3
- package/dist/cli/human.js.map +1 -1
- package/dist/cli/memory.js +16 -2
- package/dist/cli/memory.js.map +1 -1
- package/dist/cli/setup.js +3 -1
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/work.js +3 -1
- package/dist/cli/work.js.map +1 -1
- package/dist/core/catalogs.js +49 -0
- package/dist/core/catalogs.js.map +1 -0
- package/dist/core/config.js +8 -3
- package/dist/core/config.js.map +1 -1
- package/dist/core/github.js +14 -0
- package/dist/core/github.js.map +1 -1
- package/dist/core/intent.js +6 -6
- package/dist/core/intent.js.map +1 -1
- package/dist/core/research.js +34 -38
- package/dist/core/research.js.map +1 -1
- package/dist/core/skill-index.js +177 -0
- package/dist/core/skill-index.js.map +1 -0
- package/hooks/locations.cjs +1 -1
- package/hooks/notify.js +29 -9
- package/internal/guides/extensions.md +1 -1
- package/internal/skills/vibe-scope/SKILL.md +1 -1
- package/package.json +1 -1
package/dist/core/github.js
CHANGED
|
@@ -4,6 +4,9 @@ import { usage } from './errors.js';
|
|
|
4
4
|
const API = 'https://api.github.com';
|
|
5
5
|
const ACCEPT = 'application/vnd.github+json';
|
|
6
6
|
const USER_AGENT = 'vibe-4';
|
|
7
|
+
const RAW = 'https://raw.githubusercontent.com';
|
|
8
|
+
/** A fixture key for `raw`: `raw:owner/repo/path`. */
|
|
9
|
+
const RAW_FIXTURE_PREFIX = 'raw:';
|
|
7
10
|
export function githubToken() {
|
|
8
11
|
const env = process.env['GITHUB_TOKEN'] ?? process.env['GH_TOKEN'];
|
|
9
12
|
if (env)
|
|
@@ -16,6 +19,10 @@ export function fixtureClient(file) {
|
|
|
16
19
|
const map = readJson(file) ?? {};
|
|
17
20
|
return {
|
|
18
21
|
authenticated: true,
|
|
22
|
+
raw: (repo, file) => {
|
|
23
|
+
const text = map[`${RAW_FIXTURE_PREFIX}${repo}/${file}`];
|
|
24
|
+
return typeof text === 'string' ? Promise.resolve(text) : Promise.reject(usage(`fixture has no file ${repo}/${file}`));
|
|
25
|
+
},
|
|
19
26
|
get: (apiPath) => {
|
|
20
27
|
const key = Object.keys(map).find((k) => apiPath.includes(k));
|
|
21
28
|
if (key === undefined)
|
|
@@ -34,6 +41,13 @@ export function githubClient() {
|
|
|
34
41
|
headers['authorization'] = `Bearer ${token}`;
|
|
35
42
|
return {
|
|
36
43
|
authenticated: token !== null,
|
|
44
|
+
raw: async (repo, file) => {
|
|
45
|
+
const encoded = file.split('/').map(encodeURIComponent).join('/');
|
|
46
|
+
const response = await fetch(`${RAW}/${repo}/HEAD/${encoded}`, { headers: { 'user-agent': USER_AGENT } });
|
|
47
|
+
if (!response.ok)
|
|
48
|
+
throw usage(`github ${response.status} for ${repo}/${file}`);
|
|
49
|
+
return response.text();
|
|
50
|
+
},
|
|
37
51
|
get: async (apiPath) => {
|
|
38
52
|
let response;
|
|
39
53
|
try {
|
package/dist/core/github.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/core/github.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/core/github.ts"],"names":[],"mappings":"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"}
|
package/dist/core/intent.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { captureRiskBase } from './risk-signals.js';
|
|
2
2
|
import { createHash } from 'node:crypto';
|
|
3
3
|
import { detectClient, detectModel } from './client.js';
|
|
4
|
-
import { approvalNeedsToken, readConfig } from './config.js';
|
|
4
|
+
import { approvalNeedsToken, personRuns, readConfig } from './config.js';
|
|
5
5
|
import { denied, usage } from './errors.js';
|
|
6
6
|
import { openQuestions, resolve as resolveQuestion } from './inbox.js';
|
|
7
7
|
import { record } from './ledger.js';
|
|
@@ -100,9 +100,9 @@ export function draft(root, intentText, scenariosText, sources) {
|
|
|
100
100
|
return { ok: true, hash, scenarios: parsed.scenarios, token, tokenId, expiresAt, policy };
|
|
101
101
|
}
|
|
102
102
|
/**
|
|
103
|
-
* APPROVED — under `strict` only a human token does it;
|
|
104
|
-
*
|
|
105
|
-
* target hash no longer matches.
|
|
103
|
+
* APPROVED — under `strict` only a human token does it; under `human` the person's own command (the hook
|
|
104
|
+
* stops the model's) is recorded as "by command"; otherwise a plain approve is recorded as "by chat".
|
|
105
|
+
* Either way the ledger says how it was approved. If the intent changed, the old token's target hash no longer matches.
|
|
106
106
|
*/
|
|
107
107
|
export function approve(root, token) {
|
|
108
108
|
const state = readState(root);
|
|
@@ -132,8 +132,8 @@ export function approve(root, token) {
|
|
|
132
132
|
// person's policy decides whether that needs a token (only `strict` does, as for any approval);
|
|
133
133
|
// either way the changed files are named to the user and in the ledger, so the act is visible.
|
|
134
134
|
const regraded = renewal ? changedVerifiers(root, plan) : [];
|
|
135
|
-
let basis = 'chat';
|
|
136
|
-
let by =
|
|
135
|
+
let basis = personRuns(policy) ? 'command' : 'chat';
|
|
136
|
+
let by = `human:${basis}`;
|
|
137
137
|
if (approvalNeedsToken(policy) || token) {
|
|
138
138
|
if (!token)
|
|
139
139
|
throw denied('this project requires a human token to approve (tokens: strict)');
|
package/dist/core/intent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/core/intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/core/intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAiC,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAwB,MAAM,mBAAmB,CAAC;AAC3H,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,2FAA2F;AAC3F,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAClE,MAAM,eAAe,GAAG,QAAQ,CAAC;AAEjC,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACrC,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAkB,EAAE,aAAqB,EAAE,UAA6B,EAAE;IACnG,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7F,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACrF,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7B,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,uFAAuF;AACvF,SAAS,UAAU,CAAC,CAAW;IAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACxG,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,IAAgB;IACjD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,QAAQ,CAA0B,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1E,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAoB,EAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtH,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC;AAMD;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,UAAkB,EAAE,aAAqB,EAAE,OAAkB;IAC/F,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QAAE,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IACtF,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;IACvH,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClD,kFAAkF;IAClF,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC;IAC9E,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,CAAC;IAC1F,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC;IAC1C,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACnF,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACjD,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IAC1C,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;IAChD,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACnC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE;QACxB,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,IAAI;QAClB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,MAAM,KAAK,GAAG,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAqB,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvI,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpG,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC/F,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC5F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,KAAoB;IACxD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IACrF,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,MAAM,MAAM,CAAC,qCAAqC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IAClI,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;IAC/G,IAAI,OAAO,KAAK,KAAK,CAAC,UAAU;QAAE,MAAM,MAAM,CAAC,8EAA8E,CAAC,CAAC;IAC/H,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnD,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5F,MAAM,MAAM,CAAC,8CAA8C,KAAK,iEAAiE,CAAC,CAAC;IACrI,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACnF,6HAA6H;IAC7H,MAAM,OAAO,GAAG,KAAK,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACjI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,MAAM,CAAC,kCAAkC,GAAG,iGAAiG,CAAC,CAAC;IACvJ,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,+FAA+F;IAC/F,gGAAgG;IAChG,+FAA+F;IAC/F,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,IAAI,KAAK,GAAiC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAClF,IAAI,EAAE,GAAG,SAAS,KAAK,EAAE,CAAC;IAC1B,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK;YAAE,MAAM,MAAM,CAAC,iEAAiE,CAAC,CAAC;QAC5F,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3E,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9C,KAAK,GAAG,OAAO,CAAC;QAChB,EAAE,GAAG,eAAe,OAAO,CAAC,EAAE,EAAE,CAAC;IACnC,CAAC;IACD,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,IAAI,CAAC,OAAO;QAAE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACrF,KAAK,MAAM,QAAQ,IAAI,OAAO;QAAE,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,OAAO,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAwB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACxH,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,YAAqB,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5F,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAChG,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,MAAc;IAClD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC7D,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AACnG,CAAC"}
|
package/dist/core/research.js
CHANGED
|
@@ -10,14 +10,15 @@ import { githubClient } from './github.js';
|
|
|
10
10
|
import { record } from './ledger.js';
|
|
11
11
|
import { vibePath } from './paths.js';
|
|
12
12
|
import { queriesFromIntent, tokens, TERM_MIN_LENGTH } from './research-queries.js';
|
|
13
|
+
import { indexCatalogs, skillDirsInTree, usability } from './skill-index.js';
|
|
13
14
|
import { readJson, writeAtomic, writeJson, nowIso } from './store.js';
|
|
14
|
-
export { queriesFromIntent };
|
|
15
|
+
export { queriesFromIntent, skillDirsInTree };
|
|
15
16
|
export const SOURCES = ['repos', 'code', 'skills'];
|
|
16
17
|
const CACHE_TTL_MS = DAY_MS;
|
|
17
18
|
/** A result with warnings (a source was down) is kept only briefly, so the next run tries again. */
|
|
18
19
|
const WARNED_CACHE_TTL_MS = 5 * 60 * 1000;
|
|
19
20
|
/** Bumped when the cached shape or the sources change, so an old cache is not read as a current answer. */
|
|
20
|
-
const CACHE_KEY_VERSION = '
|
|
21
|
+
const CACHE_KEY_VERSION = 'skill-index-v2';
|
|
21
22
|
const CACHE_KEY_LENGTH = 16;
|
|
22
23
|
const DEFAULT_MAX = 5;
|
|
23
24
|
const DEFAULT_DAYS = 30;
|
|
@@ -86,41 +87,37 @@ function fromCode(item, queryTokens) {
|
|
|
86
87
|
const reason = why(s.matched, updatedAt, null, license);
|
|
87
88
|
return { kind: 'skill', ref, url, why: reason, stars: null, updatedAt, license, action: `vibe skill add ${ref}`, score: s.score };
|
|
88
89
|
}
|
|
89
|
-
/**
|
|
90
|
-
|
|
90
|
+
/**
|
|
91
|
+
* A catalog skill ranks by how many query words its name or description holds; a word in the name, the install
|
|
92
|
+
* mode and the catalog's stars only order skills that match as many words.
|
|
93
|
+
*/
|
|
94
|
+
const NAME_POINTS = 0.5;
|
|
95
|
+
const INSTALL_POINTS = { direct: 1, adjust: 0.5, convert: 0 };
|
|
96
|
+
const CATALOG_STARS_DIVISOR = 2;
|
|
97
|
+
const CATALOG_STARS_MAX = 2;
|
|
98
|
+
/** Catalog skills from the index, matched on the name and the description, each saying how Claude and Codex can use it. */
|
|
99
|
+
async function catalogCandidates(client, catalogs, queryTokens) {
|
|
100
|
+
const { indexes } = await indexCatalogs(client, catalogs);
|
|
91
101
|
const out = [];
|
|
92
|
-
for (const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const out = [];
|
|
112
|
-
for (const { name, dir } of skillDirsInTree(entries)) {
|
|
113
|
-
const leaf = path.posix.basename(name);
|
|
114
|
-
const matchesName = (t) => name.toLowerCase().includes(t)
|
|
115
|
-
|| (t.length >= PREFIX_MATCH_LENGTH && leaf.includes(t.slice(0, PREFIX_MATCH_LENGTH)));
|
|
116
|
-
const matched = queryTokens.filter(matchesName);
|
|
117
|
-
if (matched.length === 0)
|
|
118
|
-
continue;
|
|
119
|
-
const ref = `${catalog}@${name}`;
|
|
120
|
-
out.push({
|
|
121
|
-
kind: 'skill', ref, url: `${GITHUB_WEB}/${catalog}/tree/HEAD/${dir}`, why: `catalog ${catalog} · matches "${matched.join(', ')}"`,
|
|
122
|
-
stars: null, updatedAt: null, license: null, action: `vibe skill add ${ref}`, score: matched.length * MATCH_POINTS + 2,
|
|
123
|
-
});
|
|
102
|
+
for (const index of indexes) {
|
|
103
|
+
for (const skill of index.skills) {
|
|
104
|
+
const leaf = path.posix.basename(skill.name);
|
|
105
|
+
const inName = (t) => skill.name.toLowerCase().includes(t)
|
|
106
|
+
|| (t.length >= PREFIX_MATCH_LENGTH && leaf.includes(t.slice(0, PREFIX_MATCH_LENGTH)));
|
|
107
|
+
const named = queryTokens.filter(inName);
|
|
108
|
+
const described = queryTokens.filter((t) => !named.includes(t) && skill.description.toLowerCase().includes(t));
|
|
109
|
+
if (named.length + described.length === 0)
|
|
110
|
+
continue;
|
|
111
|
+
const ref = `${index.repo}@${skill.name}`;
|
|
112
|
+
const stars = index.stars;
|
|
113
|
+
const score = (named.length + described.length) * MATCH_POINTS + named.length * NAME_POINTS + INSTALL_POINTS[skill.install]
|
|
114
|
+
+ (stars ? Math.min(Math.log10(stars) / CATALOG_STARS_DIVISOR, CATALOG_STARS_MAX) : 0);
|
|
115
|
+
out.push({
|
|
116
|
+
kind: 'skill', ref, url: `${GITHUB_WEB}/${index.repo}/tree/HEAD/${skill.dir}`,
|
|
117
|
+
why: `catalog ${index.repo} (${index.domain}) · matches "${[...named, ...described].join(', ')}" · ${usability(skill)}`,
|
|
118
|
+
stars, updatedAt: null, license: index.license, action: `vibe skill add ${ref}`, score,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
124
121
|
}
|
|
125
122
|
return out;
|
|
126
123
|
}
|
|
@@ -157,8 +154,7 @@ async function search(client, queries, sources, catalogs) {
|
|
|
157
154
|
}
|
|
158
155
|
}
|
|
159
156
|
if (sources.includes('skills'))
|
|
160
|
-
|
|
161
|
-
found.push(...(await catalogCandidates(client, catalog, queryTokens)));
|
|
157
|
+
found.push(...(await catalogCandidates(client, catalogs, queryTokens)));
|
|
162
158
|
const byRef = new Map();
|
|
163
159
|
// A candidate none of the query words describe is noise, whatever search returned it; so is one that matches only words under four letters.
|
|
164
160
|
for (const c of found) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/core/research.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/core/research.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import YAML from 'yaml';
|
|
3
|
+
import { catalogDomain } from './catalogs.js';
|
|
4
|
+
import { defaultHome, FOLDERS, vibeConfig } from './locations.js';
|
|
5
|
+
import { DAY_MS } from './recent.js';
|
|
6
|
+
import { readJson, writeJson, nowIso } from './store.js';
|
|
7
|
+
const INDEX_VERSION = 2;
|
|
8
|
+
/** SKILL.md files read at once while a catalog is indexed. */
|
|
9
|
+
const READ_CONCURRENCY = 16;
|
|
10
|
+
const DESCRIPTION_MAX = 300;
|
|
11
|
+
const SCRIPT_FILE = /\.(py|js|mjs|cjs|ts|sh)$/;
|
|
12
|
+
/** Text that only works where the skill was written: Claude's plugin folder and subagent tool, Codex's own commands. */
|
|
13
|
+
const CONVERT_SIGNS = [
|
|
14
|
+
[/CLAUDE_PLUGIN_ROOT/, 'Claude plugin path CLAUDE_PLUGIN_ROOT'],
|
|
15
|
+
[/subagent_type|\bTask tool\b/, 'Claude subagent tool'],
|
|
16
|
+
[/\bclaude plugin\b|\/plugin install/, 'Claude plugin command'],
|
|
17
|
+
];
|
|
18
|
+
/** Tool names one host has and the other lacks; the model can usually substitute them. */
|
|
19
|
+
const ADJUST_SIGNS = [
|
|
20
|
+
[/\b(AskUserQuestion|TodoWrite|ExitPlanMode|WebFetch)\b/, 'Claude tool name'],
|
|
21
|
+
[/\bclaude -p\b/, 'Claude CLI call'],
|
|
22
|
+
[/\bcodex exec\b|\brequest_user_input\b/, 'Codex-only command'],
|
|
23
|
+
];
|
|
24
|
+
const MCP_SIGN = /\bmcp__|\bMCP server\b/i;
|
|
25
|
+
/** One tree request per catalog; a skill is any directory holding SKILL.md, at any depth under `skills/` or the root. */
|
|
26
|
+
export function skillDirsInTree(entries) {
|
|
27
|
+
const out = [];
|
|
28
|
+
for (const e of entries) {
|
|
29
|
+
if (e.type !== 'blob' || !e.path || path.posix.basename(e.path) !== 'SKILL.md')
|
|
30
|
+
continue;
|
|
31
|
+
const dir = path.posix.dirname(e.path);
|
|
32
|
+
if (dir === '.' || dir.includes('node_modules') || dir.includes('/tests/'))
|
|
33
|
+
continue;
|
|
34
|
+
out.push({ name: dir.startsWith('skills/') ? dir.slice('skills/'.length) : dir, dir });
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
function frontmatter(text) {
|
|
39
|
+
const block = /^---\r?\n([\s\S]*?)\r?\n---/.exec(text)?.[1];
|
|
40
|
+
if (!block)
|
|
41
|
+
return { name: '', description: '' };
|
|
42
|
+
try {
|
|
43
|
+
const data = YAML.parse(block);
|
|
44
|
+
const field = (key) => (typeof data?.[key] === 'string' ? data[key].trim() : '');
|
|
45
|
+
return { name: field('name'), description: field('description') };
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return { name: '', description: '' };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Whether a skill runs on Claude and Codex as is, after adjusting a few lines, or only after conversion. */
|
|
52
|
+
export function classifySkill(text, files) {
|
|
53
|
+
const fm = frontmatter(text);
|
|
54
|
+
const reasons = [];
|
|
55
|
+
for (const [sign, reason] of CONVERT_SIGNS)
|
|
56
|
+
if (sign.test(text))
|
|
57
|
+
reasons.push(reason);
|
|
58
|
+
const converts = reasons.length > 0;
|
|
59
|
+
for (const [sign, reason] of ADJUST_SIGNS)
|
|
60
|
+
if (sign.test(text))
|
|
61
|
+
reasons.push(reason);
|
|
62
|
+
if (!fm.name || !fm.description)
|
|
63
|
+
reasons.push('frontmatter lacks name or description');
|
|
64
|
+
const needs = [];
|
|
65
|
+
if (files.some((f) => SCRIPT_FILE.test(f)))
|
|
66
|
+
needs.push('scripts');
|
|
67
|
+
if (MCP_SIGN.test(text))
|
|
68
|
+
needs.push('MCP server');
|
|
69
|
+
const install = converts ? 'convert' : reasons.length > 0 || needs.includes('MCP server') ? 'adjust' : 'direct';
|
|
70
|
+
return { description: fm.description.slice(0, DESCRIPTION_MAX), install, reasons, needs };
|
|
71
|
+
}
|
|
72
|
+
async function readSkill(client, repo, file) {
|
|
73
|
+
if (client.raw)
|
|
74
|
+
return client.raw(repo, file);
|
|
75
|
+
const entry = (await client.get(`/repos/${repo}/contents/${file}`));
|
|
76
|
+
if (typeof entry.content !== 'string')
|
|
77
|
+
return '';
|
|
78
|
+
return entry.encoding === 'base64' ? Buffer.from(entry.content, 'base64').toString('utf-8') : entry.content;
|
|
79
|
+
}
|
|
80
|
+
async function mapPool(items, limit, fn) {
|
|
81
|
+
const out = new Array(items.length);
|
|
82
|
+
let next = 0;
|
|
83
|
+
const worker = async () => {
|
|
84
|
+
while (next < items.length) {
|
|
85
|
+
const i = next++;
|
|
86
|
+
out[i] = await fn(items[i]);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
await Promise.all(Array.from({ length: Math.min(limit, items.length) }, worker));
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
/** A skill a catalog also ships as a build or example copy (same folder name and description) is kept once, at its shortest path. */
|
|
93
|
+
function withoutCopies(skills) {
|
|
94
|
+
const kept = new Map();
|
|
95
|
+
for (const skill of skills) {
|
|
96
|
+
const key = `${path.posix.basename(skill.dir)}\n${skill.description}`;
|
|
97
|
+
const seen = kept.get(key);
|
|
98
|
+
if (!seen || skill.dir.length < seen.dir.length)
|
|
99
|
+
kept.set(key, skill);
|
|
100
|
+
}
|
|
101
|
+
return [...kept.values()];
|
|
102
|
+
}
|
|
103
|
+
function indexFile(home, repo) {
|
|
104
|
+
return vibeConfig(home, FOLDERS.skillIndex, `${repo.replace('/', '__')}.json`);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* A catalog's index: the saved one while it was checked today or its tree is unchanged, else rebuilt (always with
|
|
108
|
+
* `refresh`, or when it was built by another version). A catalog GitHub cannot answer keeps its saved index; with
|
|
109
|
+
* none saved it is left out (null).
|
|
110
|
+
*/
|
|
111
|
+
export async function catalogIndex(client, repo, options = {}) {
|
|
112
|
+
const file = indexFile(options.home ?? defaultHome(), repo);
|
|
113
|
+
const now = options.now ?? Date.now();
|
|
114
|
+
const stored = readJson(file);
|
|
115
|
+
const saved = stored?.version === INDEX_VERSION ? stored : null;
|
|
116
|
+
if (saved && !options.refresh && now - new Date(saved.checkedAt).getTime() < DAY_MS)
|
|
117
|
+
return saved;
|
|
118
|
+
let tree;
|
|
119
|
+
try {
|
|
120
|
+
tree = (await client.get(`/repos/${repo}/git/trees/HEAD?recursive=1`));
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return stored;
|
|
124
|
+
}
|
|
125
|
+
const checkedAt = new Date(now).toISOString();
|
|
126
|
+
if (saved && !options.refresh && tree.sha && saved.tree === tree.sha) {
|
|
127
|
+
const kept = { ...saved, checkedAt };
|
|
128
|
+
writeJson(file, kept);
|
|
129
|
+
return kept;
|
|
130
|
+
}
|
|
131
|
+
let meta = {};
|
|
132
|
+
try {
|
|
133
|
+
meta = (await client.get(`/repos/${repo}`));
|
|
134
|
+
}
|
|
135
|
+
catch { /* stars and license stay unknown */ }
|
|
136
|
+
const entries = tree.tree ?? [];
|
|
137
|
+
const skills = await mapPool(skillDirsInTree(entries), READ_CONCURRENCY, async ({ name, dir }) => {
|
|
138
|
+
const files = entries.filter((e) => e.type === 'blob' && e.path?.startsWith(`${dir}/`)).map((e) => e.path);
|
|
139
|
+
let text = '';
|
|
140
|
+
try {
|
|
141
|
+
text = await readSkill(client, repo, `${dir}/SKILL.md`);
|
|
142
|
+
}
|
|
143
|
+
catch { /* indexed by its name alone */ }
|
|
144
|
+
return { name, dir, ...classifySkill(text, files) };
|
|
145
|
+
});
|
|
146
|
+
const index = {
|
|
147
|
+
version: INDEX_VERSION, repo, domain: catalogDomain(repo), tree: tree.sha ?? nowIso(), checkedAt,
|
|
148
|
+
stars: meta.stargazers_count ?? null, license: meta.license?.spdx_id ?? null, skills: withoutCopies(skills),
|
|
149
|
+
};
|
|
150
|
+
writeJson(file, index);
|
|
151
|
+
return index;
|
|
152
|
+
}
|
|
153
|
+
/** Every catalog's index; the ones GitHub could not answer and that have none saved are named in `missing`. */
|
|
154
|
+
export async function indexCatalogs(client, catalogs, options = {}) {
|
|
155
|
+
const indexes = [];
|
|
156
|
+
const missing = [];
|
|
157
|
+
for (const repo of catalogs) {
|
|
158
|
+
const index = await catalogIndex(client, repo, options);
|
|
159
|
+
if (index)
|
|
160
|
+
indexes.push(index);
|
|
161
|
+
else
|
|
162
|
+
missing.push(repo);
|
|
163
|
+
}
|
|
164
|
+
return { indexes, missing };
|
|
165
|
+
}
|
|
166
|
+
const HOW = {
|
|
167
|
+
direct: 'Claude and Codex: install as is',
|
|
168
|
+
adjust: 'Claude and Codex after adjusting',
|
|
169
|
+
convert: 'as is on Claude only; Codex needs conversion',
|
|
170
|
+
};
|
|
171
|
+
/** How a skill can be used, for the line a search shows: the mode, its reasons and what it needs. */
|
|
172
|
+
export function usability(skill) {
|
|
173
|
+
const reasons = skill.reasons.length ? ` (${skill.reasons.join(', ')})` : '';
|
|
174
|
+
const needs = skill.needs.length ? ` · needs ${skill.needs.join(', ')}` : '';
|
|
175
|
+
return `${HOW[skill.install]}${reasons}${needs}`;
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=skill-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-index.js","sourceRoot":"","sources":["../../src/core/skill-index.ts"],"names":[],"mappings":"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"}
|
package/hooks/locations.cjs
CHANGED
|
@@ -27,7 +27,7 @@ const SETTINGS = {
|
|
|
27
27
|
retest: 'retest.json',
|
|
28
28
|
};
|
|
29
29
|
/** Folders under ~/.config/vibe. */
|
|
30
|
-
const FOLDERS = { knowledge: 'knowledge', reader: 'reader', plugin: 'plugin' };
|
|
30
|
+
const FOLDERS = { knowledge: 'knowledge', reader: 'reader', plugin: 'plugin', skillIndex: 'skill-index' };
|
|
31
31
|
|
|
32
32
|
module.exports = {
|
|
33
33
|
CLAUDE_DIR, CODEX_DIR, AGENTS_DIR, VIBE_CONFIG_DIR, SETTINGS, FOLDERS,
|
package/hooks/notify.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* post PostToolUse(Edit|Write): runs `vibe state --json` and tells the model about a voided DONE or open inbox items.
|
|
6
6
|
* pre PreToolUse(Bash): an irreversible command with no recent authorize record is blocked (exit 2) under the
|
|
7
|
-
* strict and
|
|
7
|
+
* strict, irreversible and human token policies, and only warned about under off. Under human the model's
|
|
8
|
+
* own approve, authorize, held-out seal or drop and inbox answer are blocked: those are the person's commands.
|
|
8
9
|
* Partial Bash reads of protected files are blocked; other source/document slices are warned.
|
|
9
10
|
* A test command that already passed on unchanged code is blocked or warned about (retest.cjs).
|
|
10
11
|
* PreToolUse(Read): when the file is over READ_ADVISE_LINES, tells the model that `vibe read <file> --ask`
|
|
@@ -103,6 +104,11 @@ const IRREVERSIBLE = [
|
|
|
103
104
|
['apply', /\bterraform\s+apply\b|\bkubectl\s+apply\b/i],
|
|
104
105
|
['send', /\b(sendmail|mail\s+-s|curl\s+[^|]*-X\s*POST)\b/],
|
|
105
106
|
];
|
|
107
|
+
// Under the `human` token policy approving and authorizing are the person's own commands. Claude Code runs a
|
|
108
|
+
// `! vibe approve` typed in the prompt without calling this hook, so only the model's call reaches it and is stopped.
|
|
109
|
+
const PERSON_ONLY = /(?:^|[\s/])(?:vibe|cli\.js)\s+(?:approve|authorize|heldout\s+(?:seal|drop)|inbox\s+answer)\b/;
|
|
110
|
+
const PREVIEW = /\s--preview\b/;
|
|
111
|
+
const HUMAN_POLICY = 'human';
|
|
106
112
|
const READS_ONLY = /^\s*(?:grep|rg|cat|head|tail|less|ls|find|wc|echo|printf|sed\s+-n|git\s+(?:log|diff|show|status|grep|blame|branch|ls-files))\b/;
|
|
107
113
|
|
|
108
114
|
const hasProjectDir = () => fs.existsSync(path.join(root, PROJECT_DIR));
|
|
@@ -126,15 +132,26 @@ function recentAuthorize(action) {
|
|
|
126
132
|
|
|
127
133
|
if (!ANYWHERE_MODES.includes(mode) && !hasProjectDir()) process.exit(0);
|
|
128
134
|
|
|
129
|
-
function irreversibleNotice(action,
|
|
135
|
+
function irreversibleNotice(action, policy) {
|
|
136
|
+
const blocking = policy !== 'off';
|
|
137
|
+
const how = policy === HUMAN_POLICY
|
|
138
|
+
? `ask the user to type \`! vibe authorize --action ${action}\` in the prompt or run it in their terminal,`
|
|
139
|
+
: `get a human token with \`vibe ask --needs authorize:${action}\` and run \`vibe authorize\` first,`;
|
|
130
140
|
return [
|
|
131
141
|
`[vibe] "${action}" is irreversible and no authorize record exists in the last ${AUTHORIZE_WINDOW_MS / MS_PER_MINUTE} minutes —`,
|
|
132
|
-
`${blocking ? 'blocked: ' : ''}
|
|
133
|
-
'
|
|
142
|
+
`${blocking ? 'blocked: ' : ''}${how}`,
|
|
143
|
+
'as its own command: the gate reads the ledger before this command runs,',
|
|
134
144
|
'so an authorize chained in front of the action is not seen',
|
|
135
145
|
].join(' ');
|
|
136
146
|
}
|
|
137
147
|
|
|
148
|
+
function personNotice(segment) {
|
|
149
|
+
return [
|
|
150
|
+
`[vibe] blocked: under tokens: human, \`${segment}\` is the user's own command —`,
|
|
151
|
+
`stop and ask the user to type \`! ${segment}\` in the prompt (Claude Code) or run it in their terminal`,
|
|
152
|
+
].join(' ');
|
|
153
|
+
}
|
|
154
|
+
|
|
138
155
|
function tokenPolicy() {
|
|
139
156
|
try {
|
|
140
157
|
return JSON.parse(fs.readFileSync(path.join(root, PROJECT_DIR, 'config.json'), 'utf-8')).tokens || 'off';
|
|
@@ -212,14 +229,17 @@ if (mode === 'pre') {
|
|
|
212
229
|
if (slice.decision === 'warn') notes.push(slice.message);
|
|
213
230
|
if (!hasProjectDir()) leave(0);
|
|
214
231
|
// Every segment is judged — `echo x && git push`, `ls; rm -rf build`, `cat x | git push` carry the action in a later one
|
|
232
|
+
const parts = command.split(/&&|\|\||;|\||\n/).map((s) => s.trim()).filter(Boolean);
|
|
233
|
+
const policy = tokenPolicy();
|
|
234
|
+
const ownCommand = policy === HUMAN_POLICY && parts.find((s) => PERSON_ONLY.test(s) && !PREVIEW.test(s));
|
|
235
|
+
if (ownCommand) { process.stderr.write(`${personNotice(ownCommand)}\n`); process.exit(BLOCK_EXIT); }
|
|
215
236
|
// Vibe gates its own execution; its approval and inbox commands must remain reachable.
|
|
216
|
-
const segments =
|
|
217
|
-
// Under strict and
|
|
237
|
+
const segments = parts.filter((s) => !READS_ONLY.test(s) && !/^vibe(?:\s|$)/.test(s));
|
|
238
|
+
// Under strict, irreversible and human the gate blocks (exit 2 stops the tool call in Claude Code); under off it only warns.
|
|
218
239
|
for (const [action, re] of IRREVERSIBLE) {
|
|
219
240
|
if (segments.some((s) => re.test(s)) && !recentAuthorize(action)) {
|
|
220
|
-
|
|
221
|
-
process.
|
|
222
|
-
if (blocking) process.exit(BLOCK_EXIT);
|
|
241
|
+
process.stderr.write(`${irreversibleNotice(action, policy)}\n`);
|
|
242
|
+
if (policy !== 'off') process.exit(BLOCK_EXIT);
|
|
223
243
|
leave(0);
|
|
224
244
|
}
|
|
225
245
|
}
|
|
@@ -4,7 +4,7 @@ Use when the task needs a missing capability or there is a concrete reason an ex
|
|
|
4
4
|
|
|
5
5
|
1. Name the operation and expected benefit. Reuse tools, connectors, skill metadata and findings already in context. Follow the environment's tool priority; it does not require rediscovering known capabilities. Use `vibe skill list` or a focused lookup only when the supplied information leaves a relevant gap. Read only the selected skill's instructions. These are sources to choose from, not a mandatory sequence of lookups.
|
|
6
6
|
2. If the available capability is insufficient or a meaningful improvement is plausible, use `vibe skill search <query>` or `vibe research <query>` with the actual task and constraints. Start with one focused search and inspect a small shortlist. Expand only when a specific unresolved requirement justifies it; stop when a suitable option is found or further search is less useful than direct work. Do not run a periodic scanner or a separate model to choose skills.
|
|
7
|
-
3. Search combines GitHub catalogs with optional SkillsMP discovery. SkillsMP descriptions are unverified hints; inspect the original GitHub skill, not just its catalog page. Inspect the candidate's instructions, executable effects, source/revision, maintenance evidence, dependencies, permissions and failure behavior. A popular name or attractive description is not proof of quality. Check the actual host requirements: Claude/Codex labels alone establish neither compatibility nor incompatibility. Instructions may transfer while client-specific tools, hooks or shell commands need adaptation. Do not claim compatibility before testing the required operation.
|
|
7
|
+
3. Search reads the skill index first: every skill of the default catalogs, spread over domains (design, video, diagrams, documents, marketing, research, web data, backend, mobile, workspace, security), matched by name and description. Each candidate says how Claude and Codex can use it — install as is, adjust a few host-specific lines, or convert — and what it needs (scripts, an MCP server); that line is an automatic reading of the text, not a test. `vibe skill index` builds or refreshes the index. Prefer a skill that produces the requested result over one that coaches the working method. Search also combines GitHub catalogs with optional SkillsMP discovery. SkillsMP descriptions are unverified hints; inspect the original GitHub skill, not just its catalog page. Inspect the candidate's instructions, executable effects, source/revision, maintenance evidence, dependencies, permissions and failure behavior. A popular name or attractive description is not proof of quality. Check the actual host requirements: Claude/Codex labels alone establish neither compatibility nor incompatibility. Instructions may transfer while client-specific tools, hooks or shell commands need adaptation. Do not claim compatibility before testing the required operation.
|
|
8
8
|
4. For an evaluation-only request, stop with a supported recommendation and explicit unknowns; installation and execution verification below apply when adoption or use is requested. Reuse an installed skill when it fits. For an external candidate, use the existing installation path, including `vibe skill add owner/repo[@name] --pin <revision>` where supported. Honor existing installation authority; if new authority is necessary, prepare the exact candidate, revision, effects and target before asking once. Preserve existing user files and register project skills internally rather than adding public Vibe commands. Search permission is not permission for unrelated external effects.
|
|
9
9
|
5. Verify the relevant operation on representative local input and important failure cases. Check that it stays within the requested scope; successful installation is not successful task execution. Reuse trustworthy evidence for the same revision and environment, and recheck affected behavior when they change. Do not run paid generation or external mutations merely as a probe. Separate a plausible benefit from a measured improvement, counting setup and extra model calls when comparing cost.
|
|
10
10
|
6. If no candidate fits, solve one-off work directly. Create or adapt a skill only when the procedure is worth reusing: `vibe skill create <name> --check run|file|http|eval` is a starting point, not a finished capability. Do not build a new plugin manager or capability registry to complete a single task.
|
|
@@ -39,7 +39,7 @@ Needed before building (if any): {tools · skills · access}
|
|
|
39
39
|
To proceed, {paste {token} | say yes}.
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
7. When the user pastes the number (or says yes when no token was issued), run `vibe approve "{number}" --json` (or `vibe approve --json`). Unanswered material questions or changed evidence need resolution first; never substitute their defaults. On `code 3` show the actual reason and follow it. A material change returns to step 3; an unchanged approval needs no new interview. An old authorization does not cover a new action or target.
|
|
42
|
+
7. When the user pastes the number (or says yes when no token was issued), run `vibe approve "{number}" --json` (or `vibe approve --json`). Under `tokens: human` the approval is the user's own command: ask them to type `! vibe approve` in the prompt or run it in their terminal, and never run it yourself (the hook blocks it). Unanswered material questions or changed evidence need resolution first; never substitute their defaults. On `code 3` show the actual reason and follow it. A material change returns to step 3; an unchanged approval needs no new interview. An old authorization does not cover a new action or target.
|
|
43
43
|
8. When the state is APPROVED and any accepted skill is installed, move to `vibe-build`.
|
|
44
44
|
|
|
45
45
|
## Never
|
package/package.json
CHANGED