agentopology 0.9.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -19
- package/dist/__tests__/e2e/action-guard.test.d.ts +13 -0
- package/dist/__tests__/e2e/action-guard.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/action-guard.test.js +299 -0
- package/dist/__tests__/e2e/action-guard.test.js.map +1 -0
- package/dist/__tests__/e2e/conformance.test.d.ts +13 -0
- package/dist/__tests__/e2e/conformance.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/conformance.test.js +109 -0
- package/dist/__tests__/e2e/conformance.test.js.map +1 -0
- package/dist/__tests__/e2e/contract-drift.test.d.ts +11 -0
- package/dist/__tests__/e2e/contract-drift.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/contract-drift.test.js +142 -0
- package/dist/__tests__/e2e/contract-drift.test.js.map +1 -0
- package/dist/__tests__/e2e/guard-check.test.d.ts +9 -0
- package/dist/__tests__/e2e/guard-check.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/guard-check.test.js +316 -0
- package/dist/__tests__/e2e/guard-check.test.js.map +1 -0
- package/dist/__tests__/e2e/guard-target.test.d.ts +11 -0
- package/dist/__tests__/e2e/guard-target.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/guard-target.test.js +198 -0
- package/dist/__tests__/e2e/guard-target.test.js.map +1 -0
- package/dist/__tests__/e2e/inventory.test.d.ts +18 -0
- package/dist/__tests__/e2e/inventory.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/inventory.test.js +187 -0
- package/dist/__tests__/e2e/inventory.test.js.map +1 -0
- package/dist/__tests__/e2e/matcher.test.d.ts +14 -0
- package/dist/__tests__/e2e/matcher.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/matcher.test.js +145 -0
- package/dist/__tests__/e2e/matcher.test.js.map +1 -0
- package/dist/__tests__/e2e/step-check.test.d.ts +9 -0
- package/dist/__tests__/e2e/step-check.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/step-check.test.js +158 -0
- package/dist/__tests__/e2e/step-check.test.js.map +1 -0
- package/dist/__tests__/e2e/strength.test.d.ts +17 -0
- package/dist/__tests__/e2e/strength.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/strength.test.js +130 -0
- package/dist/__tests__/e2e/strength.test.js.map +1 -0
- package/dist/__tests__/e2e/verified-on.test.d.ts +2 -0
- package/dist/__tests__/e2e/verified-on.test.d.ts.map +1 -0
- package/dist/__tests__/e2e/verified-on.test.js +57 -0
- package/dist/__tests__/e2e/verified-on.test.js.map +1 -0
- package/dist/__tests__/open-findings.test.js +1 -0
- package/dist/__tests__/open-findings.test.js.map +1 -1
- package/dist/bindings/__tests__/bindings.test.js +6 -686
- package/dist/bindings/__tests__/bindings.test.js.map +1 -1
- package/dist/bindings/__tests__/defaults-agreement.test.js +0 -12
- package/dist/bindings/__tests__/defaults-agreement.test.js.map +1 -1
- package/dist/bindings/__tests__/hook-command.test.js +2 -2
- package/dist/bindings/__tests__/hook-command.test.js.map +1 -1
- package/dist/bindings/__tests__/mod-plugin.test.js +2 -2
- package/dist/bindings/__tests__/mod-plugin.test.js.map +1 -1
- package/dist/bindings/claude-code.d.ts +45 -1
- package/dist/bindings/claude-code.d.ts.map +1 -1
- package/dist/bindings/claude-code.js +181 -15
- package/dist/bindings/claude-code.js.map +1 -1
- package/dist/bindings/index.d.ts +5 -5
- package/dist/bindings/index.d.ts.map +1 -1
- package/dist/bindings/index.js +9 -16
- package/dist/bindings/index.js.map +1 -1
- package/dist/bindings/types.d.ts +6 -1
- package/dist/bindings/types.d.ts.map +1 -1
- package/dist/cli/__tests__/cli.test.js +25 -0
- package/dist/cli/__tests__/cli.test.js.map +1 -1
- package/dist/cli/index.js +222 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/conformance/claude-code.d.ts +99 -0
- package/dist/conformance/claude-code.d.ts.map +1 -0
- package/dist/conformance/claude-code.js +242 -0
- package/dist/conformance/claude-code.js.map +1 -0
- package/dist/conformance/extract.d.ts +70 -0
- package/dist/conformance/extract.d.ts.map +1 -0
- package/dist/conformance/extract.js +185 -0
- package/dist/conformance/extract.js.map +1 -0
- package/dist/docs/content.d.ts.map +1 -1
- package/dist/docs/content.js +57 -32
- package/dist/docs/content.js.map +1 -1
- package/dist/guard/check.d.ts +53 -0
- package/dist/guard/check.d.ts.map +1 -0
- package/dist/guard/check.js +366 -0
- package/dist/guard/check.js.map +1 -0
- package/dist/guard/target.d.ts +45 -0
- package/dist/guard/target.d.ts.map +1 -0
- package/dist/guard/target.js +168 -0
- package/dist/guard/target.js.map +1 -0
- package/dist/import/__tests__/import.test.js +0 -554
- package/dist/import/__tests__/import.test.js.map +1 -1
- package/dist/import/index.d.ts +0 -1
- package/dist/import/index.d.ts.map +1 -1
- package/dist/import/index.js +1 -7
- package/dist/import/index.js.map +1 -1
- package/dist/import/serializer.d.ts.map +1 -1
- package/dist/import/serializer.js +41 -0
- package/dist/import/serializer.js.map +1 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/inventory/index.d.ts +65 -0
- package/dist/inventory/index.d.ts.map +1 -0
- package/dist/inventory/index.js +272 -0
- package/dist/inventory/index.js.map +1 -0
- package/dist/parser/ast.d.ts +46 -0
- package/dist/parser/ast.d.ts.map +1 -1
- package/dist/parser/ast.js.map +1 -1
- package/dist/parser/index.d.ts +6 -1
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +66 -4
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/known-fields.d.ts +3 -0
- package/dist/parser/known-fields.d.ts.map +1 -1
- package/dist/parser/known-fields.js +5 -3
- package/dist/parser/known-fields.js.map +1 -1
- package/dist/parser/ledger.d.ts +36 -0
- package/dist/parser/ledger.d.ts.map +1 -0
- package/dist/parser/ledger.js +72 -0
- package/dist/parser/ledger.js.map +1 -0
- package/dist/parser/run.d.ts +6 -0
- package/dist/parser/run.d.ts.map +1 -1
- package/dist/parser/run.js +10 -0
- package/dist/parser/run.js.map +1 -1
- package/dist/parser/validator.d.ts.map +1 -1
- package/dist/parser/validator.js +255 -1
- package/dist/parser/validator.js.map +1 -1
- package/dist/scaffold/manifest.d.ts.map +1 -1
- package/dist/scaffold/manifest.js +0 -8
- package/dist/scaffold/manifest.js.map +1 -1
- package/dist/scaffold/merge.d.ts.map +1 -1
- package/dist/scaffold/merge.js +1 -3
- package/dist/scaffold/merge.js.map +1 -1
- package/dist/step/check.d.ts +56 -0
- package/dist/step/check.d.ts.map +1 -0
- package/dist/step/check.js +125 -0
- package/dist/step/check.js.map +1 -0
- package/dist/sync/index.d.ts +0 -2
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +0 -109
- package/dist/sync/index.js.map +1 -1
- package/package.json +3 -1
- package/spec/claude-code/README.md +19 -0
- package/spec/claude-code/hooks-contract.2.1.295.json +143 -0
- package/spec/claude-code/hooks-contract.json +142 -0
- package/spec/grammar.md +45 -7
- package/spec/testing.md +15 -0
- package/spec/validation.md +11 -2
- package/dist/__tests__/live/zz-debug.test.d.ts +0 -2
- package/dist/__tests__/live/zz-debug.test.d.ts.map +0 -1
- package/dist/__tests__/live/zz-debug.test.js +0 -4
- package/dist/__tests__/live/zz-debug.test.js.map +0 -1
- package/dist/bindings/copilot-cli.d.ts +0 -20
- package/dist/bindings/copilot-cli.d.ts.map +0 -1
- package/dist/bindings/copilot-cli.js +0 -1516
- package/dist/bindings/copilot-cli.js.map +0 -1
- package/dist/bindings/gemini-cli.d.ts +0 -18
- package/dist/bindings/gemini-cli.d.ts.map +0 -1
- package/dist/bindings/gemini-cli.js +0 -1318
- package/dist/bindings/gemini-cli.js.map +0 -1
- package/dist/bindings/kiro.d.ts +0 -17
- package/dist/bindings/kiro.d.ts.map +0 -1
- package/dist/bindings/kiro.js +0 -1615
- package/dist/bindings/kiro.js.map +0 -1
- package/dist/bindings/openclaw.d.ts +0 -18
- package/dist/bindings/openclaw.d.ts.map +0 -1
- package/dist/bindings/openclaw.js +0 -1947
- package/dist/bindings/openclaw.js.map +0 -1
- package/dist/import/openclaw.d.ts +0 -70
- package/dist/import/openclaw.d.ts.map +0 -1
- package/dist/import/openclaw.js +0 -1060
- package/dist/import/openclaw.js.map +0 -1
package/dist/bindings/index.d.ts
CHANGED
|
@@ -11,10 +11,6 @@ export { deduplicateFiles } from "./types.js";
|
|
|
11
11
|
export { claudeCodeBinding } from "./claude-code.js";
|
|
12
12
|
export { claudeWorkflowBinding } from "./claude-workflow.js";
|
|
13
13
|
export { codexBinding } from "./codex.js";
|
|
14
|
-
export { geminiCliBinding } from "./gemini-cli.js";
|
|
15
|
-
export { copilotCliBinding } from "./copilot-cli.js";
|
|
16
|
-
export { openClawBinding } from "./openclaw.js";
|
|
17
|
-
export { kiroBinding } from "./kiro.js";
|
|
18
14
|
export { cursorBinding } from "./cursor.js";
|
|
19
15
|
/**
|
|
20
16
|
* `type: mod` hooks run inside the Claude Code engine; only the claude-code
|
|
@@ -23,6 +19,10 @@ export { cursorBinding } from "./cursor.js";
|
|
|
23
19
|
* warning instead.
|
|
24
20
|
*/
|
|
25
21
|
export declare function withoutMods(binding: BindingTarget): BindingTarget;
|
|
26
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* All available binding targets, keyed by name. Claude Code is the supported
|
|
24
|
+
* target; the others are experimental (0.10.0 removed gemini-cli, copilot-cli,
|
|
25
|
+
* openclaw and kiro).
|
|
26
|
+
*/
|
|
27
27
|
export declare const bindings: Record<string, BindingTarget>;
|
|
28
28
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOhD,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAajE;AAID;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAKlD,CAAC"}
|
package/dist/bindings/index.js
CHANGED
|
@@ -8,19 +8,11 @@
|
|
|
8
8
|
import { claudeCodeBinding } from "./claude-code.js";
|
|
9
9
|
import { claudeWorkflowBinding } from "./claude-workflow.js";
|
|
10
10
|
import { codexBinding } from "./codex.js";
|
|
11
|
-
import { geminiCliBinding } from "./gemini-cli.js";
|
|
12
|
-
import { copilotCliBinding } from "./copilot-cli.js";
|
|
13
|
-
import { openClawBinding } from "./openclaw.js";
|
|
14
|
-
import { kiroBinding } from "./kiro.js";
|
|
15
11
|
import { cursorBinding } from "./cursor.js";
|
|
16
12
|
export { deduplicateFiles } from "./types.js";
|
|
17
13
|
export { claudeCodeBinding } from "./claude-code.js";
|
|
18
14
|
export { claudeWorkflowBinding } from "./claude-workflow.js";
|
|
19
15
|
export { codexBinding } from "./codex.js";
|
|
20
|
-
export { geminiCliBinding } from "./gemini-cli.js";
|
|
21
|
-
export { copilotCliBinding } from "./copilot-cli.js";
|
|
22
|
-
export { openClawBinding } from "./openclaw.js";
|
|
23
|
-
export { kiroBinding } from "./kiro.js";
|
|
24
16
|
export { cursorBinding } from "./cursor.js";
|
|
25
17
|
/**
|
|
26
18
|
* `type: mod` hooks run inside the Claude Code engine; only the claude-code
|
|
@@ -41,15 +33,16 @@ export function withoutMods(binding) {
|
|
|
41
33
|
},
|
|
42
34
|
};
|
|
43
35
|
}
|
|
44
|
-
|
|
36
|
+
const experimental = (b) => ({ ...b, experimental: true });
|
|
37
|
+
/**
|
|
38
|
+
* All available binding targets, keyed by name. Claude Code is the supported
|
|
39
|
+
* target; the others are experimental (0.10.0 removed gemini-cli, copilot-cli,
|
|
40
|
+
* openclaw and kiro).
|
|
41
|
+
*/
|
|
45
42
|
export const bindings = {
|
|
46
43
|
"claude-code": claudeCodeBinding,
|
|
47
|
-
"claude-workflow": withoutMods(claudeWorkflowBinding),
|
|
48
|
-
"codex": withoutMods(codexBinding),
|
|
49
|
-
"
|
|
50
|
-
"copilot-cli": withoutMods(copilotCliBinding),
|
|
51
|
-
"openclaw": withoutMods(openClawBinding),
|
|
52
|
-
"kiro": withoutMods(kiroBinding),
|
|
53
|
-
"cursor": withoutMods(cursorBinding),
|
|
44
|
+
"claude-workflow": experimental(withoutMods(claudeWorkflowBinding)),
|
|
45
|
+
"codex": experimental(withoutMods(codexBinding)),
|
|
46
|
+
"cursor": experimental(withoutMods(cursorBinding)),
|
|
54
47
|
};
|
|
55
48
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAsB;IAChD,OAAO;QACL,GAAG,OAAO;QACV,QAAQ,CAAC,GAAgB;YACvB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CACV,IAAI,OAAO,CAAC,IAAI,6CAA6C,OAAO,CAAC,IAAI,qBAAqB;gBAC5F,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACpD,CAAC;YACF,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAgB,EAAiB,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;AAEzF;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAkC;IACrD,aAAa,EAAE,iBAAiB;IAChC,iBAAiB,EAAE,YAAY,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IACnE,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAChD,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;CACnD,CAAC"}
|
package/dist/bindings/types.d.ts
CHANGED
|
@@ -34,10 +34,15 @@ export interface GeneratedFile {
|
|
|
34
34
|
export declare function deduplicateFiles(files: GeneratedFile[]): GeneratedFile[];
|
|
35
35
|
/** A binding target that can scaffold project structure from a TopologyAST. */
|
|
36
36
|
export interface BindingTarget {
|
|
37
|
-
/** Machine-readable name (e.g. "claude-code", "codex"
|
|
37
|
+
/** Machine-readable name (e.g. "claude-code", "codex"). */
|
|
38
38
|
name: string;
|
|
39
39
|
/** Human-readable description of the target platform. */
|
|
40
40
|
description: string;
|
|
41
|
+
/**
|
|
42
|
+
* Not a supported target: kept, but not verified against the platform the way
|
|
43
|
+
* claude-code is. `targets` labels it and scaffold warns.
|
|
44
|
+
*/
|
|
45
|
+
experimental?: boolean;
|
|
41
46
|
/** Generate all files for the target platform from a parsed topology. */
|
|
42
47
|
scaffold(ast: TopologyAST): GeneratedFile[];
|
|
43
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bindings/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC5D;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CASxE;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bindings/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC5D;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CASxE;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,EAAE,CAAC;CAC7C"}
|
|
@@ -168,4 +168,29 @@ describe("agentopology CLI", () => {
|
|
|
168
168
|
});
|
|
169
169
|
});
|
|
170
170
|
});
|
|
171
|
+
describe("0.10.0 targets", () => {
|
|
172
|
+
const run = (...args) => {
|
|
173
|
+
try {
|
|
174
|
+
return { code: 0, out: execFileSync(process.execPath, [CLI, ...args], { encoding: "utf8", stdio: "pipe" }) };
|
|
175
|
+
}
|
|
176
|
+
catch (e) {
|
|
177
|
+
const err = e;
|
|
178
|
+
return { code: err.status, out: err.stdout + err.stderr };
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
it("a removed target says it was removed, not that it is unknown", () => {
|
|
182
|
+
for (const t of ["gemini-cli", "copilot-cli", "openclaw", "kiro"]) {
|
|
183
|
+
const r = run("scaffold", resolve(root, "examples/simple-pipeline.at"), "--target", t, "--dry-run");
|
|
184
|
+
expect(r.code, t).toBe(1);
|
|
185
|
+
expect(r.out, t).toContain("was removed in 0.10.0");
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
it("targets labels codex, cursor and claude-workflow experimental, and claude-code not", () => {
|
|
189
|
+
const out = run("targets").out;
|
|
190
|
+
for (const line of out.split("\n").filter((l) => /^\s+(codex|cursor|claude-workflow)\s/.test(l))) {
|
|
191
|
+
expect(line).toContain("(experimental)");
|
|
192
|
+
}
|
|
193
|
+
expect(out.split("\n").find((l) => /^\s+claude-code\s/.test(l))).not.toContain("experimental");
|
|
194
|
+
});
|
|
195
|
+
});
|
|
171
196
|
//# sourceMappingURL=cli.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/cli.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/cli.test.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -38,6 +38,11 @@ import { jsonChanges } from "../scaffold/diff.js";
|
|
|
38
38
|
import { renderAscii } from "../render/ascii.js";
|
|
39
39
|
import { buildExecutionBrief } from "../plan/brief.js";
|
|
40
40
|
import { renderBriefMarkdown } from "../plan/render.js";
|
|
41
|
+
import { checkGuards, renderGuardReport } from "../guard/check.js";
|
|
42
|
+
import { checkStep, renderStepReport, parseStepArgs } from "../step/check.js";
|
|
43
|
+
import { planGuardTarget, applyGuardTarget } from "../guard/target.js";
|
|
44
|
+
import { verifiedOnLine } from "../conformance/claude-code.js";
|
|
45
|
+
import { collectInventory, coverage, renderCoverage } from "../inventory/index.js";
|
|
41
46
|
// ---------------------------------------------------------------------------
|
|
42
47
|
// ANSI colors (no external deps)
|
|
43
48
|
// ---------------------------------------------------------------------------
|
|
@@ -59,7 +64,13 @@ ${c.bold("agentopology")} — AgenTopology CLI
|
|
|
59
64
|
|
|
60
65
|
${c.bold("Usage:")}
|
|
61
66
|
agentopology plan <file.at> [--mode plan|execute|auto] [--brief] [--task <text>] [--root <dir>] [--log <path>]
|
|
62
|
-
agentopology validate <file.at>
|
|
67
|
+
agentopology validate <file.at> [--inventory <project-dir|inventory.json>] [--dir <project-dir>]
|
|
68
|
+
With --inventory: how many live things in the project the .at
|
|
69
|
+
accounts for (unmapped warns), and what it points at that is not
|
|
70
|
+
on disk (missing, exits 1).
|
|
71
|
+
agentopology inventory [<project-dir>]
|
|
72
|
+
Print the project's live things (the .claude tree, settings hooks,
|
|
73
|
+
.mcp.json servers, package.json scripts) as JSON. Writes nothing.
|
|
63
74
|
agentopology scaffold <file.at> --target <binding> [--dry-run] [--force] [--allow-invalid] [--prune] [--output <dir>]
|
|
64
75
|
agentopology sync <file.at> --target <binding> --dir <path>
|
|
65
76
|
agentopology visualize <file.at> [--output <dir>]
|
|
@@ -67,6 +78,20 @@ ${c.bold("Usage:")}
|
|
|
67
78
|
agentopology export <file.at> --format <markdown|mermaid|json|ascii|brief> [--output <dir>]
|
|
68
79
|
agentopology info <file.at>
|
|
69
80
|
agentopology import --target <binding> --dir <path> [--name <topology-name>] [--output <dir>]
|
|
81
|
+
agentopology guard <file.at> --target claude-code [--dir <project-dir>] [--dry-run]
|
|
82
|
+
Write only the guard part of scaffold into a project that may be
|
|
83
|
+
hand-built: hook scripts, gates, checks, and the hooks and
|
|
84
|
+
permissions of settings.json (merged). Keeps edited scripts and
|
|
85
|
+
implemented checks, reports each. Then runs --check.
|
|
86
|
+
agentopology guard <file.at> --check [--dir <project-dir>]
|
|
87
|
+
Report which gates, approval steps and permission rules the
|
|
88
|
+
project enforces today (refuse / none / hope). Writes nothing;
|
|
89
|
+
exits 1 when something the binding generates is missing.
|
|
90
|
+
agentopology step check <file.at> <step-id> [--unit U] [--dir D]
|
|
91
|
+
Exit 0 when every gate before <step-id> holds (its ledger shows the
|
|
92
|
+
after: step ok for the unit; its run: exits 0 from D), else 1,
|
|
93
|
+
naming each failing gate. Call it at the start of a script step.
|
|
94
|
+
Reads and runs check scripts; never writes.
|
|
70
95
|
agentopology stubs [<project-dir>]
|
|
71
96
|
agentopology targets
|
|
72
97
|
agentopology docs [topic]
|
|
@@ -93,7 +118,7 @@ ${c.bold("Commands:")}
|
|
|
93
118
|
docs Language reference — show documentation for .at syntax and features.
|
|
94
119
|
|
|
95
120
|
${c.bold("Options:")}
|
|
96
|
-
--target <name> Binding target (
|
|
121
|
+
--target <name> Binding target (claude-code; codex, cursor and claude-workflow are experimental)
|
|
97
122
|
--format <name> Export format (markdown, mermaid, json, ascii, brief).
|
|
98
123
|
--dir <path> Directory to read platform files from (used with sync, import).
|
|
99
124
|
--name <name> Topology name for the generated .at file (used with import).
|
|
@@ -152,6 +177,8 @@ function parseArgs(argv) {
|
|
|
152
177
|
log: undefined,
|
|
153
178
|
task: undefined,
|
|
154
179
|
root: undefined,
|
|
180
|
+
check: false,
|
|
181
|
+
inventory: undefined,
|
|
155
182
|
help: false,
|
|
156
183
|
};
|
|
157
184
|
let i = 0;
|
|
@@ -182,6 +209,16 @@ function parseArgs(argv) {
|
|
|
182
209
|
i++;
|
|
183
210
|
continue;
|
|
184
211
|
}
|
|
212
|
+
if (arg === "--check") {
|
|
213
|
+
result.check = true;
|
|
214
|
+
i++;
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
if (arg === "--inventory" && i + 1 < args.length) {
|
|
218
|
+
result.inventory = args[i + 1];
|
|
219
|
+
i += 2;
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
185
222
|
if (arg === "--all") {
|
|
186
223
|
result.all = true;
|
|
187
224
|
i++;
|
|
@@ -261,7 +298,7 @@ function parseArgs(argv) {
|
|
|
261
298
|
// ---------------------------------------------------------------------------
|
|
262
299
|
// Commands
|
|
263
300
|
// ---------------------------------------------------------------------------
|
|
264
|
-
function cmdValidate(filePath) {
|
|
301
|
+
function cmdValidate(filePath, inventory, dir) {
|
|
265
302
|
const source = readFile(filePath);
|
|
266
303
|
let ast;
|
|
267
304
|
try {
|
|
@@ -274,9 +311,13 @@ function cmdValidate(filePath) {
|
|
|
274
311
|
console.log(c.bold(`Validating ${path.basename(filePath)} (${ast.topology.name} v${ast.topology.version})`));
|
|
275
312
|
console.log("");
|
|
276
313
|
const results = validate(ast);
|
|
314
|
+
const covered = inventory ? printCoverage(ast, inventory, dir) : true;
|
|
277
315
|
if (results.length === 0) {
|
|
278
316
|
console.log(c.green(" All validation rules passed."));
|
|
279
317
|
console.log("");
|
|
318
|
+
console.log(c.dim(verifiedOnLine()));
|
|
319
|
+
if (!covered)
|
|
320
|
+
process.exit(1);
|
|
280
321
|
return;
|
|
281
322
|
}
|
|
282
323
|
const errors = results.filter((r) => r.level === "error");
|
|
@@ -293,10 +334,47 @@ function cmdValidate(filePath) {
|
|
|
293
334
|
console.log(` ${c.red(`${errors.length} error(s)`)}, ${c.yellow(`${warnings.length} warning(s)`)}`);
|
|
294
335
|
console.log("");
|
|
295
336
|
printLessons(results.map((r) => r.rule));
|
|
296
|
-
|
|
337
|
+
console.log(c.dim(verifiedOnLine()));
|
|
338
|
+
if (errors.length > 0 || !covered) {
|
|
297
339
|
process.exit(1);
|
|
298
340
|
}
|
|
299
341
|
}
|
|
342
|
+
/**
|
|
343
|
+
* The --inventory section: a directory is collected now, a file is a saved
|
|
344
|
+
* inventory.json (its tags settled by the owner). Missing paths are resolved
|
|
345
|
+
* against --dir, else the directory given, else the current directory.
|
|
346
|
+
* Returns false when something the .at points at is missing.
|
|
347
|
+
*/
|
|
348
|
+
function printCoverage(ast, inventory, dir) {
|
|
349
|
+
const target = path.resolve(inventory);
|
|
350
|
+
if (!fs.existsSync(target)) {
|
|
351
|
+
console.error(c.red(`Error: --inventory ${inventory} not found.`));
|
|
352
|
+
process.exit(1);
|
|
353
|
+
}
|
|
354
|
+
const isDir = fs.statSync(target).isDirectory();
|
|
355
|
+
const root = path.resolve(dir ?? (isDir ? target : "."));
|
|
356
|
+
let items;
|
|
357
|
+
if (isDir)
|
|
358
|
+
items = collectInventory(target);
|
|
359
|
+
else {
|
|
360
|
+
try {
|
|
361
|
+
items = JSON.parse(fs.readFileSync(target, "utf-8")).items;
|
|
362
|
+
}
|
|
363
|
+
catch (err) {
|
|
364
|
+
console.error(c.red(`Error: ${inventory} is not an inventory.json (${err.message}).`));
|
|
365
|
+
process.exit(1);
|
|
366
|
+
}
|
|
367
|
+
if (!Array.isArray(items)) {
|
|
368
|
+
console.error(c.red(`Error: ${inventory} has no items list.`));
|
|
369
|
+
process.exit(1);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
const r = coverage(ast, items, root);
|
|
373
|
+
for (const line of renderCoverage(r))
|
|
374
|
+
console.log(` ${line}`);
|
|
375
|
+
console.log("");
|
|
376
|
+
return r.missing.length === 0;
|
|
377
|
+
}
|
|
300
378
|
/**
|
|
301
379
|
* Show the correct form for what just failed.
|
|
302
380
|
*
|
|
@@ -335,10 +413,19 @@ function cmdScaffold(filePath, targetName, dryRun, outputDir, force, prune, allo
|
|
|
335
413
|
}
|
|
336
414
|
const binding = bindings[targetName];
|
|
337
415
|
if (!binding) {
|
|
338
|
-
|
|
339
|
-
|
|
416
|
+
if (REMOVED_TARGETS.includes(targetName)) {
|
|
417
|
+
console.error(c.red(`Target "${targetName}" was removed in 0.10.0: Claude Code is the supported target.`));
|
|
418
|
+
console.error(`Use agentopology 0.9.x for ${targetName}, or one of: ${Object.keys(bindings).join(", ")}`);
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
console.error(c.red(`Unknown target: "${targetName}"`));
|
|
422
|
+
console.error(`Available targets: ${Object.keys(bindings).join(", ")}`);
|
|
423
|
+
}
|
|
340
424
|
process.exit(1);
|
|
341
425
|
}
|
|
426
|
+
if (binding.experimental) {
|
|
427
|
+
console.warn(c.yellow(` ${targetName} is experimental: not verified against the platform the way claude-code is.`));
|
|
428
|
+
}
|
|
342
429
|
// Never compile what does not validate: fields the validator rejects can
|
|
343
430
|
// vanish silently in the output. --allow-invalid compiles anyway. It used to
|
|
344
431
|
// be --force, which also overwrites kept files: one flag, two risks.
|
|
@@ -358,6 +445,10 @@ function cmdScaffold(filePath, targetName, dryRun, outputDir, force, prune, allo
|
|
|
358
445
|
}
|
|
359
446
|
console.log(c.bold(`Scaffolding ${ast.topology.name} for ${binding.description}`));
|
|
360
447
|
console.log("");
|
|
448
|
+
if (targetName === "claude-code") {
|
|
449
|
+
console.log(c.dim(` ${verifiedOnLine()}`));
|
|
450
|
+
console.log("");
|
|
451
|
+
}
|
|
361
452
|
const files = binding.scaffold(ast);
|
|
362
453
|
if (files.length === 0) {
|
|
363
454
|
console.log(c.yellow(" No files generated."));
|
|
@@ -996,11 +1087,15 @@ function cmdImport(targetName, dirPath, topologyName, outputDir) {
|
|
|
996
1087
|
}
|
|
997
1088
|
console.log("");
|
|
998
1089
|
}
|
|
1090
|
+
/** Targets removed in 0.10.0, named so the error says so instead of "unknown". */
|
|
1091
|
+
const REMOVED_TARGETS = ["gemini-cli", "copilot-cli", "openclaw", "kiro"];
|
|
999
1092
|
function cmdTargets() {
|
|
1000
1093
|
console.log(c.bold("Available binding targets:"));
|
|
1001
1094
|
console.log("");
|
|
1002
1095
|
for (const [name, binding] of Object.entries(bindings)) {
|
|
1003
|
-
|
|
1096
|
+
const label = binding.experimental ? c.yellow(" (experimental)") : "";
|
|
1097
|
+
const verified = name === "claude-code" ? c.dim(` — ${verifiedOnLine()}`) : "";
|
|
1098
|
+
console.log(` ${c.cyan(name.padEnd(16))} ${binding.description}${label}${verified}`);
|
|
1004
1099
|
}
|
|
1005
1100
|
console.log("");
|
|
1006
1101
|
}
|
|
@@ -1012,6 +1107,92 @@ function cmdTargets() {
|
|
|
1012
1107
|
* removing it (after implementing the script) flips the file out of stub
|
|
1013
1108
|
* state. Designed for CI: exits 1 if stubs remain, 0 if clean.
|
|
1014
1109
|
*/
|
|
1110
|
+
function cmdGuardCheck(filePath, dirPath) {
|
|
1111
|
+
const source = fs.readFileSync(path.resolve(filePath), "utf-8");
|
|
1112
|
+
const ast = parse(source);
|
|
1113
|
+
const root = path.resolve(dirPath);
|
|
1114
|
+
const report = checkGuards(ast, root);
|
|
1115
|
+
console.log(`guard --check ${filePath} (project: ${dirPath})`);
|
|
1116
|
+
console.log("");
|
|
1117
|
+
for (const line of renderGuardReport(report))
|
|
1118
|
+
console.log(line);
|
|
1119
|
+
process.exit(report.missing > 0 ? 1 : 0);
|
|
1120
|
+
}
|
|
1121
|
+
/**
|
|
1122
|
+
* `guard <file> --target claude-code`: write only the guard part of scaffold's
|
|
1123
|
+
* output (see src/guard/target.ts), print what was written or kept, then run
|
|
1124
|
+
* the `--check` report and exit like it.
|
|
1125
|
+
*/
|
|
1126
|
+
function cmdGuardTarget(filePath, targetName, dirPath, dryRun) {
|
|
1127
|
+
if (targetName !== "claude-code") {
|
|
1128
|
+
console.error(c.red(`Error: guard --target supports claude-code only (got "${targetName}").`));
|
|
1129
|
+
process.exit(1);
|
|
1130
|
+
}
|
|
1131
|
+
const source = readFile(filePath);
|
|
1132
|
+
let ast;
|
|
1133
|
+
try {
|
|
1134
|
+
ast = parse(source);
|
|
1135
|
+
}
|
|
1136
|
+
catch (err) {
|
|
1137
|
+
console.error(c.red(`Parse error: ${err.message}`));
|
|
1138
|
+
process.exit(1);
|
|
1139
|
+
}
|
|
1140
|
+
const errors = validate(ast).filter((r) => r.level === "error");
|
|
1141
|
+
if (errors.length > 0) {
|
|
1142
|
+
console.error(c.red(` ${errors.length} validation error(s). Nothing was written.`));
|
|
1143
|
+
for (const e of errors.slice(0, 5))
|
|
1144
|
+
console.error(` ${c.red(`[${e.rule}]`)}${e.line ? ` line ${e.line}:` : ""} ${e.message}`);
|
|
1145
|
+
process.exit(1);
|
|
1146
|
+
}
|
|
1147
|
+
const root = path.resolve(dirPath);
|
|
1148
|
+
const name = path.basename(filePath);
|
|
1149
|
+
const plan = planGuardTarget(ast, root, name);
|
|
1150
|
+
const unsafe = plan.actions.filter((a) => a.type === "blocked" && a.unsafe);
|
|
1151
|
+
if (unsafe.length > 0) {
|
|
1152
|
+
console.error(c.red(` Refusing to write: ${unsafe.length} generated path(s) are not safe file names. Nothing was written.`));
|
|
1153
|
+
process.exit(1);
|
|
1154
|
+
}
|
|
1155
|
+
console.log(c.bold(`guard --target ${targetName} ${filePath} (project: ${dirPath})${dryRun ? c.cyan(" — dry run, nothing is written") : ""}`));
|
|
1156
|
+
console.log(c.dim(` ${verifiedOnLine()}`));
|
|
1157
|
+
console.log("");
|
|
1158
|
+
for (const a of plan.actions) {
|
|
1159
|
+
if (a.type === "create")
|
|
1160
|
+
console.log(` ${c.green("+")} ${a.path}`);
|
|
1161
|
+
else if (a.type === "update") {
|
|
1162
|
+
console.log(` ${c.yellow("~")} ${a.path} (${a.detail})`);
|
|
1163
|
+
if (dryRun) {
|
|
1164
|
+
for (const line of jsonChanges(fs.readFileSync(path.join(root, a.path), "utf-8"), a.content))
|
|
1165
|
+
console.log(` ${c.dim(line)}`);
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
else if (a.type === "unchanged")
|
|
1169
|
+
console.log(` ${c.dim("=")} ${a.path}`);
|
|
1170
|
+
}
|
|
1171
|
+
for (const s of plan.skipped)
|
|
1172
|
+
console.log(` ${c.bold("!")} ${s.path} (${s.why})`);
|
|
1173
|
+
console.log("");
|
|
1174
|
+
if (dryRun) {
|
|
1175
|
+
const writes = plan.actions.filter((a) => a.type === "create" || a.type === "update").length;
|
|
1176
|
+
console.log(` ${writes} file(s) would be written, ${plan.skipped.length} kept.`);
|
|
1177
|
+
return;
|
|
1178
|
+
}
|
|
1179
|
+
let result;
|
|
1180
|
+
try {
|
|
1181
|
+
result = applyGuardTarget(plan, root, name, source);
|
|
1182
|
+
}
|
|
1183
|
+
catch (err) {
|
|
1184
|
+
console.error(c.red(` Could not write: ${err.message}`));
|
|
1185
|
+
process.exit(1);
|
|
1186
|
+
}
|
|
1187
|
+
console.log(` ${result.created} created, ${result.updated} updated, ${result.unchanged} unchanged, ${plan.skipped.length} kept`);
|
|
1188
|
+
if (result.failures.length > 0) {
|
|
1189
|
+
for (const f of result.failures)
|
|
1190
|
+
console.error(` ${c.red("✗")} ${f.path} — ${f.error}`);
|
|
1191
|
+
process.exit(1);
|
|
1192
|
+
}
|
|
1193
|
+
console.log("");
|
|
1194
|
+
cmdGuardCheck(filePath, dirPath);
|
|
1195
|
+
}
|
|
1015
1196
|
function cmdStubs(dirPath) {
|
|
1016
1197
|
const resolved = path.resolve(dirPath);
|
|
1017
1198
|
if (!fs.existsSync(resolved)) {
|
|
@@ -1071,7 +1252,10 @@ function main() {
|
|
|
1071
1252
|
usage();
|
|
1072
1253
|
process.exit(1);
|
|
1073
1254
|
}
|
|
1074
|
-
cmdValidate(args.file);
|
|
1255
|
+
cmdValidate(args.file, args.inventory, args.dir);
|
|
1256
|
+
break;
|
|
1257
|
+
case "inventory":
|
|
1258
|
+
console.log(JSON.stringify({ version: 1, items: collectInventory(path.resolve(args.file ?? args.dir ?? ".")) }, null, 2));
|
|
1075
1259
|
break;
|
|
1076
1260
|
case "scaffold":
|
|
1077
1261
|
if (!args.file) {
|
|
@@ -1165,6 +1349,36 @@ function main() {
|
|
|
1165
1349
|
case "targets":
|
|
1166
1350
|
cmdTargets();
|
|
1167
1351
|
break;
|
|
1352
|
+
case "guard": {
|
|
1353
|
+
if (!args.file) {
|
|
1354
|
+
console.error(c.red("Error: guard requires a file argument."));
|
|
1355
|
+
process.exit(1);
|
|
1356
|
+
}
|
|
1357
|
+
if (args.target) {
|
|
1358
|
+
cmdGuardTarget(args.file, args.target, args.dir ?? ".", args.dryRun);
|
|
1359
|
+
break;
|
|
1360
|
+
}
|
|
1361
|
+
if (!args.check) {
|
|
1362
|
+
console.error(c.red("Error: guard needs --check (read-only report) or --target claude-code (write the guards)."));
|
|
1363
|
+
process.exit(1);
|
|
1364
|
+
}
|
|
1365
|
+
cmdGuardCheck(args.file, args.dir ?? ".");
|
|
1366
|
+
break;
|
|
1367
|
+
}
|
|
1368
|
+
case "step": {
|
|
1369
|
+
// `agentopology step check <file.at> <step-id> [--unit U] [--dir D]`
|
|
1370
|
+
const rest = process.argv.slice(2);
|
|
1371
|
+
const sub = rest[rest.indexOf("step") + 1];
|
|
1372
|
+
const a = parseStepArgs(rest.slice(rest.indexOf("step") + 2));
|
|
1373
|
+
if (sub !== "check" || !a.file || !a.step) {
|
|
1374
|
+
console.error(c.red("Usage: agentopology step check <file.at> <step-id> [--unit U] [--dir D]"));
|
|
1375
|
+
process.exit(1);
|
|
1376
|
+
}
|
|
1377
|
+
const report = checkStep(parse(readFile(a.file)), a.step, { unit: a.unit, dir: a.dir ?? "." });
|
|
1378
|
+
for (const line of renderStepReport(report))
|
|
1379
|
+
(report.ok ? console.log : console.error)(line);
|
|
1380
|
+
process.exit(report.ok ? 0 : 1);
|
|
1381
|
+
}
|
|
1168
1382
|
case "stubs": {
|
|
1169
1383
|
// `agentopology stubs [<dir>]` — scan for unimplemented scaffold stubs.
|
|
1170
1384
|
// Default to the current working directory if no path given.
|