@aiassesstech/nole 0.5.0 → 0.6.0
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/agent/AGENTS.md +18 -0
- package/dist/intel/intel-store.d.ts +62 -0
- package/dist/intel/intel-store.d.ts.map +1 -0
- package/dist/intel/intel-store.js +242 -0
- package/dist/intel/intel-store.js.map +1 -0
- package/dist/intel/provenance.d.ts +16 -0
- package/dist/intel/provenance.d.ts.map +1 -0
- package/dist/intel/provenance.js +23 -0
- package/dist/intel/provenance.js.map +1 -0
- package/dist/intel/sensitivity-scanner.d.ts +25 -0
- package/dist/intel/sensitivity-scanner.d.ts.map +1 -0
- package/dist/intel/sensitivity-scanner.js +37 -0
- package/dist/intel/sensitivity-scanner.js.map +1 -0
- package/dist/pipeline/prospect-store.js +2 -2
- package/dist/pipeline/prospect-store.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +53 -30
- package/dist/plugin.js.map +1 -1
- package/dist/store/json-store.d.ts.map +1 -1
- package/dist/store/json-store.js +6 -7
- package/dist/store/json-store.js.map +1 -1
- package/dist/tools/nole-intel.d.ts +53 -0
- package/dist/tools/nole-intel.d.ts.map +1 -0
- package/dist/tools/nole-intel.js +178 -0
- package/dist/tools/nole-intel.js.map +1 -0
- package/openclaw.plugin.json +15 -7
- package/package.json +3 -3
package/agent/AGENTS.md
CHANGED
|
@@ -160,6 +160,12 @@ Voice: confident, data-driven, trust-focused. NOT salesy. Adapt tone per platfor
|
|
|
160
160
|
| `nole_linkedin_draft` | Draft LinkedIn post for Greg to publish | B2B professional content |
|
|
161
161
|
| `nole_social_status` | Social connectivity and rate limits | Status checks, troubleshooting |
|
|
162
162
|
|
|
163
|
+
### Intelligence Base
|
|
164
|
+
|
|
165
|
+
| Tool | What It Does | When to Use |
|
|
166
|
+
|------|-------------|-------------|
|
|
167
|
+
| `nole_intel` | Market intelligence base — query, list, read, health, request Sam compilation | Research, weekly intel synthesis, market pattern analysis |
|
|
168
|
+
|
|
163
169
|
### Fleet Utilities
|
|
164
170
|
|
|
165
171
|
| Tool | What It Does | When to Use |
|
|
@@ -170,6 +176,18 @@ Voice: confident, data-driven, trust-focused. NOT salesy. Adapt tone per platfor
|
|
|
170
176
|
|
|
171
177
|
You do not guess the time. When you need to know what time it is, what day it is, or where you are in the assessment cycle, call `noah_time` with action `context`. Noah is the fleet's temporal authority. Greg's timezone is America/Chicago (Central Time).
|
|
172
178
|
|
|
179
|
+
### Rule 20: Intel Base Stewardship
|
|
180
|
+
|
|
181
|
+
I maintain a compiled market intelligence base in `intel/`. Articles are compiled by Sam (I request, he executes) from my raw market memories. Use `nole_intel` to:
|
|
182
|
+
|
|
183
|
+
- **`query`** — Search articles for competitive intelligence and market patterns
|
|
184
|
+
- **`read`** — Read specific articles by slug
|
|
185
|
+
- **`list`** — List all articles with metadata
|
|
186
|
+
- **`health`** — Check staleness and compilation gaps
|
|
187
|
+
- **`request_compile`** — Dispatch compilation to Sam for stale categories
|
|
188
|
+
|
|
189
|
+
Sensitivity scanning is enforced on all intel articles — private keys, API tokens, and credentials are rejected before persistence. Content hashes provide tamper-evident integrity.
|
|
190
|
+
|
|
173
191
|
### Rule 19: Context Gate Awareness
|
|
174
192
|
|
|
175
193
|
My plugin automatically loads `decisions.md`, `corrections.md`, and critical SOUL.md rules before every response via the `before_prompt_build` hook. This happens mechanically and cannot be bypassed. If files are missing, the gate fails open — I am never blocked.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nole Intelligence Store — Market Intelligence Wiki
|
|
3
|
+
*
|
|
4
|
+
* SPEC-fleet-knowledge-base-v1.2 §4.2:
|
|
5
|
+
* Manages intel/ directory within Nole's workspace. Mirrors KnowledgeStore
|
|
6
|
+
* in structure but with Nole-specific semantics. Separate implementation
|
|
7
|
+
* per BB Amendment 6 — no shared base class with KnowledgeStore.
|
|
8
|
+
*
|
|
9
|
+
* Write operations are executed by Sam via the compilation pipeline.
|
|
10
|
+
* Sensitivity scanner (§4.3) runs before any article write.
|
|
11
|
+
*/
|
|
12
|
+
import type { SourceReference } from './provenance.js';
|
|
13
|
+
import type { WikiCategory } from '@aiassesstech/fleet-bus';
|
|
14
|
+
export interface IntelArticle {
|
|
15
|
+
slug: string;
|
|
16
|
+
title: string;
|
|
17
|
+
category: WikiCategory;
|
|
18
|
+
lastUpdated: string;
|
|
19
|
+
tags: string[];
|
|
20
|
+
summary: string;
|
|
21
|
+
sources: SourceReference[];
|
|
22
|
+
contentHash: string;
|
|
23
|
+
compilationEvent: string;
|
|
24
|
+
derivedRatio: number;
|
|
25
|
+
}
|
|
26
|
+
export interface IntelIndex {
|
|
27
|
+
version: number;
|
|
28
|
+
lastCompiled: string;
|
|
29
|
+
lastHealthCheck: string | null;
|
|
30
|
+
articles: IntelArticle[];
|
|
31
|
+
totalArticles: number;
|
|
32
|
+
}
|
|
33
|
+
export declare class IntelStore {
|
|
34
|
+
readonly intelDir: string;
|
|
35
|
+
readonly outputsDir: string;
|
|
36
|
+
readonly archiveDir: string;
|
|
37
|
+
readonly baseDir: string;
|
|
38
|
+
private readonly indexPath;
|
|
39
|
+
private index;
|
|
40
|
+
constructor(workspaceDir: string);
|
|
41
|
+
initialize(): Promise<void>;
|
|
42
|
+
getIndex(): IntelIndex;
|
|
43
|
+
getArticle(slug: string): IntelArticle | null;
|
|
44
|
+
getArticleContent(slug: string): string | null;
|
|
45
|
+
getArticleContentHash(slug: string): string | null;
|
|
46
|
+
listArticles(): IntelArticle[];
|
|
47
|
+
writeArticle(slug: string, content: string, meta: Omit<IntelArticle, 'slug' | 'contentHash' | 'derivedRatio'>): IntelArticle;
|
|
48
|
+
saveOutput(filename: string, content: string, expiresInDays?: number): string;
|
|
49
|
+
getStaleArticlesByCategory(defaults: Record<string, number>, overrides?: Record<string, number>): IntelArticle[];
|
|
50
|
+
getHighDerivedArticles(threshold?: number): IntelArticle[];
|
|
51
|
+
archiveExpiredOutputs(): string[];
|
|
52
|
+
recordHealthCheck(): void;
|
|
53
|
+
writeProbeArticle(slug: string, content: string): void;
|
|
54
|
+
readProbeArticle(slug: string): string | null;
|
|
55
|
+
deleteProbeArticle(slug: string): boolean;
|
|
56
|
+
private resolveArticlePath;
|
|
57
|
+
private updateIndexEntry;
|
|
58
|
+
private createEmptyIndex;
|
|
59
|
+
private parseIndex;
|
|
60
|
+
private writeIndex;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=intel-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intel-store.d.ts","sourceRoot":"","sources":["../../src/intel/intel-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,KAAK,CAAa;gBAEd,YAAY,EAAE,MAAM;IAS1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC,QAAQ,IAAI,UAAU;IAItB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAI7C,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAM9C,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOlD,YAAY,IAAI,YAAY,EAAE;IAI9B,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC,GAChE,YAAY;IAkDf,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,SAAK,GAAG,MAAM;IAkBzE,0BAA0B,CACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACrC,YAAY,EAAE;IAUjB,sBAAsB,CAAC,SAAS,SAAM,GAAG,YAAY,EAAE;IAIvD,qBAAqB,IAAI,MAAM,EAAE;IAkCjC,iBAAiB,IAAI,IAAI;IAKzB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKtD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAM7C,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOzC,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,UAAU;CA0BnB"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nole Intelligence Store — Market Intelligence Wiki
|
|
3
|
+
*
|
|
4
|
+
* SPEC-fleet-knowledge-base-v1.2 §4.2:
|
|
5
|
+
* Manages intel/ directory within Nole's workspace. Mirrors KnowledgeStore
|
|
6
|
+
* in structure but with Nole-specific semantics. Separate implementation
|
|
7
|
+
* per BB Amendment 6 — no shared base class with KnowledgeStore.
|
|
8
|
+
*
|
|
9
|
+
* Write operations are executed by Sam via the compilation pipeline.
|
|
10
|
+
* Sensitivity scanner (§4.3) runs before any article write.
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from 'node:fs';
|
|
13
|
+
import * as path from 'node:path';
|
|
14
|
+
import { computeContentHash } from './provenance.js';
|
|
15
|
+
export class IntelStore {
|
|
16
|
+
intelDir;
|
|
17
|
+
outputsDir;
|
|
18
|
+
archiveDir;
|
|
19
|
+
baseDir;
|
|
20
|
+
indexPath;
|
|
21
|
+
index;
|
|
22
|
+
constructor(workspaceDir) {
|
|
23
|
+
this.baseDir = workspaceDir;
|
|
24
|
+
this.intelDir = path.join(workspaceDir, 'intel');
|
|
25
|
+
this.outputsDir = path.join(workspaceDir, 'outputs');
|
|
26
|
+
this.archiveDir = path.join(this.outputsDir, 'archive');
|
|
27
|
+
this.indexPath = path.join(this.intelDir, 'INDEX.md');
|
|
28
|
+
this.index = this.createEmptyIndex();
|
|
29
|
+
}
|
|
30
|
+
async initialize() {
|
|
31
|
+
for (const dir of [
|
|
32
|
+
this.intelDir,
|
|
33
|
+
this.outputsDir,
|
|
34
|
+
this.archiveDir,
|
|
35
|
+
path.join(this.intelDir, '.probes'),
|
|
36
|
+
]) {
|
|
37
|
+
if (!fs.existsSync(dir)) {
|
|
38
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (fs.existsSync(this.indexPath)) {
|
|
42
|
+
this.index = this.parseIndex();
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.writeIndex();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
getIndex() {
|
|
49
|
+
return this.index;
|
|
50
|
+
}
|
|
51
|
+
getArticle(slug) {
|
|
52
|
+
return this.index.articles.find(a => a.slug === slug) ?? null;
|
|
53
|
+
}
|
|
54
|
+
getArticleContent(slug) {
|
|
55
|
+
const articlePath = this.resolveArticlePath(slug);
|
|
56
|
+
if (!fs.existsSync(articlePath))
|
|
57
|
+
return null;
|
|
58
|
+
return fs.readFileSync(articlePath, 'utf-8');
|
|
59
|
+
}
|
|
60
|
+
getArticleContentHash(slug) {
|
|
61
|
+
const content = this.getArticleContent(slug);
|
|
62
|
+
if (!content)
|
|
63
|
+
return null;
|
|
64
|
+
const withoutHashLine = content.replace(/^content_hash:.*\n/m, '');
|
|
65
|
+
return computeContentHash(withoutHashLine);
|
|
66
|
+
}
|
|
67
|
+
listArticles() {
|
|
68
|
+
return this.index.articles.filter(a => !a.slug.startsWith('.probes/'));
|
|
69
|
+
}
|
|
70
|
+
writeArticle(slug, content, meta) {
|
|
71
|
+
const articlePath = this.resolveArticlePath(slug);
|
|
72
|
+
const dir = path.dirname(articlePath);
|
|
73
|
+
if (!fs.existsSync(dir)) {
|
|
74
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
const derivedCount = meta.sources.filter(s => s.type === 'derived').length;
|
|
77
|
+
const derivedRatio = meta.sources.length > 0
|
|
78
|
+
? derivedCount / meta.sources.length
|
|
79
|
+
: 0;
|
|
80
|
+
const frontmatterFields = [
|
|
81
|
+
'---',
|
|
82
|
+
`title: "${meta.title}"`,
|
|
83
|
+
`slug: "${slug}"`,
|
|
84
|
+
`category: "${meta.category}"`,
|
|
85
|
+
`updated: "${meta.lastUpdated}"`,
|
|
86
|
+
`tags: [${meta.tags.map(t => `"${t}"`).join(', ')}]`,
|
|
87
|
+
'sources:',
|
|
88
|
+
...meta.sources.map(s => ` - path: "${s.path}"\n sha256: "${s.sha256}"\n type: "${s.type}"`),
|
|
89
|
+
`compilation_event: "${meta.compilationEvent}"`,
|
|
90
|
+
];
|
|
91
|
+
const bodyWithFrontmatterNoHash = [...frontmatterFields, '---', ''].join('\n') + content;
|
|
92
|
+
const contentHash = computeContentHash(bodyWithFrontmatterNoHash);
|
|
93
|
+
const fullContent = [
|
|
94
|
+
...frontmatterFields,
|
|
95
|
+
`content_hash: "${contentHash}"`,
|
|
96
|
+
'---',
|
|
97
|
+
'',
|
|
98
|
+
].join('\n') + content;
|
|
99
|
+
const tmpPath = articlePath + `.tmp.${Date.now()}`;
|
|
100
|
+
fs.writeFileSync(tmpPath, fullContent);
|
|
101
|
+
fs.renameSync(tmpPath, articlePath);
|
|
102
|
+
const article = {
|
|
103
|
+
slug,
|
|
104
|
+
...meta,
|
|
105
|
+
contentHash,
|
|
106
|
+
derivedRatio,
|
|
107
|
+
};
|
|
108
|
+
this.updateIndexEntry(article);
|
|
109
|
+
return article;
|
|
110
|
+
}
|
|
111
|
+
saveOutput(filename, content, expiresInDays = 90) {
|
|
112
|
+
const outputPath = path.join(this.outputsDir, filename);
|
|
113
|
+
const expiresAt = new Date(Date.now() + expiresInDays * 24 * 60 * 60 * 1000).toISOString();
|
|
114
|
+
const frontmatter = [
|
|
115
|
+
'---',
|
|
116
|
+
`created: "${new Date().toISOString()}"`,
|
|
117
|
+
`expires_at: "${expiresAt}"`,
|
|
118
|
+
'---',
|
|
119
|
+
'',
|
|
120
|
+
].join('\n');
|
|
121
|
+
fs.writeFileSync(outputPath, frontmatter + content);
|
|
122
|
+
return outputPath;
|
|
123
|
+
}
|
|
124
|
+
getStaleArticlesByCategory(defaults, overrides = {}) {
|
|
125
|
+
const thresholds = { ...defaults, ...overrides };
|
|
126
|
+
return this.index.articles.filter(a => {
|
|
127
|
+
const maxDays = thresholds[a.category] ?? 14;
|
|
128
|
+
const ageDays = (Date.now() - new Date(a.lastUpdated).getTime())
|
|
129
|
+
/ (1000 * 60 * 60 * 24);
|
|
130
|
+
return ageDays > maxDays;
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
getHighDerivedArticles(threshold = 0.5) {
|
|
134
|
+
return this.index.articles.filter(a => a.derivedRatio > threshold);
|
|
135
|
+
}
|
|
136
|
+
archiveExpiredOutputs() {
|
|
137
|
+
const archived = [];
|
|
138
|
+
const now = Date.now();
|
|
139
|
+
let files;
|
|
140
|
+
try {
|
|
141
|
+
files = fs.readdirSync(this.outputsDir)
|
|
142
|
+
.filter(f => f.endsWith('.md') && f !== 'archive');
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return archived;
|
|
146
|
+
}
|
|
147
|
+
for (const file of files) {
|
|
148
|
+
const filePath = path.join(this.outputsDir, file);
|
|
149
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
150
|
+
const expiresMatch = content.match(/expires_at:\s*"(.+?)"/);
|
|
151
|
+
if (expiresMatch) {
|
|
152
|
+
const expiresAt = new Date(expiresMatch[1]).getTime();
|
|
153
|
+
if (expiresAt < now) {
|
|
154
|
+
const monthDir = path.join(this.archiveDir, new Date().toISOString().slice(0, 7));
|
|
155
|
+
if (!fs.existsSync(monthDir)) {
|
|
156
|
+
fs.mkdirSync(monthDir, { recursive: true });
|
|
157
|
+
}
|
|
158
|
+
fs.renameSync(filePath, path.join(monthDir, file));
|
|
159
|
+
archived.push(file);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return archived;
|
|
164
|
+
}
|
|
165
|
+
recordHealthCheck() {
|
|
166
|
+
this.index.lastHealthCheck = new Date().toISOString();
|
|
167
|
+
this.writeIndex();
|
|
168
|
+
}
|
|
169
|
+
writeProbeArticle(slug, content) {
|
|
170
|
+
const probePath = path.join(this.intelDir, '.probes', `${slug}.md`);
|
|
171
|
+
fs.writeFileSync(probePath, content);
|
|
172
|
+
}
|
|
173
|
+
readProbeArticle(slug) {
|
|
174
|
+
const probePath = path.join(this.intelDir, '.probes', `${slug}.md`);
|
|
175
|
+
if (!fs.existsSync(probePath))
|
|
176
|
+
return null;
|
|
177
|
+
return fs.readFileSync(probePath, 'utf-8');
|
|
178
|
+
}
|
|
179
|
+
deleteProbeArticle(slug) {
|
|
180
|
+
const probePath = path.join(this.intelDir, '.probes', `${slug}.md`);
|
|
181
|
+
if (!fs.existsSync(probePath))
|
|
182
|
+
return false;
|
|
183
|
+
fs.unlinkSync(probePath);
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
resolveArticlePath(slug) {
|
|
187
|
+
return path.join(this.intelDir, `${slug}.md`);
|
|
188
|
+
}
|
|
189
|
+
updateIndexEntry(article) {
|
|
190
|
+
const existing = this.index.articles.findIndex(a => a.slug === article.slug);
|
|
191
|
+
if (existing >= 0) {
|
|
192
|
+
this.index.articles[existing] = article;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
this.index.articles.push(article);
|
|
196
|
+
}
|
|
197
|
+
this.index.totalArticles = this.index.articles.length;
|
|
198
|
+
this.index.lastCompiled = new Date().toISOString();
|
|
199
|
+
this.writeIndex();
|
|
200
|
+
}
|
|
201
|
+
createEmptyIndex() {
|
|
202
|
+
return {
|
|
203
|
+
version: 1,
|
|
204
|
+
lastCompiled: new Date().toISOString(),
|
|
205
|
+
lastHealthCheck: null,
|
|
206
|
+
articles: [],
|
|
207
|
+
totalArticles: 0,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
parseIndex() {
|
|
211
|
+
try {
|
|
212
|
+
const content = fs.readFileSync(this.indexPath, 'utf-8');
|
|
213
|
+
const jsonMatch = content.match(/```json\n([\s\S]*?)\n```/);
|
|
214
|
+
if (jsonMatch)
|
|
215
|
+
return JSON.parse(jsonMatch[1]);
|
|
216
|
+
}
|
|
217
|
+
catch { /* fall through */ }
|
|
218
|
+
return this.createEmptyIndex();
|
|
219
|
+
}
|
|
220
|
+
writeIndex() {
|
|
221
|
+
const visibleArticles = this.index.articles.filter(a => !a.slug.startsWith('.probes/'));
|
|
222
|
+
const content = [
|
|
223
|
+
'# Nole Intelligence Base — Index',
|
|
224
|
+
'',
|
|
225
|
+
`Last compiled: ${this.index.lastCompiled}`,
|
|
226
|
+
`Last health check: ${this.index.lastHealthCheck ?? 'never'}`,
|
|
227
|
+
`Total articles: ${visibleArticles.length}`,
|
|
228
|
+
'',
|
|
229
|
+
'## Articles',
|
|
230
|
+
'',
|
|
231
|
+
...visibleArticles.map(a => `- **[[${a.slug}]]** — ${a.summary} *(${a.category}, updated: ${a.lastUpdated})*`),
|
|
232
|
+
'',
|
|
233
|
+
'## Machine-Readable Index',
|
|
234
|
+
'',
|
|
235
|
+
'```json',
|
|
236
|
+
JSON.stringify(this.index, null, 2),
|
|
237
|
+
'```',
|
|
238
|
+
].join('\n');
|
|
239
|
+
fs.writeFileSync(this.indexPath, content);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=intel-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intel-store.js","sourceRoot":"","sources":["../../src/intel/intel-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cryptographic provenance utilities for Nole's Intelligence Store.
|
|
3
|
+
*
|
|
4
|
+
* Duplicated from Jessie's knowledge/provenance.ts per BB Amendment 6:
|
|
5
|
+
* separate implementations, no shared base class. ~200 LOC duplication
|
|
6
|
+
* is acceptable; coupling via base class would make it harder to diverge.
|
|
7
|
+
*/
|
|
8
|
+
export interface SourceReference {
|
|
9
|
+
path: string;
|
|
10
|
+
sha256: string;
|
|
11
|
+
type: 'raw' | 'derived';
|
|
12
|
+
}
|
|
13
|
+
export declare function computeFileHash(filePath: string): string;
|
|
14
|
+
export declare function computeContentHash(content: string): string;
|
|
15
|
+
export declare function classifySource(sourcePath: string): 'raw' | 'derived';
|
|
16
|
+
//# sourceMappingURL=provenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/intel/provenance.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;CACzB;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAKpE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cryptographic provenance utilities for Nole's Intelligence Store.
|
|
3
|
+
*
|
|
4
|
+
* Duplicated from Jessie's knowledge/provenance.ts per BB Amendment 6:
|
|
5
|
+
* separate implementations, no shared base class. ~200 LOC duplication
|
|
6
|
+
* is acceptable; coupling via base class would make it harder to diverge.
|
|
7
|
+
*/
|
|
8
|
+
import * as crypto from 'node:crypto';
|
|
9
|
+
import * as fs from 'node:fs';
|
|
10
|
+
export function computeFileHash(filePath) {
|
|
11
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
12
|
+
return crypto.createHash('sha256').update(content).digest('hex');
|
|
13
|
+
}
|
|
14
|
+
export function computeContentHash(content) {
|
|
15
|
+
return crypto.createHash('sha256').update(content).digest('hex');
|
|
16
|
+
}
|
|
17
|
+
export function classifySource(sourcePath) {
|
|
18
|
+
if (sourcePath.startsWith('wiki/') || sourcePath.startsWith('intel/')) {
|
|
19
|
+
return 'derived';
|
|
20
|
+
}
|
|
21
|
+
return 'raw';
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/intel/provenance.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAQ9B,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sensitivity Scanner — prevents sensitive material from persisting to intel store.
|
|
3
|
+
*
|
|
4
|
+
* SPEC-fleet-knowledge-base-v1.2 §4.3 (BB Amendment 9):
|
|
5
|
+
* Runs against article BODY content only — not the fully-assembled file
|
|
6
|
+
* with provenance frontmatter. The 64-hex-char pattern matches SHA-256
|
|
7
|
+
* hashes in frontmatter, so scanning the complete file would produce
|
|
8
|
+
* false positives (IH2).
|
|
9
|
+
*
|
|
10
|
+
* If scan fails: article write is REJECTED (not sanitized). Upstream
|
|
11
|
+
* source needs human review, not automated cleanup.
|
|
12
|
+
*/
|
|
13
|
+
export interface SensitivityScanResult {
|
|
14
|
+
passed: boolean;
|
|
15
|
+
matches: Array<{
|
|
16
|
+
pattern: string;
|
|
17
|
+
lineNumber: number;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Scans article BODY content for sensitive material.
|
|
22
|
+
* IMPORTANT (IH2): Must be called on body text BEFORE frontmatter is attached.
|
|
23
|
+
*/
|
|
24
|
+
export declare function scanForSensitiveContent(bodyContent: string): SensitivityScanResult;
|
|
25
|
+
//# sourceMappingURL=sensitivity-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitivity-scanner.d.ts","sourceRoot":"","sources":["../../src/intel/sensitivity-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,CAalF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sensitivity Scanner — prevents sensitive material from persisting to intel store.
|
|
3
|
+
*
|
|
4
|
+
* SPEC-fleet-knowledge-base-v1.2 §4.3 (BB Amendment 9):
|
|
5
|
+
* Runs against article BODY content only — not the fully-assembled file
|
|
6
|
+
* with provenance frontmatter. The 64-hex-char pattern matches SHA-256
|
|
7
|
+
* hashes in frontmatter, so scanning the complete file would produce
|
|
8
|
+
* false positives (IH2).
|
|
9
|
+
*
|
|
10
|
+
* If scan fails: article write is REJECTED (not sanitized). Upstream
|
|
11
|
+
* source needs human review, not automated cleanup.
|
|
12
|
+
*/
|
|
13
|
+
const SENSITIVITY_PATTERNS = [
|
|
14
|
+
/(?:0x)?[0-9a-fA-F]{64}/, // private keys (64 hex chars)
|
|
15
|
+
/(?:sk_|pk_|rk_)(live|test)_[a-zA-Z0-9]{24,}/, // Stripe keys
|
|
16
|
+
/(?:AKIA|ASIA)[A-Z0-9]{16}/, // AWS access keys
|
|
17
|
+
/Bearer\s+[a-zA-Z0-9\-._~+\/]{20,}/, // Bearer tokens
|
|
18
|
+
/hck_[a-zA-Z0-9]{32,}/, // OpenClaw health check keys
|
|
19
|
+
/-----BEGIN (?:RSA |EC )?PRIVATE KEY-----/, // PEM private keys
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* Scans article BODY content for sensitive material.
|
|
23
|
+
* IMPORTANT (IH2): Must be called on body text BEFORE frontmatter is attached.
|
|
24
|
+
*/
|
|
25
|
+
export function scanForSensitiveContent(bodyContent) {
|
|
26
|
+
const matches = [];
|
|
27
|
+
const lines = bodyContent.split('\n');
|
|
28
|
+
for (let i = 0; i < lines.length; i++) {
|
|
29
|
+
for (const pattern of SENSITIVITY_PATTERNS) {
|
|
30
|
+
if (pattern.test(lines[i])) {
|
|
31
|
+
matches.push({ pattern: pattern.source, lineNumber: i + 1 });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return { passed: matches.length === 0, matches };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=sensitivity-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitivity-scanner.js","sourceRoot":"","sources":["../../src/intel/sensitivity-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,oBAAoB,GAAa;IACrC,wBAAwB,EAAwB,8BAA8B;IAC9E,6CAA6C,EAAG,cAAc;IAC9D,2BAA2B,EAAsB,kBAAkB;IACnE,mCAAmC,EAAa,gBAAgB;IAChE,sBAAsB,EAA2B,6BAA6B;IAC9E,0CAA0C,EAAQ,mBAAmB;CACtE,CAAC;AAOF;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAAmB;IACzD,MAAM,OAAO,GAAmD,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,KAAK,MAAM,OAAO,IAAI,oBAAoB,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -36,7 +36,7 @@ export class ProspectPipelineStore {
|
|
|
36
36
|
...data,
|
|
37
37
|
};
|
|
38
38
|
await this.save(prospect);
|
|
39
|
-
await this.writeMemory('
|
|
39
|
+
await this.writeMemory('discovery', ['pipeline', 'discovered', prospect.discoveryChannel], `Prospect Discovered: ${prospect.agentName}`, `Discovered **${prospect.agentName}** via ${prospect.discoveryChannel}.\n\nContext: ${prospect.discoveryContext}`);
|
|
40
40
|
return prospect;
|
|
41
41
|
}
|
|
42
42
|
async updateStage(id, stage, updates) {
|
|
@@ -49,7 +49,7 @@ export class ProspectPipelineStore {
|
|
|
49
49
|
Object.assign(prospect, updates);
|
|
50
50
|
}
|
|
51
51
|
await this.save(prospect);
|
|
52
|
-
await this.writeMemory(
|
|
52
|
+
await this.writeMemory('discovery', ['pipeline', stage, prospect.discoveryChannel], `Prospect ${stage}: ${prospect.agentName}`, `**${prospect.agentName}** moved to stage **${stage}**.`);
|
|
53
53
|
return prospect;
|
|
54
54
|
}
|
|
55
55
|
async addNote(id, note) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prospect-store.js","sourceRoot":"","sources":["../../src/pipeline/prospect-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAUhD;;;;;;GAMG;AACH,MAAM,OAAO,qBAAqB;IACf,WAAW,CAAS;IACpB,UAAU,CAAS;IACnB,YAAY,CAAoB;IAEjD,YAAY,OAAe,EAAE,YAA+B;QAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CACf,IAAgF;QAEhF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAmB;YAC/B,EAAE,EAAE,UAAU,CAAC,UAAU,CAAC;YAC1B,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,GAAG,IAAI;SACR,CAAC;QACF,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1B,MAAM,IAAI,CAAC,WAAW,CACpB,
|
|
1
|
+
{"version":3,"file":"prospect-store.js","sourceRoot":"","sources":["../../src/pipeline/prospect-store.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAiCA;;;;;;;;;;;;;;;;GAgBG;AAGH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAiCA;;;;;;;;;;;;;;;;GAgBG;AAGH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAi4G/C"}
|
package/dist/plugin.js
CHANGED
|
@@ -852,39 +852,61 @@ export default function register(api) {
|
|
|
852
852
|
}
|
|
853
853
|
},
|
|
854
854
|
});
|
|
855
|
+
// ── Intel Store + nole_intel tool (SPEC-fleet-knowledge-base-v1.2 §4) ──
|
|
856
|
+
let intelStoreInstance = null;
|
|
857
|
+
const getIntelStore = () => intelStoreInstance;
|
|
858
|
+
const initIntelStore = async () => {
|
|
859
|
+
if (intelStoreInstance)
|
|
860
|
+
return;
|
|
861
|
+
try {
|
|
862
|
+
const { IntelStore } = await import('./intel/intel-store.js');
|
|
863
|
+
const agentsDir = join(homedir(), '.openclaw', 'agents', 'nole');
|
|
864
|
+
intelStoreInstance = new IntelStore(agentsDir);
|
|
865
|
+
await intelStoreInstance.initialize();
|
|
866
|
+
console.log('[nole] Intel store initialized');
|
|
867
|
+
}
|
|
868
|
+
catch (err) {
|
|
869
|
+
console.warn(`[nole] Intel store init failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
870
|
+
}
|
|
871
|
+
};
|
|
855
872
|
api.registerTool({
|
|
856
|
-
name:
|
|
857
|
-
description:
|
|
858
|
-
|
|
873
|
+
name: 'nole_intel',
|
|
874
|
+
description: 'Intelligence knowledge base — query intel, list articles, ' +
|
|
875
|
+
'check health, request compilation via Sam. ' +
|
|
876
|
+
'Actions: query, list, read, health, request_compile, save_output.',
|
|
859
877
|
parameters: {
|
|
860
|
-
type:
|
|
861
|
-
properties: {
|
|
878
|
+
type: 'object',
|
|
879
|
+
properties: {
|
|
880
|
+
action: {
|
|
881
|
+
type: 'string',
|
|
882
|
+
enum: ['query', 'list', 'read', 'health', 'request_compile', 'save_output'],
|
|
883
|
+
description: 'query: search intel for a topic. list: show all articles. ' +
|
|
884
|
+
'read: read article by slug. health: report stale articles. ' +
|
|
885
|
+
'request_compile: dispatch compilation job to Sam. ' +
|
|
886
|
+
'save_output: save a generated report to outputs/.',
|
|
887
|
+
},
|
|
888
|
+
topic: { type: 'string', description: 'For query/request_compile: topic area.' },
|
|
889
|
+
slug: { type: 'string', description: 'For read: article slug.' },
|
|
890
|
+
content: { type: 'string', description: 'For save_output: content to save.' },
|
|
891
|
+
filename: { type: 'string', description: 'For save_output: output filename.' },
|
|
892
|
+
},
|
|
893
|
+
required: ['action'],
|
|
862
894
|
},
|
|
863
|
-
async execute(_toolCallId,
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
auditChainValid: stats.auditChainValid,
|
|
879
|
-
},
|
|
880
|
-
weeklyReport: {
|
|
881
|
-
status: "Not yet available — Phase 4 feature",
|
|
882
|
-
nextReportDay: config.weeklyReportDay,
|
|
883
|
-
},
|
|
884
|
-
},
|
|
885
|
-
}, null, 2),
|
|
886
|
-
}],
|
|
887
|
-
};
|
|
895
|
+
async execute(_toolCallId, params) {
|
|
896
|
+
if (!intelStoreInstance) {
|
|
897
|
+
await initIntelStore();
|
|
898
|
+
}
|
|
899
|
+
try {
|
|
900
|
+
const { createNoleIntelTool } = await import('./tools/nole-intel.js');
|
|
901
|
+
const tool = createNoleIntelTool(getIntelStore);
|
|
902
|
+
return tool.execute(_toolCallId, params);
|
|
903
|
+
}
|
|
904
|
+
catch (err) {
|
|
905
|
+
return {
|
|
906
|
+
content: [{ type: 'text', text: `Intel store error: ${err instanceof Error ? err.message : String(err)}` }],
|
|
907
|
+
isError: true,
|
|
908
|
+
};
|
|
909
|
+
}
|
|
888
910
|
},
|
|
889
911
|
});
|
|
890
912
|
api.registerTool({
|
|
@@ -2894,6 +2916,7 @@ export default function register(api) {
|
|
|
2894
2916
|
}
|
|
2895
2917
|
}
|
|
2896
2918
|
catch { /* decisions.md not present — skip silently */ }
|
|
2919
|
+
await initIntelStore();
|
|
2897
2920
|
});
|
|
2898
2921
|
if (typeof api.on === "function") {
|
|
2899
2922
|
api.on("before_prompt_build", () => {
|