iosm-cli 0.3.0 → 0.3.2
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 +43 -0
- package/README.md +7 -7
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +4 -2
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/iosm/guide.d.ts +21 -0
- package/dist/iosm/guide.d.ts.map +1 -1
- package/dist/iosm/guide.js +116 -4
- package/dist/iosm/guide.js.map +1 -1
- package/dist/iosm/index.d.ts +1 -1
- package/dist/iosm/index.d.ts.map +1 -1
- package/dist/iosm/index.js +1 -1
- package/dist/iosm/index.js.map +1 -1
- package/dist/iosm/init.d.ts.map +1 -1
- package/dist/iosm/init.js +20 -2
- package/dist/iosm/init.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +16 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +45 -9
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/docs/getting-started.md +3 -3
- package/docs/interactive-mode.md +1 -1
- package/package.json +1 -1
package/dist/iosm/guide.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { existsSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync, readdirSync, renameSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { basename, join } from "node:path";
|
|
2
3
|
import { IOSM_METRICS } from "./metrics.js";
|
|
3
|
-
import { getIosmGuidePath } from "./paths.js";
|
|
4
4
|
const METRIC_TITLES = {
|
|
5
5
|
semantic: "Semantic",
|
|
6
6
|
logic: "Logic",
|
|
@@ -35,6 +35,62 @@ function metricStatus(value) {
|
|
|
35
35
|
function metricSortScore(value) {
|
|
36
36
|
return value === null ? -1 : value;
|
|
37
37
|
}
|
|
38
|
+
function inspectCaseVariants(rootDir, canonicalName) {
|
|
39
|
+
try {
|
|
40
|
+
const entries = readdirSync(rootDir);
|
|
41
|
+
const target = canonicalName.toLowerCase();
|
|
42
|
+
const hasCanonicalEntry = entries.includes(canonicalName);
|
|
43
|
+
for (const entry of entries) {
|
|
44
|
+
if (entry.toLowerCase() !== target)
|
|
45
|
+
continue;
|
|
46
|
+
if (entry === canonicalName)
|
|
47
|
+
continue;
|
|
48
|
+
return { hasCanonicalEntry, variantPath: join(rootDir, entry) };
|
|
49
|
+
}
|
|
50
|
+
return { hasCanonicalEntry };
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Best-effort only; caller will continue with canonical path.
|
|
54
|
+
}
|
|
55
|
+
return { hasCanonicalEntry: existsSync(join(rootDir, canonicalName)) };
|
|
56
|
+
}
|
|
57
|
+
function renameToCanonicalCase(sourcePath, targetPath) {
|
|
58
|
+
const sourceLower = sourcePath.toLowerCase();
|
|
59
|
+
const targetLower = targetPath.toLowerCase();
|
|
60
|
+
if (sourceLower !== targetLower) {
|
|
61
|
+
renameSync(sourcePath, targetPath);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Case-only rename can be flaky on case-insensitive filesystems.
|
|
65
|
+
const tempPath = `${targetPath}.tmp-case-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
66
|
+
renameSync(sourcePath, tempPath);
|
|
67
|
+
renameSync(tempPath, targetPath);
|
|
68
|
+
}
|
|
69
|
+
export function ensureCanonicalPlaybookPath(rootDir, canonicalName) {
|
|
70
|
+
const canonicalPath = join(rootDir, canonicalName);
|
|
71
|
+
const { hasCanonicalEntry, variantPath } = inspectCaseVariants(rootDir, canonicalName);
|
|
72
|
+
if (variantPath && !hasCanonicalEntry) {
|
|
73
|
+
renameToCanonicalCase(variantPath, canonicalPath);
|
|
74
|
+
return { path: canonicalPath, existed: true, renamedFrom: variantPath };
|
|
75
|
+
}
|
|
76
|
+
return { path: canonicalPath, existed: hasCanonicalEntry || existsSync(canonicalPath) };
|
|
77
|
+
}
|
|
78
|
+
const AGENTS_MANAGED_START = "<!-- iosm-init:managed:start -->";
|
|
79
|
+
const AGENTS_MANAGED_END = "<!-- iosm-init:managed:end -->";
|
|
80
|
+
function upsertManagedBlock(content, startMarker, endMarker, block) {
|
|
81
|
+
const startIndex = content.indexOf(startMarker);
|
|
82
|
+
const endIndex = content.indexOf(endMarker);
|
|
83
|
+
if (startIndex >= 0 && endIndex > startIndex) {
|
|
84
|
+
const suffixStart = endIndex + endMarker.length;
|
|
85
|
+
const prefix = content.slice(0, startIndex).trimEnd();
|
|
86
|
+
const suffix = content.slice(suffixStart).trimStart();
|
|
87
|
+
if (!suffix) {
|
|
88
|
+
return `${prefix}\n\n${block}\n`;
|
|
89
|
+
}
|
|
90
|
+
return `${prefix}\n\n${block}\n\n${suffix}\n`;
|
|
91
|
+
}
|
|
92
|
+
return `${content.trimEnd()}\n\n${block}\n`;
|
|
93
|
+
}
|
|
38
94
|
export function buildIosmPriorityChecklist(metrics, limit = 3) {
|
|
39
95
|
return IOSM_METRICS.map((metric) => ({
|
|
40
96
|
metric,
|
|
@@ -89,13 +145,69 @@ export function buildIosmGuideDocument(input) {
|
|
|
89
145
|
lines.push("", "## Agent Contract", "- At the start of each engineering turn: re-read this file and the active cycle report.", "- After each meaningful change: update metric evidence, hypotheses outcome, and phase report.", "- Gate progression requires evidence, not just code changes.", "- Phases run in order: Improve → Optimize → Shrink → Modularize.", "- Quality gates: gate_I (improve), gate_O (optimize), gate_S (shrink), gate_M (modularize).");
|
|
90
146
|
return `${lines.join("\n")}\n`;
|
|
91
147
|
}
|
|
148
|
+
export function buildAgentsGuideDocument(input, existingContent) {
|
|
149
|
+
const nowIso = new Date().toISOString();
|
|
150
|
+
const goals = input.goals ?? [];
|
|
151
|
+
const projectName = basename(input.rootDir);
|
|
152
|
+
const filesSummary = `${input.filesAnalyzed ?? "n/a"} total · ${input.sourceFileCount ?? "n/a"} src · ${input.testFileCount ?? "n/a"} tests · ${input.docFileCount ?? "n/a"} docs`;
|
|
153
|
+
const managedBlock = [
|
|
154
|
+
AGENTS_MANAGED_START,
|
|
155
|
+
"## IOSM Sync (managed)",
|
|
156
|
+
`- Updated: ${nowIso}`,
|
|
157
|
+
`- Assessment: ${input.assessmentSource}`,
|
|
158
|
+
`- Active cycle: ${input.cycleId ?? "none"}`,
|
|
159
|
+
`- IOSM-Index: ${formatMetricValue(input.iosmIndex)} (confidence: ${formatMetricValue(input.decisionConfidence)})`,
|
|
160
|
+
`- Files analyzed: ${filesSummary}`,
|
|
161
|
+
"",
|
|
162
|
+
"### Current focus",
|
|
163
|
+
...(goals.length > 0 ? goals.map((goal) => `- ${goal}`) : ["- Unknown"]),
|
|
164
|
+
"",
|
|
165
|
+
"### Notes",
|
|
166
|
+
"- This section is auto-updated by `iosm init`/`/init`.",
|
|
167
|
+
"- Keep project-specific contributor/agent rules outside this block.",
|
|
168
|
+
AGENTS_MANAGED_END,
|
|
169
|
+
].join("\n");
|
|
170
|
+
const normalizedExisting = existingContent?.trim();
|
|
171
|
+
if (normalizedExisting && normalizedExisting.length > 0) {
|
|
172
|
+
return upsertManagedBlock(normalizedExisting, AGENTS_MANAGED_START, AGENTS_MANAGED_END, managedBlock);
|
|
173
|
+
}
|
|
174
|
+
const lines = [
|
|
175
|
+
"# AGENTS.md",
|
|
176
|
+
"",
|
|
177
|
+
"This file captures practical collaboration rules for human and AI agents in this repository.",
|
|
178
|
+
"",
|
|
179
|
+
"## Project",
|
|
180
|
+
`- Name: ${projectName}`,
|
|
181
|
+
`- Root: ${input.rootDir}`,
|
|
182
|
+
"",
|
|
183
|
+
"## Working Agreement",
|
|
184
|
+
"- Inspect relevant files before editing.",
|
|
185
|
+
"- Keep edits minimal and verify with targeted checks.",
|
|
186
|
+
"- Prefer explicit commands and absolute file paths in reports.",
|
|
187
|
+
"",
|
|
188
|
+
managedBlock,
|
|
189
|
+
];
|
|
190
|
+
return `${lines.join("\n")}\n`;
|
|
191
|
+
}
|
|
92
192
|
export function writeIosmGuideDocument(input, overwrite) {
|
|
93
|
-
const
|
|
94
|
-
const
|
|
193
|
+
const canonical = ensureCanonicalPlaybookPath(input.rootDir, "IOSM.md");
|
|
194
|
+
const filePath = canonical.path;
|
|
195
|
+
const existed = canonical.existed;
|
|
95
196
|
if (existed && !overwrite) {
|
|
96
197
|
return { path: filePath, existed, written: false };
|
|
97
198
|
}
|
|
98
199
|
writeFileSync(filePath, buildIosmGuideDocument(input), "utf8");
|
|
99
200
|
return { path: filePath, existed, written: true };
|
|
100
201
|
}
|
|
202
|
+
export function writeAgentsGuideDocument(input, overwrite) {
|
|
203
|
+
const canonical = ensureCanonicalPlaybookPath(input.rootDir, "AGENTS.md");
|
|
204
|
+
const filePath = canonical.path;
|
|
205
|
+
const existed = canonical.existed;
|
|
206
|
+
if (existed && !overwrite) {
|
|
207
|
+
return { path: filePath, existed, written: false };
|
|
208
|
+
}
|
|
209
|
+
const existingContent = existed ? readFileSync(filePath, "utf8") : undefined;
|
|
210
|
+
writeFileSync(filePath, buildAgentsGuideDocument(input, existingContent), "utf8");
|
|
211
|
+
return { path: filePath, existed, written: true };
|
|
212
|
+
}
|
|
101
213
|
//# sourceMappingURL=guide.js.map
|
package/dist/iosm/guide.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../../src/iosm/guide.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, writeFileSync } from \"node:fs\";\nimport { IOSM_METRICS } from \"./metrics.js\";\nimport { getIosmGuidePath } from \"./paths.js\";\nimport type { IosmMetric, IosmMetricRecord } from \"./types.js\";\n\nconst METRIC_TITLES: Record<IosmMetric, string> = {\n\tsemantic: \"Semantic\",\n\tlogic: \"Logic\",\n\tperformance: \"Performance\",\n\tsimplicity: \"Simplicity\",\n\tmodularity: \"Modularity\",\n\tflow: \"Flow\",\n};\n\nconst METRIC_ACTIONS: Record<IosmMetric, string> = {\n\tsemantic: \"Clarify glossary/domain language and improve docs for public APIs.\",\n\tlogic: \"Add or fix automated tests for critical paths and invariants.\",\n\tperformance: \"Add runtime measurements/benchmarks and enforce SLO budgets.\",\n\tsimplicity: \"Reduce complexity in large files/functions and simplify API surface.\",\n\tmodularity: \"Split boundaries and reduce coupling between modules.\",\n\tflow: \"Establish VCS + CI/CD workflow and a repeatable release cadence.\",\n};\n\nfunction formatMetricValue(value: number | null | undefined): string {\n\treturn value === undefined || value === null ? \"n/a\" : value.toFixed(3);\n}\n\nfunction metricStatus(value: number | null): string {\n\tif (value === null) {\n\t\treturn \"unknown\";\n\t}\n\tif (value < 0.55) {\n\t\treturn \"critical\";\n\t}\n\tif (value < 0.75) {\n\t\treturn \"watch\";\n\t}\n\treturn \"stable\";\n}\n\nfunction metricSortScore(value: number | null): number {\n\treturn value === null ? -1 : value;\n}\n\nexport interface IosmPriorityChecklistItem {\n\tmetric: IosmMetric;\n\tvalue: number | null;\n\ttitle: string;\n\taction: string;\n}\n\nexport interface IosmGuideDocumentInput {\n\trootDir: string;\n\tcycleId?: string;\n\tassessmentSource: \"heuristic\" | \"verified\";\n\tmetrics: IosmMetricRecord<number | null>;\n\tiosmIndex?: number | null;\n\tdecisionConfidence?: number | null;\n\tgoals?: string[];\n\tfilesAnalyzed?: number;\n\tsourceFileCount?: number;\n\ttestFileCount?: number;\n\tdocFileCount?: number;\n\ttracePath?: string;\n\thistoryPath?: string;\n}\n\nexport interface IosmGuideWriteResult {\n\tpath: string;\n\texisted: boolean;\n\twritten: boolean;\n}\n\nexport function buildIosmPriorityChecklist(\n\tmetrics: IosmMetricRecord<number | null>,\n\tlimit: number = 3,\n): IosmPriorityChecklistItem[] {\n\treturn IOSM_METRICS.map((metric) => ({\n\t\tmetric,\n\t\tvalue: metrics[metric],\n\t\ttitle: METRIC_TITLES[metric],\n\t\taction: METRIC_ACTIONS[metric],\n\t}))\n\t\t.sort((left, right) => metricSortScore(left.value) - metricSortScore(right.value))\n\t\t.slice(0, Math.max(1, Math.min(limit, IOSM_METRICS.length)));\n}\n\nexport function buildIosmGuideDocument(input: IosmGuideDocumentInput): string {\n\tconst nowIso = new Date().toISOString();\n\tconst goals = input.goals ?? [];\n\n\t// Build sorted metrics table (worst-first)\n\tconst sortedMetrics = IOSM_METRICS.slice().sort(\n\t\t(a, b) => metricSortScore(input.metrics[a]) - metricSortScore(input.metrics[b]),\n\t);\n\n\t// Priority actions: top 3 worst metrics\n\tconst priorities = buildIosmPriorityChecklist(input.metrics, 3);\n\n\tconst lines: string[] = [\n\t\t\"# IOSM.md\",\n\t\t\"\",\n\t\t\"This file provides IOSM operational context to the agent for this project.\",\n\t\t`Updated: ${nowIso}`,\n\t\t\"\",\n\t\t\"## Project Status\",\n\t\t`- Root: ${input.rootDir}`,\n\t\t`- Active cycle: ${input.cycleId ?? \"none\"}`,\n\t\t`- IOSM-Index: ${formatMetricValue(input.iosmIndex)} (Confidence: ${formatMetricValue(input.decisionConfidence)})`,\n\t\t`- Assessment: ${input.assessmentSource} · Files analyzed: ${input.filesAnalyzed ?? \"n/a\"}`,\n\t\t\"\",\n\t\t\"## Metric Scores\",\n\t\t\"| Metric | Score | Status | Priority Action |\",\n\t\t\"|--------|-------|--------|-----------------|\",\n\t];\n\n\tfor (const metric of sortedMetrics) {\n\t\tlines.push(\n\t\t\t`| ${METRIC_TITLES[metric]} | ${formatMetricValue(input.metrics[metric])} | ${metricStatus(input.metrics[metric])} | ${METRIC_ACTIONS[metric]} |`,\n\t\t);\n\t}\n\n\tlines.push(\"\", \"## Priority Actions (this cycle)\");\n\tfor (const [index, item] of priorities.entries()) {\n\t\tlines.push(\n\t\t\t`${index + 1}. **${item.title} (${formatMetricValue(item.value)} — ${metricStatus(item.value)})**: ${item.action}`,\n\t\t);\n\t}\n\n\tif (goals.length > 0) {\n\t\tlines.push(\"\", \"## Active Goals\");\n\t\tfor (const goal of goals) {\n\t\t\tlines.push(`- ${goal}`);\n\t\t}\n\t}\n\n\tlines.push(\n\t\t\"\",\n\t\t\"## IOSM Workspace\",\n\t\t`- Config: \\`iosm.yaml\\``,\n\t\t`- Metrics history: \\`.iosm/metrics-history.jsonl\\``,\n\t);\n\n\tif (input.cycleId) {\n\t\tlines.push(\n\t\t\t`- Current cycle: \\`.iosm/cycles/${input.cycleId}/\\``,\n\t\t\t` - Baseline: \\`baseline-report.json\\``,\n\t\t\t` - Hypotheses: \\`hypotheses.json\\``,\n\t\t\t` - Phase reports: \\`phase-reports/improve.json\\` etc.`,\n\t\t);\n\t}\n\n\tlines.push(\n\t\t`- Invariants: \\`.iosm/invariants.yaml\\``,\n\t\t`- Contracts: \\`.iosm/contracts.yaml\\``,\n\t\t`- Decision log: \\`.iosm/decision-log.md\\``,\n\t\t`- Pattern library: \\`.iosm/pattern-library.md\\``,\n\t);\n\n\tlines.push(\n\t\t\"\",\n\t\t\"## Agent Contract\",\n\t\t\"- At the start of each engineering turn: re-read this file and the active cycle report.\",\n\t\t\"- After each meaningful change: update metric evidence, hypotheses outcome, and phase report.\",\n\t\t\"- Gate progression requires evidence, not just code changes.\",\n\t\t\"- Phases run in order: Improve → Optimize → Shrink → Modularize.\",\n\t\t\"- Quality gates: gate_I (improve), gate_O (optimize), gate_S (shrink), gate_M (modularize).\",\n\t);\n\n\treturn `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function writeIosmGuideDocument(\n\tinput: IosmGuideDocumentInput,\n\toverwrite: boolean,\n): IosmGuideWriteResult {\n\tconst filePath = getIosmGuidePath(input.rootDir);\n\tconst existed = existsSync(filePath);\n\tif (existed && !overwrite) {\n\t\treturn { path: filePath, existed, written: false };\n\t}\n\twriteFileSync(filePath, buildIosmGuideDocument(input), \"utf8\");\n\treturn { path: filePath, existed, written: true };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../../src/iosm/guide.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, readdirSync, renameSync, writeFileSync } from \"node:fs\";\nimport { basename, join } from \"node:path\";\nimport { IOSM_METRICS } from \"./metrics.js\";\nimport { getIosmGuidePath } from \"./paths.js\";\nimport type { IosmMetric, IosmMetricRecord } from \"./types.js\";\n\nconst METRIC_TITLES: Record<IosmMetric, string> = {\n\tsemantic: \"Semantic\",\n\tlogic: \"Logic\",\n\tperformance: \"Performance\",\n\tsimplicity: \"Simplicity\",\n\tmodularity: \"Modularity\",\n\tflow: \"Flow\",\n};\n\nconst METRIC_ACTIONS: Record<IosmMetric, string> = {\n\tsemantic: \"Clarify glossary/domain language and improve docs for public APIs.\",\n\tlogic: \"Add or fix automated tests for critical paths and invariants.\",\n\tperformance: \"Add runtime measurements/benchmarks and enforce SLO budgets.\",\n\tsimplicity: \"Reduce complexity in large files/functions and simplify API surface.\",\n\tmodularity: \"Split boundaries and reduce coupling between modules.\",\n\tflow: \"Establish VCS + CI/CD workflow and a repeatable release cadence.\",\n};\n\nfunction formatMetricValue(value: number | null | undefined): string {\n\treturn value === undefined || value === null ? \"n/a\" : value.toFixed(3);\n}\n\nfunction metricStatus(value: number | null): string {\n\tif (value === null) {\n\t\treturn \"unknown\";\n\t}\n\tif (value < 0.55) {\n\t\treturn \"critical\";\n\t}\n\tif (value < 0.75) {\n\t\treturn \"watch\";\n\t}\n\treturn \"stable\";\n}\n\nfunction metricSortScore(value: number | null): number {\n\treturn value === null ? -1 : value;\n}\n\nexport interface IosmPriorityChecklistItem {\n\tmetric: IosmMetric;\n\tvalue: number | null;\n\ttitle: string;\n\taction: string;\n}\n\nexport interface IosmGuideDocumentInput {\n\trootDir: string;\n\tcycleId?: string;\n\tassessmentSource: \"heuristic\" | \"verified\";\n\tmetrics: IosmMetricRecord<number | null>;\n\tiosmIndex?: number | null;\n\tdecisionConfidence?: number | null;\n\tgoals?: string[];\n\tfilesAnalyzed?: number;\n\tsourceFileCount?: number;\n\ttestFileCount?: number;\n\tdocFileCount?: number;\n\ttracePath?: string;\n\thistoryPath?: string;\n}\n\nexport interface IosmGuideWriteResult {\n\tpath: string;\n\texisted: boolean;\n\twritten: boolean;\n}\n\ntype PlaybookFileName = \"AGENTS.md\" | \"IOSM.md\";\n\nfunction inspectCaseVariants(\n\trootDir: string,\n\tcanonicalName: PlaybookFileName,\n): { hasCanonicalEntry: boolean; variantPath?: string } {\n\ttry {\n\t\tconst entries = readdirSync(rootDir);\n\t\tconst target = canonicalName.toLowerCase();\n\t\tconst hasCanonicalEntry = entries.includes(canonicalName);\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.toLowerCase() !== target) continue;\n\t\t\tif (entry === canonicalName) continue;\n\t\t\treturn { hasCanonicalEntry, variantPath: join(rootDir, entry) };\n\t\t}\n\t\treturn { hasCanonicalEntry };\n\t} catch {\n\t\t// Best-effort only; caller will continue with canonical path.\n\t}\n\treturn { hasCanonicalEntry: existsSync(join(rootDir, canonicalName)) };\n}\n\nfunction renameToCanonicalCase(sourcePath: string, targetPath: string): void {\n\tconst sourceLower = sourcePath.toLowerCase();\n\tconst targetLower = targetPath.toLowerCase();\n\tif (sourceLower !== targetLower) {\n\t\trenameSync(sourcePath, targetPath);\n\t\treturn;\n\t}\n\n\t// Case-only rename can be flaky on case-insensitive filesystems.\n\tconst tempPath = `${targetPath}.tmp-case-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n\trenameSync(sourcePath, tempPath);\n\trenameSync(tempPath, targetPath);\n}\n\nexport function ensureCanonicalPlaybookPath(\n\trootDir: string,\n\tcanonicalName: PlaybookFileName,\n): { path: string; existed: boolean; renamedFrom?: string } {\n\tconst canonicalPath = join(rootDir, canonicalName);\n\tconst { hasCanonicalEntry, variantPath } = inspectCaseVariants(rootDir, canonicalName);\n\tif (variantPath && !hasCanonicalEntry) {\n\t\trenameToCanonicalCase(variantPath, canonicalPath);\n\t\treturn { path: canonicalPath, existed: true, renamedFrom: variantPath };\n\t}\n\treturn { path: canonicalPath, existed: hasCanonicalEntry || existsSync(canonicalPath) };\n}\n\nexport interface AgentsGuideDocumentInput {\n\trootDir: string;\n\tcycleId?: string;\n\tassessmentSource: \"heuristic\" | \"verified\";\n\tiosmIndex?: number | null;\n\tdecisionConfidence?: number | null;\n\tgoals?: string[];\n\tfilesAnalyzed?: number;\n\tsourceFileCount?: number;\n\ttestFileCount?: number;\n\tdocFileCount?: number;\n}\n\nconst AGENTS_MANAGED_START = \"<!-- iosm-init:managed:start -->\";\nconst AGENTS_MANAGED_END = \"<!-- iosm-init:managed:end -->\";\n\nfunction upsertManagedBlock(content: string, startMarker: string, endMarker: string, block: string): string {\n\tconst startIndex = content.indexOf(startMarker);\n\tconst endIndex = content.indexOf(endMarker);\n\tif (startIndex >= 0 && endIndex > startIndex) {\n\t\tconst suffixStart = endIndex + endMarker.length;\n\t\tconst prefix = content.slice(0, startIndex).trimEnd();\n\t\tconst suffix = content.slice(suffixStart).trimStart();\n\t\tif (!suffix) {\n\t\t\treturn `${prefix}\\n\\n${block}\\n`;\n\t\t}\n\t\treturn `${prefix}\\n\\n${block}\\n\\n${suffix}\\n`;\n\t}\n\treturn `${content.trimEnd()}\\n\\n${block}\\n`;\n}\n\nexport function buildIosmPriorityChecklist(\n\tmetrics: IosmMetricRecord<number | null>,\n\tlimit: number = 3,\n): IosmPriorityChecklistItem[] {\n\treturn IOSM_METRICS.map((metric) => ({\n\t\tmetric,\n\t\tvalue: metrics[metric],\n\t\ttitle: METRIC_TITLES[metric],\n\t\taction: METRIC_ACTIONS[metric],\n\t}))\n\t\t.sort((left, right) => metricSortScore(left.value) - metricSortScore(right.value))\n\t\t.slice(0, Math.max(1, Math.min(limit, IOSM_METRICS.length)));\n}\n\nexport function buildIosmGuideDocument(input: IosmGuideDocumentInput): string {\n\tconst nowIso = new Date().toISOString();\n\tconst goals = input.goals ?? [];\n\n\t// Build sorted metrics table (worst-first)\n\tconst sortedMetrics = IOSM_METRICS.slice().sort(\n\t\t(a, b) => metricSortScore(input.metrics[a]) - metricSortScore(input.metrics[b]),\n\t);\n\n\t// Priority actions: top 3 worst metrics\n\tconst priorities = buildIosmPriorityChecklist(input.metrics, 3);\n\n\tconst lines: string[] = [\n\t\t\"# IOSM.md\",\n\t\t\"\",\n\t\t\"This file provides IOSM operational context to the agent for this project.\",\n\t\t`Updated: ${nowIso}`,\n\t\t\"\",\n\t\t\"## Project Status\",\n\t\t`- Root: ${input.rootDir}`,\n\t\t`- Active cycle: ${input.cycleId ?? \"none\"}`,\n\t\t`- IOSM-Index: ${formatMetricValue(input.iosmIndex)} (Confidence: ${formatMetricValue(input.decisionConfidence)})`,\n\t\t`- Assessment: ${input.assessmentSource} · Files analyzed: ${input.filesAnalyzed ?? \"n/a\"}`,\n\t\t\"\",\n\t\t\"## Metric Scores\",\n\t\t\"| Metric | Score | Status | Priority Action |\",\n\t\t\"|--------|-------|--------|-----------------|\",\n\t];\n\n\tfor (const metric of sortedMetrics) {\n\t\tlines.push(\n\t\t\t`| ${METRIC_TITLES[metric]} | ${formatMetricValue(input.metrics[metric])} | ${metricStatus(input.metrics[metric])} | ${METRIC_ACTIONS[metric]} |`,\n\t\t);\n\t}\n\n\tlines.push(\"\", \"## Priority Actions (this cycle)\");\n\tfor (const [index, item] of priorities.entries()) {\n\t\tlines.push(\n\t\t\t`${index + 1}. **${item.title} (${formatMetricValue(item.value)} — ${metricStatus(item.value)})**: ${item.action}`,\n\t\t);\n\t}\n\n\tif (goals.length > 0) {\n\t\tlines.push(\"\", \"## Active Goals\");\n\t\tfor (const goal of goals) {\n\t\t\tlines.push(`- ${goal}`);\n\t\t}\n\t}\n\n\tlines.push(\n\t\t\"\",\n\t\t\"## IOSM Workspace\",\n\t\t`- Config: \\`iosm.yaml\\``,\n\t\t`- Metrics history: \\`.iosm/metrics-history.jsonl\\``,\n\t);\n\n\tif (input.cycleId) {\n\t\tlines.push(\n\t\t\t`- Current cycle: \\`.iosm/cycles/${input.cycleId}/\\``,\n\t\t\t` - Baseline: \\`baseline-report.json\\``,\n\t\t\t` - Hypotheses: \\`hypotheses.json\\``,\n\t\t\t` - Phase reports: \\`phase-reports/improve.json\\` etc.`,\n\t\t);\n\t}\n\n\tlines.push(\n\t\t`- Invariants: \\`.iosm/invariants.yaml\\``,\n\t\t`- Contracts: \\`.iosm/contracts.yaml\\``,\n\t\t`- Decision log: \\`.iosm/decision-log.md\\``,\n\t\t`- Pattern library: \\`.iosm/pattern-library.md\\``,\n\t);\n\n\tlines.push(\n\t\t\"\",\n\t\t\"## Agent Contract\",\n\t\t\"- At the start of each engineering turn: re-read this file and the active cycle report.\",\n\t\t\"- After each meaningful change: update metric evidence, hypotheses outcome, and phase report.\",\n\t\t\"- Gate progression requires evidence, not just code changes.\",\n\t\t\"- Phases run in order: Improve → Optimize → Shrink → Modularize.\",\n\t\t\"- Quality gates: gate_I (improve), gate_O (optimize), gate_S (shrink), gate_M (modularize).\",\n\t);\n\n\treturn `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function buildAgentsGuideDocument(input: AgentsGuideDocumentInput, existingContent?: string): string {\n\tconst nowIso = new Date().toISOString();\n\tconst goals = input.goals ?? [];\n\tconst projectName = basename(input.rootDir);\n\tconst filesSummary = `${input.filesAnalyzed ?? \"n/a\"} total · ${input.sourceFileCount ?? \"n/a\"} src · ${input.testFileCount ?? \"n/a\"} tests · ${input.docFileCount ?? \"n/a\"} docs`;\n\n\tconst managedBlock = [\n\t\tAGENTS_MANAGED_START,\n\t\t\"## IOSM Sync (managed)\",\n\t\t`- Updated: ${nowIso}`,\n\t\t`- Assessment: ${input.assessmentSource}`,\n\t\t`- Active cycle: ${input.cycleId ?? \"none\"}`,\n\t\t`- IOSM-Index: ${formatMetricValue(input.iosmIndex)} (confidence: ${formatMetricValue(input.decisionConfidence)})`,\n\t\t`- Files analyzed: ${filesSummary}`,\n\t\t\"\",\n\t\t\"### Current focus\",\n\t\t...(goals.length > 0 ? goals.map((goal) => `- ${goal}`) : [\"- Unknown\"]),\n\t\t\"\",\n\t\t\"### Notes\",\n\t\t\"- This section is auto-updated by `iosm init`/`/init`.\",\n\t\t\"- Keep project-specific contributor/agent rules outside this block.\",\n\t\tAGENTS_MANAGED_END,\n\t].join(\"\\n\");\n\n\tconst normalizedExisting = existingContent?.trim();\n\tif (normalizedExisting && normalizedExisting.length > 0) {\n\t\treturn upsertManagedBlock(normalizedExisting, AGENTS_MANAGED_START, AGENTS_MANAGED_END, managedBlock);\n\t}\n\n\tconst lines = [\n\t\t\"# AGENTS.md\",\n\t\t\"\",\n\t\t\"This file captures practical collaboration rules for human and AI agents in this repository.\",\n\t\t\"\",\n\t\t\"## Project\",\n\t\t`- Name: ${projectName}`,\n\t\t`- Root: ${input.rootDir}`,\n\t\t\"\",\n\t\t\"## Working Agreement\",\n\t\t\"- Inspect relevant files before editing.\",\n\t\t\"- Keep edits minimal and verify with targeted checks.\",\n\t\t\"- Prefer explicit commands and absolute file paths in reports.\",\n\t\t\"\",\n\t\tmanagedBlock,\n\t];\n\treturn `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function writeIosmGuideDocument(\n\tinput: IosmGuideDocumentInput,\n\toverwrite: boolean,\n): IosmGuideWriteResult {\n\tconst canonical = ensureCanonicalPlaybookPath(input.rootDir, \"IOSM.md\");\n\tconst filePath = canonical.path;\n\tconst existed = canonical.existed;\n\tif (existed && !overwrite) {\n\t\treturn { path: filePath, existed, written: false };\n\t}\n\twriteFileSync(filePath, buildIosmGuideDocument(input), \"utf8\");\n\treturn { path: filePath, existed, written: true };\n}\n\nexport function writeAgentsGuideDocument(\n\tinput: AgentsGuideDocumentInput,\n\toverwrite: boolean,\n): IosmGuideWriteResult {\n\tconst canonical = ensureCanonicalPlaybookPath(input.rootDir, \"AGENTS.md\");\n\tconst filePath = canonical.path;\n\tconst existed = canonical.existed;\n\tif (existed && !overwrite) {\n\t\treturn { path: filePath, existed, written: false };\n\t}\n\n\tconst existingContent = existed ? readFileSync(filePath, \"utf8\") : undefined;\n\twriteFileSync(filePath, buildAgentsGuideDocument(input, existingContent), \"utf8\");\n\treturn { path: filePath, existed, written: true };\n}\n"]}
|
package/dist/iosm/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export { inspectIosmCycle, listIosmCycles, listIosmCyclesAsync, planIosmCycle, r
|
|
|
5
5
|
export { initIosmWorkspace, type IosmInitOptions, type IosmInitResult } from "./init.js";
|
|
6
6
|
export { buildIosmAgentVerificationPrompt, buildIosmGuideAuthoringPrompt, createMetricSnapshot, extractAssistantText, formatMetricSnapshot, normalizeIosmGuideMarkdown, summarizeMetricDelta, type IosmMetricSnapshot, } from "./agent-verification.js";
|
|
7
7
|
export { buildIosmAutomationPrompt, evaluateIosmAutomationProgress, hasReachedIosmTarget, resolveIosmAutomationSettings, type IosmAutomationProgress, type IosmAutomationOverrides, type IosmAutomationPromptInput, type IosmAutomationSettings, } from "./automation.js";
|
|
8
|
-
export { buildIosmPriorityChecklist, writeIosmGuideDocument, type IosmGuideDocumentInput, type IosmPriorityChecklistItem, type IosmGuideWriteResult, } from "./guide.js";
|
|
8
|
+
export { buildIosmPriorityChecklist, buildAgentsGuideDocument, ensureCanonicalPlaybookPath, writeIosmGuideDocument, writeAgentsGuideDocument, type AgentsGuideDocumentInput, type IosmGuideDocumentInput, type IosmPriorityChecklistItem, type IosmGuideWriteResult, } from "./guide.js";
|
|
9
9
|
export { buildIosmContextBlock, findIosmGuidePath, loadIosmContext, loadIosmContextFromPath } from "./context-loader.js";
|
|
10
10
|
export { buildIosmRuntimeDirective, isLikelyIosmOperationalPrompt, normalizeIosmGoalFromPrompt, prepareIosmRuntimeContext, type IosmRuntimeDirectiveInput, } from "./runtime-context.js";
|
|
11
11
|
export type { IosmApprovalStep, IosmAutomationActor, IosmBaselineReport, IosmCycleCapacityReport, IosmCycleReport, IosmCycleScope, IosmDecision, IosmEvidenceTier, IosmGateResult, IosmGuardrailViolation, IosmHypothesisCard, IosmHypothesisOutcome, IosmMetric, IosmMetricRecord, IosmMetricsHistoryEntry, IosmPhase, IosmPhasePointer, IosmPhaseReport, } from "./types.js";
|
package/dist/iosm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/iosm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,EAClB,uCAAuC,EACvC,qBAAqB,EACrB,OAAO,EACP,kBAAkB,EAClB,8BAA8B,EAC9B,2BAA2B,EAC3B,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACzF,OAAO,EACN,gCAAgC,EAChC,6BAA6B,EAC7B,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,KAAK,kBAAkB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,yBAAyB,EACzB,8BAA8B,EAC9B,oBAAoB,EACpB,6BAA6B,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,0BAA0B,EAC1B,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACzH,OAAO,EACN,yBAAyB,EACzB,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,EACzB,KAAK,yBAAyB,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACX,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EACvB,SAAS,EACT,gBAAgB,EAChB,eAAe,GACf,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/iosm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,EAClB,uCAAuC,EACvC,qBAAqB,EACrB,OAAO,EACP,kBAAkB,EAClB,8BAA8B,EAC9B,2BAA2B,EAC3B,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACzF,OAAO,EACN,gCAAgC,EAChC,6BAA6B,EAC7B,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,KAAK,kBAAkB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,yBAAyB,EACzB,8BAA8B,EAC9B,oBAAoB,EACpB,6BAA6B,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACzH,OAAO,EACN,yBAAyB,EACzB,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,EACzB,KAAK,yBAAyB,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACX,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EACvB,SAAS,EACT,gBAAgB,EAChB,eAAe,GACf,MAAM,YAAY,CAAC"}
|
package/dist/iosm/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export { inspectIosmCycle, listIosmCycles, listIosmCyclesAsync, planIosmCycle, r
|
|
|
5
5
|
export { initIosmWorkspace } from "./init.js";
|
|
6
6
|
export { buildIosmAgentVerificationPrompt, buildIosmGuideAuthoringPrompt, createMetricSnapshot, extractAssistantText, formatMetricSnapshot, normalizeIosmGuideMarkdown, summarizeMetricDelta, } from "./agent-verification.js";
|
|
7
7
|
export { buildIosmAutomationPrompt, evaluateIosmAutomationProgress, hasReachedIosmTarget, resolveIosmAutomationSettings, } from "./automation.js";
|
|
8
|
-
export { buildIosmPriorityChecklist, writeIosmGuideDocument, } from "./guide.js";
|
|
8
|
+
export { buildIosmPriorityChecklist, buildAgentsGuideDocument, ensureCanonicalPlaybookPath, writeIosmGuideDocument, writeAgentsGuideDocument, } from "./guide.js";
|
|
9
9
|
export { buildIosmContextBlock, findIosmGuidePath, loadIosmContext, loadIosmContextFromPath } from "./context-loader.js";
|
|
10
10
|
export { buildIosmRuntimeDirective, isLikelyIosmOperationalPrompt, normalizeIosmGoalFromPrompt, prepareIosmRuntimeContext, } from "./runtime-context.js";
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
package/dist/iosm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/iosm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,eAAe,EACf,cAAc,EACd,kBAAkB,GAiBlB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,EAClB,uCAAuC,EACvC,qBAAqB,EACrB,OAAO,EACP,kBAAkB,EAClB,8BAA8B,EAC9B,2BAA2B,EAC3B,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,mBAAmB,GAMnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAA6C,MAAM,WAAW,CAAC;AACzF,OAAO,EACN,gCAAgC,EAChC,6BAA6B,EAC7B,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,GAEpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,yBAAyB,EACzB,8BAA8B,EAC9B,oBAAoB,EACpB,6BAA6B,GAK7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,0BAA0B,EAC1B,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/iosm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,eAAe,EACf,cAAc,EACd,kBAAkB,GAiBlB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,EAClB,uCAAuC,EACvC,qBAAqB,EACrB,OAAO,EACP,kBAAkB,EAClB,8BAA8B,EAC9B,2BAA2B,EAC3B,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,mBAAmB,GAMnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAA6C,MAAM,WAAW,CAAC;AACzF,OAAO,EACN,gCAAgC,EAChC,6BAA6B,EAC7B,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,GAEpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,yBAAyB,EACzB,8BAA8B,EAC9B,oBAAoB,EACpB,6BAA6B,GAK7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,GAKxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACzH,OAAO,EACN,yBAAyB,EACzB,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,GAEzB,MAAM,sBAAsB,CAAC","sourcesContent":["export {\n\tfindIosmRootDir,\n\tloadIosmConfig,\n\tresolveIosmRootDir,\n\ttype IosmAutomationConfig,\n\ttype IosmConfig,\n\ttype IosmConfigModel,\n\ttype IosmCycleCapacityConfig,\n\ttype IosmCyclePolicyConfig,\n\ttype IosmEvidenceConfig,\n\ttype IosmGuardrailsConfig,\n\ttype IosmIndexConfig,\n\ttype IosmLearningConfig,\n\ttype IosmMetadataConfig,\n\ttype IosmMetricTargetsConfig,\n\ttype IosmPlanningConfig,\n\ttype IosmQualityGatesConfig,\n\ttype IosmReportingConfig,\n\ttype IosmStabilizationConfig,\n\ttype IosmWaiversConfig,\n} from \"./config.js\";\nexport {\n\tassessDeclineCoverage,\n\tbuildCycleBudget,\n\tcalculateDecisionConfidence,\n\tcalculateIosmIndex,\n\tcalculateIosmMetricsFromRawMeasurements,\n\tcalculateMetricDeltas,\n\tclamp01,\n\tcreateMetricRecord,\n\thasCompleteNumericMetricRecord,\n\thasCompleteTierMetricRecord,\n\tIOSM_METRICS,\n\tmergeMetricValues,\n\tnormalizeHigherIsBetter,\n\tnormalizeLowerIsBetter,\n\tvalidateGuardrails,\n} from \"./metrics.js\";\nexport {\n\tgetIosmBaselineReportPath,\n\tgetIosmBaselinesDir,\n\tgetIosmConfigPath,\n\tgetIosmContractCatalogPath,\n\tgetIosmCycleDir,\n\tgetIosmCycleReportPath,\n\tgetIosmCyclesDir,\n\tgetIosmDecisionLogPath,\n\tgetIosmGuidePath,\n\tgetIosmHypothesesPath,\n\tgetIosmInvariantCatalogPath,\n\tgetIosmMetricsHistoryPath,\n\tgetIosmPatternLibraryPath,\n\tgetIosmPhaseReportPath,\n\tgetIosmPhaseReportsDir,\n\tgetIosmWaiverRegisterPath,\n\tgetIosmWorkspaceDir,\n} from \"./paths.js\";\nexport {\n\tinspectIosmCycle,\n\tlistIosmCycles,\n\tlistIosmCyclesAsync,\n\tplanIosmCycle,\n\trecordIosmCycleHistory,\n\treadIosmCycleReport,\n\ttype IosmCycleListItem,\n\ttype IosmCycleHistoryRecordResult,\n\ttype IosmCycleStatus,\n\ttype PlannedIosmCycle,\n\ttype PlanIosmCycleOptions,\n} from \"./cycle.js\";\nexport { initIosmWorkspace, type IosmInitOptions, type IosmInitResult } from \"./init.js\";\nexport {\n\tbuildIosmAgentVerificationPrompt,\n\tbuildIosmGuideAuthoringPrompt,\n\tcreateMetricSnapshot,\n\textractAssistantText,\n\tformatMetricSnapshot,\n\tnormalizeIosmGuideMarkdown,\n\tsummarizeMetricDelta,\n\ttype IosmMetricSnapshot,\n} from \"./agent-verification.js\";\nexport {\n\tbuildIosmAutomationPrompt,\n\tevaluateIosmAutomationProgress,\n\thasReachedIosmTarget,\n\tresolveIosmAutomationSettings,\n\ttype IosmAutomationProgress,\n\ttype IosmAutomationOverrides,\n\ttype IosmAutomationPromptInput,\n\ttype IosmAutomationSettings,\n} from \"./automation.js\";\nexport {\n\tbuildIosmPriorityChecklist,\n\tbuildAgentsGuideDocument,\n\tensureCanonicalPlaybookPath,\n\twriteIosmGuideDocument,\n\twriteAgentsGuideDocument,\n\ttype AgentsGuideDocumentInput,\n\ttype IosmGuideDocumentInput,\n\ttype IosmPriorityChecklistItem,\n\ttype IosmGuideWriteResult,\n} from \"./guide.js\";\nexport { buildIosmContextBlock, findIosmGuidePath, loadIosmContext, loadIosmContextFromPath } from \"./context-loader.js\";\nexport {\n\tbuildIosmRuntimeDirective,\n\tisLikelyIosmOperationalPrompt,\n\tnormalizeIosmGoalFromPrompt,\n\tprepareIosmRuntimeContext,\n\ttype IosmRuntimeDirectiveInput,\n} from \"./runtime-context.js\";\nexport type {\n\tIosmApprovalStep,\n\tIosmAutomationActor,\n\tIosmBaselineReport,\n\tIosmCycleCapacityReport,\n\tIosmCycleReport,\n\tIosmCycleScope,\n\tIosmDecision,\n\tIosmEvidenceTier,\n\tIosmGateResult,\n\tIosmGuardrailViolation,\n\tIosmHypothesisCard,\n\tIosmHypothesisOutcome,\n\tIosmMetric,\n\tIosmMetricRecord,\n\tIosmMetricsHistoryEntry,\n\tIosmPhase,\n\tIosmPhasePointer,\n\tIosmPhaseReport,\n} from \"./types.js\";\n"]}
|
package/dist/iosm/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/iosm/init.ts"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EAGX,cAAc,EACd,gBAAgB,EAEhB,gBAAgB,EAEhB,MAAM,YAAY,CAAC;AAiHpB,UAAU,iBAAiB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,YAAY;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd;AAED,UAAU,cAAc;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACpB;AAoBD,UAAU,mBAAmB;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,WAAW,EAAE,cAAc,CAAC;IAC5B,kBAAkB,EAAE,cAAc,EAAE,CAAC;IACrC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,EAAE,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,kBAAkB,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC7C,YAAY,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC5B;AAsLD,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyF5F;AAu5BD,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/iosm/init.ts"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EAGX,cAAc,EACd,gBAAgB,EAEhB,gBAAgB,EAEhB,MAAM,YAAY,CAAC;AAiHpB,UAAU,iBAAiB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,YAAY;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd;AAED,UAAU,cAAc;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACpB;AAoBD,UAAU,mBAAmB;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,WAAW,EAAE,cAAc,CAAC;IAC5B,kBAAkB,EAAE,cAAc,EAAE,CAAC;IACrC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,EAAE,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,kBAAkB,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC7C,YAAY,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC5B;AAsLD,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyF5F;AAu5BD,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAsI9F"}
|
package/dist/iosm/init.js
CHANGED
|
@@ -5,7 +5,7 @@ import { stringify } from "yaml";
|
|
|
5
5
|
import { loadIosmConfig } from "./config.js";
|
|
6
6
|
import { calculateDecisionConfidence, calculateIosmIndex, calculateIosmMetricsFromRawMeasurements, createMetricRecord, hasCompleteNumericMetricRecord, hasCompleteTierMetricRecord, IOSM_METRICS, } from "./metrics.js";
|
|
7
7
|
import { listIosmCycles, planIosmCycle, recordIosmCycleHistory, } from "./cycle.js";
|
|
8
|
-
import { writeIosmGuideDocument } from "./guide.js";
|
|
8
|
+
import { writeAgentsGuideDocument, writeIosmGuideDocument } from "./guide.js";
|
|
9
9
|
import { getIosmBaselineReportPath, getIosmBaselinesDir, getIosmConfigPath, getIosmContractCatalogPath, getIosmCycleDir, getIosmCycleReportPath, getIosmCyclesDir, getIosmDecisionLogPath, getIosmHypothesesPath, getIosmInvariantCatalogPath, getIosmMetricsHistoryPath, getIosmPatternLibraryPath, getIosmPhaseReportPath, getIosmWaiverRegisterPath, getIosmWorkspaceDir, } from "./paths.js";
|
|
10
10
|
import { IOSM_PHASES } from "./types.js";
|
|
11
11
|
const MAX_ANALYZED_FILES = 6000;
|
|
@@ -1201,13 +1201,31 @@ export async function initIosmWorkspace(options = {}) {
|
|
|
1201
1201
|
sourceFileCount: analysis.source_file_count,
|
|
1202
1202
|
testFileCount: analysis.test_file_count,
|
|
1203
1203
|
docFileCount: analysis.doc_file_count,
|
|
1204
|
-
},
|
|
1204
|
+
}, true);
|
|
1205
1205
|
if (guideWrite.written) {
|
|
1206
1206
|
markPathByExistence(guideWrite.path, guideWrite.existed, result);
|
|
1207
1207
|
}
|
|
1208
1208
|
else {
|
|
1209
1209
|
pushUnique(result.skipped, guideWrite.path);
|
|
1210
1210
|
}
|
|
1211
|
+
const agentsWrite = writeAgentsGuideDocument({
|
|
1212
|
+
rootDir,
|
|
1213
|
+
cycleId: result.cycle?.cycleId,
|
|
1214
|
+
assessmentSource: "heuristic",
|
|
1215
|
+
iosmIndex: heuristicIndex,
|
|
1216
|
+
decisionConfidence: heuristicConfidence,
|
|
1217
|
+
goals: analysis.goals,
|
|
1218
|
+
filesAnalyzed: analysis.files_analyzed,
|
|
1219
|
+
sourceFileCount: analysis.source_file_count,
|
|
1220
|
+
testFileCount: analysis.test_file_count,
|
|
1221
|
+
docFileCount: analysis.doc_file_count,
|
|
1222
|
+
}, true);
|
|
1223
|
+
if (agentsWrite.written) {
|
|
1224
|
+
markPathByExistence(agentsWrite.path, agentsWrite.existed, result);
|
|
1225
|
+
}
|
|
1226
|
+
else {
|
|
1227
|
+
pushUnique(result.skipped, agentsWrite.path);
|
|
1228
|
+
}
|
|
1211
1229
|
if (result.cycle) {
|
|
1212
1230
|
try {
|
|
1213
1231
|
recordIosmCycleHistory(rootDir, result.cycle.cycleId);
|