@amistio/cli 0.1.16 → 0.1.17
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 +2 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -39,6 +39,8 @@ Provider-backed model preferences use sanitized catalog fields: `--provider`, `-
|
|
|
39
39
|
|
|
40
40
|
When `--tool copilot` uses the GitHub Copilot SDK, Amistio approves read-only permission requests by default and denies mutating, network, MCP, hook, memory, and shell requests. Set `AMISTIO_COPILOT_APPROVE_ALL=1` only on a local machine where broad Copilot SDK approval is intentional.
|
|
41
41
|
|
|
42
|
+
When `--tool codex` uses the Codex SDK, intermediate progress can be quiet until the final response. For live Codex CLI logs, run `amistio run --watch --tool codex --invocation-channel command`.
|
|
43
|
+
|
|
42
44
|
`amistio runner status` reports local background runner state, latest heartbeat, and bounded resource usage when available. Resource usage is latest-sample runner process memory/CPU plus safe aggregate system memory/load signals; it does not include source files, environment variables, command lines, process lists, credentials, or arbitrary local paths.
|
|
43
45
|
|
|
44
46
|
The runner advertises its supported work kinds in heartbeats. Current runners can claim read-only `projectContextRefresh` jobs from the workspace Context panel and create due runner-driven refreshes when no fresh approved map exists. Context refreshes inspect the paired checkout locally without modifying files and submit only bounded summaries, slices, entities, relations, safe citations, confidence, freshness, and repo-relative paths. If a submitted context refresh contains unsafe evidence, unsafe paths, or a map too large to store safely, Amistio marks the refresh failed with a safe reason instead of storing the rejected raw result. Approved maps are reused as context packs for source-aware assistant and impact-preview work. Current runners can also claim read-only issue diagnosis jobs from the web Issues panel, generate root-cause analysis and a proposed fix, and submit that result without modifying source. They can claim manual read-only `appEvaluationScan` jobs from the workspace Evaluate panel and create at most one due hourly evaluation during normal watch/background polling when app evaluation is enabled for the repository link. Evaluation results contain bounded summaries, safe evidence, suggested actions, lifecycle proposals, and repo-relative paths only. Current runners can also claim manual read-only `securityPostureScan` jobs from the workspace Security panel and create due daily posture checks during normal watch/background polling. Security scan results contain bounded summaries, standard references, safe evidence, and repo-relative paths only; source, secrets, environment variables, command lines, process lists, credentials, provider sessions, and arbitrary local paths stay local. Implementation or cleanup is queued separately only after the user approves an issue analysis, app evaluation finding, or security remediation plan in the app.
|
package/dist/index.js
CHANGED
|
@@ -3198,6 +3198,9 @@ async function runCodexSdk(input) {
|
|
|
3198
3198
|
approvalPolicy: "on-request",
|
|
3199
3199
|
skipGitRepoCheck: true
|
|
3200
3200
|
});
|
|
3201
|
+
if (input.streamOutput) {
|
|
3202
|
+
process.stderr.write("Codex SDK is running; intermediate progress may be quiet until the final response. Use --invocation-channel command for Codex CLI logs.\n");
|
|
3203
|
+
}
|
|
3201
3204
|
const result = await thread.run(input.prompt);
|
|
3202
3205
|
if (input.streamOutput && result.finalResponse) {
|
|
3203
3206
|
process.stdout.write(result.finalResponse);
|
|
@@ -4389,6 +4392,7 @@ var appEvaluationStart = "AMISTIO_APP_EVALUATION_START";
|
|
|
4389
4392
|
var appEvaluationEnd = "AMISTIO_APP_EVALUATION_END";
|
|
4390
4393
|
var projectContextRefreshStart = "AMISTIO_PROJECT_CONTEXT_REFRESH_START";
|
|
4391
4394
|
var projectContextRefreshEnd = "AMISTIO_PROJECT_CONTEXT_REFRESH_END";
|
|
4395
|
+
var validProjectContextSliceKinds = /* @__PURE__ */ new Set(["overview", "architecture", "domain", "data", "api", "frontend", "backend", "cli", "workflow", "operations", "security", "testing", "unknown"]);
|
|
4392
4396
|
var validProjectContextEntityTypes = /* @__PURE__ */ new Set(["project", "system", "component", "domain", "tool", "decision", "feature", "risk", "team", "workflow", "unknown"]);
|
|
4393
4397
|
var validProjectContextRelationTypes = /* @__PURE__ */ new Set(["uses", "depends_on", "decides", "supersedes", "touches", "blocks", "implements", "mentions"]);
|
|
4394
4398
|
function createWorkExecutionPrompt(workItem, context) {
|
|
@@ -4493,6 +4497,7 @@ function createProjectContextRefreshPrompt(workItem, context) {
|
|
|
4493
4497
|
"## Mapping Requirements",
|
|
4494
4498
|
"",
|
|
4495
4499
|
"- Create slices for architecture, domain, data, API, frontend, backend, CLI, workflows, operations, security, and testing when those surfaces exist.",
|
|
4500
|
+
"- Use only these exact singular slice kind values: overview, architecture, domain, data, api, frontend, backend, cli, workflow, operations, security, testing, unknown.",
|
|
4496
4501
|
"- Capture entities and relations that explain how the app is put together and where future work should look first.",
|
|
4497
4502
|
"- Prefer summaries, repository-relative paths, short citations, tags, and freshness status over raw source excerpts.",
|
|
4498
4503
|
"- Mark stale or missing areas explicitly instead of guessing.",
|
|
@@ -5032,6 +5037,16 @@ function normalizeProjectContextRefreshEnums(value) {
|
|
|
5032
5037
|
return value;
|
|
5033
5038
|
}
|
|
5034
5039
|
const normalized = { ...value };
|
|
5040
|
+
if (Array.isArray(normalized.slices)) {
|
|
5041
|
+
normalized.slices = normalized.slices.map((slice) => {
|
|
5042
|
+
if (!isObjectRecord(slice)) {
|
|
5043
|
+
return slice;
|
|
5044
|
+
}
|
|
5045
|
+
const normalizedSlice = { ...slice };
|
|
5046
|
+
normalizedSlice.kind = normalizeProjectContextSliceKind(slice.kind);
|
|
5047
|
+
return normalizedSlice;
|
|
5048
|
+
});
|
|
5049
|
+
}
|
|
5035
5050
|
if (Array.isArray(normalized.entities)) {
|
|
5036
5051
|
normalized.entities = normalized.entities.map((entity) => {
|
|
5037
5052
|
if (!isObjectRecord(entity)) {
|
|
@@ -5054,6 +5069,22 @@ function normalizeProjectContextRefreshEnums(value) {
|
|
|
5054
5069
|
}
|
|
5055
5070
|
return normalized;
|
|
5056
5071
|
}
|
|
5072
|
+
function normalizeProjectContextSliceKind(value) {
|
|
5073
|
+
if (typeof value !== "string") {
|
|
5074
|
+
return "unknown";
|
|
5075
|
+
}
|
|
5076
|
+
const normalized = value.trim().toLowerCase();
|
|
5077
|
+
if (validProjectContextSliceKinds.has(normalized)) {
|
|
5078
|
+
return normalized;
|
|
5079
|
+
}
|
|
5080
|
+
if (normalized.endsWith("s")) {
|
|
5081
|
+
const singular = normalized.slice(0, -1);
|
|
5082
|
+
if (validProjectContextSliceKinds.has(singular)) {
|
|
5083
|
+
return singular;
|
|
5084
|
+
}
|
|
5085
|
+
}
|
|
5086
|
+
return "unknown";
|
|
5087
|
+
}
|
|
5057
5088
|
function normalizeProjectContextRefreshPaths(value, options) {
|
|
5058
5089
|
if (!isObjectRecord(value)) {
|
|
5059
5090
|
return value;
|