@newtype-ai/nit 0.4.4 → 0.4.6
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/dist/{chunk-WKOAN73J.js → chunk-535YI4CD.js} +62 -18
- package/dist/cli.js +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
// src/index.ts
|
|
4
4
|
import { promises as fs7, statSync } from "fs";
|
|
5
|
-
import { join as join7, basename as basename2, resolve as resolve2 } from "path";
|
|
5
|
+
import { join as join7, basename as basename2, dirname as dirname2, resolve as resolve2 } from "path";
|
|
6
6
|
|
|
7
7
|
// src/objects.ts
|
|
8
8
|
import { createHash } from "crypto";
|
|
@@ -363,13 +363,61 @@ async function createSkillTemplate(skillsDir, domain) {
|
|
|
363
363
|
const skillId = domain.replace(/\./g, "-");
|
|
364
364
|
const skillDir = join4(skillsDir, skillId);
|
|
365
365
|
const skillPath = join4(skillDir, "SKILL.md");
|
|
366
|
+
let localVersion;
|
|
366
367
|
try {
|
|
367
|
-
await fs4.
|
|
368
|
-
|
|
368
|
+
const existing = await fs4.readFile(skillPath, "utf-8");
|
|
369
|
+
localVersion = parseVersion(existing);
|
|
369
370
|
} catch {
|
|
370
371
|
}
|
|
372
|
+
let remoteContent = null;
|
|
373
|
+
let remoteVersion;
|
|
374
|
+
try {
|
|
375
|
+
const res = await fetch(`https://${domain}/skill.md`, {
|
|
376
|
+
headers: { "Accept": "text/markdown, text/plain" },
|
|
377
|
+
signal: AbortSignal.timeout(5e3)
|
|
378
|
+
});
|
|
379
|
+
if (res.ok) {
|
|
380
|
+
const text = await res.text();
|
|
381
|
+
if (text.startsWith("---")) {
|
|
382
|
+
remoteContent = text;
|
|
383
|
+
remoteVersion = parseVersion(text);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
} catch {
|
|
387
|
+
}
|
|
388
|
+
if (localVersion !== void 0) {
|
|
389
|
+
if (!remoteVersion || !isNewerVersion(remoteVersion, localVersion)) {
|
|
390
|
+
return skillId;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
371
393
|
await fs4.mkdir(skillDir, { recursive: true });
|
|
372
|
-
|
|
394
|
+
await fs4.writeFile(
|
|
395
|
+
skillPath,
|
|
396
|
+
remoteContent ?? fallbackTemplate(skillId, domain),
|
|
397
|
+
"utf-8"
|
|
398
|
+
);
|
|
399
|
+
return skillId;
|
|
400
|
+
}
|
|
401
|
+
function parseVersion(content) {
|
|
402
|
+
const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
403
|
+
if (!fmMatch) return void 0;
|
|
404
|
+
const versionMatch = fmMatch[1].match(/^version:\s*(.+)$/m);
|
|
405
|
+
return versionMatch ? versionMatch[1].trim() : void 0;
|
|
406
|
+
}
|
|
407
|
+
function isNewerVersion(remote2, local) {
|
|
408
|
+
const r = remote2.split(".").map(Number);
|
|
409
|
+
const l = local.split(".").map(Number);
|
|
410
|
+
const len = Math.max(r.length, l.length);
|
|
411
|
+
for (let i = 0; i < len; i++) {
|
|
412
|
+
const rv = r[i] ?? 0;
|
|
413
|
+
const lv = l[i] ?? 0;
|
|
414
|
+
if (rv > lv) return true;
|
|
415
|
+
if (rv < lv) return false;
|
|
416
|
+
}
|
|
417
|
+
return false;
|
|
418
|
+
}
|
|
419
|
+
function fallbackTemplate(skillId, domain) {
|
|
420
|
+
return `---
|
|
373
421
|
name: ${skillId}
|
|
374
422
|
description: Skills and context for ${domain}
|
|
375
423
|
---
|
|
@@ -378,8 +426,6 @@ description: Skills and context for ${domain}
|
|
|
378
426
|
|
|
379
427
|
Configure your skills and context for ${domain} here.
|
|
380
428
|
`;
|
|
381
|
-
await fs4.writeFile(skillPath, template, "utf-8");
|
|
382
|
-
return skillId;
|
|
383
429
|
}
|
|
384
430
|
async function discoverSkills(projectDir2) {
|
|
385
431
|
const home = homedir();
|
|
@@ -1319,18 +1365,16 @@ async function loginPayload(domain, options) {
|
|
|
1319
1365
|
}
|
|
1320
1366
|
await checkout(domain, options);
|
|
1321
1367
|
switchedBranch = domain;
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
}
|
|
1333
|
-
}
|
|
1368
|
+
}
|
|
1369
|
+
const projectDir2 = dirname2(nitDir);
|
|
1370
|
+
const skillsDir = await getSkillsDir(nitDir) ?? await discoverSkillsDir(projectDir2);
|
|
1371
|
+
if (skillsDir) {
|
|
1372
|
+
const skillId = await createSkillTemplate(skillsDir, domain);
|
|
1373
|
+
const card = await readWorkingCard(nitDir);
|
|
1374
|
+
if (!card.skills.some((s) => s.id === skillId)) {
|
|
1375
|
+
card.skills.push({ id: skillId });
|
|
1376
|
+
await writeWorkingCard(nitDir, card);
|
|
1377
|
+
createdSkill = skillId;
|
|
1334
1378
|
}
|
|
1335
1379
|
}
|
|
1336
1380
|
const agentId = await loadAgentId(nitDir);
|
package/dist/cli.js
CHANGED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
remoteSetUrl,
|
|
16
16
|
sign,
|
|
17
17
|
status
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-535YI4CD.js";
|
|
19
19
|
|
|
20
20
|
// src/update-check.ts
|
|
21
21
|
import { homedir } from "os";
|
|
@@ -27,7 +27,7 @@ var FETCH_TIMEOUT_MS = 3e3;
|
|
|
27
27
|
var REGISTRY_URL = "https://registry.npmjs.org/@newtype-ai/nit/latest";
|
|
28
28
|
function getCurrentVersion() {
|
|
29
29
|
try {
|
|
30
|
-
return "0.4.
|
|
30
|
+
return "0.4.6";
|
|
31
31
|
} catch {
|
|
32
32
|
return "0.0.0";
|
|
33
33
|
}
|
package/dist/index.js
CHANGED