iosm-cli 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +7 -7
- package/dist/iosm/guide.d.ts +14 -0
- package/dist/iosm/guide.d.ts.map +1 -1
- package/dist/iosm/guide.js +72 -1
- 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 +42 -6
- 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/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.3.1] - 2026-04-05
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Profile-aware `/init` flow** — `/init` now follows active profile semantics: `full/plan/meta` updates `AGENTS.md`; `iosm` initializes and synchronizes both `AGENTS.md` and `IOSM.md`
|
|
15
|
+
- **AGENTS managed sync block for IOSM** — introduced deterministic managed section in `AGENTS.md` during IOSM init, preserving user-authored content outside the managed block
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- **IOSM init file sync contract** — `iosm init` now performs guaranteed create/update for both `AGENTS.md` and `IOSM.md` to avoid missing physical playbook files
|
|
20
|
+
- **Interactive init control flow** — added dedicated standard-init session tracking with explicit “already running” guard and interrupt-safe cancellation path
|
|
21
|
+
- **CLI init status output** — `iosm init` now reports per-file state for `AGENTS.md` and `IOSM.md` (`created/updated/skipped/unchanged`)
|
|
22
|
+
|
|
23
|
+
### Documentation
|
|
24
|
+
|
|
25
|
+
- Updated README release marker and highlights to `0.3.1`
|
|
26
|
+
- Updated `docs/getting-started.md` and `docs/interactive-mode.md` to document profile-scoped `/init` behavior
|
|
27
|
+
|
|
28
|
+
### Tests
|
|
29
|
+
|
|
30
|
+
- Expanded coverage for IOSM/AGENTS guide writers and profile-aware `/init` behavior in interactive and init test suites
|
|
31
|
+
|
|
10
32
|
## [0.3.0] - 2026-04-05
|
|
11
33
|
|
|
12
34
|
### Added
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
<h1>IOSM CLI 0.3.
|
|
3
|
+
<h1>IOSM CLI 0.3.1</h1>
|
|
4
4
|
|
|
5
5
|
<p><strong>Terminal-native AI runtime for controlled, measurable engineering work on real codebases.</strong></p>
|
|
6
6
|
|
|
@@ -32,13 +32,13 @@ It is not a chat interface. It is a runtime.
|
|
|
32
32
|
|
|
33
33
|
---
|
|
34
34
|
|
|
35
|
-
## ✦ What's New in 0.3.
|
|
35
|
+
## ✦ What's New in 0.3.1
|
|
36
36
|
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
37
|
+
- Profile-aware `/init` contract: in `full/plan/meta` it initializes `AGENTS.md` only; in `iosm` profile it initializes and syncs both `AGENTS.md` and `IOSM.md`
|
|
38
|
+
- `iosm init` now guarantees physical upsert for both `AGENTS.md` and `IOSM.md` in IOSM workflow
|
|
39
|
+
- Added managed IOSM sync section in `AGENTS.md` (iosm profile) with safe in-place updates instead of destructive rewrites
|
|
40
|
+
- Improved `/init` runtime resilience: explicit in-progress guard and clean interrupt handling for long-running init sessions
|
|
41
|
+
- Updated docs for profile-scoped init behavior in interactive and getting-started guides
|
|
42
42
|
|
|
43
43
|
## ✦ Major Additions in 0.2.16
|
|
44
44
|
|
package/dist/iosm/guide.d.ts
CHANGED
|
@@ -25,7 +25,21 @@ export interface IosmGuideWriteResult {
|
|
|
25
25
|
existed: boolean;
|
|
26
26
|
written: boolean;
|
|
27
27
|
}
|
|
28
|
+
export interface AgentsGuideDocumentInput {
|
|
29
|
+
rootDir: string;
|
|
30
|
+
cycleId?: string;
|
|
31
|
+
assessmentSource: "heuristic" | "verified";
|
|
32
|
+
iosmIndex?: number | null;
|
|
33
|
+
decisionConfidence?: number | null;
|
|
34
|
+
goals?: string[];
|
|
35
|
+
filesAnalyzed?: number;
|
|
36
|
+
sourceFileCount?: number;
|
|
37
|
+
testFileCount?: number;
|
|
38
|
+
docFileCount?: number;
|
|
39
|
+
}
|
|
28
40
|
export declare function buildIosmPriorityChecklist(metrics: IosmMetricRecord<number | null>, limit?: number): IosmPriorityChecklistItem[];
|
|
29
41
|
export declare function buildIosmGuideDocument(input: IosmGuideDocumentInput): string;
|
|
42
|
+
export declare function buildAgentsGuideDocument(input: AgentsGuideDocumentInput, existingContent?: string): string;
|
|
30
43
|
export declare function writeIosmGuideDocument(input: IosmGuideDocumentInput, overwrite: boolean): IosmGuideWriteResult;
|
|
44
|
+
export declare function writeAgentsGuideDocument(input: AgentsGuideDocumentInput, overwrite: boolean): IosmGuideWriteResult;
|
|
31
45
|
//# sourceMappingURL=guide.d.ts.map
|
package/dist/iosm/guide.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide.d.ts","sourceRoot":"","sources":["../../src/iosm/guide.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"guide.d.ts","sourceRoot":"","sources":["../../src/iosm/guide.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAyC/D,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,WAAW,GAAG,UAAU,CAAC;IAC3C,OAAO,EAAE,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,WAAW,GAAG,UAAU,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAoBD,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,EACxC,KAAK,GAAE,MAAU,GACf,yBAAyB,EAAE,CAS7B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAmF5E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,wBAAwB,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CA8C1G;AAED,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,sBAAsB,EAC7B,SAAS,EAAE,OAAO,GAChB,oBAAoB,CAQtB;AAED,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,wBAAwB,EAC/B,SAAS,EAAE,OAAO,GAChB,oBAAoB,CAUtB"}
|
package/dist/iosm/guide.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { existsSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { basename, join } from "node:path";
|
|
2
3
|
import { IOSM_METRICS } from "./metrics.js";
|
|
3
4
|
import { getIosmGuidePath } from "./paths.js";
|
|
4
5
|
const METRIC_TITLES = {
|
|
@@ -35,6 +36,22 @@ function metricStatus(value) {
|
|
|
35
36
|
function metricSortScore(value) {
|
|
36
37
|
return value === null ? -1 : value;
|
|
37
38
|
}
|
|
39
|
+
const AGENTS_MANAGED_START = "<!-- iosm-init:managed:start -->";
|
|
40
|
+
const AGENTS_MANAGED_END = "<!-- iosm-init:managed:end -->";
|
|
41
|
+
function upsertManagedBlock(content, startMarker, endMarker, block) {
|
|
42
|
+
const startIndex = content.indexOf(startMarker);
|
|
43
|
+
const endIndex = content.indexOf(endMarker);
|
|
44
|
+
if (startIndex >= 0 && endIndex > startIndex) {
|
|
45
|
+
const suffixStart = endIndex + endMarker.length;
|
|
46
|
+
const prefix = content.slice(0, startIndex).trimEnd();
|
|
47
|
+
const suffix = content.slice(suffixStart).trimStart();
|
|
48
|
+
if (!suffix) {
|
|
49
|
+
return `${prefix}\n\n${block}\n`;
|
|
50
|
+
}
|
|
51
|
+
return `${prefix}\n\n${block}\n\n${suffix}\n`;
|
|
52
|
+
}
|
|
53
|
+
return `${content.trimEnd()}\n\n${block}\n`;
|
|
54
|
+
}
|
|
38
55
|
export function buildIosmPriorityChecklist(metrics, limit = 3) {
|
|
39
56
|
return IOSM_METRICS.map((metric) => ({
|
|
40
57
|
metric,
|
|
@@ -89,6 +106,50 @@ export function buildIosmGuideDocument(input) {
|
|
|
89
106
|
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
107
|
return `${lines.join("\n")}\n`;
|
|
91
108
|
}
|
|
109
|
+
export function buildAgentsGuideDocument(input, existingContent) {
|
|
110
|
+
const nowIso = new Date().toISOString();
|
|
111
|
+
const goals = input.goals ?? [];
|
|
112
|
+
const projectName = basename(input.rootDir);
|
|
113
|
+
const filesSummary = `${input.filesAnalyzed ?? "n/a"} total · ${input.sourceFileCount ?? "n/a"} src · ${input.testFileCount ?? "n/a"} tests · ${input.docFileCount ?? "n/a"} docs`;
|
|
114
|
+
const managedBlock = [
|
|
115
|
+
AGENTS_MANAGED_START,
|
|
116
|
+
"## IOSM Sync (managed)",
|
|
117
|
+
`- Updated: ${nowIso}`,
|
|
118
|
+
`- Assessment: ${input.assessmentSource}`,
|
|
119
|
+
`- Active cycle: ${input.cycleId ?? "none"}`,
|
|
120
|
+
`- IOSM-Index: ${formatMetricValue(input.iosmIndex)} (confidence: ${formatMetricValue(input.decisionConfidence)})`,
|
|
121
|
+
`- Files analyzed: ${filesSummary}`,
|
|
122
|
+
"",
|
|
123
|
+
"### Current focus",
|
|
124
|
+
...(goals.length > 0 ? goals.map((goal) => `- ${goal}`) : ["- Unknown"]),
|
|
125
|
+
"",
|
|
126
|
+
"### Notes",
|
|
127
|
+
"- This section is auto-updated by `iosm init`/`/init`.",
|
|
128
|
+
"- Keep project-specific contributor/agent rules outside this block.",
|
|
129
|
+
AGENTS_MANAGED_END,
|
|
130
|
+
].join("\n");
|
|
131
|
+
const normalizedExisting = existingContent?.trim();
|
|
132
|
+
if (normalizedExisting && normalizedExisting.length > 0) {
|
|
133
|
+
return upsertManagedBlock(normalizedExisting, AGENTS_MANAGED_START, AGENTS_MANAGED_END, managedBlock);
|
|
134
|
+
}
|
|
135
|
+
const lines = [
|
|
136
|
+
"# AGENTS.md",
|
|
137
|
+
"",
|
|
138
|
+
"This file captures practical collaboration rules for human and AI agents in this repository.",
|
|
139
|
+
"",
|
|
140
|
+
"## Project",
|
|
141
|
+
`- Name: ${projectName}`,
|
|
142
|
+
`- Root: ${input.rootDir}`,
|
|
143
|
+
"",
|
|
144
|
+
"## Working Agreement",
|
|
145
|
+
"- Inspect relevant files before editing.",
|
|
146
|
+
"- Keep edits minimal and verify with targeted checks.",
|
|
147
|
+
"- Prefer explicit commands and absolute file paths in reports.",
|
|
148
|
+
"",
|
|
149
|
+
managedBlock,
|
|
150
|
+
];
|
|
151
|
+
return `${lines.join("\n")}\n`;
|
|
152
|
+
}
|
|
92
153
|
export function writeIosmGuideDocument(input, overwrite) {
|
|
93
154
|
const filePath = getIosmGuidePath(input.rootDir);
|
|
94
155
|
const existed = existsSync(filePath);
|
|
@@ -98,4 +159,14 @@ export function writeIosmGuideDocument(input, overwrite) {
|
|
|
98
159
|
writeFileSync(filePath, buildIosmGuideDocument(input), "utf8");
|
|
99
160
|
return { path: filePath, existed, written: true };
|
|
100
161
|
}
|
|
162
|
+
export function writeAgentsGuideDocument(input, overwrite) {
|
|
163
|
+
const filePath = join(input.rootDir, "AGENTS.md");
|
|
164
|
+
const existed = existsSync(filePath);
|
|
165
|
+
if (existed && !overwrite) {
|
|
166
|
+
return { path: filePath, existed, written: false };
|
|
167
|
+
}
|
|
168
|
+
const existingContent = existed ? readFileSync(filePath, "utf8") : undefined;
|
|
169
|
+
writeFileSync(filePath, buildAgentsGuideDocument(input, existingContent), "utf8");
|
|
170
|
+
return { path: filePath, existed, written: true };
|
|
171
|
+
}
|
|
101
172
|
//# 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, 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\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 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\nexport function writeAgentsGuideDocument(\n\tinput: AgentsGuideDocumentInput,\n\toverwrite: boolean,\n): IosmGuideWriteResult {\n\tconst filePath = join(input.rootDir, \"AGENTS.md\");\n\tconst existed = existsSync(filePath);\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, 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,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, 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,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\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);
|