create-agentfs 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +238 -0
- package/dist/cli.d.ts +51 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +246 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/compile.d.ts +48 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +228 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/cron.d.ts +18 -0
- package/dist/commands/cron.d.ts.map +1 -0
- package/dist/commands/cron.js +95 -0
- package/dist/commands/cron.js.map +1 -0
- package/dist/commands/doctor.d.ts +11 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +199 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/memory.d.ts +19 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +213 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/onboard.d.ts +31 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +362 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/secret.d.ts +13 -0
- package/dist/commands/secret.d.ts.map +1 -0
- package/dist/commands/secret.js +109 -0
- package/dist/commands/secret.js.map +1 -0
- package/dist/commands/security.d.ts +16 -0
- package/dist/commands/security.d.ts.map +1 -0
- package/dist/commands/security.js +203 -0
- package/dist/commands/security.js.map +1 -0
- package/dist/commands/sync.d.ts +14 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +84 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/compilers/agent-map.d.ts +34 -0
- package/dist/compilers/agent-map.d.ts.map +1 -0
- package/dist/compilers/agent-map.js +66 -0
- package/dist/compilers/agent-map.js.map +1 -0
- package/dist/compilers/base.d.ts +67 -0
- package/dist/compilers/base.d.ts.map +1 -0
- package/dist/compilers/base.js +183 -0
- package/dist/compilers/base.js.map +1 -0
- package/dist/compilers/claude.d.ts +26 -0
- package/dist/compilers/claude.d.ts.map +1 -0
- package/dist/compilers/claude.js +151 -0
- package/dist/compilers/claude.js.map +1 -0
- package/dist/compilers/cursor.d.ts +11 -0
- package/dist/compilers/cursor.d.ts.map +1 -0
- package/dist/compilers/cursor.js +52 -0
- package/dist/compilers/cursor.js.map +1 -0
- package/dist/compilers/index.d.ts +14 -0
- package/dist/compilers/index.d.ts.map +1 -0
- package/dist/compilers/index.js +14 -0
- package/dist/compilers/index.js.map +1 -0
- package/dist/compilers/openclaw.d.ts +12 -0
- package/dist/compilers/openclaw.d.ts.map +1 -0
- package/dist/compilers/openclaw.js +51 -0
- package/dist/compilers/openclaw.js.map +1 -0
- package/dist/cron/index.d.ts +10 -0
- package/dist/cron/index.d.ts.map +1 -0
- package/dist/cron/index.js +9 -0
- package/dist/cron/index.js.map +1 -0
- package/dist/cron/jobs/consolidate.d.ts +16 -0
- package/dist/cron/jobs/consolidate.d.ts.map +1 -0
- package/dist/cron/jobs/consolidate.js +61 -0
- package/dist/cron/jobs/consolidate.js.map +1 -0
- package/dist/cron/jobs/heartbeat.d.ts +11 -0
- package/dist/cron/jobs/heartbeat.d.ts.map +1 -0
- package/dist/cron/jobs/heartbeat.js +66 -0
- package/dist/cron/jobs/heartbeat.js.map +1 -0
- package/dist/cron/jobs/inbox-triage.d.ts +11 -0
- package/dist/cron/jobs/inbox-triage.d.ts.map +1 -0
- package/dist/cron/jobs/inbox-triage.js +85 -0
- package/dist/cron/jobs/inbox-triage.js.map +1 -0
- package/dist/cron/runner.d.ts +32 -0
- package/dist/cron/runner.d.ts.map +1 -0
- package/dist/cron/runner.js +69 -0
- package/dist/cron/runner.js.map +1 -0
- package/dist/cron/types.d.ts +21 -0
- package/dist/cron/types.d.ts.map +1 -0
- package/dist/cron/types.js +6 -0
- package/dist/cron/types.js.map +1 -0
- package/dist/generators/filesystem.d.ts +52 -0
- package/dist/generators/filesystem.d.ts.map +1 -0
- package/dist/generators/filesystem.js +155 -0
- package/dist/generators/filesystem.js.map +1 -0
- package/dist/generators/ignore.d.ts +38 -0
- package/dist/generators/ignore.d.ts.map +1 -0
- package/dist/generators/ignore.js +154 -0
- package/dist/generators/ignore.js.map +1 -0
- package/dist/generators/index.d.ts +14 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +14 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/init.d.ts +37 -0
- package/dist/generators/init.d.ts.map +1 -0
- package/dist/generators/init.js +169 -0
- package/dist/generators/init.js.map +1 -0
- package/dist/generators/manifest.d.ts +31 -0
- package/dist/generators/manifest.d.ts.map +1 -0
- package/dist/generators/manifest.js +123 -0
- package/dist/generators/manifest.js.map +1 -0
- package/dist/generators/memory.d.ts +36 -0
- package/dist/generators/memory.d.ts.map +1 -0
- package/dist/generators/memory.js +106 -0
- package/dist/generators/memory.js.map +1 -0
- package/dist/generators/profiles.d.ts +22 -0
- package/dist/generators/profiles.d.ts.map +1 -0
- package/dist/generators/profiles.js +92 -0
- package/dist/generators/profiles.js.map +1 -0
- package/dist/generators/prompts.d.ts +24 -0
- package/dist/generators/prompts.d.ts.map +1 -0
- package/dist/generators/prompts.js +122 -0
- package/dist/generators/prompts.js.map +1 -0
- package/dist/generators/scaffold.d.ts +29 -0
- package/dist/generators/scaffold.d.ts.map +1 -0
- package/dist/generators/scaffold.js +90 -0
- package/dist/generators/scaffold.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/confidence.d.ts +69 -0
- package/dist/memory/confidence.d.ts.map +1 -0
- package/dist/memory/confidence.js +125 -0
- package/dist/memory/confidence.js.map +1 -0
- package/dist/memory/episodic.d.ts +40 -0
- package/dist/memory/episodic.d.ts.map +1 -0
- package/dist/memory/episodic.js +139 -0
- package/dist/memory/episodic.js.map +1 -0
- package/dist/memory/index.d.ts +17 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +17 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/parser.d.ts +73 -0
- package/dist/memory/parser.d.ts.map +1 -0
- package/dist/memory/parser.js +156 -0
- package/dist/memory/parser.js.map +1 -0
- package/dist/memory/procedural.d.ts +43 -0
- package/dist/memory/procedural.d.ts.map +1 -0
- package/dist/memory/procedural.js +126 -0
- package/dist/memory/procedural.js.map +1 -0
- package/dist/secrets/exfil-guard.d.ts +31 -0
- package/dist/secrets/exfil-guard.d.ts.map +1 -0
- package/dist/secrets/exfil-guard.js +51 -0
- package/dist/secrets/exfil-guard.js.map +1 -0
- package/dist/secrets/index.d.ts +8 -0
- package/dist/secrets/index.d.ts.map +1 -0
- package/dist/secrets/index.js +7 -0
- package/dist/secrets/index.js.map +1 -0
- package/dist/secrets/vault.d.ts +63 -0
- package/dist/secrets/vault.d.ts.map +1 -0
- package/dist/secrets/vault.js +163 -0
- package/dist/secrets/vault.js.map +1 -0
- package/dist/security/claude-compiler.d.ts +28 -0
- package/dist/security/claude-compiler.d.ts.map +1 -0
- package/dist/security/claude-compiler.js +66 -0
- package/dist/security/claude-compiler.js.map +1 -0
- package/dist/security/index.d.ts +7 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +7 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/parser.d.ts +47 -0
- package/dist/security/parser.d.ts.map +1 -0
- package/dist/security/parser.js +136 -0
- package/dist/security/parser.js.map +1 -0
- package/dist/sync/index.d.ts +7 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +6 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/sync.d.ts +46 -0
- package/dist/sync/sync.d.ts.map +1 -0
- package/dist/sync/sync.js +174 -0
- package/dist/sync/sync.js.map +1 -0
- package/dist/types/compiler.d.ts +81 -0
- package/dist/types/compiler.d.ts.map +1 -0
- package/dist/types/compiler.js +10 -0
- package/dist/types/compiler.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/manifest.d.ts +112 -0
- package/dist/types/manifest.d.ts.map +1 -0
- package/dist/types/manifest.js +10 -0
- package/dist/types/manifest.js.map +1 -0
- package/dist/types/memory.d.ts +85 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +20 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/types/security.d.ts +67 -0
- package/dist/types/security.d.ts.map +1 -0
- package/dist/types/security.js +10 -0
- package/dist/types/security.js.map +1 -0
- package/dist/types/setup.d.ts +54 -0
- package/dist/types/setup.d.ts.map +1 -0
- package/dist/types/setup.js +9 -0
- package/dist/types/setup.js.map +1 -0
- package/dist/utils/fhs-mapping.d.ts +76 -0
- package/dist/utils/fhs-mapping.d.ts.map +1 -0
- package/dist/utils/fhs-mapping.js +189 -0
- package/dist/utils/fhs-mapping.js.map +1 -0
- package/package.json +58 -0
- package/templates/compilers/agent-map.md.hbs +36 -0
- package/templates/compilers/claude.md.hbs +95 -0
- package/templates/procedural/code-review.md +54 -0
- package/templates/procedural/debugging.md +52 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Files Generator — creates `.agentos/memory/` seed files.
|
|
3
|
+
*
|
|
4
|
+
* Bootstraps the Tulving-taxonomy memory layer with two always-loaded files
|
|
5
|
+
* (`semantic.md`, `corrections.md`) and ensures the lazy-load directories
|
|
6
|
+
* (`episodic/`, `procedural/`) exist for future use.
|
|
7
|
+
*
|
|
8
|
+
* All writes are idempotent: existing files are skipped, never overwritten.
|
|
9
|
+
*
|
|
10
|
+
* @see docs/architecture.md Section 4 "Boot Sequence" — memory bootstrap
|
|
11
|
+
* @module generators/memory
|
|
12
|
+
*/
|
|
13
|
+
import fs from 'node:fs/promises';
|
|
14
|
+
import path from 'node:path';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// File content constants
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/**
|
|
19
|
+
* Seed content for `semantic.md`.
|
|
20
|
+
*
|
|
21
|
+
* Always loaded at boot. Stores context-free facts and preferences using
|
|
22
|
+
* typed entry markers (PREF, FACT, PATTERN, AVOID) for structured retrieval.
|
|
23
|
+
*/
|
|
24
|
+
const SEMANTIC_CONTENT = `# Semantic Memory
|
|
25
|
+
|
|
26
|
+
> Context-free facts and preferences. Always loaded at boot.
|
|
27
|
+
> Format: TYPE: [status] content
|
|
28
|
+
|
|
29
|
+
## Preferences
|
|
30
|
+
<!-- PREF: entries go here -->
|
|
31
|
+
|
|
32
|
+
## Facts
|
|
33
|
+
<!-- FACT: [active] entries go here -->
|
|
34
|
+
|
|
35
|
+
## Patterns
|
|
36
|
+
<!-- PATTERN: [confidence:0.3] entries go here -->
|
|
37
|
+
|
|
38
|
+
## Avoids
|
|
39
|
+
<!-- AVOID: entries go here -->
|
|
40
|
+
|
|
41
|
+
## Directives
|
|
42
|
+
<!-- DIRECTIVE: imperative rules that must always be followed -->
|
|
43
|
+
`;
|
|
44
|
+
/**
|
|
45
|
+
* Seed content for `corrections.md`.
|
|
46
|
+
*
|
|
47
|
+
* Loaded at boot alongside semantic memory. Records agent mistakes and
|
|
48
|
+
* the lessons drawn from them so they are not repeated.
|
|
49
|
+
*/
|
|
50
|
+
const CORRECTIONS_CONTENT = `# Corrections
|
|
51
|
+
|
|
52
|
+
> Agent mistakes and lessons learned. Loaded at boot alongside semantic memory.
|
|
53
|
+
> Each entry: what went wrong, what was the fix, lesson learned.
|
|
54
|
+
`;
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// generateMemoryFiles
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
/**
|
|
59
|
+
* Generates seed memory files and lazy-load directories in `.agentos/memory/`.
|
|
60
|
+
*
|
|
61
|
+
* Files produced:
|
|
62
|
+
* - `semantic.md` — typed facts/preferences, always loaded at boot
|
|
63
|
+
* - `corrections.md` — mistake log, always loaded at boot
|
|
64
|
+
*
|
|
65
|
+
* Directories ensured (created if absent, no-op if present):
|
|
66
|
+
* - `episodic/` — per-day event logs, lazy-loaded on demand
|
|
67
|
+
* - `procedural/` — skill documents, lazy-loaded on demand
|
|
68
|
+
*
|
|
69
|
+
* @param answers - Setup answers from the interactive wizard.
|
|
70
|
+
* @returns A `GeneratorResult` listing created and skipped paths.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* const result = await generateMemoryFiles(answers);
|
|
75
|
+
* console.log(result.created);
|
|
76
|
+
* // ['.agentos/memory/semantic.md', '.agentos/memory/corrections.md']
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export async function generateMemoryFiles(answers) {
|
|
80
|
+
const result = { created: [], skipped: [] };
|
|
81
|
+
const memoryDir = path.join(answers.targetDir, '.agentos', 'memory');
|
|
82
|
+
// Ensure the memory root and both lazy-load subdirectories exist.
|
|
83
|
+
await fs.mkdir(path.join(memoryDir, 'episodic'), { recursive: true });
|
|
84
|
+
await fs.mkdir(path.join(memoryDir, 'procedural'), { recursive: true });
|
|
85
|
+
// Seed files to write — each is skipped if it already exists.
|
|
86
|
+
const files = [
|
|
87
|
+
{ name: 'semantic.md', content: SEMANTIC_CONTENT },
|
|
88
|
+
{ name: 'corrections.md', content: CORRECTIONS_CONTENT },
|
|
89
|
+
];
|
|
90
|
+
for (const file of files) {
|
|
91
|
+
const absPath = path.join(memoryDir, file.name);
|
|
92
|
+
const relPath = path.join('.agentos', 'memory', file.name);
|
|
93
|
+
try {
|
|
94
|
+
await fs.access(absPath);
|
|
95
|
+
// File already exists — skip.
|
|
96
|
+
result.skipped.push(relPath);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// File does not exist — write it.
|
|
100
|
+
await fs.writeFile(absPath, file.content, 'utf8');
|
|
101
|
+
result.created.push(relPath);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/generators/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;CAmBxB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG;;;;CAI3B,CAAC;AAEF,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAqB;IAC7D,MAAM,MAAM,GAAoB,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAE7D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAErE,kEAAkE;IAClE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExE,8DAA8D;IAC9D,MAAM,KAAK,GAA6C;QACtD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,gBAAgB,EAAE;QAClD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,EAAE;KACzD,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACzB,8BAA8B;YAC9B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;YAClC,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Company & Shared profile generators — Epic 11.
|
|
3
|
+
*
|
|
4
|
+
* Story 11.1: Company profile with team directories and RBAC
|
|
5
|
+
* Story 11.2: Shared profile with per-user spaces
|
|
6
|
+
*
|
|
7
|
+
* @module generators/profiles
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Generate company profile directories and RBAC scaffolding.
|
|
11
|
+
*
|
|
12
|
+
* @param vaultRoot - Vault root path
|
|
13
|
+
*/
|
|
14
|
+
export declare function generateCompanyProfile(vaultRoot: string): Promise<string[]>;
|
|
15
|
+
/**
|
|
16
|
+
* Generate shared profile with per-user spaces.
|
|
17
|
+
*
|
|
18
|
+
* @param vaultRoot - Vault root path
|
|
19
|
+
* @param users - List of user names
|
|
20
|
+
*/
|
|
21
|
+
export declare function generateSharedProfile(vaultRoot: string, users?: string[]): Promise<string[]>;
|
|
22
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/generators/profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgDnB;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,MAAM,EAAgB,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC,CAiCnB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Company & Shared profile generators — Epic 11.
|
|
3
|
+
*
|
|
4
|
+
* Story 11.1: Company profile with team directories and RBAC
|
|
5
|
+
* Story 11.2: Shared profile with per-user spaces
|
|
6
|
+
*
|
|
7
|
+
* @module generators/profiles
|
|
8
|
+
*/
|
|
9
|
+
import fs from 'node:fs/promises';
|
|
10
|
+
import path from 'node:path';
|
|
11
|
+
/**
|
|
12
|
+
* Generate company profile directories and RBAC scaffolding.
|
|
13
|
+
*
|
|
14
|
+
* @param vaultRoot - Vault root path
|
|
15
|
+
*/
|
|
16
|
+
export async function generateCompanyProfile(vaultRoot) {
|
|
17
|
+
const dirs = [
|
|
18
|
+
'Teams',
|
|
19
|
+
'Decisions',
|
|
20
|
+
'Postmortems',
|
|
21
|
+
'Projects',
|
|
22
|
+
'Resources',
|
|
23
|
+
'Archive',
|
|
24
|
+
'.agentos/rbac',
|
|
25
|
+
];
|
|
26
|
+
const created = [];
|
|
27
|
+
for (const dir of dirs) {
|
|
28
|
+
await fs.mkdir(path.join(vaultRoot, dir), { recursive: true });
|
|
29
|
+
created.push(dir);
|
|
30
|
+
}
|
|
31
|
+
// Generate RBAC files
|
|
32
|
+
const rolesYaml = `# RBAC Roles — Company Profile
|
|
33
|
+
version: "1.0"
|
|
34
|
+
roles:
|
|
35
|
+
admin:
|
|
36
|
+
description: Full access to all vault areas
|
|
37
|
+
permissions: ["*"]
|
|
38
|
+
developer:
|
|
39
|
+
description: Access to projects and resources
|
|
40
|
+
permissions: ["Projects/*", "Resources/*", "Daily/*"]
|
|
41
|
+
viewer:
|
|
42
|
+
description: Read-only access
|
|
43
|
+
permissions: ["read:*"]
|
|
44
|
+
`;
|
|
45
|
+
await fs.writeFile(path.join(vaultRoot, '.agentos/rbac/roles.yaml'), rolesYaml, 'utf8');
|
|
46
|
+
created.push('.agentos/rbac/roles.yaml');
|
|
47
|
+
const policiesYaml = `# RBAC Policies — Company Profile
|
|
48
|
+
version: "1.0"
|
|
49
|
+
policies:
|
|
50
|
+
- role: admin
|
|
51
|
+
users: []
|
|
52
|
+
- role: developer
|
|
53
|
+
users: []
|
|
54
|
+
- role: viewer
|
|
55
|
+
users: []
|
|
56
|
+
`;
|
|
57
|
+
await fs.writeFile(path.join(vaultRoot, '.agentos/rbac/policies.yaml'), policiesYaml, 'utf8');
|
|
58
|
+
created.push('.agentos/rbac/policies.yaml');
|
|
59
|
+
return created;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generate shared profile with per-user spaces.
|
|
63
|
+
*
|
|
64
|
+
* @param vaultRoot - Vault root path
|
|
65
|
+
* @param users - List of user names
|
|
66
|
+
*/
|
|
67
|
+
export async function generateSharedProfile(vaultRoot, users = ['default']) {
|
|
68
|
+
const created = [];
|
|
69
|
+
// Shared directories
|
|
70
|
+
const sharedDirs = [
|
|
71
|
+
'Shared/Projects',
|
|
72
|
+
'Shared/Knowledge',
|
|
73
|
+
'Shared/Templates',
|
|
74
|
+
];
|
|
75
|
+
for (const dir of sharedDirs) {
|
|
76
|
+
await fs.mkdir(path.join(vaultRoot, dir), { recursive: true });
|
|
77
|
+
created.push(dir);
|
|
78
|
+
}
|
|
79
|
+
// Per-user spaces
|
|
80
|
+
await fs.mkdir(path.join(vaultRoot, '.agentos/users'), { recursive: true });
|
|
81
|
+
for (const user of users) {
|
|
82
|
+
const userDir = `Spaces/${user}`;
|
|
83
|
+
await fs.mkdir(path.join(vaultRoot, userDir, 'Daily'), { recursive: true });
|
|
84
|
+
await fs.mkdir(path.join(vaultRoot, userDir, 'Inbox'), { recursive: true });
|
|
85
|
+
created.push(userDir);
|
|
86
|
+
const userConfig = `# User: ${user}\nname: ${user}\nrole: developer\n`;
|
|
87
|
+
await fs.writeFile(path.join(vaultRoot, `.agentos/users/${user}.yaml`), userConfig, 'utf8');
|
|
88
|
+
created.push(`.agentos/users/${user}.yaml`);
|
|
89
|
+
}
|
|
90
|
+
return created;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/generators/profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive setup prompts for `npx create-agentfs`.
|
|
3
|
+
*
|
|
4
|
+
* Uses `inquirer` to collect vault configuration from the user.
|
|
5
|
+
* Returns a `SetupAnswers` object that drives all downstream generators.
|
|
6
|
+
*
|
|
7
|
+
* @module generators/prompts
|
|
8
|
+
*/
|
|
9
|
+
import type { SetupAnswers } from '../types/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Run the interactive setup wizard.
|
|
12
|
+
*
|
|
13
|
+
* @param targetDir - Directory where the vault will be created (defaults to cwd)
|
|
14
|
+
* @returns Answers collected from the user
|
|
15
|
+
*/
|
|
16
|
+
export declare function runSetupPrompts(targetDir?: string): Promise<SetupAnswers>;
|
|
17
|
+
/**
|
|
18
|
+
* Create SetupAnswers programmatically (for testing and non-interactive use).
|
|
19
|
+
*
|
|
20
|
+
* @param overrides - Partial answers to merge with defaults
|
|
21
|
+
* @returns Complete SetupAnswers with defaults filled in
|
|
22
|
+
*/
|
|
23
|
+
export declare function createDefaultAnswers(overrides?: Partial<SetupAnswers>): SetupAnswers;
|
|
24
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/generators/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAyB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAmC7E;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA4D/E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,YAAY,CAWxF"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive setup prompts for `npx create-agentfs`.
|
|
3
|
+
*
|
|
4
|
+
* Uses `inquirer` to collect vault configuration from the user.
|
|
5
|
+
* Returns a `SetupAnswers` object that drives all downstream generators.
|
|
6
|
+
*
|
|
7
|
+
* @module generators/prompts
|
|
8
|
+
*/
|
|
9
|
+
import inquirer from 'inquirer';
|
|
10
|
+
import path from 'node:path';
|
|
11
|
+
/** Available vault profiles with descriptions. */
|
|
12
|
+
const PROFILES = [
|
|
13
|
+
{ name: 'Personal — solo engineer, creator, builder', value: 'personal' },
|
|
14
|
+
{ name: 'Company — team with shared knowledge base', value: 'company' },
|
|
15
|
+
{ name: 'Shared — multi-user collaborative vault', value: 'shared' },
|
|
16
|
+
];
|
|
17
|
+
/** Available agent runtimes. */
|
|
18
|
+
const AGENTS = [
|
|
19
|
+
{ name: 'Claude Code', value: 'claude' },
|
|
20
|
+
{ name: 'OpenClaw / OMC', value: 'openclaw' },
|
|
21
|
+
{ name: 'Cursor', value: 'cursor' },
|
|
22
|
+
];
|
|
23
|
+
/** Optional modules available per profile. */
|
|
24
|
+
const MODULES = {
|
|
25
|
+
personal: [
|
|
26
|
+
{ name: 'Career — job search pipeline', value: 'career' },
|
|
27
|
+
{ name: 'Content — multi-platform publishing', value: 'content' },
|
|
28
|
+
{ name: 'Engineering — professional knowledge base', value: 'engineering' },
|
|
29
|
+
{ name: 'BMAD — project management framework', value: 'bmad' },
|
|
30
|
+
],
|
|
31
|
+
company: [
|
|
32
|
+
{ name: 'Clients — client project management', value: 'clients' },
|
|
33
|
+
{ name: 'Content — company blog/docs pipeline', value: 'content' },
|
|
34
|
+
{ name: 'BMAD — project management framework', value: 'bmad' },
|
|
35
|
+
],
|
|
36
|
+
shared: [
|
|
37
|
+
{ name: 'Content — shared content pipeline', value: 'content' },
|
|
38
|
+
{ name: 'BMAD — project management framework', value: 'bmad' },
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Run the interactive setup wizard.
|
|
43
|
+
*
|
|
44
|
+
* @param targetDir - Directory where the vault will be created (defaults to cwd)
|
|
45
|
+
* @returns Answers collected from the user
|
|
46
|
+
*/
|
|
47
|
+
export async function runSetupPrompts(targetDir) {
|
|
48
|
+
const resolvedDir = targetDir ?? process.cwd();
|
|
49
|
+
const dirName = path.basename(resolvedDir);
|
|
50
|
+
const answers = await inquirer.prompt([
|
|
51
|
+
{
|
|
52
|
+
type: 'input',
|
|
53
|
+
name: 'vaultName',
|
|
54
|
+
message: 'Vault name:',
|
|
55
|
+
default: dirName,
|
|
56
|
+
validate: (input) => input.trim().length > 0 || 'Vault name cannot be empty',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: 'input',
|
|
60
|
+
name: 'ownerName',
|
|
61
|
+
message: 'Owner name (person or team):',
|
|
62
|
+
validate: (input) => input.trim().length > 0 || 'Owner name cannot be empty',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
type: 'list',
|
|
66
|
+
name: 'profile',
|
|
67
|
+
message: 'Vault profile:',
|
|
68
|
+
choices: PROFILES,
|
|
69
|
+
default: 'personal',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'list',
|
|
73
|
+
name: 'primaryAgent',
|
|
74
|
+
message: 'Primary AI agent:',
|
|
75
|
+
choices: AGENTS,
|
|
76
|
+
default: 'claude',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
type: 'checkbox',
|
|
80
|
+
name: 'supportedAgents',
|
|
81
|
+
message: 'Additional supported agents:',
|
|
82
|
+
choices: (prev) => AGENTS.filter((a) => a.value !== prev.primaryAgent),
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'checkbox',
|
|
86
|
+
name: 'modules',
|
|
87
|
+
message: 'Optional modules to enable:',
|
|
88
|
+
choices: (prev) => MODULES[prev.profile] ?? [],
|
|
89
|
+
},
|
|
90
|
+
]);
|
|
91
|
+
return {
|
|
92
|
+
vaultName: answers.vaultName.trim(),
|
|
93
|
+
ownerName: answers.ownerName.trim(),
|
|
94
|
+
profile: answers.profile,
|
|
95
|
+
primaryAgent: answers.primaryAgent,
|
|
96
|
+
supportedAgents: [
|
|
97
|
+
answers.primaryAgent,
|
|
98
|
+
...answers.supportedAgents,
|
|
99
|
+
],
|
|
100
|
+
modules: answers.modules,
|
|
101
|
+
targetDir: resolvedDir,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Create SetupAnswers programmatically (for testing and non-interactive use).
|
|
106
|
+
*
|
|
107
|
+
* @param overrides - Partial answers to merge with defaults
|
|
108
|
+
* @returns Complete SetupAnswers with defaults filled in
|
|
109
|
+
*/
|
|
110
|
+
export function createDefaultAnswers(overrides = {}) {
|
|
111
|
+
return {
|
|
112
|
+
vaultName: 'my-vault',
|
|
113
|
+
ownerName: 'user',
|
|
114
|
+
profile: 'personal',
|
|
115
|
+
primaryAgent: 'claude',
|
|
116
|
+
supportedAgents: ['claude'],
|
|
117
|
+
modules: [],
|
|
118
|
+
targetDir: process.cwd(),
|
|
119
|
+
...overrides,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/generators/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scaffold orchestrator — wires all generators together.
|
|
3
|
+
*
|
|
4
|
+
* Called when `npx create-agentfs` runs. Executes generators in order:
|
|
5
|
+
* 1. Filesystem structure (dirs)
|
|
6
|
+
* 2. Manifest.yaml
|
|
7
|
+
* 3. Init.d boot scripts
|
|
8
|
+
* 4. Ignore files (.gitignore, .agentignore)
|
|
9
|
+
* 5. Memory system
|
|
10
|
+
*
|
|
11
|
+
* Each generator is idempotent: existing files are never overwritten.
|
|
12
|
+
*
|
|
13
|
+
* @module generators/scaffold
|
|
14
|
+
*/
|
|
15
|
+
import type { SetupAnswers, ScaffoldResult } from '../types/index.js';
|
|
16
|
+
/**
|
|
17
|
+
* Run the full scaffold pipeline.
|
|
18
|
+
*
|
|
19
|
+
* @param answers - Setup answers from interactive prompts or programmatic call
|
|
20
|
+
* @returns Aggregated result with counts and per-generator details
|
|
21
|
+
*/
|
|
22
|
+
export declare function scaffold(answers: SetupAnswers): Promise<ScaffoldResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Print a human-readable scaffold summary.
|
|
25
|
+
*
|
|
26
|
+
* @param result - Scaffold result to format
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatScaffoldSummary(result: ScaffoldResult): string;
|
|
29
|
+
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/generators/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAmB,MAAM,mBAAmB,CAAC;AAOvF;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAqC7E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA8BpE"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scaffold orchestrator — wires all generators together.
|
|
3
|
+
*
|
|
4
|
+
* Called when `npx create-agentfs` runs. Executes generators in order:
|
|
5
|
+
* 1. Filesystem structure (dirs)
|
|
6
|
+
* 2. Manifest.yaml
|
|
7
|
+
* 3. Init.d boot scripts
|
|
8
|
+
* 4. Ignore files (.gitignore, .agentignore)
|
|
9
|
+
* 5. Memory system
|
|
10
|
+
*
|
|
11
|
+
* Each generator is idempotent: existing files are never overwritten.
|
|
12
|
+
*
|
|
13
|
+
* @module generators/scaffold
|
|
14
|
+
*/
|
|
15
|
+
import { generateFilesystem } from './filesystem.js';
|
|
16
|
+
import { generateManifest } from './manifest.js';
|
|
17
|
+
import { generateInitScripts } from './init.js';
|
|
18
|
+
import { generateIgnoreFiles } from './ignore.js';
|
|
19
|
+
import { generateMemoryFiles } from './memory.js';
|
|
20
|
+
/**
|
|
21
|
+
* Run the full scaffold pipeline.
|
|
22
|
+
*
|
|
23
|
+
* @param answers - Setup answers from interactive prompts or programmatic call
|
|
24
|
+
* @returns Aggregated result with counts and per-generator details
|
|
25
|
+
*/
|
|
26
|
+
export async function scaffold(answers) {
|
|
27
|
+
const details = {};
|
|
28
|
+
let dirsCreated = 0;
|
|
29
|
+
let filesCreated = 0;
|
|
30
|
+
let itemsSkipped = 0;
|
|
31
|
+
// 1. Filesystem structure (directories only)
|
|
32
|
+
const fsResult = await generateFilesystem(answers);
|
|
33
|
+
details['filesystem'] = fsResult;
|
|
34
|
+
dirsCreated += fsResult.created.length;
|
|
35
|
+
itemsSkipped += fsResult.skipped.length;
|
|
36
|
+
// 2. Manifest.yaml
|
|
37
|
+
const manifestResult = await generateManifest(answers);
|
|
38
|
+
details['manifest'] = manifestResult;
|
|
39
|
+
filesCreated += manifestResult.created.length;
|
|
40
|
+
itemsSkipped += manifestResult.skipped.length;
|
|
41
|
+
// 3. Init.d boot scripts
|
|
42
|
+
const initResult = await generateInitScripts(answers);
|
|
43
|
+
details['init'] = initResult;
|
|
44
|
+
filesCreated += initResult.created.length;
|
|
45
|
+
itemsSkipped += initResult.skipped.length;
|
|
46
|
+
// 4. Ignore files
|
|
47
|
+
const ignoreResult = await generateIgnoreFiles(answers);
|
|
48
|
+
details['ignore'] = ignoreResult;
|
|
49
|
+
filesCreated += ignoreResult.created.length;
|
|
50
|
+
itemsSkipped += ignoreResult.skipped.length;
|
|
51
|
+
// 5. Memory system
|
|
52
|
+
const memoryResult = await generateMemoryFiles(answers);
|
|
53
|
+
details['memory'] = memoryResult;
|
|
54
|
+
filesCreated += memoryResult.created.length;
|
|
55
|
+
itemsSkipped += memoryResult.skipped.length;
|
|
56
|
+
return { dirsCreated, filesCreated, itemsSkipped, details };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Print a human-readable scaffold summary.
|
|
60
|
+
*
|
|
61
|
+
* @param result - Scaffold result to format
|
|
62
|
+
*/
|
|
63
|
+
export function formatScaffoldSummary(result) {
|
|
64
|
+
const lines = [];
|
|
65
|
+
lines.push('');
|
|
66
|
+
lines.push('AgentFS scaffold complete!');
|
|
67
|
+
lines.push('');
|
|
68
|
+
lines.push(` Directories created: ${result.dirsCreated}`);
|
|
69
|
+
lines.push(` Files created: ${result.filesCreated}`);
|
|
70
|
+
lines.push(` Items skipped: ${result.itemsSkipped}`);
|
|
71
|
+
lines.push('');
|
|
72
|
+
for (const [name, detail] of Object.entries(result.details)) {
|
|
73
|
+
if (detail.created.length > 0 || detail.skipped.length > 0) {
|
|
74
|
+
lines.push(` [${name}]`);
|
|
75
|
+
for (const item of detail.created) {
|
|
76
|
+
lines.push(` + ${item}`);
|
|
77
|
+
}
|
|
78
|
+
for (const item of detail.skipped) {
|
|
79
|
+
lines.push(` ~ ${item} (exists)`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
lines.push('');
|
|
84
|
+
lines.push('Next steps:');
|
|
85
|
+
lines.push(' agentfs onboard — let the agent learn about you');
|
|
86
|
+
lines.push(' agentfs compile — generate native agent configs');
|
|
87
|
+
lines.push('');
|
|
88
|
+
return lines.join('\n');
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/generators/scaffold.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentFS public API barrel.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports everything from the CLI entry point so that the package can also
|
|
5
|
+
* be used programmatically:
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { main, VERSION } from 'create-agentfs';
|
|
9
|
+
* const code = await main(['node', 'agentfs', 'status']);
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export { main, VERSION } from './cli.js';
|
|
13
|
+
export type { Subcommand } from './cli.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentFS public API barrel.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports everything from the CLI entry point so that the package can also
|
|
5
|
+
* be used programmatically:
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { main, VERSION } from 'create-agentfs';
|
|
9
|
+
* const code = await main(['node', 'agentfs', 'status']);
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export { main, VERSION } from './cli.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Confidence scoring engine for PATTERN entries in semantic memory.
|
|
3
|
+
*
|
|
4
|
+
* Implements the rules from docs/architecture.md Section 4:
|
|
5
|
+
*
|
|
6
|
+
* New PATTERN → confidence: 0.3 (DEFAULT_CONFIDENCE.initial)
|
|
7
|
+
* Confirmed → confidence += 0.2 (max 1.0)
|
|
8
|
+
* Denied → confidence -= 0.3
|
|
9
|
+
* Inactive 30 days → confidence -= 0.1 (decay)
|
|
10
|
+
* confidence < 0.1 → mark as superseded
|
|
11
|
+
*
|
|
12
|
+
* All functions are pure — they return a new `SemanticEntry` and never
|
|
13
|
+
* mutate the input. Non-PATTERN entries are returned unchanged.
|
|
14
|
+
*
|
|
15
|
+
* @module memory/confidence
|
|
16
|
+
*/
|
|
17
|
+
import type { SemanticEntry } from '../types/index.js';
|
|
18
|
+
/**
|
|
19
|
+
* Increases the confidence of a PATTERN entry by `confirmBoost` (default 0.2),
|
|
20
|
+
* capped at 1.0.
|
|
21
|
+
*
|
|
22
|
+
* Non-PATTERN entries are returned unchanged.
|
|
23
|
+
*
|
|
24
|
+
* @param entry - The entry to confirm.
|
|
25
|
+
* @returns A new entry with updated confidence.
|
|
26
|
+
*/
|
|
27
|
+
export declare function confirmPattern(entry: SemanticEntry): SemanticEntry;
|
|
28
|
+
/**
|
|
29
|
+
* Decreases the confidence of a PATTERN entry by `denyPenalty` (default 0.3).
|
|
30
|
+
*
|
|
31
|
+
* If the result drops below `supersededThreshold` (0.1) the entry is
|
|
32
|
+
* automatically marked as superseded.
|
|
33
|
+
*
|
|
34
|
+
* Non-PATTERN entries are returned unchanged.
|
|
35
|
+
*
|
|
36
|
+
* @param entry - The entry to deny.
|
|
37
|
+
* @returns A new entry with updated confidence and status.
|
|
38
|
+
*/
|
|
39
|
+
export declare function denyPattern(entry: SemanticEntry): SemanticEntry;
|
|
40
|
+
/**
|
|
41
|
+
* Applies time-based confidence decay to a PATTERN entry.
|
|
42
|
+
*
|
|
43
|
+
* Each full `decayDays`-period (default 30 days) of inactivity reduces
|
|
44
|
+
* confidence by `decayRate` (default 0.1). Fractional periods are truncated.
|
|
45
|
+
*
|
|
46
|
+
* Examples:
|
|
47
|
+
* - 29 days inactive → 0 decay periods → no change
|
|
48
|
+
* - 30 days inactive → 1 decay period → -0.1
|
|
49
|
+
* - 75 days inactive → 2 decay periods → -0.2
|
|
50
|
+
*
|
|
51
|
+
* Non-PATTERN entries are returned unchanged.
|
|
52
|
+
*
|
|
53
|
+
* @param entry - The entry to decay.
|
|
54
|
+
* @param daysSinceLastSeen - Number of days since the pattern was last confirmed.
|
|
55
|
+
* @returns A new entry with decayed confidence (and possibly superseded status).
|
|
56
|
+
*/
|
|
57
|
+
export declare function decayPattern(entry: SemanticEntry, daysSinceLastSeen: number): SemanticEntry;
|
|
58
|
+
/**
|
|
59
|
+
* Returns `true` when an entry has been marked as superseded.
|
|
60
|
+
*
|
|
61
|
+
* An entry is superseded when its `status` string starts with "superseded:".
|
|
62
|
+
* This covers both confidence-driven supersession and manual date-based
|
|
63
|
+
* supersession (e.g. `FACT: [superseded:2026-04-01] …`).
|
|
64
|
+
*
|
|
65
|
+
* @param entry - Any semantic entry.
|
|
66
|
+
* @returns Whether the entry is superseded.
|
|
67
|
+
*/
|
|
68
|
+
export declare function isSuperseded(entry: SemanticEntry): boolean;
|
|
69
|
+
//# sourceMappingURL=confidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidence.d.ts","sourceRoot":"","sources":["../../src/memory/confidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA+CvD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAMlE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAM/D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,aAAa,EACpB,iBAAiB,EAAE,MAAM,GACxB,aAAa,CAUf;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAE1D"}
|