@jungjaehoon/mama-os 0.20.0 → 0.21.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/CHANGELOG.md +48 -0
- package/dist/agent/agent-loop.d.ts +2 -1
- package/dist/agent/agent-loop.d.ts.map +1 -1
- package/dist/agent/agent-loop.js +65 -19
- package/dist/agent/agent-loop.js.map +1 -1
- package/dist/agent/claude-cli-wrapper.d.ts.map +1 -1
- package/dist/agent/claude-cli-wrapper.js +6 -2
- package/dist/agent/claude-cli-wrapper.js.map +1 -1
- package/dist/agent/cli-arg-redaction.d.ts +2 -0
- package/dist/agent/cli-arg-redaction.d.ts.map +1 -0
- package/dist/agent/cli-arg-redaction.js +18 -0
- package/dist/agent/cli-arg-redaction.js.map +1 -0
- package/dist/agent/code-act/constants.d.ts +1 -1
- package/dist/agent/code-act/constants.d.ts.map +1 -1
- package/dist/agent/code-act/constants.js +24 -3
- package/dist/agent/code-act/constants.js.map +1 -1
- package/dist/agent/code-act/host-bridge.d.ts +2 -0
- package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
- package/dist/agent/code-act/host-bridge.js +43 -7
- package/dist/agent/code-act/host-bridge.js.map +1 -1
- package/dist/agent/code-act/type-definition-generator.d.ts +2 -2
- package/dist/agent/code-act/type-definition-generator.d.ts.map +1 -1
- package/dist/agent/code-act/type-definition-generator.js +29 -4
- package/dist/agent/code-act/type-definition-generator.js.map +1 -1
- package/dist/agent/codex-home.d.ts +1 -1
- package/dist/agent/codex-home.d.ts.map +1 -1
- package/dist/agent/codex-home.js +43 -1
- package/dist/agent/codex-home.js.map +1 -1
- package/dist/agent/codex-mcp-process.d.ts +2 -0
- package/dist/agent/codex-mcp-process.d.ts.map +1 -1
- package/dist/agent/codex-mcp-process.js +1 -1
- package/dist/agent/codex-mcp-process.js.map +1 -1
- package/dist/agent/context-compile-service.d.ts +47 -0
- package/dist/agent/context-compile-service.d.ts.map +1 -0
- package/dist/agent/context-compile-service.js +435 -0
- package/dist/agent/context-compile-service.js.map +1 -0
- package/dist/agent/gateway-tool-executor.d.ts +16 -11
- package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
- package/dist/agent/gateway-tool-executor.js +539 -109
- package/dist/agent/gateway-tool-executor.js.map +1 -1
- package/dist/agent/gateway-tools.md +4 -3
- package/dist/agent/mama-tool-handlers.d.ts.map +1 -1
- package/dist/agent/mama-tool-handlers.js +37 -1
- package/dist/agent/mama-tool-handlers.js.map +1 -1
- package/dist/agent/managed-agent-runtime-sync.d.ts.map +1 -1
- package/dist/agent/managed-agent-runtime-sync.js +2 -4
- package/dist/agent/managed-agent-runtime-sync.js.map +1 -1
- package/dist/agent/managed-agent-validation.d.ts.map +1 -1
- package/dist/agent/managed-agent-validation.js +2 -1
- package/dist/agent/managed-agent-validation.js.map +1 -1
- package/dist/agent/os-agent-capabilities.md +13 -12
- package/dist/agent/persistent-cli-process.d.ts +1 -0
- package/dist/agent/persistent-cli-process.d.ts.map +1 -1
- package/dist/agent/persistent-cli-process.js +6 -1
- package/dist/agent/persistent-cli-process.js.map +1 -1
- package/dist/agent/tool-registry.d.ts.map +1 -1
- package/dist/agent/tool-registry.js +10 -2
- package/dist/agent/tool-registry.js.map +1 -1
- package/dist/agent/types.d.ts +30 -5
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/api/agent-context-handler.d.ts +10 -0
- package/dist/api/agent-context-handler.d.ts.map +1 -0
- package/dist/api/agent-context-handler.js +216 -0
- package/dist/api/agent-context-handler.js.map +1 -0
- package/dist/api/agent-handler.d.ts +2 -0
- package/dist/api/agent-handler.d.ts.map +1 -1
- package/dist/api/agent-handler.js +14 -7
- package/dist/api/agent-handler.js.map +1 -1
- package/dist/api/graph-api-types.d.ts +6 -1
- package/dist/api/graph-api-types.d.ts.map +1 -1
- package/dist/api/graph-api.d.ts +2 -1
- package/dist/api/graph-api.d.ts.map +1 -1
- package/dist/api/graph-api.js +193 -11
- package/dist/api/graph-api.js.map +1 -1
- package/dist/api/index.d.ts +11 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +13 -2
- package/dist/api/index.js.map +1 -1
- package/dist/api/intelligence-handler.d.ts +17 -6
- package/dist/api/intelligence-handler.d.ts.map +1 -1
- package/dist/api/intelligence-handler.js +59 -1
- package/dist/api/intelligence-handler.js.map +1 -1
- package/dist/api/operator-handler.d.ts +17 -0
- package/dist/api/operator-handler.d.ts.map +1 -0
- package/dist/api/operator-handler.js +88 -0
- package/dist/api/operator-handler.js.map +1 -0
- package/dist/api/report-handler.d.ts +7 -0
- package/dist/api/report-handler.d.ts.map +1 -1
- package/dist/api/report-handler.js +30 -0
- package/dist/api/report-handler.js.map +1 -1
- package/dist/api/report-persistence.d.ts +17 -0
- package/dist/api/report-persistence.d.ts.map +1 -0
- package/dist/api/report-persistence.js +91 -0
- package/dist/api/report-persistence.js.map +1 -0
- package/dist/cli/commands/start.d.ts +45 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +610 -197
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/config/config-manager.d.ts.map +1 -1
- package/dist/cli/config/config-manager.js +171 -4
- package/dist/cli/config/config-manager.js.map +1 -1
- package/dist/cli/config/types.d.ts +25 -5
- package/dist/cli/config/types.d.ts.map +1 -1
- package/dist/cli/config/types.js +5 -0
- package/dist/cli/config/types.js.map +1 -1
- package/dist/cli/runtime/agent-loop-init.d.ts +3 -0
- package/dist/cli/runtime/agent-loop-init.d.ts.map +1 -1
- package/dist/cli/runtime/agent-loop-init.js +2 -0
- package/dist/cli/runtime/agent-loop-init.js.map +1 -1
- package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
- package/dist/cli/runtime/api-routes-init.js +396 -259
- package/dist/cli/runtime/api-routes-init.js.map +1 -1
- package/dist/cli/runtime/api-server-init.d.ts +2 -0
- package/dist/cli/runtime/api-server-init.d.ts.map +1 -1
- package/dist/cli/runtime/api-server-init.js +19 -8
- package/dist/cli/runtime/api-server-init.js.map +1 -1
- package/dist/cli/runtime/connector-init.d.ts +26 -7
- package/dist/cli/runtime/connector-init.d.ts.map +1 -1
- package/dist/cli/runtime/connector-init.js +79 -16
- package/dist/cli/runtime/connector-init.js.map +1 -1
- package/dist/cli/runtime/envelope-bootstrap.d.ts.map +1 -1
- package/dist/cli/runtime/envelope-bootstrap.js +8 -2
- package/dist/cli/runtime/envelope-bootstrap.js.map +1 -1
- package/dist/cli/runtime/gateway-init.d.ts +1 -1
- package/dist/cli/runtime/gateway-init.d.ts.map +1 -1
- package/dist/cli/runtime/gateway-init.js.map +1 -1
- package/dist/cli/runtime/message-router-config.d.ts +4 -0
- package/dist/cli/runtime/message-router-config.d.ts.map +1 -0
- package/dist/cli/runtime/message-router-config.js +11 -0
- package/dist/cli/runtime/message-router-config.js.map +1 -0
- package/dist/cli/runtime/scheduler-init.d.ts.map +1 -1
- package/dist/cli/runtime/scheduler-init.js +12 -12
- package/dist/cli/runtime/scheduler-init.js.map +1 -1
- package/dist/cli/runtime/utilities.js +2 -2
- package/dist/cli/runtime/utilities.js.map +1 -1
- package/dist/connectors/framework/polling-scheduler.d.ts.map +1 -1
- package/dist/connectors/framework/polling-scheduler.js +101 -5
- package/dist/connectors/framework/polling-scheduler.js.map +1 -1
- package/dist/connectors/kagemusha/query-tools.d.ts.map +1 -1
- package/dist/connectors/kagemusha/query-tools.js +14 -3
- package/dist/connectors/kagemusha/query-tools.js.map +1 -1
- package/dist/db/agent-store.d.ts.map +1 -1
- package/dist/db/agent-store.js +10 -3
- package/dist/db/agent-store.js.map +1 -1
- package/dist/db/migrations/wiki-artifacts.d.ts +3 -0
- package/dist/db/migrations/wiki-artifacts.d.ts.map +1 -0
- package/dist/db/migrations/wiki-artifacts.js +24 -0
- package/dist/db/migrations/wiki-artifacts.js.map +1 -0
- package/dist/envelope/enforcer.d.ts.map +1 -1
- package/dist/envelope/enforcer.js +48 -4
- package/dist/envelope/enforcer.js.map +1 -1
- package/dist/envelope/key-provider.d.ts +1 -0
- package/dist/envelope/key-provider.d.ts.map +1 -1
- package/dist/envelope/key-provider.js +86 -0
- package/dist/envelope/key-provider.js.map +1 -1
- package/dist/gateways/message-router.d.ts.map +1 -1
- package/dist/gateways/message-router.js +15 -3
- package/dist/gateways/message-router.js.map +1 -1
- package/dist/gateways/types.d.ts +5 -1
- package/dist/gateways/types.d.ts.map +1 -1
- package/dist/mcp/code-act-server.js +50 -7
- package/dist/mcp/code-act-server.js.map +1 -1
- package/dist/memory/raw-backed-memory-ingest.d.ts +26 -0
- package/dist/memory/raw-backed-memory-ingest.d.ts.map +1 -0
- package/dist/memory/raw-backed-memory-ingest.js +214 -0
- package/dist/memory/raw-backed-memory-ingest.js.map +1 -0
- package/dist/memory/scope-context.js +1 -1
- package/dist/multi-agent/agent-event-bus.d.ts +10 -0
- package/dist/multi-agent/agent-event-bus.d.ts.map +1 -1
- package/dist/multi-agent/agent-event-bus.js +34 -0
- package/dist/multi-agent/agent-event-bus.js.map +1 -1
- package/dist/multi-agent/agent-process-manager.d.ts +3 -0
- package/dist/multi-agent/agent-process-manager.d.ts.map +1 -1
- package/dist/multi-agent/agent-process-manager.js +118 -13
- package/dist/multi-agent/agent-process-manager.js.map +1 -1
- package/dist/multi-agent/conductor-persona.js +2 -2
- package/dist/multi-agent/dashboard-agent-persona.d.ts +6 -2
- package/dist/multi-agent/dashboard-agent-persona.d.ts.map +1 -1
- package/dist/multi-agent/dashboard-agent-persona.js +57 -30
- package/dist/multi-agent/dashboard-agent-persona.js.map +1 -1
- package/dist/multi-agent/memory-agent-persona.d.ts +1 -1
- package/dist/multi-agent/memory-agent-persona.d.ts.map +1 -1
- package/dist/multi-agent/memory-agent-persona.js +25 -4
- package/dist/multi-agent/memory-agent-persona.js.map +1 -1
- package/dist/multi-agent/runtime-process.d.ts +1 -0
- package/dist/multi-agent/runtime-process.d.ts.map +1 -1
- package/dist/multi-agent/runtime-process.js +1 -0
- package/dist/multi-agent/runtime-process.js.map +1 -1
- package/dist/multi-agent/types.d.ts +14 -4
- package/dist/multi-agent/types.d.ts.map +1 -1
- package/dist/multi-agent/types.js.map +1 -1
- package/dist/multi-agent/wiki-agent-persona.d.ts +7 -1
- package/dist/multi-agent/wiki-agent-persona.d.ts.map +1 -1
- package/dist/multi-agent/wiki-agent-persona.js +83 -61
- package/dist/multi-agent/wiki-agent-persona.js.map +1 -1
- package/dist/multi-agent/workflow-types.d.ts +1 -1
- package/dist/multi-agent/workflow-types.d.ts.map +1 -1
- package/dist/operator/board-slot-instructions.d.ts +18 -0
- package/dist/operator/board-slot-instructions.d.ts.map +1 -0
- package/dist/operator/board-slot-instructions.js +52 -0
- package/dist/operator/board-slot-instructions.js.map +1 -0
- package/dist/operator/connector-delta-repo.d.ts +33 -0
- package/dist/operator/connector-delta-repo.d.ts.map +1 -0
- package/dist/operator/connector-delta-repo.js +0 -0
- package/dist/operator/connector-delta-repo.js.map +1 -0
- package/dist/operator/mama-memory-port.d.ts +13 -0
- package/dist/operator/mama-memory-port.d.ts.map +1 -0
- package/dist/operator/mama-memory-port.js +35 -0
- package/dist/operator/mama-memory-port.js.map +1 -0
- package/dist/operator/operator-interfaces.d.ts +136 -0
- package/dist/operator/operator-interfaces.d.ts.map +1 -0
- package/dist/operator/operator-interfaces.js +15 -0
- package/dist/operator/operator-interfaces.js.map +1 -0
- package/dist/operator/operator-trigger-loop.d.ts +106 -0
- package/dist/operator/operator-trigger-loop.d.ts.map +1 -0
- package/dist/operator/operator-trigger-loop.js +228 -0
- package/dist/operator/operator-trigger-loop.js.map +1 -0
- package/dist/operator/report-run.d.ts +78 -0
- package/dist/operator/report-run.d.ts.map +1 -0
- package/dist/operator/report-run.js +141 -0
- package/dist/operator/report-run.js.map +1 -0
- package/dist/operator/report-scheduler.d.ts +43 -0
- package/dist/operator/report-scheduler.d.ts.map +1 -0
- package/dist/operator/report-scheduler.js +87 -0
- package/dist/operator/report-scheduler.js.map +1 -0
- package/dist/operator/situation-report.d.ts +86 -0
- package/dist/operator/situation-report.d.ts.map +1 -0
- package/dist/operator/situation-report.js +211 -0
- package/dist/operator/situation-report.js.map +1 -0
- package/dist/operator/trigger-author.d.ts +45 -0
- package/dist/operator/trigger-author.d.ts.map +1 -0
- package/dist/operator/trigger-author.js +217 -0
- package/dist/operator/trigger-author.js.map +1 -0
- package/dist/operator/trigger-evolve.d.ts +31 -0
- package/dist/operator/trigger-evolve.d.ts.map +1 -0
- package/dist/operator/trigger-evolve.js +51 -0
- package/dist/operator/trigger-evolve.js.map +1 -0
- package/dist/operator/trigger-fire.d.ts +29 -0
- package/dist/operator/trigger-fire.d.ts.map +1 -0
- package/dist/operator/trigger-fire.js +41 -0
- package/dist/operator/trigger-fire.js.map +1 -0
- package/dist/operator/trigger-matcher.d.ts +19 -0
- package/dist/operator/trigger-matcher.d.ts.map +1 -0
- package/dist/operator/trigger-matcher.js +61 -0
- package/dist/operator/trigger-matcher.js.map +1 -0
- package/dist/operator/trigger-registry.d.ts +36 -0
- package/dist/operator/trigger-registry.d.ts.map +1 -0
- package/dist/operator/trigger-registry.js +135 -0
- package/dist/operator/trigger-registry.js.map +1 -0
- package/dist/operator/trigger-review.d.ts +23 -0
- package/dist/operator/trigger-review.d.ts.map +1 -0
- package/dist/operator/trigger-review.js +127 -0
- package/dist/operator/trigger-review.js.map +1 -0
- package/dist/operator/trigger-types.d.ts +84 -0
- package/dist/operator/trigger-types.d.ts.map +1 -0
- package/dist/operator/trigger-types.js +14 -0
- package/dist/operator/trigger-types.js.map +1 -0
- package/dist/scheduler/cron-worker.d.ts.map +1 -1
- package/dist/scheduler/cron-worker.js +3 -1
- package/dist/scheduler/cron-worker.js.map +1 -1
- package/dist/security/security-monitor.d.ts.map +1 -1
- package/dist/security/security-monitor.js +1 -0
- package/dist/security/security-monitor.js.map +1 -1
- package/dist/wiki/obsidian-writer.d.ts +1 -1
- package/dist/wiki/obsidian-writer.d.ts.map +1 -1
- package/dist/wiki/obsidian-writer.js +67 -27
- package/dist/wiki/obsidian-writer.js.map +1 -1
- package/dist/wiki/path-safety.d.ts +2 -0
- package/dist/wiki/path-safety.d.ts.map +1 -0
- package/dist/wiki/path-safety.js +40 -0
- package/dist/wiki/path-safety.js.map +1 -0
- package/dist/wiki/types.d.ts +4 -2
- package/dist/wiki/types.d.ts.map +1 -1
- package/dist/wiki/types.js +1 -1
- package/dist/wiki/types.js.map +1 -1
- package/dist/wiki-artifacts/normalization.d.ts +8 -0
- package/dist/wiki-artifacts/normalization.d.ts.map +1 -0
- package/dist/wiki-artifacts/normalization.js +41 -0
- package/dist/wiki-artifacts/normalization.js.map +1 -0
- package/dist/wiki-artifacts/types.d.ts +52 -0
- package/dist/wiki-artifacts/types.d.ts.map +1 -0
- package/dist/wiki-artifacts/types.js +3 -0
- package/dist/wiki-artifacts/types.js.map +1 -0
- package/dist/wiki-artifacts/wiki-publish-adapter.d.ts +14 -0
- package/dist/wiki-artifacts/wiki-publish-adapter.d.ts.map +1 -0
- package/dist/wiki-artifacts/wiki-publish-adapter.js +71 -0
- package/dist/wiki-artifacts/wiki-publish-adapter.js.map +1 -0
- package/package.json +6 -4
- package/public/ui/assets/index-BDsaQNGd.js +62 -0
- package/public/ui/assets/index-C4URnm_X.css +1 -0
- package/public/ui/index.html +13 -0
- package/public/viewer/js/utils/api.js +2 -2
- package/public/viewer/src/utils/api.ts +9 -2
- package/public/viewer/sw.js +1 -1
- package/public/viewer/viewer.html +6 -0
|
@@ -3,7 +3,33 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ObsidianWriter = void 0;
|
|
4
4
|
const fs_1 = require("fs");
|
|
5
5
|
const path_1 = require("path");
|
|
6
|
+
const path_safety_js_1 = require("./path-safety.js");
|
|
6
7
|
const HUMAN_MARKER = '<!-- human -->';
|
|
8
|
+
const FRONTMATTER_LIST_UNSAFE_PATTERN = /[\r\n]/;
|
|
9
|
+
function frontmatterScalar(value, field) {
|
|
10
|
+
if (value.includes('\0')) {
|
|
11
|
+
throw new Error(`${field} contains characters that cannot be safely written to frontmatter`);
|
|
12
|
+
}
|
|
13
|
+
return JSON.stringify(value);
|
|
14
|
+
}
|
|
15
|
+
function frontmatterListItem(value, field) {
|
|
16
|
+
if (value.includes('\0') || FRONTMATTER_LIST_UNSAFE_PATTERN.test(value)) {
|
|
17
|
+
throw new Error(`${field} contains characters that cannot be safely written to frontmatter`);
|
|
18
|
+
}
|
|
19
|
+
return JSON.stringify(value);
|
|
20
|
+
}
|
|
21
|
+
function parseFrontmatterScalar(value) {
|
|
22
|
+
try {
|
|
23
|
+
const parsed = JSON.parse(value);
|
|
24
|
+
if (typeof parsed === 'string') {
|
|
25
|
+
return parsed;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Legacy wiki pages wrote unquoted scalars. Keep matching those pages.
|
|
30
|
+
}
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
7
33
|
/** Word overlap ratio between two titles. Returns 0-1. */
|
|
8
34
|
function titleWordOverlap(a, b) {
|
|
9
35
|
const wordsA = new Set(a.split(/[\s/\-_,]+/).filter(Boolean));
|
|
@@ -38,10 +64,11 @@ class ObsidianWriter {
|
|
|
38
64
|
* Prevents duplicates when LLM generates different filenames for the same entity.
|
|
39
65
|
*/
|
|
40
66
|
findExistingPage(page) {
|
|
41
|
-
const
|
|
67
|
+
const pageDir = path_1.posix.dirname(page.path);
|
|
68
|
+
const dir = (0, path_1.join)(this.wikiPath, pageDir);
|
|
42
69
|
if (!(0, fs_1.existsSync)(dir))
|
|
43
70
|
return null;
|
|
44
|
-
const targetSlug = slugify(
|
|
71
|
+
const targetSlug = slugify(path_1.posix.basename(page.path, '.md'));
|
|
45
72
|
const targetTitle = page.title.toLowerCase();
|
|
46
73
|
for (const file of (0, fs_1.readdirSync)(dir)) {
|
|
47
74
|
if (!file.endsWith('.md'))
|
|
@@ -49,19 +76,19 @@ class ObsidianWriter {
|
|
|
49
76
|
const fileSlug = slugify((0, path_1.basename)(file, '.md'));
|
|
50
77
|
// Exact slug match (case-insensitive)
|
|
51
78
|
if (fileSlug === targetSlug) {
|
|
52
|
-
return
|
|
79
|
+
return path_1.posix.join(pageDir, file);
|
|
53
80
|
}
|
|
54
81
|
// Title match: read frontmatter and compare
|
|
55
82
|
try {
|
|
56
83
|
const content = (0, fs_1.readFileSync)((0, path_1.join)(dir, file), 'utf8');
|
|
57
84
|
const titleMatch = content.match(/^title:\s*(.+)$/m);
|
|
58
85
|
if (titleMatch) {
|
|
59
|
-
const existingTitle = titleMatch[1].trim().toLowerCase();
|
|
86
|
+
const existingTitle = parseFrontmatterScalar(titleMatch[1].trim()).toLowerCase();
|
|
60
87
|
// Loose match: one title contains the other, or they share >60% of words
|
|
61
88
|
if (existingTitle.includes(targetTitle) ||
|
|
62
89
|
targetTitle.includes(existingTitle) ||
|
|
63
90
|
titleWordOverlap(existingTitle, targetTitle) > 0.6) {
|
|
64
|
-
return
|
|
91
|
+
return path_1.posix.join(pageDir, file);
|
|
65
92
|
}
|
|
66
93
|
}
|
|
67
94
|
}
|
|
@@ -72,35 +99,40 @@ class ObsidianWriter {
|
|
|
72
99
|
return null;
|
|
73
100
|
}
|
|
74
101
|
ensureDirectories() {
|
|
75
|
-
|
|
102
|
+
// v5 wiki layout: daily journal + lesson subfolders. writePage() still
|
|
103
|
+
// accepts any relative path, so legacy pages keep working.
|
|
104
|
+
for (const sub of [
|
|
105
|
+
'',
|
|
106
|
+
'daily',
|
|
107
|
+
'lessons',
|
|
108
|
+
'lessons/clients',
|
|
109
|
+
'lessons/process',
|
|
110
|
+
'lessons/system',
|
|
111
|
+
]) {
|
|
76
112
|
const dir = (0, path_1.join)(this.wikiPath, sub);
|
|
77
113
|
if (!(0, fs_1.existsSync)(dir))
|
|
78
114
|
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
79
115
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
const logPath = (0, path_1.join)(this.wikiPath, 'log.md');
|
|
85
|
-
if (!(0, fs_1.existsSync)(logPath)) {
|
|
86
|
-
(0, fs_1.writeFileSync)(logPath, '# Compilation Log\n\n', 'utf8');
|
|
87
|
-
}
|
|
116
|
+
// index.md/log.md are NOT bootstrapped here: in the v5 layout the agent owns
|
|
117
|
+
// the root (Home.md). updateIndex()/appendLog() create them on demand when
|
|
118
|
+
// the wiki_publish fallback path is actually used.
|
|
88
119
|
}
|
|
89
120
|
writePage(page) {
|
|
121
|
+
const safePage = { ...page, path: (0, path_safety_js_1.normalizeWikiPagePath)(page.path) };
|
|
90
122
|
// Dedup: check if a similar page already exists in the same directory
|
|
91
|
-
const existingPath = this.findExistingPage(
|
|
92
|
-
const effectivePath = existingPath ||
|
|
123
|
+
const existingPath = this.findExistingPage(safePage);
|
|
124
|
+
const effectivePath = existingPath || safePage.path;
|
|
93
125
|
const filePath = (0, path_1.join)(this.wikiPath, effectivePath);
|
|
94
126
|
const dir = (0, path_1.dirname)(filePath);
|
|
95
127
|
if (!(0, fs_1.existsSync)(dir))
|
|
96
128
|
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
97
129
|
// Strip duplicate frontmatter from LLM-generated content
|
|
98
|
-
let cleanContent =
|
|
130
|
+
let cleanContent = safePage.content;
|
|
99
131
|
if (cleanContent.trimStart().startsWith('---')) {
|
|
100
132
|
cleanContent = cleanContent.replace(/^[\s]*---[\s\S]*?---[\s]*/, '').trimStart();
|
|
101
133
|
}
|
|
102
134
|
// Strip duplicate title heading if it matches page title
|
|
103
|
-
const titlePrefix = `# ${
|
|
135
|
+
const titlePrefix = `# ${safePage.title}`;
|
|
104
136
|
if (cleanContent.startsWith(titlePrefix)) {
|
|
105
137
|
cleanContent = cleanContent.slice(titlePrefix.length).trimStart();
|
|
106
138
|
}
|
|
@@ -114,19 +146,26 @@ class ObsidianWriter {
|
|
|
114
146
|
}
|
|
115
147
|
const frontmatter = [
|
|
116
148
|
'---',
|
|
117
|
-
`title: ${
|
|
118
|
-
`type: ${
|
|
119
|
-
`confidence: ${
|
|
120
|
-
`compiled_at: ${
|
|
149
|
+
`title: ${frontmatterScalar(safePage.title, 'title')}`,
|
|
150
|
+
`type: ${frontmatterScalar(safePage.type, 'type')}`,
|
|
151
|
+
`confidence: ${frontmatterScalar(safePage.confidence, 'confidence')}`,
|
|
152
|
+
`compiled_at: ${frontmatterScalar(safePage.compiledAt, 'compiledAt')}`,
|
|
153
|
+
...(safePage.sourceRefs && safePage.sourceRefs.length > 0
|
|
154
|
+
? [
|
|
155
|
+
'source_refs:',
|
|
156
|
+
...safePage.sourceRefs.map((ref) => ` - ${frontmatterListItem(ref, 'sourceRefs')}`),
|
|
157
|
+
]
|
|
158
|
+
: []),
|
|
121
159
|
`source_ids:`,
|
|
122
|
-
...
|
|
160
|
+
...safePage.sourceIds.map((id) => ` - ${frontmatterListItem(id, 'sourceIds')}`),
|
|
123
161
|
'---',
|
|
124
162
|
].join('\n');
|
|
125
|
-
let body = `${frontmatter}\n\n# ${
|
|
163
|
+
let body = `${frontmatter}\n\n# ${safePage.title}\n\n${cleanContent}`;
|
|
126
164
|
if (humanSection) {
|
|
127
165
|
body += '\n\n' + humanSection;
|
|
128
166
|
}
|
|
129
167
|
(0, fs_1.writeFileSync)(filePath, body, 'utf8');
|
|
168
|
+
return effectivePath;
|
|
130
169
|
}
|
|
131
170
|
appendLog(action, message) {
|
|
132
171
|
const logPath = (0, path_1.join)(this.wikiPath, 'log.md');
|
|
@@ -139,9 +178,10 @@ class ObsidianWriter {
|
|
|
139
178
|
const lines = ['# Wiki Index\n', 'Auto-compiled by MAMA.\n', '## Pages\n'];
|
|
140
179
|
const byType = new Map();
|
|
141
180
|
for (const p of pages) {
|
|
142
|
-
const
|
|
143
|
-
list.
|
|
144
|
-
|
|
181
|
+
const safePage = { ...p, path: (0, path_safety_js_1.normalizeWikiPagePath)(p.path) };
|
|
182
|
+
const list = byType.get(safePage.type) || [];
|
|
183
|
+
list.push(safePage);
|
|
184
|
+
byType.set(safePage.type, list);
|
|
145
185
|
}
|
|
146
186
|
for (const [type, typePages] of byType) {
|
|
147
187
|
lines.push(`### ${type.charAt(0).toUpperCase() + type.slice(1)}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"obsidian-writer.js","sourceRoot":"","sources":["../../src/wiki/obsidian-writer.ts"],"names":[],"mappings":";;;AAAA,2BAOY;AACZ,+BAA+
|
|
1
|
+
{"version":3,"file":"obsidian-writer.js","sourceRoot":"","sources":["../../src/wiki/obsidian-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-safety.d.ts","sourceRoot":"","sources":["../../src/wiki/path-safety.ts"],"names":[],"mappings":"AAMA,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,GAAE,MAAyB,GAAG,MAAM,CAkC9F"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeWikiPagePath = normalizeWikiPagePath;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const WINDOWS_DRIVE_PATH_PATTERN = /^[A-Za-z]:/;
|
|
6
|
+
const RESERVED_ROOT_PATHS = new Set(['index.md', 'log.md']);
|
|
7
|
+
const RESERVED_ROOT_DIRECTORIES = new Set(['projects', 'lessons', 'synthesis']);
|
|
8
|
+
function normalizeWikiPagePath(value, field = 'wiki page path') {
|
|
9
|
+
if (typeof value !== 'string') {
|
|
10
|
+
throw new Error(`${field} must be a string`);
|
|
11
|
+
}
|
|
12
|
+
const trimmed = value.trim();
|
|
13
|
+
if (trimmed.length === 0) {
|
|
14
|
+
throw new Error(`${field} must not be empty`);
|
|
15
|
+
}
|
|
16
|
+
if (trimmed.includes('\0') ||
|
|
17
|
+
trimmed.includes('\\') ||
|
|
18
|
+
(0, path_1.isAbsolute)(trimmed) ||
|
|
19
|
+
WINDOWS_DRIVE_PATH_PATTERN.test(trimmed)) {
|
|
20
|
+
throw new Error(`${field} must stay inside the wiki directory`);
|
|
21
|
+
}
|
|
22
|
+
if (trimmed.split('/').includes('..')) {
|
|
23
|
+
throw new Error(`${field} must not contain parent-directory traversal`);
|
|
24
|
+
}
|
|
25
|
+
const normalized = path_1.posix.normalize(trimmed);
|
|
26
|
+
if (normalized === '..' || normalized.startsWith('../') || normalized.split('/').includes('..')) {
|
|
27
|
+
throw new Error(`${field} must not contain parent-directory traversal`);
|
|
28
|
+
}
|
|
29
|
+
if (normalized === '.' || normalized === './' || normalized.endsWith('/')) {
|
|
30
|
+
throw new Error(`${field} must point to a wiki file, not a directory`);
|
|
31
|
+
}
|
|
32
|
+
if (RESERVED_ROOT_PATHS.has(normalized.toLowerCase())) {
|
|
33
|
+
throw new Error(`${field} must not overwrite reserved wiki files`);
|
|
34
|
+
}
|
|
35
|
+
if (RESERVED_ROOT_DIRECTORIES.has(normalized.toLowerCase())) {
|
|
36
|
+
throw new Error(`${field} must not overwrite reserved wiki directories`);
|
|
37
|
+
}
|
|
38
|
+
return normalized;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=path-safety.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-safety.js","sourceRoot":"","sources":["../../src/wiki/path-safety.ts"],"names":[],"mappings":";;AAMA,sDAkCC;AAxCD,+BAAyC;AAEzC,MAAM,0BAA0B,GAAG,YAAY,CAAC;AAChD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC5D,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AAEhF,SAAgB,qBAAqB,CAAC,KAAc,EAAE,QAAgB,gBAAgB;IACpF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IAChD,CAAC;IACD,IACE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtB,IAAA,iBAAU,EAAC,OAAO,CAAC;QACnB,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,EACxC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,sCAAsC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,8CAA8C,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,UAAU,GAAG,YAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChG,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,8CAA8C,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6CAA6C,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yCAAyC,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,yBAAyB,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,+CAA+C,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
package/dist/wiki/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const WIKI_PAGE_TYPES: readonly ["entity", "lesson", "synthesis", "process"];
|
|
1
|
+
export declare const WIKI_PAGE_TYPES: readonly ["entity", "lesson", "synthesis", "process", "daily"];
|
|
2
2
|
export type WikiPageType = (typeof WIKI_PAGE_TYPES)[number];
|
|
3
3
|
export declare function isValidPageType(type: string): type is WikiPageType;
|
|
4
4
|
export interface WikiPage {
|
|
@@ -7,8 +7,10 @@ export interface WikiPage {
|
|
|
7
7
|
title: string;
|
|
8
8
|
type: WikiPageType;
|
|
9
9
|
content: string;
|
|
10
|
-
/**
|
|
10
|
+
/** Legacy decision IDs or serialized source refs this page was compiled from */
|
|
11
11
|
sourceIds: string[];
|
|
12
|
+
/** Canonical vNext source refs this page was compiled from */
|
|
13
|
+
sourceRefs?: string[];
|
|
12
14
|
/** ISO 8601 timestamp */
|
|
13
15
|
compiledAt: string;
|
|
14
16
|
confidence: 'high' | 'medium' | 'low';
|
package/dist/wiki/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/wiki/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/wiki/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,gEAAiE,CAAC;AAC9F,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAElE;AAED,MAAM,WAAW,QAAQ;IACvB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
package/dist/wiki/types.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WIKI_PAGE_TYPES = void 0;
|
|
4
4
|
exports.isValidPageType = isValidPageType;
|
|
5
|
-
exports.WIKI_PAGE_TYPES = ['entity', 'lesson', 'synthesis', 'process'];
|
|
5
|
+
exports.WIKI_PAGE_TYPES = ['entity', 'lesson', 'synthesis', 'process', 'daily'];
|
|
6
6
|
function isValidPageType(type) {
|
|
7
7
|
return exports.WIKI_PAGE_TYPES.includes(type);
|
|
8
8
|
}
|
package/dist/wiki/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/wiki/types.ts"],"names":[],"mappings":";;;AAGA,0CAEC;AALY,QAAA,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/wiki/types.ts"],"names":[],"mappings":";;;AAGA,0CAEC;AALY,QAAA,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAG9F,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAQ,uBAAqC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type WikiPage, type WikiPageType } from '../wiki/types.js';
|
|
2
|
+
import { normalizeWikiPagePath } from '../wiki/path-safety.js';
|
|
3
|
+
export type WikiArtifactConfidence = WikiPage['confidence'];
|
|
4
|
+
export declare function requiredWikiString(value: unknown, field: string, prefix: string): string;
|
|
5
|
+
export declare function normalizeWikiPageType(value: string | undefined, prefix: string, defaultType?: WikiPageType): WikiPageType;
|
|
6
|
+
export declare function normalizeWikiConfidence(value: string | undefined, prefix: string, defaultConfidence?: WikiArtifactConfidence): WikiArtifactConfidence;
|
|
7
|
+
export { normalizeWikiPagePath };
|
|
8
|
+
//# sourceMappingURL=normalization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalization.d.ts","sourceRoot":"","sources":["../../src/wiki-artifacts/normalization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;AAI5D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CASxF;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,MAAM,EACd,WAAW,GAAE,YAAuB,GACnC,YAAY,CASd;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,MAAM,EACd,iBAAiB,GAAE,sBAAiC,GACnD,sBAAsB,CASxB;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeWikiPagePath = void 0;
|
|
4
|
+
exports.requiredWikiString = requiredWikiString;
|
|
5
|
+
exports.normalizeWikiPageType = normalizeWikiPageType;
|
|
6
|
+
exports.normalizeWikiConfidence = normalizeWikiConfidence;
|
|
7
|
+
const types_js_1 = require("../wiki/types.js");
|
|
8
|
+
const path_safety_js_1 = require("../wiki/path-safety.js");
|
|
9
|
+
Object.defineProperty(exports, "normalizeWikiPagePath", { enumerable: true, get: function () { return path_safety_js_1.normalizeWikiPagePath; } });
|
|
10
|
+
const CONFIDENCE_VALUES = new Set(['high', 'medium', 'low']);
|
|
11
|
+
function requiredWikiString(value, field, prefix) {
|
|
12
|
+
if (typeof value !== 'string') {
|
|
13
|
+
throw new Error(`${prefix} ${field} must be a string`);
|
|
14
|
+
}
|
|
15
|
+
const trimmed = value.trim();
|
|
16
|
+
if (trimmed.length === 0) {
|
|
17
|
+
throw new Error(`${prefix} ${field} must not be empty`);
|
|
18
|
+
}
|
|
19
|
+
return trimmed;
|
|
20
|
+
}
|
|
21
|
+
function normalizeWikiPageType(value, prefix, defaultType = 'entity') {
|
|
22
|
+
if (value === undefined || value.trim().length === 0) {
|
|
23
|
+
return defaultType;
|
|
24
|
+
}
|
|
25
|
+
const normalized = requiredWikiString(value, 'type', prefix);
|
|
26
|
+
if (!(0, types_js_1.isValidPageType)(normalized)) {
|
|
27
|
+
throw new Error(`${prefix} type is not supported: ${normalized}`);
|
|
28
|
+
}
|
|
29
|
+
return normalized;
|
|
30
|
+
}
|
|
31
|
+
function normalizeWikiConfidence(value, prefix, defaultConfidence = 'medium') {
|
|
32
|
+
if (value === undefined || value.trim().length === 0) {
|
|
33
|
+
return defaultConfidence;
|
|
34
|
+
}
|
|
35
|
+
const normalized = requiredWikiString(value, 'confidence', prefix);
|
|
36
|
+
if (!CONFIDENCE_VALUES.has(normalized)) {
|
|
37
|
+
throw new Error(`${prefix} confidence is not supported: ${normalized}`);
|
|
38
|
+
}
|
|
39
|
+
return normalized;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=normalization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalization.js","sourceRoot":"","sources":["../../src/wiki-artifacts/normalization.ts"],"names":[],"mappings":";;;AAOA,gDASC;AAED,sDAaC;AAED,0DAaC;AA9CD,+CAAqF;AACrF,2DAA+D;AA+CtD,sGA/CA,sCAAqB,OA+CA;AA3C9B,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAErE,SAAgB,kBAAkB,CAAC,KAAc,EAAE,KAAa,EAAE,MAAc;IAC9E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,mBAAmB,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,oBAAoB,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,qBAAqB,CACnC,KAAyB,EACzB,MAAc,EACd,cAA4B,QAAQ;IAEpC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAA,0BAAe,EAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,2BAA2B,UAAU,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,uBAAuB,CACrC,KAAyB,EACzB,MAAc,EACd,oBAA4C,QAAQ;IAEpD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IACnE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,iCAAiC,UAAU,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,UAAoC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { SourceRef } from '@jungjaehoon/mama-core/provenance/source-ref';
|
|
2
|
+
import type { WikiPage, WikiPageType } from '../wiki/types.js';
|
|
3
|
+
import type { WikiArtifactConfidence } from './normalization.js';
|
|
4
|
+
export type { WikiArtifactConfidence };
|
|
5
|
+
export interface WikiArtifactInput {
|
|
6
|
+
artifactId?: string;
|
|
7
|
+
path: string;
|
|
8
|
+
title: string;
|
|
9
|
+
type: WikiPageType | string;
|
|
10
|
+
content: string;
|
|
11
|
+
confidence?: WikiArtifactConfidence | string;
|
|
12
|
+
compiledAt?: string;
|
|
13
|
+
sourceRefs: readonly SourceRef[];
|
|
14
|
+
sourceIds?: readonly string[];
|
|
15
|
+
nowMs?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface WikiArtifactRecord {
|
|
18
|
+
artifactId: string;
|
|
19
|
+
path: string;
|
|
20
|
+
title: string;
|
|
21
|
+
type: WikiPageType;
|
|
22
|
+
content: string;
|
|
23
|
+
confidence: WikiArtifactConfidence;
|
|
24
|
+
compiledAt: string;
|
|
25
|
+
sourceRefs: string[];
|
|
26
|
+
sourceIds: string[];
|
|
27
|
+
createdAtMs: number;
|
|
28
|
+
updatedAtMs: number;
|
|
29
|
+
}
|
|
30
|
+
export interface WikiPublishPageInput {
|
|
31
|
+
path: string;
|
|
32
|
+
title: string;
|
|
33
|
+
type?: string;
|
|
34
|
+
content: string;
|
|
35
|
+
confidence?: string;
|
|
36
|
+
sourceIds?: string[];
|
|
37
|
+
sourceRefs?: SourceRef[];
|
|
38
|
+
}
|
|
39
|
+
export type SourceLinkedWikiPage = WikiPage & {
|
|
40
|
+
sourceRefs: string[];
|
|
41
|
+
};
|
|
42
|
+
export type WikiPagePublisher = (pages: SourceLinkedWikiPage[]) => void;
|
|
43
|
+
export interface WikiPublishResult {
|
|
44
|
+
pagesPublished: number;
|
|
45
|
+
artifactsStored: number;
|
|
46
|
+
}
|
|
47
|
+
export interface WikiArtifactListOptions {
|
|
48
|
+
limit?: number;
|
|
49
|
+
offset?: number;
|
|
50
|
+
}
|
|
51
|
+
export type WikiArtifactPathListOptions = WikiArtifactListOptions;
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/wiki-artifacts/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAE9E,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,YAAY,EAAE,sBAAsB,EAAE,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,GAAG,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,sBAAsB,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC1B;AAED,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG;IAC5C,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,IAAI,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,2BAA2B,GAAG,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/wiki-artifacts/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { WikiPagePublisher, WikiPublishPageInput, WikiPublishResult } from './types.js';
|
|
2
|
+
export declare const MAX_WIKI_PUBLISH_PAGES = 100;
|
|
3
|
+
export declare const MAX_WIKI_PAGE_CONTENT_CHARS = 200000;
|
|
4
|
+
export interface WikiPublishAdapter {
|
|
5
|
+
publish(input: {
|
|
6
|
+
pages: WikiPublishPageInput[];
|
|
7
|
+
}): WikiPublishResult;
|
|
8
|
+
}
|
|
9
|
+
export interface WikiPublishAdapterOptions {
|
|
10
|
+
publisher?: WikiPagePublisher | null;
|
|
11
|
+
now?: () => Date;
|
|
12
|
+
}
|
|
13
|
+
export declare function createWikiPublishAdapter(options: WikiPublishAdapterOptions): WikiPublishAdapter;
|
|
14
|
+
//# sourceMappingURL=wiki-publish-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-publish-adapter.d.ts","sourceRoot":"","sources":["../../src/wiki-artifacts/wiki-publish-adapter.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAGV,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,eAAO,MAAM,2BAA2B,SAAU,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,oBAAoB,EAAE,CAAA;KAAE,GAAG,iBAAiB,CAAC;CACtE;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAiDD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,kBAAkB,CA2B/F"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_WIKI_PAGE_CONTENT_CHARS = exports.MAX_WIKI_PUBLISH_PAGES = void 0;
|
|
4
|
+
exports.createWikiPublishAdapter = createWikiPublishAdapter;
|
|
5
|
+
const source_ref_1 = require("@jungjaehoon/mama-core/provenance/source-ref");
|
|
6
|
+
const normalization_js_1 = require("./normalization.js");
|
|
7
|
+
exports.MAX_WIKI_PUBLISH_PAGES = 100;
|
|
8
|
+
exports.MAX_WIKI_PAGE_CONTENT_CHARS = 200_000;
|
|
9
|
+
function normalizeType(value) {
|
|
10
|
+
return (0, normalization_js_1.normalizeWikiPageType)(value, 'wiki_publish page');
|
|
11
|
+
}
|
|
12
|
+
function normalizeConfidence(value) {
|
|
13
|
+
return (0, normalization_js_1.normalizeWikiConfidence)(value, 'wiki_publish page');
|
|
14
|
+
}
|
|
15
|
+
function normalizeSourceIds(sourceIds, fallback) {
|
|
16
|
+
if (!sourceIds || sourceIds.length === 0) {
|
|
17
|
+
return fallback;
|
|
18
|
+
}
|
|
19
|
+
return sourceIds.map((id) => (0, normalization_js_1.requiredWikiString)(id, 'sourceIds[]', 'wiki_publish page'));
|
|
20
|
+
}
|
|
21
|
+
function normalizePage(page, compiledAt) {
|
|
22
|
+
const sourceRefs = page.sourceRefs?.map((ref) => (0, source_ref_1.serializeSourceRef)(ref)) ?? [];
|
|
23
|
+
const content = (0, normalization_js_1.requiredWikiString)(page.content, 'content', 'wiki_publish page');
|
|
24
|
+
if (content.length > exports.MAX_WIKI_PAGE_CONTENT_CHARS) {
|
|
25
|
+
throw new Error(`wiki_publish page content must not exceed ${exports.MAX_WIKI_PAGE_CONTENT_CHARS} characters`);
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
path: (0, normalization_js_1.normalizeWikiPagePath)(page.path, 'wiki_publish page path'),
|
|
29
|
+
title: (0, normalization_js_1.requiredWikiString)(page.title, 'title', 'wiki_publish page'),
|
|
30
|
+
type: normalizeType(page.type),
|
|
31
|
+
content,
|
|
32
|
+
sourceIds: normalizeSourceIds(page.sourceIds, sourceRefs),
|
|
33
|
+
sourceRefs,
|
|
34
|
+
compiledAt,
|
|
35
|
+
confidence: normalizeConfidence(page.confidence),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function normalizeAndDedupePages(rawPages, compiledAt) {
|
|
39
|
+
const byPath = new Map();
|
|
40
|
+
for (const rawPage of rawPages) {
|
|
41
|
+
const page = normalizePage(rawPage, compiledAt);
|
|
42
|
+
byPath.set(page.path, page);
|
|
43
|
+
}
|
|
44
|
+
return [...byPath.values()];
|
|
45
|
+
}
|
|
46
|
+
function createWikiPublishAdapter(options) {
|
|
47
|
+
const publisher = options.publisher ?? null;
|
|
48
|
+
const now = options.now ?? (() => new Date());
|
|
49
|
+
const adapter = {
|
|
50
|
+
publish(input) {
|
|
51
|
+
const compiledAt = now().toISOString();
|
|
52
|
+
if (!Array.isArray(input.pages)) {
|
|
53
|
+
throw new Error('wiki_publish pages must be an array');
|
|
54
|
+
}
|
|
55
|
+
if (input.pages.length > exports.MAX_WIKI_PUBLISH_PAGES) {
|
|
56
|
+
throw new Error(`wiki_publish accepts at most ${exports.MAX_WIKI_PUBLISH_PAGES} pages`);
|
|
57
|
+
}
|
|
58
|
+
const pages = normalizeAndDedupePages(input.pages, compiledAt);
|
|
59
|
+
if (!publisher) {
|
|
60
|
+
throw new Error('Wiki publisher not configured');
|
|
61
|
+
}
|
|
62
|
+
publisher(pages);
|
|
63
|
+
return {
|
|
64
|
+
pagesPublished: pages.length,
|
|
65
|
+
artifactsStored: 0,
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
return Object.freeze(adapter);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=wiki-publish-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-publish-adapter.js","sourceRoot":"","sources":["../../src/wiki-artifacts/wiki-publish-adapter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jungjaehoon/mama-os",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "MAMA OS - Local AI Runtime. Your scattered knowledge, organized by AI agents that never sleep.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
},
|
|
12
12
|
"scripts": {
|
|
13
13
|
"postinstall": "node scripts/postinstall.js",
|
|
14
|
-
"build": "tsc && pnpm exec tsx scripts/generate-gateway-tools.ts && rm -rf public/viewer/js && tsc -p public/viewer/tsconfig.viewer.json",
|
|
14
|
+
"build": "tsc && pnpm exec tsx scripts/generate-gateway-tools.ts && rm -rf public/viewer/js && tsc -p public/viewer/tsconfig.viewer.json && pnpm run build:ui",
|
|
15
|
+
"build:ui": "pnpm --dir ui run bundle",
|
|
16
|
+
"dev:ui": "pnpm --dir ui run dev",
|
|
15
17
|
"build:watch": "tsc --watch",
|
|
16
18
|
"build:viewer": "rm -rf public/viewer/js && tsc -p public/viewer/tsconfig.viewer.json",
|
|
17
19
|
"build:viewer:watch": "tsc -p public/viewer/tsconfig.viewer.json --watch",
|
|
@@ -36,7 +38,7 @@
|
|
|
36
38
|
"license": "MIT",
|
|
37
39
|
"repository": {
|
|
38
40
|
"type": "git",
|
|
39
|
-
"url": "https://github.com/jungjaehoon-lifegamez/MAMA.git",
|
|
41
|
+
"url": "git+https://github.com/jungjaehoon-lifegamez/MAMA.git",
|
|
40
42
|
"directory": "packages/standalone"
|
|
41
43
|
},
|
|
42
44
|
"bugs": {
|
|
@@ -59,7 +61,7 @@
|
|
|
59
61
|
},
|
|
60
62
|
"dependencies": {
|
|
61
63
|
"@anthropic-ai/sdk": "^0.71.2",
|
|
62
|
-
"@jungjaehoon/mama-core": "^1.
|
|
64
|
+
"@jungjaehoon/mama-core": "^1.8.1",
|
|
63
65
|
"better-sqlite3": "^12.8.0",
|
|
64
66
|
"@slack/socket-mode": "^2.0.5",
|
|
65
67
|
"@slack/web-api": "^7.13.0",
|