@qloo/qloo-harness 0.1.20 → 0.1.21
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 +19 -0
- package/dist/cli.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/runtime/explore-policy.js +11 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -83,6 +83,25 @@ qloo --version
|
|
|
83
83
|
qloo
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
+
### Uninstall
|
|
87
|
+
|
|
88
|
+
Remove the global package with the same package manager you used to install it:
|
|
89
|
+
|
|
90
|
+
```sh
|
|
91
|
+
pnpm remove --global @qloo/qloo-harness
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Or with npm:
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
npm uninstall --global @qloo/qloo-harness
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Package removal intentionally leaves credentials, settings, and sessions in
|
|
101
|
+
`~/.qloo` (or the directory selected by `QLOO_HOME`). A later reinstall reuses
|
|
102
|
+
that state and will not ask for keys again. Delete only that dedicated state
|
|
103
|
+
directory separately if you also want to erase the saved configuration.
|
|
104
|
+
|
|
86
105
|
### Run from Source
|
|
87
106
|
|
|
88
107
|
Contributors can prepare the repository once instead of installing the public
|
package/dist/cli.js
CHANGED
|
@@ -5,7 +5,7 @@ const require = __qlooCreateRequire(import.meta.url);
|
|
|
5
5
|
import { launchInteractiveHarness } from "./app.js";
|
|
6
6
|
import { isQlooHarnessProfile, QLOO_DEFAULT_PROFILE, QLOO_HARNESS_PROFILES } from "./profiles.js";
|
|
7
7
|
import { MissingModelAuthenticationError } from "./runtime/pi-adapter.js";
|
|
8
|
-
var HARNESS_VERSION = "0.1.
|
|
8
|
+
var HARNESS_VERSION = "0.1.21";
|
|
9
9
|
var HARNESS_HELP = `Qloo terminal harness
|
|
10
10
|
|
|
11
11
|
Usage:
|
package/dist/index.d.ts
CHANGED
|
@@ -674,7 +674,7 @@ interface LaunchInteractiveHarnessOptions {
|
|
|
674
674
|
}
|
|
675
675
|
declare function launchInteractiveHarness(options?: LaunchInteractiveHarnessOptions): Promise<void>;
|
|
676
676
|
|
|
677
|
-
declare const HARNESS_VERSION = "0.1.
|
|
677
|
+
declare const HARNESS_VERSION = "0.1.21";
|
|
678
678
|
declare const HARNESS_HELP = "Qloo terminal harness\n\nUsage:\n qloo Start guided Qloo chat\n qloo chat Start guided Qloo chat explicitly\n qloo explore Ask grounded Qloo questions (read-only workspace)\n qloo integrate Inspect and design a Qloo integration\n qloo plan Open interactive read-only planning\n qloo plan \"<goal>\" --json\n Create a typed, evidence-backed plan\n qloo build Open approval-gated build mode\n qloo build --plan <plan-id>\n Build from a validated integration plan\n qloo chat --mode <explore|integrate|plan|build>\n qloo --help Show this help\n qloo --version Show the harness version\n\nThe deterministic API CLI and additional harness commands are attached by the\ntop-level qloo command router.";
|
|
679
679
|
interface HarnessCliDependencies {
|
|
680
680
|
launch: (profile: QlooHarnessProfile) => Promise<void>;
|
|
@@ -190,12 +190,19 @@ function createHarnessPolicyExtension(profile, allowedToolNames, runtimeInfo, co
|
|
|
190
190
|
return;
|
|
191
191
|
}
|
|
192
192
|
};
|
|
193
|
+
const notifyReadable = (context, label, body) => {
|
|
194
|
+
const message = context.mode === "tui" ? [
|
|
195
|
+
context.ui.theme.fg("accent", label),
|
|
196
|
+
context.ui.theme.fg("text", body)
|
|
197
|
+
].join("\n") : `${label}
|
|
198
|
+
${body}`;
|
|
199
|
+
context.ui.notify(message);
|
|
200
|
+
};
|
|
193
201
|
const notifyJson = (context, label, value, maximumCharacters = 4e3) => {
|
|
194
202
|
const serialized = JSON.stringify(redactSensitiveResult(value), null, 2);
|
|
195
203
|
const bounded = serialized.length > maximumCharacters ? `${serialized.slice(0, maximumCharacters)}
|
|
196
204
|
\u2026` : serialized;
|
|
197
|
-
context
|
|
198
|
-
${bounded}`);
|
|
205
|
+
notifyReadable(context, label, bounded);
|
|
199
206
|
};
|
|
200
207
|
const setNextWidget = (context) => {
|
|
201
208
|
if (context?.mode !== "tui" || !context.ui?.setWidget)
|
|
@@ -447,8 +454,7 @@ ${bounded}`);
|
|
|
447
454
|
handler: async (_args, context) => {
|
|
448
455
|
const usage = context.getContextUsage();
|
|
449
456
|
const model = context.model ? `${context.model.provider}/${context.model.id}` : "unavailable";
|
|
450
|
-
context
|
|
451
|
-
"Qloo status",
|
|
457
|
+
notifyReadable(context, "Qloo status", [
|
|
452
458
|
`Profile: ${activeProfile}`,
|
|
453
459
|
`Transport: ${runtimeInfo ? `${runtimeInfo.transport} (${runtimeInfo.transportName})` : "not declared"}`,
|
|
454
460
|
`Resolution: ${runtimeInfo?.resolution ? `${runtimeInfo.resolution.name} (${runtimeInfo.resolution.tag_strategy}${runtimeInfo.resolution.uses_model ? ", model-assisted" : ""})` : "not declared"}`,
|
|
@@ -465,8 +471,7 @@ ${bounded}`);
|
|
|
465
471
|
description: "Show current model context-window usage",
|
|
466
472
|
handler: async (_args, context) => {
|
|
467
473
|
const model = context.model ? `${context.model.provider}/${context.model.id}` : "unavailable";
|
|
468
|
-
context
|
|
469
|
-
"Qloo context usage",
|
|
474
|
+
notifyReadable(context, "Qloo context usage", [
|
|
470
475
|
`Model: ${model}`,
|
|
471
476
|
`Context used: ${formatContextUsage(context.getContextUsage())}`
|
|
472
477
|
].join("\n"));
|