pi-harness-runtime 1.1.148 → 1.1.152
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/CHANGELOG.md +7 -0
- package/harness/key-loader.ts +84 -0
- package/harness/langchain/agents.ts +65 -15
- package/harness/langchain/daemon.ts +58 -30
- package/harness/langchain/graph.ts +55 -7
- package/harness/langchain/jev-logger.ts +274 -0
- package/harness/langchain/run.ts +64 -161
- package/harness/langchain/surge.test.ts +42 -0
- package/harness/langchain/surge.ts +22 -1
- package/index.ts +65 -26
- package/package.json +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/agent-policy/dist/extension.d.ts +19 -0
- package/packages/agent-policy/dist/extension.d.ts.map +1 -0
- package/packages/agent-policy/dist/extension.js +322 -0
- package/packages/agent-policy/dist/extension.js.map +1 -0
- package/packages/agent-policy/dist/index.d.ts +25 -0
- package/packages/agent-policy/dist/index.d.ts.map +1 -0
- package/packages/agent-policy/dist/index.js +27 -0
- package/packages/agent-policy/dist/index.js.map +1 -0
- package/packages/agent-policy/dist/policy-loader.d.ts +90 -0
- package/packages/agent-policy/dist/policy-loader.d.ts.map +1 -0
- package/packages/agent-policy/dist/policy-loader.js +331 -0
- package/packages/agent-policy/dist/policy-loader.js.map +1 -0
- package/packages/agent-policy/dist/policy-renderer.d.ts +42 -0
- package/packages/agent-policy/dist/policy-renderer.d.ts.map +1 -0
- package/packages/agent-policy/dist/policy-renderer.js +295 -0
- package/packages/agent-policy/dist/policy-renderer.js.map +1 -0
- package/packages/agent-policy/dist/policy-store.d.ts +99 -0
- package/packages/agent-policy/dist/policy-store.d.ts.map +1 -0
- package/packages/agent-policy/dist/policy-store.js +244 -0
- package/packages/agent-policy/dist/policy-store.js.map +1 -0
- package/packages/agent-policy/dist/types.d.ts +237 -0
- package/packages/agent-policy/dist/types.d.ts.map +1 -0
- package/packages/agent-policy/dist/types.js +130 -0
- package/packages/agent-policy/dist/types.js.map +1 -0
- package/packages/agent-policy/package.json +45 -0
- package/packages/agent-policy/src/extension.ts +413 -0
- package/packages/agent-policy/src/index.ts +52 -0
- package/packages/agent-policy/src/policy-loader.ts +398 -0
- package/packages/agent-policy/src/policy-renderer.ts +362 -0
- package/packages/agent-policy/src/policy-store.ts +319 -0
- package/packages/agent-policy/src/types.ts +385 -0
- package/packages/agent-policy/test/policy.test.ts +383 -0
- package/packages/architecture-generator/package.json +1 -1
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard-plugin/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/codex-watcher/dist/src/parser.d.ts.map +1 -1
- package/packages/codex-watcher/dist/src/parser.js +35 -0
- package/packages/codex-watcher/dist/src/parser.js.map +1 -1
- package/packages/codex-watcher/package.json +1 -1
- package/packages/codex-watcher/src/parser.ts +41 -0
- package/packages/config-capture/package.json +1 -1
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/file-copy-helper/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/knowledge-graph/package.json +1 -1
- package/packages/knowledge-retrieval/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/milestone-manager/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/dist/adapters/telegram-adapter.d.ts +5 -0
- package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +1 -1
- package/packages/notification/dist/adapters/telegram-adapter.js +54 -0
- package/packages/notification/dist/adapters/telegram-adapter.js.map +1 -1
- package/packages/notification/dist/notification-center.d.ts +13 -0
- package/packages/notification/dist/notification-center.d.ts.map +1 -1
- package/packages/notification/dist/notification-center.js +36 -0
- package/packages/notification/dist/notification-center.js.map +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/notification/src/adapters/telegram-adapter.ts +71 -0
- package/packages/notification/src/notification-center.ts +53 -0
- package/packages/observability/package.json +1 -1
- package/packages/okf-indexer/package.json +1 -1
- package/packages/paperclip-integration/package.json +1 -1
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/privilege-broker/package.json +1 -1
- package/packages/project-analyzer/package.json +1 -1
- package/packages/project-bootstrap/package.json +1 -1
- package/packages/projection-engine/package.json +1 -1
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/qdrant-skills/package.json +1 -1
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler-adapter/package.json +1 -1
- package/packages/session/package.json +1 -1
- package/packages/session-api/package.json +1 -1
- package/packages/session-export/package.json +1 -1
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-mcp-client/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/skills/package.json +1 -1
- package/packages/sprint-planner/package.json +1 -1
- package/packages/subscription-engine/package.json +1 -1
- package/packages/task-compiler/package.json +1 -1
- package/packages/tencentdb-memory/package.json +1 -1
- package/packages/tencentdb-sync/package.json +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/todo-bd-sync/package.json +1 -1
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/trajectory/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/workflow-events/package.json +1 -1
- package/packages/workspace-scanner/package.json +1 -1
- package/packages/worktree/package.json +1 -1
- package/packages/write-review/package.json +1 -1
- package/proactive-compact.ts +2 -2
- package/scripts/debug-codex-integration.ts +203 -0
- package/scripts/sync-keys-from-pi.ts +188 -0
- package/scripts/test-codex-session.ts +23 -0
- package/scripts/test-openai.ts +14 -0
- package/scripts/test-telegram.ts +34 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PolicyLoader - Loads and hashes harness and scoped project rules.
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* - Load the immutable harness policy shipped with the package
|
|
6
|
+
* - Walk from project root toward target file collecting scoped AGENTS.md
|
|
7
|
+
* - Normalize newlines and paths, then hash the ordered mandatory content
|
|
8
|
+
* - Build a PolicyManifest with source paths, scope, priority, and hashes
|
|
9
|
+
*/
|
|
10
|
+
import type { PolicyManifest } from "./types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Policy loader configuration.
|
|
13
|
+
*/
|
|
14
|
+
export interface PolicyLoaderConfig {
|
|
15
|
+
/** Path to the harness-owned AGENTS.md */
|
|
16
|
+
harnessRulesPath: URL;
|
|
17
|
+
/** Optional additional harness rule files */
|
|
18
|
+
additionalRulesPaths?: URL[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Loads and processes agent policies from harness and project sources.
|
|
22
|
+
*/
|
|
23
|
+
export declare class PolicyLoader {
|
|
24
|
+
private harnessRulesPath;
|
|
25
|
+
private additionalRulesPaths;
|
|
26
|
+
private cache;
|
|
27
|
+
private readonly CACHE_TTL_MS;
|
|
28
|
+
constructor(config: PolicyLoaderConfig);
|
|
29
|
+
/**
|
|
30
|
+
* Load policy for a given project root.
|
|
31
|
+
*/
|
|
32
|
+
load(projectRoot: string): Promise<PolicyManifest>;
|
|
33
|
+
/**
|
|
34
|
+
* Load policy for a specific target file (considers scoped rules).
|
|
35
|
+
*/
|
|
36
|
+
loadForTarget(projectRoot: string, targetPath?: string): Promise<PolicyManifest>;
|
|
37
|
+
/**
|
|
38
|
+
* Invalidate cache for a project root.
|
|
39
|
+
*/
|
|
40
|
+
invalidateCache(projectRoot?: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Build manifest for a project root.
|
|
43
|
+
*/
|
|
44
|
+
private buildManifest;
|
|
45
|
+
/**
|
|
46
|
+
* Load harness-owned rule files.
|
|
47
|
+
*/
|
|
48
|
+
private loadHarnessRules;
|
|
49
|
+
/**
|
|
50
|
+
* Load project-owned rule files, walking from root toward target.
|
|
51
|
+
*/
|
|
52
|
+
private loadProjectRules;
|
|
53
|
+
/**
|
|
54
|
+
* Evaluate trust level for a project.
|
|
55
|
+
*/
|
|
56
|
+
private evaluateTrust;
|
|
57
|
+
/**
|
|
58
|
+
* Infer the scope from a relative path.
|
|
59
|
+
*/
|
|
60
|
+
private inferScope;
|
|
61
|
+
/**
|
|
62
|
+
* Normalize content for consistent hashing.
|
|
63
|
+
*/
|
|
64
|
+
private normalizeContent;
|
|
65
|
+
/**
|
|
66
|
+
* Compute SHA-256 hash of content.
|
|
67
|
+
*/
|
|
68
|
+
private hashContent;
|
|
69
|
+
/**
|
|
70
|
+
* Compute combined revision from sources.
|
|
71
|
+
*/
|
|
72
|
+
private computeRevision;
|
|
73
|
+
/**
|
|
74
|
+
* Determine coverage based on loaded sources and errors.
|
|
75
|
+
*/
|
|
76
|
+
private determineCoverage;
|
|
77
|
+
/**
|
|
78
|
+
* Generate cache key for a project root.
|
|
79
|
+
*/
|
|
80
|
+
private getCacheKey;
|
|
81
|
+
/**
|
|
82
|
+
* Read the raw content of a source file.
|
|
83
|
+
*/
|
|
84
|
+
readSourceContent(path: string): string | null;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create a PolicyLoader with the standard harness configuration.
|
|
88
|
+
*/
|
|
89
|
+
export declare function createPolicyLoader(): PolicyLoader;
|
|
90
|
+
//# sourceMappingURL=policy-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-loader.d.ts","sourceRoot":"","sources":["../src/policy-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,YAAY,CAAC;AAgC/D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,gBAAgB,EAAE,GAAG,CAAC;IACtB,6CAA6C;IAC7C,oBAAoB,CAAC,EAAE,GAAG,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,oBAAoB,CAAQ;IACpC,OAAO,CAAC,KAAK,CAA0E;IACvF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IAErC,YAAY,MAAM,EAAE,kBAAkB,EAGrC;IAED;;OAEG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAWvD;IAED;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAuBrF;IAED;;OAEG;IACH,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAM1C;IAED;;OAEG;YACW,aAAa;IAsC3B;;OAEG;YACW,gBAAgB;IAkD9B;;OAEG;YACW,gBAAgB;IA8C9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAmBrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAoBlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS7C;CACF;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAOjD"}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PolicyLoader - Loads and hashes harness and scoped project rules.
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* - Load the immutable harness policy shipped with the package
|
|
6
|
+
* - Walk from project root toward target file collecting scoped AGENTS.md
|
|
7
|
+
* - Normalize newlines and paths, then hash the ordered mandatory content
|
|
8
|
+
* - Build a PolicyManifest with source paths, scope, priority, and hashes
|
|
9
|
+
*/
|
|
10
|
+
import { createHash } from "node:crypto";
|
|
11
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
12
|
+
import { dirname, join, relative, resolve } from "node:path";
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Constants
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/**
|
|
17
|
+
* Supported rule file names in priority order.
|
|
18
|
+
* Earlier names have higher priority.
|
|
19
|
+
*/
|
|
20
|
+
const RULE_FILE_NAMES = [
|
|
21
|
+
"AGENTS.md", // Mandatory, harness or project
|
|
22
|
+
"RULES.md", // Advisory
|
|
23
|
+
"PROJECT_RULES.md", // Advisory
|
|
24
|
+
"CLAUDE.md", // Advisory
|
|
25
|
+
"CONTRIBUTING.md", // Advisory (only if explicitly trusted)
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Maximum walk depth to prevent infinite loops.
|
|
29
|
+
*/
|
|
30
|
+
const MAX_WALK_DEPTH = 20;
|
|
31
|
+
/**
|
|
32
|
+
* Files that indicate project trust.
|
|
33
|
+
*/
|
|
34
|
+
const TRUST_INDICATORS = [".git", "package.json", "Cargo.toml", "go.mod"];
|
|
35
|
+
/**
|
|
36
|
+
* Loads and processes agent policies from harness and project sources.
|
|
37
|
+
*/
|
|
38
|
+
export class PolicyLoader {
|
|
39
|
+
harnessRulesPath;
|
|
40
|
+
additionalRulesPaths;
|
|
41
|
+
cache = new Map();
|
|
42
|
+
CACHE_TTL_MS = 5000; // 5 second cache for same-cwd loads
|
|
43
|
+
constructor(config) {
|
|
44
|
+
this.harnessRulesPath = config.harnessRulesPath;
|
|
45
|
+
this.additionalRulesPaths = config.additionalRulesPaths ?? [];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Load policy for a given project root.
|
|
49
|
+
*/
|
|
50
|
+
async load(projectRoot) {
|
|
51
|
+
const cacheKey = this.getCacheKey(projectRoot);
|
|
52
|
+
const cached = this.cache.get(cacheKey);
|
|
53
|
+
if (cached && Date.now() - cached.cachedAt < this.CACHE_TTL_MS) {
|
|
54
|
+
return cached.manifest;
|
|
55
|
+
}
|
|
56
|
+
const manifest = await this.buildManifest(projectRoot);
|
|
57
|
+
this.cache.set(cacheKey, { manifest, cachedAt: Date.now() });
|
|
58
|
+
return manifest;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Load policy for a specific target file (considers scoped rules).
|
|
62
|
+
*/
|
|
63
|
+
async loadForTarget(projectRoot, targetPath) {
|
|
64
|
+
if (!targetPath) {
|
|
65
|
+
return this.load(projectRoot);
|
|
66
|
+
}
|
|
67
|
+
// Check if target is in a specific scope
|
|
68
|
+
const relativePath = relative(projectRoot, targetPath);
|
|
69
|
+
const scope = this.inferScope(relativePath);
|
|
70
|
+
const manifest = await this.load(projectRoot);
|
|
71
|
+
// Filter sources to only those applicable to this scope
|
|
72
|
+
if (scope) {
|
|
73
|
+
manifest.sources = manifest.sources.filter(s => s.scope === "" || scope.startsWith(s.scope) || s.scope.startsWith(scope));
|
|
74
|
+
// Recompute revision if sources changed
|
|
75
|
+
if (manifest.sources.length > 0) {
|
|
76
|
+
manifest.revision = this.computeRevision(manifest.sources);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return manifest;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Invalidate cache for a project root.
|
|
83
|
+
*/
|
|
84
|
+
invalidateCache(projectRoot) {
|
|
85
|
+
if (projectRoot) {
|
|
86
|
+
this.cache.delete(this.getCacheKey(projectRoot));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.cache.clear();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Build manifest for a project root.
|
|
94
|
+
*/
|
|
95
|
+
async buildManifest(projectRoot) {
|
|
96
|
+
const sources = [];
|
|
97
|
+
const errors = [];
|
|
98
|
+
// 1. Load harness-owned rules first (highest priority)
|
|
99
|
+
const harnessSources = await this.loadHarnessRules();
|
|
100
|
+
sources.push(...harnessSources);
|
|
101
|
+
// 2. Load project rules (if project is trusted)
|
|
102
|
+
const trust = this.evaluateTrust(projectRoot);
|
|
103
|
+
if (trust !== "unknown") {
|
|
104
|
+
const projectSources = await this.loadProjectRules(projectRoot);
|
|
105
|
+
sources.push(...projectSources);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// Project not trusted, but we still try to load AGENTS.md as advisory
|
|
109
|
+
const untrustedSources = await this.loadProjectRules(projectRoot, true);
|
|
110
|
+
sources.push(...untrustedSources);
|
|
111
|
+
}
|
|
112
|
+
// 3. Compute revision from mandatory sources
|
|
113
|
+
const mandatorySources = sources.filter(s => s.priority === "mandatory");
|
|
114
|
+
const revision = this.computeRevision(mandatorySources);
|
|
115
|
+
// 4. Determine coverage
|
|
116
|
+
const coverage = this.determineCoverage(sources, errors);
|
|
117
|
+
return {
|
|
118
|
+
revision,
|
|
119
|
+
projectRoot: resolve(projectRoot),
|
|
120
|
+
trust,
|
|
121
|
+
coverage,
|
|
122
|
+
sources,
|
|
123
|
+
loadedAt: Date.now(),
|
|
124
|
+
loadError: errors.length > 0 ? errors.join("; ") : undefined,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Load harness-owned rule files.
|
|
129
|
+
*/
|
|
130
|
+
async loadHarnessRules() {
|
|
131
|
+
const sources = [];
|
|
132
|
+
// Load main harness AGENTS.md
|
|
133
|
+
if (existsSync(this.harnessRulesPath)) {
|
|
134
|
+
try {
|
|
135
|
+
const content = readFileSync(this.harnessRulesPath, "utf8");
|
|
136
|
+
const normalized = this.normalizeContent(content);
|
|
137
|
+
const sha256 = this.hashContent(normalized);
|
|
138
|
+
sources.push({
|
|
139
|
+
path: this.harnessRulesPath.toString(),
|
|
140
|
+
scope: "", // Root scope - applies everywhere
|
|
141
|
+
priority: "mandatory",
|
|
142
|
+
sha256,
|
|
143
|
+
bytes: Buffer.byteLength(content, "utf8"),
|
|
144
|
+
harnessOwned: true,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
throw new Error(`Failed to load harness rules from ${this.harnessRulesPath}: ${err}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
throw new Error(`Harness rules not found at ${this.harnessRulesPath}`);
|
|
153
|
+
}
|
|
154
|
+
// Load additional harness rules
|
|
155
|
+
for (const rulesPath of this.additionalRulesPaths) {
|
|
156
|
+
if (existsSync(rulesPath)) {
|
|
157
|
+
try {
|
|
158
|
+
const content = readFileSync(rulesPath, "utf8");
|
|
159
|
+
const normalized = this.normalizeContent(content);
|
|
160
|
+
const sha256 = this.hashContent(normalized);
|
|
161
|
+
sources.push({
|
|
162
|
+
path: rulesPath.toString(),
|
|
163
|
+
scope: "", // Root scope
|
|
164
|
+
priority: "mandatory",
|
|
165
|
+
sha256,
|
|
166
|
+
bytes: Buffer.byteLength(content, "utf8"),
|
|
167
|
+
harnessOwned: true,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
console.error(`Failed to load additional rules from ${rulesPath}: ${err}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return sources;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Load project-owned rule files, walking from root toward target.
|
|
179
|
+
*/
|
|
180
|
+
async loadProjectRules(projectRoot, forceAdvisory = false) {
|
|
181
|
+
const sources = [];
|
|
182
|
+
let dir = projectRoot;
|
|
183
|
+
let depth = 0;
|
|
184
|
+
while (dir && depth < MAX_WALK_DEPTH) {
|
|
185
|
+
for (const fileName of RULE_FILE_NAMES) {
|
|
186
|
+
const filePath = join(dir, fileName);
|
|
187
|
+
if (existsSync(filePath)) {
|
|
188
|
+
try {
|
|
189
|
+
const content = readFileSync(filePath, "utf8");
|
|
190
|
+
const normalized = this.normalizeContent(content);
|
|
191
|
+
const sha256 = this.hashContent(normalized);
|
|
192
|
+
// Determine priority and scope
|
|
193
|
+
const isMandatory = fileName === "AGENTS.md" && !forceAdvisory;
|
|
194
|
+
const scope = dir === projectRoot ? "" : "/" + relative(projectRoot, dir);
|
|
195
|
+
sources.push({
|
|
196
|
+
path: filePath,
|
|
197
|
+
scope,
|
|
198
|
+
priority: isMandatory ? "mandatory" : "advisory",
|
|
199
|
+
sha256,
|
|
200
|
+
bytes: Buffer.byteLength(content, "utf8"),
|
|
201
|
+
harnessOwned: false,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
console.error(`Failed to load project rule ${filePath}: ${err}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Move to parent directory
|
|
210
|
+
const parent = dirname(dir);
|
|
211
|
+
if (parent === dir)
|
|
212
|
+
break;
|
|
213
|
+
dir = parent;
|
|
214
|
+
depth++;
|
|
215
|
+
}
|
|
216
|
+
return sources;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Evaluate trust level for a project.
|
|
220
|
+
*/
|
|
221
|
+
evaluateTrust(projectRoot) {
|
|
222
|
+
let trustIndicatorsFound = 0;
|
|
223
|
+
let untrustIndicatorsFound = 0;
|
|
224
|
+
for (const indicator of TRUST_INDICATORS) {
|
|
225
|
+
if (existsSync(join(projectRoot, indicator))) {
|
|
226
|
+
trustIndicatorsFound++;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Check for untrusted indicators (e.g., downloaded zip, unknown origin)
|
|
230
|
+
// For now, presence of .git or package.json means trusted
|
|
231
|
+
if (trustIndicatorsFound > 0) {
|
|
232
|
+
return "trusted";
|
|
233
|
+
}
|
|
234
|
+
return "unknown";
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Infer the scope from a relative path.
|
|
238
|
+
*/
|
|
239
|
+
inferScope(relativePath) {
|
|
240
|
+
// Extract directory component
|
|
241
|
+
const segments = relativePath.split("/");
|
|
242
|
+
if (segments.length <= 1) {
|
|
243
|
+
return ""; // Root scope
|
|
244
|
+
}
|
|
245
|
+
// If first segment is "src" or "packages", use that as scope
|
|
246
|
+
if (segments[0] === "src" || segments[0] === "packages") {
|
|
247
|
+
return segments[0] + "/";
|
|
248
|
+
}
|
|
249
|
+
// Otherwise, use the directory containing the file
|
|
250
|
+
if (segments.length > 1) {
|
|
251
|
+
return segments.slice(0, -1).join("/") + "/";
|
|
252
|
+
}
|
|
253
|
+
return "";
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Normalize content for consistent hashing.
|
|
257
|
+
*/
|
|
258
|
+
normalizeContent(content) {
|
|
259
|
+
return content
|
|
260
|
+
.replace(/\r\n/g, "\n") // Normalize line endings
|
|
261
|
+
.replace(/\t/g, " ") // Normalize tabs
|
|
262
|
+
.replace(/[ \t]+$/gm, "") // Trim trailing whitespace
|
|
263
|
+
.replace(/\n{3,}/g, "\n\n"); // Collapse excessive newlines
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Compute SHA-256 hash of content.
|
|
267
|
+
*/
|
|
268
|
+
hashContent(content) {
|
|
269
|
+
return createHash("sha256").update(content, "utf8").digest("hex").slice(0, 16);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Compute combined revision from sources.
|
|
273
|
+
*/
|
|
274
|
+
computeRevision(sources) {
|
|
275
|
+
// Sort by path for deterministic ordering
|
|
276
|
+
const sorted = [...sources].sort((a, b) => a.path.localeCompare(b.path));
|
|
277
|
+
const combined = sorted.map(s => s.sha256).join("|");
|
|
278
|
+
return this.hashContent(combined);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Determine coverage based on loaded sources and errors.
|
|
282
|
+
*/
|
|
283
|
+
determineCoverage(sources, errors) {
|
|
284
|
+
if (errors.length > 0) {
|
|
285
|
+
return "degraded";
|
|
286
|
+
}
|
|
287
|
+
const mandatorySources = sources.filter(s => s.priority === "mandatory");
|
|
288
|
+
if (mandatorySources.length === 0) {
|
|
289
|
+
return "degraded"; // No mandatory rules loaded
|
|
290
|
+
}
|
|
291
|
+
// Check if any mandatory sources failed to load (bytes === 0)
|
|
292
|
+
if (mandatorySources.some(s => s.bytes === 0)) {
|
|
293
|
+
return "partial";
|
|
294
|
+
}
|
|
295
|
+
return "complete";
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Generate cache key for a project root.
|
|
299
|
+
*/
|
|
300
|
+
getCacheKey(projectRoot) {
|
|
301
|
+
return resolve(projectRoot);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Read the raw content of a source file.
|
|
305
|
+
*/
|
|
306
|
+
readSourceContent(path) {
|
|
307
|
+
if (existsSync(path)) {
|
|
308
|
+
try {
|
|
309
|
+
return readFileSync(path, "utf8");
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
return null;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// ---------------------------------------------------------------------------
|
|
319
|
+
// Factory
|
|
320
|
+
// ---------------------------------------------------------------------------
|
|
321
|
+
/**
|
|
322
|
+
* Create a PolicyLoader with the standard harness configuration.
|
|
323
|
+
*/
|
|
324
|
+
export function createPolicyLoader() {
|
|
325
|
+
// Resolve harness AGENTS.md relative to the package directory
|
|
326
|
+
const harnessRulesPath = new URL("../../AGENTS.md", import.meta.url);
|
|
327
|
+
return new PolicyLoader({
|
|
328
|
+
harnessRulesPath,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=policy-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-loader.js","sourceRoot":"","sources":["../src/policy-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG7D,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,eAAe,GAAG;IACtB,WAAW,EAAO,gCAAgC;IAClD,UAAU,EAAQ,WAAW;IAC7B,kBAAkB,EAAE,WAAW;IAC/B,WAAW,EAAO,WAAW;IAC7B,iBAAiB,EAAE,wCAAwC;CACnD,CAAC;AAEX;;GAEG;AACH,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B;;GAEG;AACH,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAU,CAAC;AAgBnF;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,gBAAgB,CAAM;IACtB,oBAAoB,CAAQ;IAC5B,KAAK,GAAgE,IAAI,GAAG,EAAE,CAAC;IACtE,YAAY,GAAG,IAAI,CAAC,CAAC,oCAAoC;IAE1E,YAAY,MAA0B;QACpC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAChD,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,EAAE,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,WAAmB;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/D,OAAO,MAAM,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,WAAmB,EAAE,UAAmB;QAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC;QAED,yCAAyC;QACzC,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9C,wDAAwD;QACxD,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7C,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CACzE,CAAC;YACF,wCAAwC;YACxC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,WAAoB;QAClC,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,WAAmB;QAC7C,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,uDAAuD;QACvD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;QAEhC,gDAAgD;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAE9C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,sEAAsE;YACtE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;QACpC,CAAC;QAED,6CAA6C;QAC7C,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAExD,wBAAwB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzD,OAAO;YACL,QAAQ;YACR,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC;YACjC,KAAK;YACL,QAAQ;YACR,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;YACpB,SAAS,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC7D,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB;QAC5B,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,8BAA8B;QAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;gBAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAE5C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;oBACtC,KAAK,EAAE,EAAE,EAAE,kCAAkC;oBAC7C,QAAQ,EAAE,WAAW;oBACrB,MAAM;oBACN,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;oBACzC,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,gBAAgB,KAAK,GAAG,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,gCAAgC;QAChC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAClD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;oBAChD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBAClD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;oBAE5C,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE;wBAC1B,KAAK,EAAE,EAAE,EAAE,aAAa;wBACxB,QAAQ,EAAE,WAAW;wBACrB,MAAM;wBACN,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;wBACzC,YAAY,EAAE,IAAI;qBACnB,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,wCAAwC,SAAS,KAAK,GAAG,EAAE,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAC5B,WAAmB,EACnB,aAAa,GAAG,KAAK;QAErB,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,IAAI,GAAG,GAAG,WAAW,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,OAAO,GAAG,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;YACrC,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;gBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAErC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;wBAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;wBAClD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;wBAE5C,+BAA+B;wBAC/B,MAAM,WAAW,GAAG,QAAQ,KAAK,WAAW,IAAI,CAAC,aAAa,CAAC;wBAC/D,MAAM,KAAK,GAAG,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;wBAE1E,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,QAAQ;4BACd,KAAK;4BACL,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU;4BAChD,MAAM;4BACN,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;4BACzC,YAAY,EAAE,KAAK;yBACpB,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;oBACnE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,MAAM,KAAK,GAAG;gBAAE,MAAM;YAC1B,GAAG,GAAG,MAAM,CAAC;YACb,KAAK,EAAE,CAAC;QACV,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,WAAmB;QACvC,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAC7B,IAAI,sBAAsB,GAAG,CAAC,CAAC;QAE/B,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;YACzC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;gBAC7C,oBAAoB,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,0DAA0D;QAC1D,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,YAAoB;QACrC,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC,CAAC,aAAa;QAC1B,CAAC;QAED,6DAA6D;QAC7D,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;YACxD,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC3B,CAAC;QAED,mDAAmD;QACnD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/C,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,OAAe;QACtC,OAAO,OAAO;aACX,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAE,yBAAyB;aACjD,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAE,iBAAiB;aACzC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,2BAA2B;aACpD,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,8BAA8B;IAC/D,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,OAAe;QACjC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,OAAuB;QAC7C,0CAA0C;QAC1C,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,OAAuB,EAAE,MAAgB;QACjE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC;QACzE,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,UAAU,CAAC,CAAC,4BAA4B;QACjD,CAAC;QAED,8DAA8D;QAC9D,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,WAAmB;QACrC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,IAAY;QAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,8DAA8D;IAC9D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAErE,OAAO,IAAI,YAAY,CAAC;QACtB,gBAAgB;KACjB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PolicyRenderer - Renders compact system contract for agent injection.
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* - Render a compact, deterministic contract for before_agent_start injection
|
|
6
|
+
* - Render full rule text for the harness_rules tool
|
|
7
|
+
* - Render policy status for display
|
|
8
|
+
*/
|
|
9
|
+
import type { PolicyManifest, PolicySection, HarnessRulesOutput, MinimaxFindingEnvelope } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Render the compact mandatory contract for system prompt injection.
|
|
12
|
+
*/
|
|
13
|
+
export declare function renderSystemContract(manifest: PolicyManifest): string;
|
|
14
|
+
/**
|
|
15
|
+
* Parse markdown content into sections.
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseSections(content: string, source: string, scope: string, priority: "mandatory" | "advisory"): PolicySection[];
|
|
18
|
+
/**
|
|
19
|
+
* Render full rules for the harness_rules tool.
|
|
20
|
+
*/
|
|
21
|
+
export declare function renderFullRules(manifest: PolicyManifest, options?: {
|
|
22
|
+
source?: string;
|
|
23
|
+
section?: string;
|
|
24
|
+
maxBytes?: number;
|
|
25
|
+
}): HarnessRulesOutput;
|
|
26
|
+
/**
|
|
27
|
+
* Render a manifest summary.
|
|
28
|
+
*/
|
|
29
|
+
export declare function renderManifestSummary(manifest: PolicyManifest): string;
|
|
30
|
+
/**
|
|
31
|
+
* Render a finding envelope for display.
|
|
32
|
+
*/
|
|
33
|
+
export declare function renderFindingEnvelope(envelope: MinimaxFindingEnvelope): string;
|
|
34
|
+
/**
|
|
35
|
+
* Create a clean finding envelope.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createCleanEnvelope(coverage?: "delta" | "targeted" | "full"): MinimaxFindingEnvelope;
|
|
38
|
+
/**
|
|
39
|
+
* Create a degraded finding envelope.
|
|
40
|
+
*/
|
|
41
|
+
export declare function createDegradedEnvelope(reason: string, coverage?: "delta" | "targeted" | "full"): MinimaxFindingEnvelope;
|
|
42
|
+
//# sourceMappingURL=policy-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-renderer.d.ts","sourceRoot":"","sources":["../src/policy-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAM5G;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAiCrE;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,UAAU,GAAG,aAAa,EAAE,CA6EjI;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACd,GACL,kBAAkB,CA0DpB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CA0BtE;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,CAuD9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,OAAO,GAAG,UAAU,GAAG,MAAe,GAAG,sBAAsB,CAS5G;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,OAAO,GAAG,UAAU,GAAG,MAAgB,GAChD,sBAAsB,CASxB"}
|