@opvs-ai/cli 0.26.0 → 0.27.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.
@@ -0,0 +1,12 @@
1
+ /** Pure extraction of repo anchors from a draft card. */
2
+ export declare const CARD_ANCHOR_LIMIT = 50;
3
+ export declare const BRIEF_GATE_HEADING = "# The gate block \u2014 the last section of every builder brief";
4
+ export type CardAnchor = {
5
+ anchor: string;
6
+ declaredNew: boolean;
7
+ };
8
+ export type CardAnchors = {
9
+ anchors: CardAnchor[];
10
+ leftOut: number;
11
+ };
12
+ export declare function extractCardAnchors(markdown: string): CardAnchors;
@@ -0,0 +1,67 @@
1
+ /** Pure extraction of repo anchors from a draft card. */
2
+ export const CARD_ANCHOR_LIMIT = 50;
3
+ export const BRIEF_GATE_HEADING = "# The gate block — the last section of every builder brief";
4
+ const FENCE_RE = /^\s{0,3}(`{3,}|~{3,})/;
5
+ const INLINE_CODE_RE = /(?<!`)`([^`\r\n]+)`(?!`)/g;
6
+ export function extractCardAnchors(markdown) {
7
+ const anchors = [];
8
+ const seen = new Set();
9
+ let leftOut = 0;
10
+ let fence = null;
11
+ for (const line of markdown.split(/\r?\n/)) {
12
+ if (line.trim() === BRIEF_GATE_HEADING)
13
+ break;
14
+ const fenceMatch = line.match(FENCE_RE);
15
+ if (fenceMatch) {
16
+ const run = fenceMatch[1];
17
+ const marker = run[0];
18
+ if (!fence) {
19
+ fence = { marker, length: run.length };
20
+ }
21
+ else if (marker === fence.marker && run.length >= fence.length) {
22
+ fence = null;
23
+ }
24
+ continue;
25
+ }
26
+ if (fence)
27
+ continue;
28
+ const declaredNew = declaresNewFile(line);
29
+ for (const match of line.matchAll(INLINE_CODE_RE)) {
30
+ const anchor = normaliseAnchor(match[1].trim());
31
+ if (!anchor || seen.has(anchor))
32
+ continue;
33
+ seen.add(anchor);
34
+ if (anchors.length < CARD_ANCHOR_LIMIT) {
35
+ anchors.push({ anchor, declaredNew });
36
+ }
37
+ else {
38
+ leftOut += 1;
39
+ }
40
+ }
41
+ }
42
+ return { anchors, leftOut };
43
+ }
44
+ function declaresNewFile(line) {
45
+ return /\bcreate\b/i.test(line) || /\bNEW\b/.test(line) || /\bnew file\b/i.test(line);
46
+ }
47
+ function normaliseAnchor(token) {
48
+ if (!token.includes("/") || token.includes("*") || /^(?:https?|ftp):\/\//i.test(token)) {
49
+ return null;
50
+ }
51
+ if (/\s/.test(token))
52
+ return null;
53
+ const withoutLine = token.replace(/:\d+(?:-\d+)?$/, "");
54
+ const separatorIndex = withoutLine.includes("::")
55
+ ? withoutLine.indexOf("::")
56
+ : withoutLine.indexOf("#");
57
+ const path = separatorIndex >= 0
58
+ ? withoutLine.slice(0, separatorIndex)
59
+ : withoutLine;
60
+ if (!path || path.startsWith("/") || path.includes("//"))
61
+ return null;
62
+ const isDirectory = path.endsWith("/");
63
+ const fileName = path.split("/").at(-1) ?? "";
64
+ const hasExtension = /\.[A-Za-z0-9][A-Za-z0-9._-]*$/.test(fileName);
65
+ return isDirectory || hasExtension ? withoutLine : null;
66
+ }
67
+ //# sourceMappingURL=card-anchors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-anchors.js","sourceRoot":"","sources":["../../src/lib/card-anchors.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opvs-ai/cli",
3
- "version": "0.26.0",
3
+ "version": "0.27.1",
4
4
  "description": "OPVS CLI — Terminal access to AgentBoard + AgentDocs for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,7 +14,7 @@
14
14
  "test:watch": "vitest"
15
15
  },
16
16
  "dependencies": {
17
- "@opvs-ai/core": "^0.4.9",
17
+ "@opvs-ai/core": "^0.4.10",
18
18
  "commander": "^12.1.0"
19
19
  },
20
20
  "devDependencies": {