witnora 0.18.7 → 0.18.8
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/LICENSE +17 -0
- package/dist/gateway-service.js +5 -2
- package/dist/onboard.js +20 -3
- package/package.json +3 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Witnora CLI Commercial License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 the Witnora copyright holders. All rights reserved.
|
|
4
|
+
|
|
5
|
+
This package may be installed and used to connect customer-owned Agents to an
|
|
6
|
+
authorized Witnora service. Redistribution, modification, reverse engineering,
|
|
7
|
+
or use to operate a competing hosted service is not permitted without written
|
|
8
|
+
permission from the copyright holders.
|
|
9
|
+
|
|
10
|
+
Historical package versions released under Apache License 2.0 retain the rights
|
|
11
|
+
granted with those versions. Public schemas, SDKs, Runtime interfaces, Probe,
|
|
12
|
+
and offline verifiers are available separately in `witnora-framework` under
|
|
13
|
+
Apache License 2.0.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR
|
|
17
|
+
A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
|
package/dist/gateway-service.js
CHANGED
|
@@ -58,13 +58,15 @@ export function createGatewayServicePlan(input) {
|
|
|
58
58
|
}
|
|
59
59
|
function windowsPlan(input, id, args) {
|
|
60
60
|
const definitionPath = `${input.serviceHome}\\${id}.xml`;
|
|
61
|
-
const
|
|
61
|
+
const hiddenCommand = `& ${[input.nodeExecutable, ...args].map(powerShellArgument).join(" ")}`;
|
|
62
|
+
const argumentsValue = ["-NoLogo", "-NoProfile", "-NonInteractive", "-WindowStyle", "Hidden", "-Command", hiddenCommand]
|
|
63
|
+
.map(windowsArgument).join(" ");
|
|
62
64
|
const definition = `<?xml version="1.0" encoding="UTF-16"?>
|
|
63
65
|
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
|
|
64
66
|
<Triggers><LogonTrigger><Enabled>true</Enabled><UserId>${xml(input.userId)}</UserId></LogonTrigger></Triggers>
|
|
65
67
|
<Principals><Principal id="Author"><UserId>${xml(input.userId)}</UserId><LogonType>InteractiveToken</LogonType><RunLevel>LeastPrivilege</RunLevel></Principal></Principals>
|
|
66
68
|
<Settings><MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy><StartWhenAvailable>true</StartWhenAvailable><ExecutionTimeLimit>PT0S</ExecutionTimeLimit><RestartOnFailure><Interval>PT1M</Interval><Count>999</Count></RestartOnFailure></Settings>
|
|
67
|
-
<Actions Context="Author"><Exec><Command
|
|
69
|
+
<Actions Context="Author"><Exec><Command>powershell.exe</Command><Arguments>${xml(argumentsValue)}</Arguments><WorkingDirectory>${xml(input.repository)}</WorkingDirectory></Exec></Actions>
|
|
68
70
|
</Task>`;
|
|
69
71
|
return { id, kind: "WINDOWS_TASK", definitionPath, definition,
|
|
70
72
|
install: { command: "schtasks.exe", args: ["/Create", "/TN", id, "/XML", definitionPath, "/F"] },
|
|
@@ -106,5 +108,6 @@ function launchdPlan(input, id, args) {
|
|
|
106
108
|
uninstall: { command: "launchctl", args: ["bootout", domain, definitionPath] } };
|
|
107
109
|
}
|
|
108
110
|
function windowsArgument(value) { return `"${value.replaceAll('"', '\\"')}"`; }
|
|
111
|
+
function powerShellArgument(value) { return `'${value.replaceAll("'", "''")}'`; }
|
|
109
112
|
function systemd(value) { return `"${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`; }
|
|
110
113
|
function xml(value) { return value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'"); }
|
package/dist/onboard.js
CHANGED
|
@@ -240,7 +240,9 @@ export async function runOnboard(options) {
|
|
|
240
240
|
? { state: "LOCAL_SANDBOX_READY", checkedAt: new Date().toISOString(), limitations: [] }
|
|
241
241
|
: { state: "RECORDED_ONLY", checkedAt: new Date().toISOString(), limitations: [runtimeLimitation ?? "The local sandbox Runtime worker has not established exact adapter, probe, source-key, identity, mandate, and readiness bindings."] };
|
|
242
242
|
await reportInstall(requestFetch, server, token.projectId, token.apiKey, setupPlan.id, {
|
|
243
|
-
status: "verified", attemptId, generatedFiles: relativeGeneratedFiles(repositoryPath, generatedFiles), runtimeReadiness,
|
|
243
|
+
status: "verified", attemptId, generatedFiles: relativeGeneratedFiles(repositoryPath, generatedFiles), runtimeReadiness,
|
|
244
|
+
connectedAgent: { externalId: repository.name, name: humanizeAgentName(repository.name), version: repository.version, framework: frameworkForTemplate(repository.template) },
|
|
245
|
+
...(runtimeBinding ? { runtimeBinding } : {}),
|
|
244
246
|
});
|
|
245
247
|
output(`\nWitnora Setup Autopilot completed for ${repository.name}.\n`);
|
|
246
248
|
output(`Project: ${token.projectId}\nTemplate: ${repository.template} (${repository.kind})\n`);
|
|
@@ -256,7 +258,7 @@ export async function runOnboard(options) {
|
|
|
256
258
|
output(assuranceHarnessReadiness.state === "ACTIVE"
|
|
257
259
|
? `Assurance Harness: ACTIVE. Nora can dispatch authority-ready Replay and no-write Shadow evaluations without manual Workflow IDs, evaluator origins, credentials, or contract digests.${realPathActivation.activations.length ? ` ${realPathActivation.activations.length} exact Stripe test-mode real-path binding(s) passed read-only preflight.` : ""}\n`
|
|
258
260
|
: `Assurance Harness: WAITING_FOR_CUSTOMER_HARNESS. ${assuranceHarnessReadiness.limitation}\n`);
|
|
259
|
-
output("
|
|
261
|
+
output("Connected. Nora is monitoring this Agent. Run it normally whenever it is ready; the first source-signed activity will appear automatically without blocking setup.\n");
|
|
260
262
|
return { projectId: token.projectId, connectionName: token.connectionName, credentialsPath, template: repository.template,
|
|
261
263
|
repositoryKind: repository.kind, generatedFiles, receiptPath, discovery, setupPlanId: setupPlan.id,
|
|
262
264
|
gatewayDirectory: join(repositoryPath, ".witnora", "gateway"), gatewayArchiveDirectory: gatewayMigration?.archiveDirectory,
|
|
@@ -389,6 +391,7 @@ export async function inspectRepository(repositoryPath, explicitTemplate) {
|
|
|
389
391
|
const rawName = typeof packageJson?.name === "string" ? packageJson.name : basename(repositoryPath);
|
|
390
392
|
const name = rawName.replace(/^@[^/]+\//, "") || "agent-repository";
|
|
391
393
|
const slug = (name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") || "agent-repository").slice(0, 64);
|
|
394
|
+
const version = typeof packageJson?.version === "string" && packageJson.version.trim() ? packageJson.version.trim() : "local";
|
|
392
395
|
const fingerprintSha256 = createHash("sha256").update(JSON.stringify({ kind, name, files: names.filter((value) => !value.startsWith(".")).slice(0, 200) })).digest("hex");
|
|
393
396
|
const dependencyNames = packageJson ? [
|
|
394
397
|
...Object.keys(record(packageJson.dependencies)),
|
|
@@ -397,7 +400,21 @@ export async function inspectRepository(repositoryPath, explicitTemplate) {
|
|
|
397
400
|
] : [];
|
|
398
401
|
const manifest = await optionalJson(join(repositoryPath, "witnora.discovery.json"));
|
|
399
402
|
const capabilities = inferPrivateCapabilities({ dependencyNames, topLevelNames: names, manifest });
|
|
400
|
-
return { kind, name, slug, template, fingerprintSha256, capabilities };
|
|
403
|
+
return { kind, name, slug, version, template, fingerprintSha256, capabilities };
|
|
404
|
+
}
|
|
405
|
+
function frameworkForTemplate(template) {
|
|
406
|
+
if (template === "coding")
|
|
407
|
+
return "coding-agent";
|
|
408
|
+
if (template === "workflow")
|
|
409
|
+
return "workflow-engine";
|
|
410
|
+
if (template === "data")
|
|
411
|
+
return "data-agent";
|
|
412
|
+
if (template === "browser")
|
|
413
|
+
return "browser-agent";
|
|
414
|
+
return "mcp";
|
|
415
|
+
}
|
|
416
|
+
function humanizeAgentName(value) {
|
|
417
|
+
return value.replace(/[-_.]+/g, " ").replace(/\b\w/g, (character) => character.toUpperCase()).trim() || value;
|
|
401
418
|
}
|
|
402
419
|
async function generateRepositoryConfig(repositoryPath, template, subject) {
|
|
403
420
|
const files = new Map();
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "witnora",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.8",
|
|
4
4
|
"description": "Independent assurance for covered agent action paths across models and frameworks.",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"license": "
|
|
6
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
7
7
|
"homepage": "https://witnora.com/",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
@@ -64,6 +64,7 @@
|
|
|
64
64
|
"files": [
|
|
65
65
|
"dist",
|
|
66
66
|
"README.md",
|
|
67
|
+
"LICENSE",
|
|
67
68
|
"package.json"
|
|
68
69
|
],
|
|
69
70
|
"scripts": {
|