create-agentic-workspace 0.17.1 → 0.17.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/package.json +2 -2
- package/permission-floor.json +1 -1
- package/src/update.mjs +8 -3
- package/src/upgradeReport.mjs +11 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-agentic-workspace",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.2",
|
|
4
4
|
"description": "The pre-session bootstrap wizard for an Agentic Foundry workspace: declares (never grants) the permission floor, absorbs foundry-bootstrap.sh's out-of-session identity wiring, and scaffolds a seven-file schema-valid workspace. Zero dependencies, no lifecycle scripts, no telemetry.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"marketplace_name": "agentic-foundry",
|
|
35
35
|
"marketplace_repo": "lukasrepublic/agentic-foundry",
|
|
36
36
|
"plugin_name": "foundry",
|
|
37
|
-
"plugin_version": "1.17.
|
|
37
|
+
"plugin_version": "1.17.2",
|
|
38
38
|
"pins_researched": "2026-08-02"
|
|
39
39
|
}
|
|
40
40
|
}
|
package/permission-floor.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": 1,
|
|
3
3
|
"plugin_root_glob": "~/.claude/plugins/cache/*/foundry/*",
|
|
4
|
-
"generated_for_plugin_version": "1.17.
|
|
4
|
+
"generated_for_plugin_version": "1.17.2",
|
|
5
5
|
"entries": [
|
|
6
6
|
{
|
|
7
7
|
"rule": "Bash(~/.claude/plugins/cache/*/foundry/*/scripts/foundry-acceptance-contract-validate.py:*)",
|
package/src/update.mjs
CHANGED
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
} from './floorReconcile.mjs';
|
|
17
17
|
import { reconcileGitignorePlan, applyGitignorePlan, renderGitignoreRow } from './gitignoreReconcile.mjs';
|
|
18
18
|
import { planAmendmentsBackfill, applyAmendmentsBackfill, renderAmendmentsRow } from './amendmentsBackfill.mjs';
|
|
19
|
-
import { buildUpgradeReport, writeUpgradeReport, installedVersionBefore, NEXT_LINE } from './upgradeReport.mjs';
|
|
19
|
+
import { buildUpgradeReport, writeUpgradeReport, installedVersionBefore, versionOrNull, NEXT_LINE } from './upgradeReport.mjs';
|
|
20
20
|
import { planStatuslineWiring, applyStatuslineWiring, renderStatuslineRows, statuslineChanged } from './statuslineWiring.mjs';
|
|
21
21
|
import {
|
|
22
22
|
ALLOWED_CLAUDE_SUBCOMMANDS, resolveClaudeOnPath, runClaude,
|
|
@@ -72,7 +72,7 @@ function isInstalledInScopeFactory(registry, pluginKey, cwd) {
|
|
|
72
72
|
/** Run the update command end to end. Never throws — every failure path is caught and turned into
|
|
73
73
|
* a refusal-shaped exit 1 (or, for a bug, exit 1 with the error message), matching run.mjs's own
|
|
74
74
|
* contract. */
|
|
75
|
-
export async function runUpdate(argv, { cwd, configDir, homeDir, pkgDir, output, spawnEnv = process.env }) {
|
|
75
|
+
export async function runUpdate(argv, { cwd, configDir, homeDir, pkgDir, output, spawnEnv = process.env, updaterVersion = null }) {
|
|
76
76
|
const lines = [];
|
|
77
77
|
const print = (s) => {
|
|
78
78
|
lines.push(s);
|
|
@@ -103,7 +103,11 @@ export async function runUpdate(argv, { cwd, configDir, homeDir, pkgDir, output,
|
|
|
103
103
|
return { exitCode: 0, output: lines.join('\n') };
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
const
|
|
106
|
+
const corePkg = JSON.parse(fs.readFileSync(path.join(pkgDir, 'package.json'), 'utf-8'));
|
|
107
|
+
const pins = corePkg.foundry;
|
|
108
|
+
// ER #228: say WHICH updater this is, first, every run — a stale npx-cached updater looked
|
|
109
|
+
// exactly like a broken backfill until the report and the log carried the version.
|
|
110
|
+
print(`update-agentic-workspace ${versionOrNull(updaterVersion) || 'unknown'} (core create-agentic-workspace ${versionOrNull(corePkg.version) || 'unknown'}, built for plugin ${versionOrNull(pins.plugin_version) || 'unknown'})`);
|
|
107
111
|
const marketplaceName = pins.marketplace_name;
|
|
108
112
|
const marketplaceRepo = pins.marketplace_repo;
|
|
109
113
|
const pluginKey = `${pins.plugin_name}@${pins.marketplace_name}`;
|
|
@@ -339,6 +343,7 @@ export async function runUpdate(argv, { cwd, configDir, homeDir, pkgDir, output,
|
|
|
339
343
|
// named in the LAST line so the operator's next step is never a guess.
|
|
340
344
|
const report = buildUpgradeReport({
|
|
341
345
|
installedBefore, afterEntry, toPluginVersion: pins.plugin_version, phases, filePlan, amendmentsPlan,
|
|
346
|
+
updaterVersion, coreVersion: corePkg.version, updaterPluginVersion: pins.plugin_version,
|
|
342
347
|
});
|
|
343
348
|
const reportPath = writeUpgradeReport(physicalRoot, report);
|
|
344
349
|
print('');
|
package/src/upgradeReport.mjs
CHANGED
|
@@ -31,6 +31,7 @@ export function versionOrNull(v) {
|
|
|
31
31
|
* `amendmentsPlan` is the applied backfill plan (or null); `phases` is what renderSummary got. */
|
|
32
32
|
export function buildUpgradeReport({
|
|
33
33
|
installedBefore = null, afterEntry, toPluginVersion, phases, filePlan, amendmentsPlan, now = new Date(),
|
|
34
|
+
updaterVersion = null, coreVersion = null, updaterPluginVersion = null,
|
|
34
35
|
}) {
|
|
35
36
|
const seedRow = (filePlan || []).find((f) => f.seed);
|
|
36
37
|
return {
|
|
@@ -42,10 +43,18 @@ export function buildUpgradeReport({
|
|
|
42
43
|
// first install) makes the skill list only the current version's CHANGELOG section.
|
|
43
44
|
from_plugin_version: versionOrNull(installedBefore),
|
|
44
45
|
to_plugin_version: (afterEntry && versionOrNull(afterEntry.version)) || versionOrNull(toPluginVersion),
|
|
46
|
+
// ER #228 (v1.17.2): WHICH updater ran. A stale npx-cached updater was indistinguishable from a
|
|
47
|
+
// broken walk; the skill refuses a report whose updater was built for another plugin version.
|
|
48
|
+
updater_version: versionOrNull(updaterVersion),
|
|
49
|
+
core_version: versionOrNull(coreVersion),
|
|
50
|
+
updater_plugin_version: versionOrNull(updaterPluginVersion),
|
|
45
51
|
phases: (phases || []).map((p) => ({ name: p.name, verdict: p.verdict, ...(p.reason ? { reason: p.reason } : {}) })),
|
|
52
|
+
// `total` is the walk's denominator (ER #228): backfilled + present + skipped == total, so a
|
|
53
|
+
// walk that never opened a file cannot read as a clean pass.
|
|
46
54
|
amendments: amendmentsPlan
|
|
47
|
-
? { backfilled: amendmentsPlan.written ?? 0, present: amendmentsPlan.present, skipped: amendmentsPlan.skipped
|
|
48
|
-
|
|
55
|
+
? { backfilled: amendmentsPlan.written ?? 0, present: amendmentsPlan.present, skipped: amendmentsPlan.skipped,
|
|
56
|
+
total: amendmentsPlan.total ?? ((amendmentsPlan.written ?? 0) + amendmentsPlan.present + amendmentsPlan.skipped) }
|
|
57
|
+
: { backfilled: 0, present: 0, skipped: 0, total: 0 },
|
|
49
58
|
permissions_policy: seedRow ? (seedRow.action === 'create' ? 'created' : 'kept') : 'absent',
|
|
50
59
|
drifted: (filePlan || []).filter((f) => f.action === 'drifted').map((f) => f.relPath),
|
|
51
60
|
};
|