@pleri/olam-cli 0.1.158 → 0.1.160
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/dist/agent-stream/agent-sdk-to-chunks.js +3 -0
- package/dist/agent-stream/driver-runner.js +9 -4
- package/dist/agent-stream/host-driver-launch.js +48 -0
- package/dist/commands/doctor.d.ts +21 -10
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +95 -39
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/flywheel/check-persona-skeleton.d.ts +30 -2
- package/dist/commands/flywheel/check-persona-skeleton.d.ts.map +1 -1
- package/dist/commands/flywheel/check-persona-skeleton.js +143 -6
- package/dist/commands/flywheel/check-persona-skeleton.js.map +1 -1
- package/dist/commands/flywheel/diversity-check.d.ts +12 -2
- package/dist/commands/flywheel/diversity-check.d.ts.map +1 -1
- package/dist/commands/flywheel/diversity-check.js +56 -6
- package/dist/commands/flywheel/diversity-check.js.map +1 -1
- package/dist/commands/flywheel/index.d.ts.map +1 -1
- package/dist/commands/flywheel/index.js +2 -0
- package/dist/commands/flywheel/index.js.map +1 -1
- package/dist/commands/flywheel/install-shims.d.ts +36 -3
- package/dist/commands/flywheel/install-shims.d.ts.map +1 -1
- package/dist/commands/flywheel/install-shims.js +118 -7
- package/dist/commands/flywheel/install-shims.js.map +1 -1
- package/dist/commands/flywheel/k10-measure.d.ts +12 -2
- package/dist/commands/flywheel/k10-measure.d.ts.map +1 -1
- package/dist/commands/flywheel/k10-measure.js +55 -6
- package/dist/commands/flywheel/k10-measure.js.map +1 -1
- package/dist/commands/flywheel/migrate-overlays.d.ts +115 -0
- package/dist/commands/flywheel/migrate-overlays.d.ts.map +1 -0
- package/dist/commands/flywheel/migrate-overlays.js +766 -0
- package/dist/commands/flywheel/migrate-overlays.js.map +1 -0
- package/dist/commands/flywheel/sanitize-persona-output.d.ts +33 -2
- package/dist/commands/flywheel/sanitize-persona-output.d.ts.map +1 -1
- package/dist/commands/flywheel/sanitize-persona-output.js +94 -6
- package/dist/commands/flywheel/sanitize-persona-output.js.map +1 -1
- package/dist/commands/memory/index.d.ts.map +1 -1
- package/dist/commands/memory/index.js +2 -0
- package/dist/commands/memory/index.js.map +1 -1
- package/dist/commands/memory/install-hooks.d.ts +22 -0
- package/dist/commands/memory/install-hooks.d.ts.map +1 -0
- package/dist/commands/memory/install-hooks.js +156 -0
- package/dist/commands/memory/install-hooks.js.map +1 -0
- package/dist/commands/skills-doctor.js +2 -2
- package/dist/commands/skills-doctor.js.map +1 -1
- package/dist/commands/skills-source.d.ts.map +1 -1
- package/dist/commands/skills-source.js +10 -0
- package/dist/commands/skills-source.js.map +1 -1
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +169 -1
- package/dist/commands/skills.js.map +1 -1
- package/dist/image-digests.json +7 -7
- package/dist/index.js +3592 -905
- package/dist/index.js.map +1 -1
- package/dist/lib/flywheel-probes.d.ts +58 -0
- package/dist/lib/flywheel-probes.d.ts.map +1 -0
- package/dist/lib/flywheel-probes.js +163 -0
- package/dist/lib/flywheel-probes.js.map +1 -0
- package/dist/lib/host-side-proxy.d.ts +67 -0
- package/dist/lib/host-side-proxy.d.ts.map +1 -0
- package/dist/lib/host-side-proxy.js +177 -0
- package/dist/lib/host-side-proxy.js.map +1 -0
- package/dist/lib/shim-generator.d.ts +51 -0
- package/dist/lib/shim-generator.d.ts.map +1 -0
- package/dist/lib/shim-generator.js +88 -0
- package/dist/lib/shim-generator.js.map +1 -0
- package/dist/lib/skills-apply-overlays.d.ts +35 -0
- package/dist/lib/skills-apply-overlays.d.ts.map +1 -0
- package/dist/lib/skills-apply-overlays.js +243 -0
- package/dist/lib/skills-apply-overlays.js.map +1 -0
- package/dist/lib/upgrade-kubernetes.d.ts +13 -12
- package/dist/lib/upgrade-kubernetes.d.ts.map +1 -1
- package/dist/lib/upgrade-kubernetes.js +87 -134
- package/dist/lib/upgrade-kubernetes.js.map +1 -1
- package/dist/mcp-server.js +1106 -453
- package/hermes-bundle/version.json +1 -1
- package/host-cp/k8s/host-side/docker-socket-proxy.compose.yaml +58 -0
- package/host-cp/k8s/manifests/50-deployment.yaml +47 -70
- package/host-cp/k8s/manifests/auth-service/50-deployment.yaml +1 -1
- package/host-cp/k8s/manifests/docker-socket-proxy/60-service.yaml +37 -0
- package/host-cp/k8s/manifests/kg-service/50-deployment.yaml +1 -1
- package/host-cp/k8s/manifests/mcp-auth-service/50-deployment.yaml +1 -1
- package/host-cp/k8s/manifests/memory-service/30-configmap.yaml +11 -0
- package/host-cp/k8s/manifests/memory-service/35-configmap-iii-config.yaml +76 -0
- package/host-cp/k8s/manifests/memory-service/50-deployment.yaml +11 -1
- package/host-cp/src/crystallize-planning.mjs +261 -0
- package/host-cp/src/plan-chat-service.mjs +84 -2
- package/host-cp/src/planning-sessions.mjs +270 -0
- package/host-cp/src/server.mjs +9 -0
- package/host-cp/src/tasks-route.mjs +191 -0
- package/package.json +1 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bash shim generator for olam-flywheel backwards-compat layer.
|
|
3
|
+
*
|
|
4
|
+
* Generates deterministic bash shims that translate the positional-arg
|
|
5
|
+
* invocation chain skills currently use (e.g.
|
|
6
|
+
* `bash ~/.claude/scripts/emit-breadcrumb.sh "plan-hard" "<plan-slug>" ...`)
|
|
7
|
+
* into the new named-flag CLI:
|
|
8
|
+
* `olam flywheel emit-breadcrumb --skill plan-hard --plan <plan-slug> ...`
|
|
9
|
+
*
|
|
10
|
+
* Each shim:
|
|
11
|
+
* 1. Hardens PATH (adds common olam install locations).
|
|
12
|
+
* 2. Checks olam is reachable; exits 127 with actionable message if not.
|
|
13
|
+
* 3. Translates positional args to named flags per the script's spec.
|
|
14
|
+
* 4. exec's the olam CLI (passes signal handling + exit code through).
|
|
15
|
+
*
|
|
16
|
+
* Plan reference: docs/plans/olam-flywheel-cli-namespace/phase-a-tasks.md § A14
|
|
17
|
+
* Closes part of K1 OQ21a (positional → named-flag translation in shims).
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Registry of shim specs. Only includes scripts that chain skill prose
|
|
21
|
+
* actively invokes via bash (the others are Python imports, no bash shim
|
|
22
|
+
* needed). Extend this as more chain-skill invocation sites are migrated.
|
|
23
|
+
*/
|
|
24
|
+
export const SHIM_SPECS = Object.freeze([
|
|
25
|
+
{
|
|
26
|
+
basename: 'emit-breadcrumb.sh',
|
|
27
|
+
olamSubcommand: 'flywheel emit-breadcrumb',
|
|
28
|
+
minPositional: 6,
|
|
29
|
+
usage: 'emit-breadcrumb.sh <skill> <plan> <pattern> <severity> <persona> <edit> [notes] [pass] [project]',
|
|
30
|
+
args: [
|
|
31
|
+
{ position: 1, flag: 'skill', required: true },
|
|
32
|
+
{ position: 2, flag: 'plan', required: true },
|
|
33
|
+
{ position: 3, flag: 'pattern', required: true },
|
|
34
|
+
{ position: 4, flag: 'severity', required: true },
|
|
35
|
+
{ position: 5, flag: 'persona', required: true },
|
|
36
|
+
{ position: 6, flag: 'edit', required: true },
|
|
37
|
+
{ position: 7, flag: 'notes', required: false },
|
|
38
|
+
{ position: 8, flag: 'pass', required: false },
|
|
39
|
+
{ position: 9, flag: 'project', required: false },
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
]);
|
|
43
|
+
/**
|
|
44
|
+
* Generate the bash shim source for a given spec. Deterministic output —
|
|
45
|
+
* same input always produces the same bytes (golden-fixture-friendly).
|
|
46
|
+
*/
|
|
47
|
+
export function generateShim(spec) {
|
|
48
|
+
const argLines = [];
|
|
49
|
+
for (const arg of spec.args) {
|
|
50
|
+
if (arg.required) {
|
|
51
|
+
argLines.push(` --${arg.flag} "\$${arg.position}"`);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
argLines.push(` \${${arg.position}:+--${arg.flag} "\$${arg.position}"}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const argsBlock = argLines.join(' \\\n');
|
|
58
|
+
return `#!/usr/bin/env bash
|
|
59
|
+
# AUTO-GENERATED by \`olam flywheel install-shims\`
|
|
60
|
+
# DO NOT EDIT — regenerated on every install-shims run.
|
|
61
|
+
#
|
|
62
|
+
# Delegates to \`olam ${spec.olamSubcommand}\`; closes the K1 FS-2 cliff
|
|
63
|
+
# by translating the legacy positional-arg interface to the new named-flag CLI.
|
|
64
|
+
set -euo pipefail
|
|
65
|
+
|
|
66
|
+
# Harden PATH for common olam install locations (cron + hook contexts may
|
|
67
|
+
# have a minimal PATH; this preserves operator-installed shells).
|
|
68
|
+
PATH="\$HOME/.local/bin:\$HOME/.olam/bin:/opt/homebrew/bin:/usr/local/bin:\$PATH"
|
|
69
|
+
|
|
70
|
+
if ! command -v olam >/dev/null 2>&1; then
|
|
71
|
+
echo "[shim] olam not found on PATH; cannot delegate ${spec.olamSubcommand}" >&2
|
|
72
|
+
echo "[shim] install olam (https://github.com/pleri/olam) and run 'olam flywheel install-shims' to refresh" >&2
|
|
73
|
+
exit 127
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
if [ "\$#" -lt ${spec.minPositional} ]; then
|
|
77
|
+
echo "Usage: ${spec.usage}" >&2
|
|
78
|
+
exit 1
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
exec olam ${spec.olamSubcommand} \\
|
|
82
|
+
${argsBlock}
|
|
83
|
+
`;
|
|
84
|
+
}
|
|
85
|
+
export function lookupShimSpec(basename) {
|
|
86
|
+
return SHIM_SPECS.find((s) => s.basename === basename);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=shim-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shim-generator.js","sourceRoot":"","sources":["../../src/lib/shim-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAwBH;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAwB,MAAM,CAAC,MAAM,CAAC;IAC3D;QACE,QAAQ,EAAE,oBAAoB;QAC9B,cAAc,EAAE,0BAA0B;QAC1C,aAAa,EAAE,CAAC;QAChB,KAAK,EAAE,kGAAkG;QACzG,IAAI,EAAE;YACJ,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9C,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC7C,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;YAChD,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;YACjD,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;YAChD,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC7C,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC/C,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC9C,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;SAClD;KACF;CACF,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,QAAQ,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO;;;;wBAIe,IAAI,CAAC,cAAc;;;;;;;;;2DASgB,IAAI,CAAC,cAAc;;;;;iBAK7D,IAAI,CAAC,aAAa;mBAChB,IAAI,CAAC,KAAK;;;;YAIjB,IAAI,CAAC,cAAc;EAC7B,SAAS;CACV,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `olam skills apply-overlays` orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* Port of `shared/engineering/scripts/apply-overlays.py`'s merge_skills +
|
|
5
|
+
* merge_agents + main functions. Walks ~/.claude/skills.overrides/ and
|
|
6
|
+
* ~/.claude/agents.overrides/, applies section-as-unit overlays per
|
|
7
|
+
* markdown-merger, runs post-merge sanitization, emits breadcrumbs.
|
|
8
|
+
*
|
|
9
|
+
* Reuses olam primitives:
|
|
10
|
+
* - mergeMarkdown from @olam/core/src/lib/markdown-merger.js (the section merger)
|
|
11
|
+
* - sanitize from packages/cli/src/commands/flywheel/sanitize-persona-output.ts
|
|
12
|
+
* (called in-process; no subprocess shell-out)
|
|
13
|
+
* - withFileLock from @olam/core/src/lib/file-lock.js (advisory locking)
|
|
14
|
+
*
|
|
15
|
+
* Plan reference: docs/plans/olam-flywheel-cli-namespace/phase-a-tasks.md § A9
|
|
16
|
+
*/
|
|
17
|
+
export interface ApplyOverlaysOptions {
|
|
18
|
+
dryRun?: boolean;
|
|
19
|
+
fixtureRoot?: string;
|
|
20
|
+
claudeDir?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ApplyOverlaysResult {
|
|
23
|
+
rc: number;
|
|
24
|
+
skillsMerged: number;
|
|
25
|
+
agentsMerged: number;
|
|
26
|
+
newAgentsCreated: number;
|
|
27
|
+
schemaHalts: number;
|
|
28
|
+
renameHalts: number;
|
|
29
|
+
sanitizeHalts: number;
|
|
30
|
+
messages: string[];
|
|
31
|
+
}
|
|
32
|
+
export declare function applyOverlays(opts?: ApplyOverlaysOptions): Promise<ApplyOverlaysResult>;
|
|
33
|
+
export declare function formatSummary(result: ApplyOverlaysResult): string;
|
|
34
|
+
export declare function basenameOf(p: string): string;
|
|
35
|
+
//# sourceMappingURL=skills-apply-overlays.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-apply-overlays.d.ts","sourceRoot":"","sources":["../../src/lib/skills-apply-overlays.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAoBH,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAkMD,wBAAsB,aAAa,CAAC,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqCjG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAajE;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `olam skills apply-overlays` orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* Port of `shared/engineering/scripts/apply-overlays.py`'s merge_skills +
|
|
5
|
+
* merge_agents + main functions. Walks ~/.claude/skills.overrides/ and
|
|
6
|
+
* ~/.claude/agents.overrides/, applies section-as-unit overlays per
|
|
7
|
+
* markdown-merger, runs post-merge sanitization, emits breadcrumbs.
|
|
8
|
+
*
|
|
9
|
+
* Reuses olam primitives:
|
|
10
|
+
* - mergeMarkdown from @olam/core/src/lib/markdown-merger.js (the section merger)
|
|
11
|
+
* - sanitize from packages/cli/src/commands/flywheel/sanitize-persona-output.ts
|
|
12
|
+
* (called in-process; no subprocess shell-out)
|
|
13
|
+
* - withFileLock from @olam/core/src/lib/file-lock.js (advisory locking)
|
|
14
|
+
*
|
|
15
|
+
* Plan reference: docs/plans/olam-flywheel-cli-namespace/phase-a-tasks.md § A9
|
|
16
|
+
*/
|
|
17
|
+
import { copyFileSync, existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, readlinkSync, rmSync, statSync, writeFileSync, } from 'node:fs';
|
|
18
|
+
import { homedir } from 'node:os';
|
|
19
|
+
import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
20
|
+
import { mergeMarkdown, parseFrontmatter } from '@olam/core/src/lib/markdown-merger.js';
|
|
21
|
+
import { withFileLock } from '@olam/core/src/lib/file-lock.js';
|
|
22
|
+
import { sanitize } from '../commands/flywheel/sanitize-persona-output.js';
|
|
23
|
+
function claudeRoot(opts) {
|
|
24
|
+
return opts.claudeDir ?? opts.fixtureRoot ?? join(homedir(), '.claude');
|
|
25
|
+
}
|
|
26
|
+
function ensureRealDir(p) {
|
|
27
|
+
if (!existsSync(p)) {
|
|
28
|
+
mkdirSync(p, { recursive: true });
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const stat = lstatSync(p);
|
|
32
|
+
if (stat.isSymbolicLink()) {
|
|
33
|
+
// Upgrade from symlink to real dir while preserving children.
|
|
34
|
+
const targetRaw = readlinkSync(p);
|
|
35
|
+
const target = isAbsolute(targetRaw) ? targetRaw : resolve(dirname(p), targetRaw);
|
|
36
|
+
rmSync(p);
|
|
37
|
+
mkdirSync(p, { recursive: true });
|
|
38
|
+
if (existsSync(target) && statSync(target).isDirectory()) {
|
|
39
|
+
// Re-mirror the symlink's contents as real files (per-file symlinks
|
|
40
|
+
// for entries we don't overwrite — matches the apply-overlays.py
|
|
41
|
+
// semantics that turn the bare-symlinked skill dir into a real dir
|
|
42
|
+
// when overlays are applied to it).
|
|
43
|
+
for (const entry of readdirSync(target)) {
|
|
44
|
+
const src = join(target, entry);
|
|
45
|
+
const dest = join(p, entry);
|
|
46
|
+
const srcStat = lstatSync(src);
|
|
47
|
+
if (srcStat.isDirectory()) {
|
|
48
|
+
// Symlink the subdir back to upstream (cheap recursive reference).
|
|
49
|
+
// apply-overlays.py creates per-file symlinks; for nested dirs
|
|
50
|
+
// we keep that intent by symlinking the directory.
|
|
51
|
+
try {
|
|
52
|
+
(lstatSync(p));
|
|
53
|
+
// Use absolute path symlink for clarity.
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// ignore
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Use per-file symlinks back to upstream (apply-overlays.py § per-file symlinks).
|
|
60
|
+
// For now: leave files alone — they get filled in when overlay applies.
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (!stat.isDirectory()) {
|
|
66
|
+
throw new Error(`expected directory at ${p}, found other file type`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function postMergeSanitize(mergedText, label) {
|
|
70
|
+
const result = sanitize(mergedText);
|
|
71
|
+
if (result.passed)
|
|
72
|
+
return { ok: true };
|
|
73
|
+
return { ok: false, reason: `[post-merge-sanitize] ${label} merged output failed sanitizer: ${result.reason}` };
|
|
74
|
+
}
|
|
75
|
+
function mergeOne(upstreamPath, overlayPath, destPath, label, dryRun, messages) {
|
|
76
|
+
const upstreamText = readFileSync(upstreamPath, 'utf8');
|
|
77
|
+
const overlayText = readFileSync(overlayPath, 'utf8');
|
|
78
|
+
const result = mergeMarkdown(upstreamText, overlayText, label, upstreamPath, overlayPath);
|
|
79
|
+
if ('error' in result) {
|
|
80
|
+
messages.push(`ERROR ${result.error.reason}`);
|
|
81
|
+
return { ok: false, kind: 'schema' };
|
|
82
|
+
}
|
|
83
|
+
const sanitizeResult = postMergeSanitize(result.merged, label);
|
|
84
|
+
if (!sanitizeResult.ok) {
|
|
85
|
+
messages.push(`ERROR ${sanitizeResult.reason}`);
|
|
86
|
+
return { ok: false, kind: 'sanitize' };
|
|
87
|
+
}
|
|
88
|
+
if (!dryRun) {
|
|
89
|
+
mkdirSync(dirname(destPath), { recursive: true });
|
|
90
|
+
writeFileSync(destPath, result.merged, 'utf8');
|
|
91
|
+
}
|
|
92
|
+
messages.push(`MERGED ${label} → ${destPath}${dryRun ? ' (dry-run)' : ''}`);
|
|
93
|
+
return { ok: true };
|
|
94
|
+
}
|
|
95
|
+
function isNewAgentOverlay(overlayPath) {
|
|
96
|
+
try {
|
|
97
|
+
const text = readFileSync(overlayPath, 'utf8');
|
|
98
|
+
const { fm } = parseFrontmatter(text);
|
|
99
|
+
return fm['overlay-intent'] === 'new-agent';
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function copyNewAgent(overlayPath, destPath, label, dryRun, messages) {
|
|
106
|
+
if (!dryRun) {
|
|
107
|
+
mkdirSync(dirname(destPath), { recursive: true });
|
|
108
|
+
copyFileSync(overlayPath, destPath);
|
|
109
|
+
}
|
|
110
|
+
messages.push(`NEW-AGENT ${label} → ${destPath}${dryRun ? ' (dry-run)' : ''}`);
|
|
111
|
+
}
|
|
112
|
+
function walkSkillsOverlays(skillsOverridesDir, skillsDir, opts, result) {
|
|
113
|
+
if (!existsSync(skillsOverridesDir))
|
|
114
|
+
return;
|
|
115
|
+
for (const skillName of readdirSync(skillsOverridesDir)) {
|
|
116
|
+
const overlaySkillDir = join(skillsOverridesDir, skillName);
|
|
117
|
+
if (!statSync(overlaySkillDir).isDirectory())
|
|
118
|
+
continue;
|
|
119
|
+
const upstreamSkillDir = join(skillsDir, skillName);
|
|
120
|
+
if (!existsSync(upstreamSkillDir)) {
|
|
121
|
+
result.messages.push(`SKIP ${skillName}: no upstream skill at ${upstreamSkillDir} (skill overlays require an upstream skill dir)`);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
ensureRealDir(upstreamSkillDir);
|
|
125
|
+
// Walk every file in the overlay skill dir recursively.
|
|
126
|
+
walkOverlayTree(overlaySkillDir, upstreamSkillDir, `skill ${skillName}`, opts, result, false);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function walkOverlayTree(overlayRoot, upstreamRoot, labelPrefix, opts, result, isAgentsContext) {
|
|
130
|
+
const stack = [overlayRoot];
|
|
131
|
+
while (stack.length > 0) {
|
|
132
|
+
const current = stack.pop();
|
|
133
|
+
for (const entry of readdirSync(current)) {
|
|
134
|
+
const overlayPath = join(current, entry);
|
|
135
|
+
const stat = lstatSync(overlayPath);
|
|
136
|
+
if (stat.isDirectory()) {
|
|
137
|
+
stack.push(overlayPath);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (!stat.isFile() && !stat.isSymbolicLink())
|
|
141
|
+
continue;
|
|
142
|
+
const rel = relative(overlayRoot, overlayPath);
|
|
143
|
+
const upstreamPath = join(upstreamRoot, rel);
|
|
144
|
+
const label = `${labelPrefix} ${rel}`;
|
|
145
|
+
if (!entry.endsWith('.md')) {
|
|
146
|
+
// Non-markdown files: copy verbatim (matches apply-overlays.py).
|
|
147
|
+
if (!opts.dryRun) {
|
|
148
|
+
mkdirSync(dirname(upstreamPath), { recursive: true });
|
|
149
|
+
copyFileSync(overlayPath, upstreamPath);
|
|
150
|
+
}
|
|
151
|
+
result.messages.push(`COPY ${label} → ${upstreamPath}${opts.dryRun === true ? ' (dry-run)' : ''}`);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
if (!existsSync(upstreamPath)) {
|
|
155
|
+
if (isAgentsContext && isNewAgentOverlay(overlayPath)) {
|
|
156
|
+
copyNewAgent(overlayPath, upstreamPath, label, opts.dryRun === true, result.messages);
|
|
157
|
+
result.newAgentsCreated += 1;
|
|
158
|
+
}
|
|
159
|
+
else if (isAgentsContext) {
|
|
160
|
+
result.messages.push(`ERROR [rename-halt] ${label}: overlay has no upstream counterpart at ${upstreamPath} and no \`overlay-intent: new-agent\` marker`);
|
|
161
|
+
result.renameHalts += 1;
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
// Skill-context: overlay-only files (e.g. new references) copy through.
|
|
165
|
+
if (!opts.dryRun) {
|
|
166
|
+
mkdirSync(dirname(upstreamPath), { recursive: true });
|
|
167
|
+
copyFileSync(overlayPath, upstreamPath);
|
|
168
|
+
}
|
|
169
|
+
result.messages.push(`NEW-FILE ${label} → ${upstreamPath}${opts.dryRun === true ? ' (dry-run)' : ''}`);
|
|
170
|
+
}
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const merge = mergeOne(upstreamPath, overlayPath, upstreamPath, label, opts.dryRun === true, result.messages);
|
|
174
|
+
if (merge.ok) {
|
|
175
|
+
if (isAgentsContext)
|
|
176
|
+
result.agentsMerged += 1;
|
|
177
|
+
else
|
|
178
|
+
result.skillsMerged += 1;
|
|
179
|
+
}
|
|
180
|
+
else if (merge.kind === 'schema') {
|
|
181
|
+
result.schemaHalts += 1;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
result.sanitizeHalts += 1;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function walkAgentsOverlays(agentsOverridesDir, agentsDir, opts, result) {
|
|
190
|
+
if (!existsSync(agentsOverridesDir))
|
|
191
|
+
return;
|
|
192
|
+
ensureRealDir(agentsDir);
|
|
193
|
+
walkOverlayTree(agentsOverridesDir, agentsDir, 'agent', opts, result, true);
|
|
194
|
+
}
|
|
195
|
+
export async function applyOverlays(opts = {}) {
|
|
196
|
+
const root = claudeRoot(opts);
|
|
197
|
+
const skillsDir = join(root, 'skills');
|
|
198
|
+
const agentsDir = join(root, 'agents');
|
|
199
|
+
const skillsOverridesDir = join(root, 'skills.overrides');
|
|
200
|
+
const agentsOverridesDir = join(root, 'agents.overrides');
|
|
201
|
+
const result = {
|
|
202
|
+
rc: 0,
|
|
203
|
+
skillsMerged: 0,
|
|
204
|
+
agentsMerged: 0,
|
|
205
|
+
newAgentsCreated: 0,
|
|
206
|
+
schemaHalts: 0,
|
|
207
|
+
renameHalts: 0,
|
|
208
|
+
sanitizeHalts: 0,
|
|
209
|
+
messages: [],
|
|
210
|
+
};
|
|
211
|
+
// Advisory lock at the claude-root level — prevents two concurrent
|
|
212
|
+
// apply-overlays runs from interleaving writes.
|
|
213
|
+
await withFileLock(root, () => {
|
|
214
|
+
walkSkillsOverlays(skillsOverridesDir, skillsDir, opts, result);
|
|
215
|
+
walkAgentsOverlays(agentsOverridesDir, agentsDir, opts, result);
|
|
216
|
+
}, {
|
|
217
|
+
lockFilename: '.apply-overlays.lock',
|
|
218
|
+
reason: `apply-overlays root=${root} dryRun=${opts.dryRun === true}`,
|
|
219
|
+
acquireTimeoutMs: 15_000,
|
|
220
|
+
});
|
|
221
|
+
if (result.schemaHalts > 0 || result.renameHalts > 0 || result.sanitizeHalts > 0) {
|
|
222
|
+
result.rc = 1;
|
|
223
|
+
}
|
|
224
|
+
return result;
|
|
225
|
+
}
|
|
226
|
+
export function formatSummary(result) {
|
|
227
|
+
const lines = [
|
|
228
|
+
...result.messages,
|
|
229
|
+
'',
|
|
230
|
+
`skills merged: ${result.skillsMerged}`,
|
|
231
|
+
`agents merged: ${result.agentsMerged}`,
|
|
232
|
+
`new agents created: ${result.newAgentsCreated}`,
|
|
233
|
+
`schema-mismatch halts: ${result.schemaHalts}`,
|
|
234
|
+
`rename halts: ${result.renameHalts}`,
|
|
235
|
+
`sanitize halts: ${result.sanitizeHalts}`,
|
|
236
|
+
`rc: ${result.rc}`,
|
|
237
|
+
];
|
|
238
|
+
return lines.join('\n') + '\n';
|
|
239
|
+
}
|
|
240
|
+
export function basenameOf(p) {
|
|
241
|
+
return basename(p);
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=skills-apply-overlays.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-apply-overlays.js","sourceRoot":"","sources":["../../src/lib/skills-apply-overlays.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,12 +23,19 @@
|
|
|
23
23
|
* D27 — audit log entry (phase2.flag_removed) emitted per upgrade run
|
|
24
24
|
*
|
|
25
25
|
* Step order (Phase D — kubernetes substrate, Phase 2 GA):
|
|
26
|
-
* 0.5 D4 k3d node docker socket bind-mount preflight (Decision #11 backward-compat surface)
|
|
27
26
|
* 0 probeKubernetesApiReachable — 5s timeout kubectl cluster-info
|
|
27
|
+
* (Step 0.5 D4 k3d node bind-mount preflight REMOVED in
|
|
28
|
+
* olam-k3d-on-mac-substrate-decision Phase B B3 — R3-A retracted.)
|
|
28
29
|
* 0.5b B4 ensureK8sBootstrap (namespace + RBAC + ConfigMap + PVC + secrets)
|
|
29
30
|
* 0.6 R3-C create/update ghcr-pull imagePullSecret in olam namespace (when GH_TOKEN available)
|
|
30
31
|
* NOTE: relocated from pre-step 0.4 to post-bootstrap (R4-W2-A) — the
|
|
31
32
|
* `olam` namespace must exist before kubectl can create the secret.
|
|
33
|
+
* 0.7 olam-k3d-on-mac-substrate-decision Phase A — host-side docker-
|
|
34
|
+
* socket-proxy auto-start on macOS (Decision #1 + #3). Linux substrate
|
|
35
|
+
* is a no-op. Resolves R4-W2-F (virtiofs ENOTSUP on stat of docker.sock
|
|
36
|
+
* hostPath bind mounts) by routing host-cp's docker access through a
|
|
37
|
+
* host-side proxy container reachable via in-cluster ExternalName
|
|
38
|
+
* Service (host.k3d.internal:2375).
|
|
32
39
|
* 1 D10 context-allowlist + OLAM_K8S_CONTEXT_ACK strict-equality byte-for-byte
|
|
33
40
|
* 2 D12 Secret pre-check (olam-host-cp-secret; base64-decode; key-name check)
|
|
34
41
|
* 2.6 C2 per-peripheral Secret pre-check (iterates PERIPHERALS; unconditional — D5)
|
|
@@ -100,9 +107,11 @@ export interface UpgradeKubernetesDeps {
|
|
|
100
107
|
*/
|
|
101
108
|
readonly getClusterServerUrlImpl?: () => Promise<string | null>;
|
|
102
109
|
/**
|
|
103
|
-
* D7
|
|
104
|
-
*
|
|
105
|
-
*
|
|
110
|
+
* D7 (RETIRED in olam-k3d-on-mac-substrate-decision Phase B B3): the
|
|
111
|
+
* docker socket accessibility preflight is gone (host-cp no longer mounts
|
|
112
|
+
* docker.sock — it talks TCP to docker-socket-proxy). Field kept in the
|
|
113
|
+
* interface so existing test injections compile; the value is never read.
|
|
114
|
+
* New tests should not inject this field.
|
|
106
115
|
*/
|
|
107
116
|
readonly checkDockerSocketImpl?: (context: string) => Promise<boolean>;
|
|
108
117
|
/**
|
|
@@ -126,14 +135,6 @@ export interface UpgradeKubernetesDeps {
|
|
|
126
135
|
*/
|
|
127
136
|
readonly ghTokenOverride?: string;
|
|
128
137
|
readonly ghTokenOverrideActive?: boolean;
|
|
129
|
-
/**
|
|
130
|
-
* Phase D D4: override for k3d node mount detection (step 0.5 preflight).
|
|
131
|
-
* Returns 'new-form' when /host-colima/ bind is present (correct),
|
|
132
|
-
* 'old-form' when /var/run/docker.sock direct file-bind is present (broken on colima),
|
|
133
|
-
* or 'none' when neither is detectable (non-k3d or bare k3s cluster — warn only).
|
|
134
|
-
* Tests inject a mock to avoid real `docker inspect` invocations.
|
|
135
|
-
*/
|
|
136
|
-
readonly checkK3dNodeMountsImpl?: () => Promise<'new-form' | 'old-form' | 'none'>;
|
|
137
138
|
}
|
|
138
139
|
export interface UpgradeKubernetesOpts {
|
|
139
140
|
readonly forceRefreshManifests?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade-kubernetes.d.ts","sourceRoot":"","sources":["../../src/lib/upgrade-kubernetes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"upgrade-kubernetes.d.ts","sourceRoot":"","sources":["../../src/lib/upgrade-kubernetes.ts"],"names":[],"mappings":"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"}
|