@productbrain/cli 0.1.0-beta.26 → 0.1.0-beta.28
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/__tests__/capture.test.js +11 -3
- package/dist/__tests__/capture.test.js.map +1 -1
- package/dist/__tests__/relate.test.js +15 -0
- package/dist/__tests__/relate.test.js.map +1 -1
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +42 -2
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/collections.d.ts +16 -0
- package/dist/commands/collections.d.ts.map +1 -0
- package/dist/commands/collections.js +59 -0
- package/dist/commands/collections.js.map +1 -0
- package/dist/commands/handshake.d.ts +2 -0
- package/dist/commands/handshake.d.ts.map +1 -1
- package/dist/commands/handshake.js +37 -1
- package/dist/commands/handshake.js.map +1 -1
- package/dist/commands/orient.d.ts +1 -0
- package/dist/commands/orient.d.ts.map +1 -1
- package/dist/commands/orient.js +10 -1
- package/dist/commands/orient.js.map +1 -1
- package/dist/commands/relate.d.ts.map +1 -1
- package/dist/commands/relate.js +10 -3
- package/dist/commands/relate.js.map +1 -1
- package/dist/formatters/collections.d.ts +40 -0
- package/dist/formatters/collections.d.ts.map +1 -0
- package/dist/formatters/collections.js +93 -0
- package/dist/formatters/collections.js.map +1 -0
- package/dist/formatters/handshake.d.ts +5 -0
- package/dist/formatters/handshake.d.ts.map +1 -1
- package/dist/formatters/handshake.js +9 -0
- package/dist/formatters/handshake.js.map +1 -1
- package/dist/formatters/relate.d.ts +2 -0
- package/dist/formatters/relate.d.ts.map +1 -1
- package/dist/formatters/relate.js +3 -0
- package/dist/formatters/relate.js.map +1 -1
- package/dist/generators/archetypes.d.ts +52 -0
- package/dist/generators/archetypes.d.ts.map +1 -0
- package/dist/generators/archetypes.js +153 -0
- package/dist/generators/archetypes.js.map +1 -0
- package/dist/generators/archetypes.test.d.ts +2 -0
- package/dist/generators/archetypes.test.d.ts.map +1 -0
- package/dist/generators/archetypes.test.js +237 -0
- package/dist/generators/archetypes.test.js.map +1 -0
- package/dist/generators/chain-classifier.d.ts +49 -0
- package/dist/generators/chain-classifier.d.ts.map +1 -0
- package/dist/generators/chain-classifier.js +180 -0
- package/dist/generators/chain-classifier.js.map +1 -0
- package/dist/generators/chain-classifier.test.d.ts +2 -0
- package/dist/generators/chain-classifier.test.d.ts.map +1 -0
- package/dist/generators/chain-classifier.test.js +257 -0
- package/dist/generators/chain-classifier.test.js.map +1 -0
- package/dist/generators/chain-rules.d.ts +42 -0
- package/dist/generators/chain-rules.d.ts.map +1 -0
- package/dist/generators/chain-rules.js +144 -0
- package/dist/generators/chain-rules.js.map +1 -0
- package/dist/generators/chain-rules.test.d.ts +2 -0
- package/dist/generators/chain-rules.test.d.ts.map +1 -0
- package/dist/generators/chain-rules.test.js +179 -0
- package/dist/generators/chain-rules.test.js.map +1 -0
- package/dist/generators/handshake-diff.d.ts +67 -0
- package/dist/generators/handshake-diff.d.ts.map +1 -0
- package/dist/generators/handshake-diff.js +183 -0
- package/dist/generators/handshake-diff.js.map +1 -0
- package/dist/generators/handshake-diff.test.d.ts +2 -0
- package/dist/generators/handshake-diff.test.d.ts.map +1 -0
- package/dist/generators/handshake-diff.test.js +265 -0
- package/dist/generators/handshake-diff.test.js.map +1 -0
- package/dist/index.js +50 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/templates/archetypes/boundary.md +23 -0
- package/templates/archetypes/constraint.md +23 -0
- package/templates/archetypes/convention.md +23 -0
- package/templates/archetypes/policy.md +23 -0
- package/templates/archetypes/quality-gate.md +23 -0
- package/templates/archetypes/workflow.md +23 -0
- package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
- package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
- package/dist/generators/__tests__/surface-profiles.test.js +0 -89
- package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
package/dist/commands/relate.js
CHANGED
|
@@ -38,10 +38,17 @@ export async function runRelate(options) {
|
|
|
38
38
|
mcpArgs.ifMissing = true;
|
|
39
39
|
}
|
|
40
40
|
const result = await mcpCallWithSession('chain.createEntryRelation', mcpArgs);
|
|
41
|
-
const
|
|
42
|
-
const output = {
|
|
41
|
+
const isProposal = result?.status === 'proposal_created';
|
|
42
|
+
const output = {
|
|
43
|
+
fromId,
|
|
44
|
+
type,
|
|
45
|
+
toId,
|
|
46
|
+
action: isProposal ? 'proposal_created' : 'related',
|
|
47
|
+
};
|
|
48
|
+
if (isProposal && result?.proposalId)
|
|
49
|
+
output.proposalId = result.proposalId;
|
|
43
50
|
if (options.ifMissing)
|
|
44
|
-
output.alreadyExists = alreadyExists;
|
|
51
|
+
output.alreadyExists = result?.alreadyExists === true;
|
|
45
52
|
return output;
|
|
46
53
|
},
|
|
47
54
|
formatPretty: (result) => formatRelateReceipt(result),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relate.js","sourceRoot":"","sources":["../../src/commands/relate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"relate.js","sourceRoot":"","sources":["../../src/commands/relate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collections formatter — human-readable output for pb collections commands.
|
|
3
|
+
* BET-280 Slice 1: CLI surface for collection registry (STD-101 SSOT, DEC-299).
|
|
4
|
+
*/
|
|
5
|
+
export interface CollectionListItem {
|
|
6
|
+
slug: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
fieldCount: number;
|
|
10
|
+
icon?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CollectionListResult {
|
|
13
|
+
collections: CollectionListItem[];
|
|
14
|
+
total: number;
|
|
15
|
+
}
|
|
16
|
+
export interface CollectionAuditIssue {
|
|
17
|
+
code: string;
|
|
18
|
+
message: string;
|
|
19
|
+
fieldKey?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface CollectionAuditItem {
|
|
22
|
+
slug: string;
|
|
23
|
+
name: string;
|
|
24
|
+
icon?: string;
|
|
25
|
+
fieldCount: number;
|
|
26
|
+
issues: CollectionAuditIssue[];
|
|
27
|
+
}
|
|
28
|
+
export interface CollectionAuditResult {
|
|
29
|
+
total: number;
|
|
30
|
+
healthy: number;
|
|
31
|
+
withIssues: number;
|
|
32
|
+
collections: CollectionAuditItem[];
|
|
33
|
+
}
|
|
34
|
+
/** Format collection list as a human-readable table. */
|
|
35
|
+
export declare function formatCollectionList(result: CollectionListResult): string;
|
|
36
|
+
/** Format full collection detail (describe output) as human-readable text. */
|
|
37
|
+
export declare function formatCollectionDescribe(col: Record<string, unknown>): string;
|
|
38
|
+
/** Format collection audit result as a human-readable health report. */
|
|
39
|
+
export declare function formatCollectionAudit(result: CollectionAuditResult): string;
|
|
40
|
+
//# sourceMappingURL=collections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/formatters/collections.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED,wDAAwD;AACxD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CA+BzE;AAED,8EAA8E;AAC9E,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAmC7E;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CA8B3E"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collections formatter — human-readable output for pb collections commands.
|
|
3
|
+
* BET-280 Slice 1: CLI surface for collection registry (STD-101 SSOT, DEC-299).
|
|
4
|
+
*/
|
|
5
|
+
/** Format collection list as a human-readable table. */
|
|
6
|
+
export function formatCollectionList(result) {
|
|
7
|
+
if (result.total === 0) {
|
|
8
|
+
return 'No collections found in this workspace.';
|
|
9
|
+
}
|
|
10
|
+
const lines = [];
|
|
11
|
+
lines.push(`Collections (${result.total}):`);
|
|
12
|
+
lines.push('');
|
|
13
|
+
// Column widths
|
|
14
|
+
const maxSlug = Math.max(...result.collections.map((c) => c.slug.length), 4);
|
|
15
|
+
const maxName = Math.max(...result.collections.map((c) => c.name.length), 4);
|
|
16
|
+
const header = [
|
|
17
|
+
'Icon'.padEnd(4),
|
|
18
|
+
'Slug'.padEnd(maxSlug),
|
|
19
|
+
'Name'.padEnd(maxName),
|
|
20
|
+
'Fields',
|
|
21
|
+
].join(' ');
|
|
22
|
+
lines.push(` ${header}`);
|
|
23
|
+
lines.push(` ${'-'.repeat(header.length)}`);
|
|
24
|
+
for (const col of result.collections) {
|
|
25
|
+
const icon = (col.icon ?? '—').padEnd(4);
|
|
26
|
+
const slug = col.slug.padEnd(maxSlug);
|
|
27
|
+
const name = col.name.padEnd(maxName);
|
|
28
|
+
const fields = String(col.fieldCount);
|
|
29
|
+
lines.push(` ${icon} ${slug} ${name} ${fields}`);
|
|
30
|
+
}
|
|
31
|
+
return lines.join('\n');
|
|
32
|
+
}
|
|
33
|
+
/** Format full collection detail (describe output) as human-readable text. */
|
|
34
|
+
export function formatCollectionDescribe(col) {
|
|
35
|
+
const lines = [];
|
|
36
|
+
const icon = col.icon ?? '';
|
|
37
|
+
lines.push(`${icon ? icon + ' ' : ''}${col.name} (${col.slug})`);
|
|
38
|
+
if (col.description) {
|
|
39
|
+
lines.push('');
|
|
40
|
+
lines.push(String(col.description));
|
|
41
|
+
}
|
|
42
|
+
if (col.usageGuidance) {
|
|
43
|
+
lines.push('');
|
|
44
|
+
lines.push('When to use:');
|
|
45
|
+
lines.push(String(col.usageGuidance));
|
|
46
|
+
}
|
|
47
|
+
else if (col.purpose) {
|
|
48
|
+
lines.push('');
|
|
49
|
+
lines.push('Purpose:');
|
|
50
|
+
lines.push(String(col.purpose));
|
|
51
|
+
}
|
|
52
|
+
const fields = col.fields;
|
|
53
|
+
if (fields && fields.length > 0) {
|
|
54
|
+
lines.push('');
|
|
55
|
+
lines.push(`Fields (${fields.length}):`);
|
|
56
|
+
for (const f of fields) {
|
|
57
|
+
const req = f.required ? ' *' : '';
|
|
58
|
+
lines.push(` ${f.key}${req} (${f.type})`);
|
|
59
|
+
if (f.helpText) {
|
|
60
|
+
lines.push(` ${f.helpText}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return lines.join('\n');
|
|
65
|
+
}
|
|
66
|
+
/** Format collection audit result as a human-readable health report. */
|
|
67
|
+
export function formatCollectionAudit(result) {
|
|
68
|
+
const lines = [];
|
|
69
|
+
lines.push(`Collection Audit`);
|
|
70
|
+
lines.push(`Total: ${result.total} Healthy: ${result.healthy} With issues: ${result.withIssues}`);
|
|
71
|
+
lines.push('');
|
|
72
|
+
if (result.withIssues === 0) {
|
|
73
|
+
lines.push('All collections are healthy.');
|
|
74
|
+
return lines.join('\n');
|
|
75
|
+
}
|
|
76
|
+
const withIssues = result.collections.filter((c) => c.issues.length > 0);
|
|
77
|
+
lines.push('Collections with issues:');
|
|
78
|
+
lines.push('');
|
|
79
|
+
for (const col of withIssues) {
|
|
80
|
+
const icon = col.icon ?? '—';
|
|
81
|
+
lines.push(` ${icon} ${col.name} (${col.slug})`);
|
|
82
|
+
for (const issue of col.issues) {
|
|
83
|
+
lines.push(` [${issue.code}] ${issue.message}`);
|
|
84
|
+
}
|
|
85
|
+
lines.push('');
|
|
86
|
+
}
|
|
87
|
+
const healthy = result.collections.filter((c) => c.issues.length === 0);
|
|
88
|
+
if (healthy.length > 0) {
|
|
89
|
+
lines.push(`Healthy: ${healthy.map((c) => c.slug).join(', ')}`);
|
|
90
|
+
}
|
|
91
|
+
return lines.join('\n');
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=collections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/formatters/collections.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import type { SearchResult } from './search.js';
|
|
5
5
|
import type { RepoContext } from '../lib/repo-detect.js';
|
|
6
6
|
import type { CodexValidationWarning } from '../generators/portable-knowledge.js';
|
|
7
|
+
import type { ChainRulesStats } from '../generators/chain-rules.js';
|
|
7
8
|
export interface HandshakeReport {
|
|
8
9
|
filesWritten: string[];
|
|
9
10
|
filesSkipped: Array<{
|
|
@@ -14,6 +15,10 @@ export interface HandshakeReport {
|
|
|
14
15
|
searchQueries: string[];
|
|
15
16
|
repo: RepoContext;
|
|
16
17
|
codexWarnings?: CodexValidationWarning[];
|
|
18
|
+
/** Present when --generate was used and the Chain MCP call succeeded. */
|
|
19
|
+
chainRulesStats?: ChainRulesStats;
|
|
20
|
+
/** Governance function keys that had no matching entries (when --generate was used). */
|
|
21
|
+
chainGaps?: string[];
|
|
17
22
|
}
|
|
18
23
|
export declare function formatHandshakeReport(report: HandshakeReport): string;
|
|
19
24
|
//# sourceMappingURL=handshake.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../src/formatters/handshake.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../src/formatters/handshake.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACzC,yEAAyE;IACzE,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAyErE"}
|
|
@@ -42,6 +42,15 @@ export function formatHandshakeReport(report) {
|
|
|
42
42
|
}
|
|
43
43
|
lines.push('');
|
|
44
44
|
}
|
|
45
|
+
// Chain-derived rules stats (--generate)
|
|
46
|
+
if (report.chainRulesStats) {
|
|
47
|
+
const { generatedRules, suppressedByManual, suppressedByZeroEntries, totalEntries } = report.chainRulesStats;
|
|
48
|
+
lines.push(`Chain-derived rules: ${generatedRules} generated, ${suppressedByManual} suppressed by manual, ${suppressedByZeroEntries} gaps (from ${totalEntries} governance entries)`);
|
|
49
|
+
if (report.chainGaps && report.chainGaps.length > 0) {
|
|
50
|
+
lines.push(`Gaps (no matching governance entries): ${report.chainGaps.join(', ')}`);
|
|
51
|
+
}
|
|
52
|
+
lines.push('');
|
|
53
|
+
}
|
|
45
54
|
// Codex dead-reference warnings
|
|
46
55
|
if (report.codexWarnings && report.codexWarnings.length > 0) {
|
|
47
56
|
lines.push(`Codex warnings (${report.codexWarnings.length} dead reference(s) in projected skills):`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../src/formatters/handshake.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../src/formatters/handshake.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ export interface RelateReceiptData {
|
|
|
6
6
|
type: string;
|
|
7
7
|
toId: string;
|
|
8
8
|
alreadyExists?: boolean;
|
|
9
|
+
action: 'related' | 'unrelated' | 'proposal_created';
|
|
10
|
+
proposalId?: string;
|
|
9
11
|
}
|
|
10
12
|
export declare function formatRelateReceipt(data: RelateReceiptData): string;
|
|
11
13
|
export declare function formatUnrelateReceipt(data: RelateReceiptData): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relate.d.ts","sourceRoot":"","sources":["../../src/formatters/relate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"relate.d.ts","sourceRoot":"","sources":["../../src/formatters/relate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,kBAAkB,CAAC;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAQnE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAErE"}
|
|
@@ -5,6 +5,9 @@ export function formatRelateReceipt(data) {
|
|
|
5
5
|
if (data.alreadyExists) {
|
|
6
6
|
return `Already exists: ${data.fromId} –[${data.type}]→ ${data.toId}`;
|
|
7
7
|
}
|
|
8
|
+
if (data.action === 'proposal_created') {
|
|
9
|
+
return `Proposal created (requires approval): ${data.fromId} –[${data.type}]→ ${data.toId}`;
|
|
10
|
+
}
|
|
8
11
|
return `→ ${data.fromId} –[${data.type}]→ ${data.toId}`;
|
|
9
12
|
}
|
|
10
13
|
export function formatUnrelateReceipt(data) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relate.js","sourceRoot":"","sources":["../../src/formatters/relate.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"relate.js","sourceRoot":"","sources":["../../src/formatters/relate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO,mBAAmB,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;QACvC,OAAO,yCAAyC,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9F,CAAC;IACD,OAAO,KAAK,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IAC3D,OAAO,aAAa,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Archetype loader and resolver — BET-286 Slice 2
|
|
3
|
+
*
|
|
4
|
+
* Loads archetype templates from packages/cli/templates/archetypes/ and
|
|
5
|
+
* resolves their {{slot}} placeholders using ClassifiedGovernance entries.
|
|
6
|
+
* Each resolved archetype produces a CanonicalRule ready to merge into
|
|
7
|
+
* the canonical rules array.
|
|
8
|
+
*
|
|
9
|
+
* Chain: BET-286 (Chain-Derived Agent Configuration), FEAT-894 (chain:// convention)
|
|
10
|
+
*/
|
|
11
|
+
import type { CanonicalRule } from './portable-knowledge.js';
|
|
12
|
+
import type { ClassifiedGovernance, GovernanceFunction } from './chain-classifier.js';
|
|
13
|
+
/** Parsed archetype template, ready for slot resolution. */
|
|
14
|
+
interface ArchetypeTemplate {
|
|
15
|
+
functionKey: GovernanceFunction;
|
|
16
|
+
/** Frontmatter fields */
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
autoApply: boolean;
|
|
20
|
+
level: string;
|
|
21
|
+
/** Template body with {{slot}} placeholders */
|
|
22
|
+
body: string;
|
|
23
|
+
}
|
|
24
|
+
/** Result of resolving an archetype against classified governance entries. */
|
|
25
|
+
export interface ResolvedArchetype {
|
|
26
|
+
/** Ready to merge into the canonical rules array */
|
|
27
|
+
rule: CanonicalRule;
|
|
28
|
+
functionKey: GovernanceFunction;
|
|
29
|
+
/** Which entry IDs contributed to this rule */
|
|
30
|
+
resolvedEntryIds: string[];
|
|
31
|
+
}
|
|
32
|
+
/** Discriminated reason when resolveArchetype returns null. */
|
|
33
|
+
export type ArchetypeSkipReason = 'no-template' | 'manual-suppression' | 'zero-entries';
|
|
34
|
+
/**
|
|
35
|
+
* Load the archetype template for a governance function.
|
|
36
|
+
* Returns null if the function is 'unclassified' or no template file exists.
|
|
37
|
+
*/
|
|
38
|
+
export declare function loadArchetype(functionKey: GovernanceFunction): ArchetypeTemplate | null;
|
|
39
|
+
/**
|
|
40
|
+
* Resolve an archetype's slots using classified governance entries.
|
|
41
|
+
*
|
|
42
|
+
* Returns a discriminated result:
|
|
43
|
+
* - `{ resolved: ResolvedArchetype }` on success
|
|
44
|
+
* - `{ skipped: ArchetypeSkipReason }` when the archetype cannot be produced
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveArchetype(functionKey: GovernanceFunction, classified: ClassifiedGovernance[], manualRuleNames: Set<string>): {
|
|
47
|
+
resolved: ResolvedArchetype;
|
|
48
|
+
} | {
|
|
49
|
+
skipped: ArchetypeSkipReason;
|
|
50
|
+
};
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=archetypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetypes.d.ts","sourceRoot":"","sources":["../../src/generators/archetypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAItF,4DAA4D;AAC5D,UAAU,iBAAiB;IACzB,WAAW,EAAE,kBAAkB,CAAC;IAChC,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,kBAAkB,CAAC;IAChC,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,+DAA+D;AAC/D,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,oBAAoB,GAAG,cAAc,CAAC;AAwCxF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,IAAI,CAkBvF;AA4CD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,oBAAoB,EAAE,EAClC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B;IAAE,QAAQ,EAAE,iBAAiB,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,mBAAmB,CAAA;CAAE,CAsDpE"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Archetype loader and resolver — BET-286 Slice 2
|
|
3
|
+
*
|
|
4
|
+
* Loads archetype templates from packages/cli/templates/archetypes/ and
|
|
5
|
+
* resolves their {{slot}} placeholders using ClassifiedGovernance entries.
|
|
6
|
+
* Each resolved archetype produces a CanonicalRule ready to merge into
|
|
7
|
+
* the canonical rules array.
|
|
8
|
+
*
|
|
9
|
+
* Chain: BET-286 (Chain-Derived Agent Configuration), FEAT-894 (chain:// convention)
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, readFileSync } from 'fs';
|
|
12
|
+
import { join, dirname } from 'path';
|
|
13
|
+
import { fileURLToPath } from 'url';
|
|
14
|
+
// ── Path resolution ───────────────────────────────────────────────────
|
|
15
|
+
/** Resolved archetypes template directory (relative to this module).
|
|
16
|
+
* From dist/generators/archetypes.js → ../../templates/archetypes/
|
|
17
|
+
*/
|
|
18
|
+
const TEMPLATES_DIR = (() => {
|
|
19
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
20
|
+
const __dirname = dirname(__filename);
|
|
21
|
+
return join(__dirname, '..', '..', 'templates', 'archetypes');
|
|
22
|
+
})();
|
|
23
|
+
function parseArchetypeFrontmatter(raw) {
|
|
24
|
+
const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
25
|
+
if (!match)
|
|
26
|
+
return { fields: {}, body: raw };
|
|
27
|
+
const yaml = match[1];
|
|
28
|
+
const body = match[2] ?? '';
|
|
29
|
+
const fields = {};
|
|
30
|
+
for (const line of yaml.split('\n')) {
|
|
31
|
+
const kv = line.match(/^([\w-]+):\s*(.*)/);
|
|
32
|
+
if (kv) {
|
|
33
|
+
fields[kv[1]] = kv[2].trim().replace(/^["']|["']$/g, '');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return { fields, body };
|
|
37
|
+
}
|
|
38
|
+
// ── Loader ────────────────────────────────────────────────────────────
|
|
39
|
+
/**
|
|
40
|
+
* Load the archetype template for a governance function.
|
|
41
|
+
* Returns null if the function is 'unclassified' or no template file exists.
|
|
42
|
+
*/
|
|
43
|
+
export function loadArchetype(functionKey) {
|
|
44
|
+
if (functionKey === 'unclassified')
|
|
45
|
+
return null;
|
|
46
|
+
const filePath = join(TEMPLATES_DIR, `${functionKey}.md`);
|
|
47
|
+
if (!existsSync(filePath))
|
|
48
|
+
return null;
|
|
49
|
+
const raw = readFileSync(filePath, 'utf8');
|
|
50
|
+
const { fields, body } = parseArchetypeFrontmatter(raw);
|
|
51
|
+
return {
|
|
52
|
+
functionKey,
|
|
53
|
+
name: fields['name'] ?? functionKey,
|
|
54
|
+
description: fields['description'] ?? '',
|
|
55
|
+
autoApply: fields['autoApply'] === 'true',
|
|
56
|
+
level: fields['level'] ?? 'core',
|
|
57
|
+
body,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// ── Slot resolution ───────────────────────────────────────────────────
|
|
61
|
+
/** Replace all {{slot}} placeholders in a string. */
|
|
62
|
+
function resolveSlots(text, slots) {
|
|
63
|
+
return text.replace(/\{\{(\w+)\}\}/g, (_match, key) => slots[key] ?? _match);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Build the *_summary slot value for a given function key.
|
|
67
|
+
* Lists up to 5 entry names then "and N more".
|
|
68
|
+
*/
|
|
69
|
+
function buildSummary(entries) {
|
|
70
|
+
if (entries.length === 0)
|
|
71
|
+
return '(none)';
|
|
72
|
+
const MAX_LISTED = 5;
|
|
73
|
+
const names = entries.map((e) => e.name);
|
|
74
|
+
const listed = names.slice(0, MAX_LISTED);
|
|
75
|
+
const remaining = names.length - MAX_LISTED;
|
|
76
|
+
const lines = listed.map((n) => `- ${n}`);
|
|
77
|
+
if (remaining > 0) {
|
|
78
|
+
lines.push(`- ...and ${remaining} more`);
|
|
79
|
+
}
|
|
80
|
+
return lines.join('\n');
|
|
81
|
+
}
|
|
82
|
+
/** Map function key to its summary slot name. */
|
|
83
|
+
function summarySlotName(functionKey) {
|
|
84
|
+
const map = {
|
|
85
|
+
constraint: 'constraint_summary',
|
|
86
|
+
boundary: 'boundary_summary',
|
|
87
|
+
convention: 'convention_summary',
|
|
88
|
+
policy: 'policy_summary',
|
|
89
|
+
workflow: 'workflow_summary',
|
|
90
|
+
'quality-gate': 'quality_summary',
|
|
91
|
+
};
|
|
92
|
+
return map[functionKey] ?? `${functionKey}_summary`;
|
|
93
|
+
}
|
|
94
|
+
// ── Resolver ──────────────────────────────────────────────────────────
|
|
95
|
+
/**
|
|
96
|
+
* Resolve an archetype's slots using classified governance entries.
|
|
97
|
+
*
|
|
98
|
+
* Returns a discriminated result:
|
|
99
|
+
* - `{ resolved: ResolvedArchetype }` on success
|
|
100
|
+
* - `{ skipped: ArchetypeSkipReason }` when the archetype cannot be produced
|
|
101
|
+
*/
|
|
102
|
+
export function resolveArchetype(functionKey, classified, manualRuleNames) {
|
|
103
|
+
const template = loadArchetype(functionKey);
|
|
104
|
+
if (!template)
|
|
105
|
+
return { skipped: 'no-template' };
|
|
106
|
+
// Manual rule suppression: if a manual rule with this name exists, skip
|
|
107
|
+
if (manualRuleNames.has(template.name))
|
|
108
|
+
return { skipped: 'manual-suppression' };
|
|
109
|
+
// Filter to entries matching this function
|
|
110
|
+
const matching = classified.filter((e) => e.governanceFunction === functionKey);
|
|
111
|
+
if (matching.length === 0)
|
|
112
|
+
return { skipped: 'zero-entries' };
|
|
113
|
+
// Build slot values
|
|
114
|
+
const entryIds = matching.map((e) => e.entryId).join(', ');
|
|
115
|
+
const entryNames = matching.map((e) => e.name).join(', ');
|
|
116
|
+
const entryCount = String(matching.length);
|
|
117
|
+
const summary = buildSummary(matching);
|
|
118
|
+
const summarySlot = summarySlotName(functionKey);
|
|
119
|
+
const slots = {
|
|
120
|
+
entry_ids: entryIds,
|
|
121
|
+
entry_names: entryNames,
|
|
122
|
+
entry_count: entryCount,
|
|
123
|
+
// Populate all summary slots — only the relevant one gets the real summary;
|
|
124
|
+
// others get empty string so stale placeholders resolve to blank, not wrong data.
|
|
125
|
+
constraint_summary: '',
|
|
126
|
+
boundary_summary: '',
|
|
127
|
+
convention_summary: '',
|
|
128
|
+
policy_summary: '',
|
|
129
|
+
workflow_summary: '',
|
|
130
|
+
quality_summary: '',
|
|
131
|
+
[summarySlot]: summary,
|
|
132
|
+
};
|
|
133
|
+
const resolvedDescription = resolveSlots(template.description, slots);
|
|
134
|
+
const resolvedBody = resolveSlots(template.body, slots);
|
|
135
|
+
const rule = {
|
|
136
|
+
name: template.name,
|
|
137
|
+
description: resolvedDescription,
|
|
138
|
+
autoApply: template.autoApply,
|
|
139
|
+
level: template.level,
|
|
140
|
+
body: resolvedBody,
|
|
141
|
+
sourcePath: `chain://${functionKey}`,
|
|
142
|
+
scope: undefined,
|
|
143
|
+
targets: undefined,
|
|
144
|
+
};
|
|
145
|
+
return {
|
|
146
|
+
resolved: {
|
|
147
|
+
rule,
|
|
148
|
+
functionKey,
|
|
149
|
+
resolvedEntryIds: matching.map((e) => e.entryId),
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=archetypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetypes.js","sourceRoot":"","sources":["../../src/generators/archetypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetypes.test.d.ts","sourceRoot":"","sources":["../../src/generators/archetypes.test.ts"],"names":[],"mappings":""}
|