@skrr-ai/cli 0.1.47 → 0.1.49
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 +1 -1
- package/dist/base-command.d.ts +18 -0
- package/dist/base-command.js +61 -1
- package/dist/commands/agent-worker.d.ts +12 -0
- package/dist/commands/agent-worker.js +140 -0
- package/dist/commands/agents/chat.d.ts +21 -0
- package/dist/commands/agents/chat.js +26 -9
- package/dist/commands/balance/usage/breakdown.d.ts +14 -0
- package/dist/commands/balance/usage/breakdown.js +68 -0
- package/dist/commands/balance/usage.js +24 -0
- package/dist/commands/commerce/entitlements/explain.d.ts +22 -0
- package/dist/commands/commerce/entitlements/explain.js +40 -0
- package/dist/commands/commerce/incidents/audit.d.ts +20 -0
- package/dist/commands/commerce/incidents/audit.js +37 -0
- package/dist/commands/commerce/incidents/list.d.ts +22 -0
- package/dist/commands/commerce/incidents/list.js +49 -0
- package/dist/commands/commerce/incidents/resolve.d.ts +23 -0
- package/dist/commands/commerce/incidents/resolve.js +45 -0
- package/dist/commands/commerce/incidents/retry.d.ts +22 -0
- package/dist/commands/commerce/incidents/retry.js +45 -0
- package/dist/commands/commerce/incidents/show.d.ts +13 -0
- package/dist/commands/commerce/incidents/show.js +30 -0
- package/dist/commands/commerce/offers/approve.d.ts +17 -0
- package/dist/commands/commerce/offers/approve.js +33 -0
- package/dist/commands/commerce/offers/create.d.ts +18 -0
- package/dist/commands/commerce/offers/create.js +34 -0
- package/dist/commands/commerce/offers/publish.d.ts +13 -0
- package/dist/commands/commerce/offers/publish.js +28 -0
- package/dist/commands/commerce/offers/retire.d.ts +17 -0
- package/dist/commands/commerce/offers/retire.js +32 -0
- package/dist/commands/commerce/offers/validate.d.ts +18 -0
- package/dist/commands/commerce/offers/validate.js +33 -0
- package/dist/commands/commerce/products/create.d.ts +10 -0
- package/dist/commands/commerce/products/create.js +25 -0
- package/dist/commands/commerce/promotions/redeem.d.ts +13 -0
- package/dist/commands/commerce/promotions/redeem.js +32 -0
- package/dist/commands/commerce/terms/accept.d.ts +18 -0
- package/dist/commands/commerce/terms/accept.js +39 -0
- package/dist/commands/commerce/terms/show.d.ts +10 -0
- package/dist/commands/commerce/terms/show.js +34 -0
- package/dist/commands/commerce/trials/conversion-preview.d.ts +18 -0
- package/dist/commands/commerce/trials/conversion-preview.js +39 -0
- package/dist/commands/commerce/trials/start.d.ts +23 -0
- package/dist/commands/commerce/trials/start.js +58 -0
- package/dist/commands/commitments/accounting.d.ts +39 -0
- package/dist/commands/commitments/accounting.js +116 -0
- package/dist/commands/commitments/action-history.d.ts +1 -0
- package/dist/commands/commitments/action-history.js +8 -1
- package/dist/commands/commitments/case.d.ts +1 -0
- package/dist/commands/commitments/case.js +19 -3
- package/dist/commands/commitments/cases.d.ts +1 -0
- package/dist/commands/commitments/cases.js +11 -1
- package/dist/commands/commitments/checks.d.ts +1 -0
- package/dist/commands/commitments/checks.js +5 -1
- package/dist/commands/commitments/cost.d.ts +62 -0
- package/dist/commands/commitments/cost.js +130 -0
- package/dist/commands/commitments/create.js +1 -1
- package/dist/commands/commitments/delete.d.ts +1 -0
- package/dist/commands/commitments/delete.js +56 -6
- package/dist/commands/commitments/feedback.js +9 -1
- package/dist/commands/commitments/handover.js +16 -0
- package/dist/commands/commitments/hypotheses.d.ts +1 -0
- package/dist/commands/commitments/hypotheses.js +17 -2
- package/dist/commands/commitments/links/list.js +4 -1
- package/dist/commands/commitments/liveness.d.ts +18 -0
- package/dist/commands/commitments/liveness.js +80 -0
- package/dist/commands/commitments/metrics.d.ts +1 -0
- package/dist/commands/commitments/metrics.js +8 -1
- package/dist/commands/commitments/next-tick.d.ts +39 -0
- package/dist/commands/commitments/next-tick.js +122 -0
- package/dist/commands/commitments/observations.d.ts +1 -0
- package/dist/commands/commitments/observations.js +19 -2
- package/dist/commands/commitments/pause.js +12 -0
- package/dist/commands/commitments/receipt.d.ts +2 -0
- package/dist/commands/commitments/receipt.js +16 -2
- package/dist/commands/commitments/remediation-proposal.js +6 -2
- package/dist/commands/commitments/remediation-proposals.js +5 -1
- package/dist/commands/commitments/restore.d.ts +25 -0
- package/dist/commands/commitments/restore.js +46 -0
- package/dist/commands/commitments/show.js +32 -0
- package/dist/commands/commitments/trigger-status.js +33 -0
- package/dist/commands/commitments/update.d.ts +1 -0
- package/dist/commands/commitments/update.js +31 -5
- package/dist/commands/commitments/wake-capabilities.d.ts +0 -1
- package/dist/commands/commitments/wake-capabilities.js +8 -4
- package/dist/commands/enterprise/budgets/create.d.ts +11 -0
- package/dist/commands/enterprise/budgets/create.js +27 -0
- package/dist/commands/enterprise/budgets/evaluate.d.ts +17 -0
- package/dist/commands/enterprise/budgets/evaluate.js +32 -0
- package/dist/commands/enterprise/budgets/publish.d.ts +14 -0
- package/dist/commands/enterprise/budgets/publish.js +30 -0
- package/dist/commands/enterprise/contracts/activate.d.ts +14 -0
- package/dist/commands/enterprise/contracts/activate.js +30 -0
- package/dist/commands/enterprise/contracts/create.d.ts +14 -0
- package/dist/commands/enterprise/contracts/create.js +32 -0
- package/dist/commands/enterprise/contracts/issue.d.ts +18 -0
- package/dist/commands/enterprise/contracts/issue.js +34 -0
- package/dist/commands/enterprise/domains/begin.d.ts +20 -0
- package/dist/commands/enterprise/domains/begin.js +39 -0
- package/dist/commands/enterprise/domains/verify.d.ts +14 -0
- package/dist/commands/enterprise/domains/verify.js +32 -0
- package/dist/commands/enterprise/external-config/activate.d.ts +22 -0
- package/dist/commands/enterprise/external-config/activate.js +49 -0
- package/dist/commands/enterprise/external-config/set.d.ts +25 -0
- package/dist/commands/enterprise/external-config/set.js +123 -0
- package/dist/commands/enterprise/external-config/show.d.ts +12 -0
- package/dist/commands/enterprise/external-config/show.js +39 -0
- package/dist/commands/enterprise/external-config/suspend.d.ts +13 -0
- package/dist/commands/enterprise/external-config/suspend.js +41 -0
- package/dist/commands/enterprise/finance/close-snapshot.d.ts +11 -0
- package/dist/commands/enterprise/finance/close-snapshot.js +28 -0
- package/dist/commands/enterprise/finance/record-document.d.ts +18 -0
- package/dist/commands/enterprise/finance/record-document.js +35 -0
- package/dist/commands/enterprise/profile.d.ts +20 -0
- package/dist/commands/enterprise/profile.js +38 -0
- package/dist/commands/login.d.ts +13 -0
- package/dist/commands/login.js +77 -0
- package/dist/commands/machines/dedicated/index.js +3 -0
- package/dist/commands/machines/dedicated/service/apply.d.ts +23 -0
- package/dist/commands/machines/dedicated/service/apply.js +99 -0
- package/dist/commands/machines/dedicated/service/approve.d.ts +23 -0
- package/dist/commands/machines/dedicated/service/approve.js +52 -0
- package/dist/commands/machines/dedicated/service/create.d.ts +55 -0
- package/dist/commands/machines/dedicated/service/create.js +222 -0
- package/dist/commands/machines/dedicated/service/edit.d.ts +30 -0
- package/dist/commands/machines/dedicated/service/edit.js +146 -0
- package/dist/commands/machines/dedicated/service/exec.d.ts +26 -0
- package/dist/commands/machines/dedicated/service/exec.js +92 -0
- package/dist/commands/machines/dedicated/service/export.d.ts +29 -0
- package/dist/commands/machines/dedicated/service/export.js +106 -0
- package/dist/commands/machines/dedicated/service/index.d.ts +14 -0
- package/dist/commands/machines/dedicated/service/index.js +49 -0
- package/dist/commands/machines/dedicated/service/logs.d.ts +33 -0
- package/dist/commands/machines/dedicated/service/logs.js +148 -0
- package/dist/commands/machines/dedicated/service/ls.d.ts +20 -0
- package/dist/commands/machines/dedicated/service/ls.js +80 -0
- package/dist/commands/machines/dedicated/service/restart.d.ts +14 -0
- package/dist/commands/machines/dedicated/service/restart.js +29 -0
- package/dist/commands/machines/dedicated/service/rm.d.ts +20 -0
- package/dist/commands/machines/dedicated/service/rm.js +33 -0
- package/dist/commands/machines/dedicated/service/secret/index.d.ts +14 -0
- package/dist/commands/machines/dedicated/service/secret/index.js +25 -0
- package/dist/commands/machines/dedicated/service/secret/rm.d.ts +22 -0
- package/dist/commands/machines/dedicated/service/secret/rm.js +54 -0
- package/dist/commands/machines/dedicated/service/secret/set.d.ts +22 -0
- package/dist/commands/machines/dedicated/service/secret/set.js +93 -0
- package/dist/commands/machines/dedicated/service/start.d.ts +14 -0
- package/dist/commands/machines/dedicated/service/start.js +29 -0
- package/dist/commands/machines/dedicated/service/status.d.ts +21 -0
- package/dist/commands/machines/dedicated/service/status.js +85 -0
- package/dist/commands/machines/dedicated/service/stop.d.ts +20 -0
- package/dist/commands/machines/dedicated/service/stop.js +35 -0
- package/dist/commands/machines/dedicated/service/top.d.ts +22 -0
- package/dist/commands/machines/dedicated/service/top.js +120 -0
- package/dist/commands/machines/dedicated/sign-in-status.d.ts +22 -0
- package/dist/commands/machines/dedicated/sign-in-status.js +79 -0
- package/dist/commands/machines/dedicated/ssh-config.d.ts +28 -0
- package/dist/commands/machines/dedicated/ssh-config.js +66 -0
- package/dist/commands/machines/dedicated/ssh-proxy.d.ts +22 -0
- package/dist/commands/machines/dedicated/ssh-proxy.js +62 -0
- package/dist/commands/machines/dedicated/ssh.d.ts +29 -0
- package/dist/commands/machines/dedicated/ssh.js +121 -0
- package/dist/commands/native/allow-all.d.ts +14 -0
- package/dist/commands/native/allow-all.js +25 -0
- package/dist/commands/native/allow.d.ts +24 -0
- package/dist/commands/native/allow.js +45 -0
- package/dist/commands/native/deny.d.ts +24 -0
- package/dist/commands/native/deny.js +43 -0
- package/dist/commands/native/disable.d.ts +17 -0
- package/dist/commands/native/disable.js +28 -0
- package/dist/commands/native/enable.d.ts +12 -0
- package/dist/commands/native/enable.js +29 -0
- package/dist/commands/native/list-apps.d.ts +19 -0
- package/dist/commands/native/list-apps.js +30 -0
- package/dist/commands/native/restrict-to.d.ts +22 -0
- package/dist/commands/native/restrict-to.js +41 -0
- package/dist/commands/native/status.d.ts +19 -0
- package/dist/commands/native/status.js +33 -0
- package/dist/commands/native.d.ts +39 -0
- package/dist/commands/native.js +76 -0
- package/dist/commands/service/index.d.ts +14 -0
- package/dist/commands/service/index.js +31 -0
- package/dist/commands/service/logs.d.ts +18 -0
- package/dist/commands/service/logs.js +53 -0
- package/dist/commands/service/ls.d.ts +13 -0
- package/dist/commands/service/ls.js +48 -0
- package/dist/commands/service/propose.d.ts +34 -0
- package/dist/commands/service/propose.js +113 -0
- package/dist/commands/service/status.d.ts +17 -0
- package/dist/commands/service/status.js +56 -0
- package/dist/commands/spaces/auto-executor/runs.d.ts +13 -0
- package/dist/commands/spaces/auto-executor/runs.js +56 -0
- package/dist/commands/store/governance/artifacts.d.ts +25 -0
- package/dist/commands/store/governance/artifacts.js +55 -0
- package/dist/commands/store/governance/assign.d.ts +16 -0
- package/dist/commands/store/governance/assign.js +54 -0
- package/dist/commands/store/governance/create-license.d.ts +18 -0
- package/dist/commands/store/governance/create-license.js +35 -0
- package/dist/commands/store/governance/install-plan.d.ts +25 -0
- package/dist/commands/store/governance/install-plan.js +56 -0
- package/dist/commands/store/governance/license-policy.d.ts +30 -0
- package/dist/commands/store/governance/license-policy.js +69 -0
- package/dist/commands/store/governance/policy.d.ts +25 -0
- package/dist/commands/store/governance/policy.js +65 -0
- package/dist/commands/store/governance/publish-release.d.ts +17 -0
- package/dist/commands/store/governance/publish-release.js +34 -0
- package/dist/commands/tasks/deliverable/add.d.ts +15 -0
- package/dist/commands/tasks/deliverable/add.js +174 -0
- package/dist/commands/tasks/deliverable/archive.d.ts +35 -0
- package/dist/commands/tasks/deliverable/archive.js +205 -0
- package/dist/commands/tasks/labels/detach.js +3 -0
- package/dist/commands/tasks/labels/suggest.d.ts +24 -0
- package/dist/commands/tasks/labels/suggest.js +69 -0
- package/dist/commands/tasks/list.d.ts +16 -2
- package/dist/commands/tasks/list.js +100 -24
- package/dist/commands/tasks/show.d.ts +23 -0
- package/dist/commands/tasks/show.js +51 -1
- package/dist/commands/wiki/rm.d.ts +22 -1
- package/dist/commands/wiki/rm.js +52 -3
- package/dist/lib/agentic-stream.js +10 -2
- package/dist/lib/balance.d.ts +6 -1
- package/dist/lib/balance.js +15 -0
- package/dist/lib/commerce-command.d.ts +48 -0
- package/dist/lib/commerce-command.js +70 -0
- package/dist/lib/commerce.d.ts +93 -0
- package/dist/lib/commerce.js +129 -0
- package/dist/lib/commitment-product.js +1 -1
- package/dist/lib/commitments.d.ts +202 -29
- package/dist/lib/commitments.js +300 -33
- package/dist/lib/daemon-installer.d.ts +6 -5
- package/dist/lib/daemon-installer.js +4 -17
- package/dist/lib/dedicated-lease-command.js +10 -0
- package/dist/lib/dedicated-machines.d.ts +37 -0
- package/dist/lib/dedicated-machines.js +47 -0
- package/dist/lib/dedicated-service-command.d.ts +60 -0
- package/dist/lib/dedicated-service-command.js +182 -0
- package/dist/lib/dedicated-service.d.ts +342 -0
- package/dist/lib/dedicated-service.js +741 -0
- package/dist/lib/dedicated-ssh.d.ts +136 -0
- package/dist/lib/dedicated-ssh.js +387 -0
- package/dist/lib/delegated-cli.js +51 -13
- package/dist/lib/enterprise-commerce.d.ts +67 -0
- package/dist/lib/enterprise-commerce.js +112 -0
- package/dist/lib/enterprise-external-configuration.d.ts +60 -0
- package/dist/lib/enterprise-external-configuration.js +58 -0
- package/dist/lib/first-party-harness.js +17 -3
- package/dist/lib/governed-store.d.ts +110 -0
- package/dist/lib/governed-store.js +79 -0
- package/dist/lib/guest-service-command.d.ts +16 -0
- package/dist/lib/guest-service-command.js +32 -0
- package/dist/lib/guest-service.d.ts +67 -0
- package/dist/lib/guest-service.js +112 -0
- package/dist/lib/prompt.d.ts +1 -0
- package/dist/lib/prompt.js +1 -0
- package/dist/lib/task-asset-upload.d.ts +20 -0
- package/dist/lib/task-asset-upload.js +30 -8
- package/dist/lib/task-extras.d.ts +23 -0
- package/dist/lib/task-extras.js +6 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonScopes.d.ts +9 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonScopes.js +10 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/firstPartyHarness.d.ts +1 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/firstPartyHarness.js +1 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.d.ts +2 -2
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.js +8 -5
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/messages.d.ts +16 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/messages.js +21 -4
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/releaseManifest.d.ts +38 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/releaseManifest.js +66 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/spawnEnv.d.ts +1 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/spawnEnv.js +24 -2
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonScopes.d.ts +9 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonScopes.js +10 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/firstPartyHarness.d.ts +1 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/firstPartyHarness.js +1 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.d.ts +2 -2
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.js +2 -2
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/messages.d.ts +16 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/messages.js +20 -4
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/releaseManifest.d.ts +38 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/releaseManifest.js +64 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/spawnEnv.d.ts +1 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/spawnEnv.js +24 -2
- package/dist/node_modules/@skrr-ai/auth-core/package.json +1 -1
- package/dist/node_modules/@skrr-ai/data-provider/index.js +5060 -4827
- package/oclif.manifest.json +35194 -29157
- package/package.json +43 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const base_command_1 = require("../../../base-command");
|
|
5
|
+
const governed_store_1 = require("../../../lib/governed-store");
|
|
6
|
+
/** Give a workspace-held license to a member or a Space. */
|
|
7
|
+
class StoreGovernanceAssign extends base_command_1.BaseCommand {
|
|
8
|
+
static description = 'Assign a workspace-held license to a member or a Space — who actually gets to run it.';
|
|
9
|
+
static examples = [
|
|
10
|
+
'<%= config.bin %> store governance assign <workspace-id> --license <id> --to member:<user-id>',
|
|
11
|
+
'<%= config.bin %> store governance assign <workspace-id> --license <id> --to space:<space-id>',
|
|
12
|
+
];
|
|
13
|
+
static args = {
|
|
14
|
+
workspace: core_1.Args.string({ description: 'Workspace id', required: true, ignoreStdin: true }),
|
|
15
|
+
};
|
|
16
|
+
static flags = {
|
|
17
|
+
license: core_1.Flags.string({ description: 'License to assign', required: true }),
|
|
18
|
+
to: core_1.Flags.string({
|
|
19
|
+
description: 'member:<user-id> or space:<space-id>',
|
|
20
|
+
required: true,
|
|
21
|
+
}),
|
|
22
|
+
'assignment-id': core_1.Flags.string({ description: 'Assignment id, for a deterministic retry' }),
|
|
23
|
+
json: core_1.Flags.boolean({ description: 'Output as JSON' }),
|
|
24
|
+
};
|
|
25
|
+
async run() {
|
|
26
|
+
this.requireAuth();
|
|
27
|
+
const { args, flags } = await this.parse(StoreGovernanceAssign);
|
|
28
|
+
// `member:` / `space:` rather than two flags, because the two are mutually
|
|
29
|
+
// exclusive and a pair of optional flags lets you pass both or neither.
|
|
30
|
+
const separator = flags.to.indexOf(':');
|
|
31
|
+
const assigneeType = separator > 0 ? flags.to.slice(0, separator) : '';
|
|
32
|
+
const assigneeId = separator > 0 ? flags.to.slice(separator + 1) : '';
|
|
33
|
+
if (!['member', 'space'].includes(assigneeType) || !assigneeId) {
|
|
34
|
+
this.error(`--to must be member:<user-id> or space:<space-id>, got "${flags.to}"`, {
|
|
35
|
+
exit: 2,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
let result;
|
|
39
|
+
try {
|
|
40
|
+
result = await (0, governed_store_1.assignWorkspaceStoreLicense)(args.workspace, {
|
|
41
|
+
licenseId: flags.license,
|
|
42
|
+
assigneeType: assigneeType,
|
|
43
|
+
assigneeId,
|
|
44
|
+
...(flags['assignment-id'] ? { assignmentId: flags['assignment-id'] } : {}),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
this.handleApiError(error);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.log(JSON.stringify(result, null, 2));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.default = StoreGovernanceAssign;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base-command';
|
|
2
|
+
/**
|
|
3
|
+
* Mint a bundle license against an acquisition (admin).
|
|
4
|
+
*
|
|
5
|
+
* A license always cites WHAT paid for it — a commercial order or a contract —
|
|
6
|
+
* so the body carries that acquisition source. That link is the reason a
|
|
7
|
+
* license can be audited at all, and it is not something a CLI should let you
|
|
8
|
+
* omit by defaulting.
|
|
9
|
+
*/
|
|
10
|
+
export default class StoreGovernanceCreateLicense extends BaseCommand {
|
|
11
|
+
static description: string;
|
|
12
|
+
static examples: string[];
|
|
13
|
+
static flags: {
|
|
14
|
+
file: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
15
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
};
|
|
17
|
+
run(): Promise<void>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const base_command_1 = require("../../../base-command");
|
|
4
|
+
const governed_store_1 = require("../../../lib/governed-store");
|
|
5
|
+
const commerce_command_1 = require("../../../lib/commerce-command");
|
|
6
|
+
/**
|
|
7
|
+
* Mint a bundle license against an acquisition (admin).
|
|
8
|
+
*
|
|
9
|
+
* A license always cites WHAT paid for it — a commercial order or a contract —
|
|
10
|
+
* so the body carries that acquisition source. That link is the reason a
|
|
11
|
+
* license can be audited at all, and it is not something a CLI should let you
|
|
12
|
+
* omit by defaulting.
|
|
13
|
+
*/
|
|
14
|
+
class StoreGovernanceCreateLicense extends base_command_1.BaseCommand {
|
|
15
|
+
static description = 'Mint a bundle license against a commercial order or contract (admin).';
|
|
16
|
+
static examples = [
|
|
17
|
+
'<%= config.bin %> store governance create-license --file ./license.json',
|
|
18
|
+
];
|
|
19
|
+
static flags = { ...commerce_command_1.jsonBodyFlags };
|
|
20
|
+
async run() {
|
|
21
|
+
this.requireAuth();
|
|
22
|
+
const { flags } = await this.parse(StoreGovernanceCreateLicense);
|
|
23
|
+
const body = await (0, commerce_command_1.jsonBodyFrom)(this, flags.file);
|
|
24
|
+
let result;
|
|
25
|
+
try {
|
|
26
|
+
result = await (0, governed_store_1.createGovernedStoreLicense)(body);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
this.handleApiError(error);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
this.log(JSON.stringify(result, null, 2));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.default = StoreGovernanceCreateLicense;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base-command';
|
|
2
|
+
/**
|
|
3
|
+
* `skrr store governance install-plan` — what installing this release WOULD do.
|
|
4
|
+
*
|
|
5
|
+
* A plan, not an install, and the name says so. It resolves the release
|
|
6
|
+
* against a license, the workspace policy and the environment you declare, and
|
|
7
|
+
* answers whether it is permitted and what it would pull. That is the read an
|
|
8
|
+
* operator wants before spending anything — and the reason it is here rather
|
|
9
|
+
* than folded into `store install`, which installs.
|
|
10
|
+
*/
|
|
11
|
+
export default class StoreGovernanceInstallPlan extends BaseCommand {
|
|
12
|
+
static description: string;
|
|
13
|
+
static examples: string[];
|
|
14
|
+
static args: {
|
|
15
|
+
release: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
16
|
+
};
|
|
17
|
+
static flags: {
|
|
18
|
+
license: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
19
|
+
workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
20
|
+
space: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
21
|
+
file: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
22
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
23
|
+
};
|
|
24
|
+
run(): Promise<void>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const base_command_1 = require("../../../base-command");
|
|
5
|
+
const governed_store_1 = require("../../../lib/governed-store");
|
|
6
|
+
const commerce_command_1 = require("../../../lib/commerce-command");
|
|
7
|
+
/**
|
|
8
|
+
* `skrr store governance install-plan` — what installing this release WOULD do.
|
|
9
|
+
*
|
|
10
|
+
* A plan, not an install, and the name says so. It resolves the release
|
|
11
|
+
* against a license, the workspace policy and the environment you declare, and
|
|
12
|
+
* answers whether it is permitted and what it would pull. That is the read an
|
|
13
|
+
* operator wants before spending anything — and the reason it is here rather
|
|
14
|
+
* than folded into `store install`, which installs.
|
|
15
|
+
*/
|
|
16
|
+
class StoreGovernanceInstallPlan extends base_command_1.BaseCommand {
|
|
17
|
+
static description = 'Resolve what installing a governed release would do — license, workspace policy and environment. Installs nothing.';
|
|
18
|
+
static examples = [
|
|
19
|
+
'<%= config.bin %> store governance install-plan <release-id>',
|
|
20
|
+
'<%= config.bin %> store governance install-plan <release-id> --workspace <id> --license <id>',
|
|
21
|
+
'<%= config.bin %> store governance install-plan <release-id> --file ./environment.json',
|
|
22
|
+
];
|
|
23
|
+
static args = {
|
|
24
|
+
release: core_1.Args.string({ description: 'Release id', required: true, ignoreStdin: true }),
|
|
25
|
+
};
|
|
26
|
+
static flags = {
|
|
27
|
+
license: core_1.Flags.string({ description: 'License to resolve against' }),
|
|
28
|
+
workspace: core_1.Flags.string({ description: 'Workspace whose policy applies' }),
|
|
29
|
+
space: core_1.Flags.string({ description: 'Space the install would land in' }),
|
|
30
|
+
file: core_1.Flags.string({
|
|
31
|
+
description: 'JSON with an `environment` object (platformVersion, runtimeKind, …), or -',
|
|
32
|
+
}),
|
|
33
|
+
json: core_1.Flags.boolean({ description: 'Output as JSON' }),
|
|
34
|
+
};
|
|
35
|
+
async run() {
|
|
36
|
+
this.requireAuth();
|
|
37
|
+
const { args, flags } = await this.parse(StoreGovernanceInstallPlan);
|
|
38
|
+
const extra = await (0, commerce_command_1.jsonBodyFrom)(this, flags.file, { required: false });
|
|
39
|
+
let result;
|
|
40
|
+
try {
|
|
41
|
+
result = await (0, governed_store_1.resolveGovernedStoreInstallPlan)({
|
|
42
|
+
...extra,
|
|
43
|
+
releaseId: args.release,
|
|
44
|
+
...(flags.license ? { licenseId: flags.license } : {}),
|
|
45
|
+
...(flags.workspace ? { workspaceId: flags.workspace } : {}),
|
|
46
|
+
...(flags.space ? { spaceId: flags.space } : {}),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
this.handleApiError(error);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.log(JSON.stringify(result, null, 2));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.default = StoreGovernanceInstallPlan;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base-command';
|
|
2
|
+
/**
|
|
3
|
+
* `skrr store governance license-policy` — how a license takes updates.
|
|
4
|
+
*
|
|
5
|
+
* ONE command over two endpoints, because the only difference between them is
|
|
6
|
+
* WHOSE license it is: yours, or the workspace's. `--workspace` picks the
|
|
7
|
+
* second, and the server resolves the actor from the route rather than from
|
|
8
|
+
* anything the caller asserts. Two owners can hold licenses over the same
|
|
9
|
+
* release and may change different things, so the distinction is real — it is
|
|
10
|
+
* just not a reason to make an operator remember two verb names.
|
|
11
|
+
*
|
|
12
|
+
* `--expect-revision` is REQUIRED by the API, not by convenience: an update
|
|
13
|
+
* policy decides which releases run, and a blind write could silently move a
|
|
14
|
+
* workspace onto a release somebody else had just pinned away from.
|
|
15
|
+
*/
|
|
16
|
+
export default class StoreGovernanceLicensePolicy extends BaseCommand {
|
|
17
|
+
static description: string;
|
|
18
|
+
static examples: string[];
|
|
19
|
+
static args: {
|
|
20
|
+
license: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
21
|
+
};
|
|
22
|
+
static flags: {
|
|
23
|
+
policy: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
24
|
+
'expect-revision': import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
25
|
+
release: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
26
|
+
workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
27
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
28
|
+
};
|
|
29
|
+
run(): Promise<void>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const base_command_1 = require("../../../base-command");
|
|
5
|
+
const governed_store_1 = require("../../../lib/governed-store");
|
|
6
|
+
/**
|
|
7
|
+
* `skrr store governance license-policy` — how a license takes updates.
|
|
8
|
+
*
|
|
9
|
+
* ONE command over two endpoints, because the only difference between them is
|
|
10
|
+
* WHOSE license it is: yours, or the workspace's. `--workspace` picks the
|
|
11
|
+
* second, and the server resolves the actor from the route rather than from
|
|
12
|
+
* anything the caller asserts. Two owners can hold licenses over the same
|
|
13
|
+
* release and may change different things, so the distinction is real — it is
|
|
14
|
+
* just not a reason to make an operator remember two verb names.
|
|
15
|
+
*
|
|
16
|
+
* `--expect-revision` is REQUIRED by the API, not by convenience: an update
|
|
17
|
+
* policy decides which releases run, and a blind write could silently move a
|
|
18
|
+
* workspace onto a release somebody else had just pinned away from.
|
|
19
|
+
*/
|
|
20
|
+
class StoreGovernanceLicensePolicy extends base_command_1.BaseCommand {
|
|
21
|
+
static description = 'Set how a bundle license takes updates (manual, pinned or compatible), fenced on the revision you read. Without --workspace it changes a license you hold personally.';
|
|
22
|
+
static examples = [
|
|
23
|
+
'<%= config.bin %> store governance license-policy <license-id> --policy pinned --expect-revision 2',
|
|
24
|
+
'<%= config.bin %> store governance license-policy <license-id> --policy compatible --expect-revision 5 --workspace <workspace-id>',
|
|
25
|
+
];
|
|
26
|
+
static args = {
|
|
27
|
+
license: core_1.Args.string({ description: 'License id', required: true, ignoreStdin: true }),
|
|
28
|
+
};
|
|
29
|
+
static flags = {
|
|
30
|
+
policy: core_1.Flags.string({
|
|
31
|
+
description: 'How the license takes updates',
|
|
32
|
+
options: ['manual', 'pinned', 'compatible'],
|
|
33
|
+
required: true,
|
|
34
|
+
}),
|
|
35
|
+
'expect-revision': core_1.Flags.integer({
|
|
36
|
+
description: 'The license revision you are changing (compare-and-set)',
|
|
37
|
+
required: true,
|
|
38
|
+
}),
|
|
39
|
+
release: core_1.Flags.string({
|
|
40
|
+
description: 'Pin to these release ids (repeatable); only meaningful with --policy pinned',
|
|
41
|
+
multiple: true,
|
|
42
|
+
}),
|
|
43
|
+
workspace: core_1.Flags.string({
|
|
44
|
+
description: 'Change the license the WORKSPACE holds, rather than your own',
|
|
45
|
+
}),
|
|
46
|
+
json: core_1.Flags.boolean({ description: 'Output as JSON' }),
|
|
47
|
+
};
|
|
48
|
+
async run() {
|
|
49
|
+
this.requireAuth();
|
|
50
|
+
const { args, flags } = await this.parse(StoreGovernanceLicensePolicy);
|
|
51
|
+
const body = {
|
|
52
|
+
updatePolicy: flags.policy,
|
|
53
|
+
expectedRevision: flags['expect-revision'],
|
|
54
|
+
...(flags.release?.length ? { selectedReleaseIds: flags.release } : {}),
|
|
55
|
+
};
|
|
56
|
+
let result;
|
|
57
|
+
try {
|
|
58
|
+
result = flags.workspace
|
|
59
|
+
? await (0, governed_store_1.updateWorkspaceLicensePolicy)(flags.workspace, args.license, body)
|
|
60
|
+
: await (0, governed_store_1.updateOwnLicensePolicy)(args.license, body);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
this.handleApiError(error);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
this.log(JSON.stringify(result, null, 2));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.default = StoreGovernanceLicensePolicy;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base-command';
|
|
2
|
+
/**
|
|
3
|
+
* `skrr store governance policy` — which releases a workspace may run at all.
|
|
4
|
+
*
|
|
5
|
+
* `deny_all` and `allowlist` are the two modes the server accepts, and the
|
|
6
|
+
* command refuses an allowlist with nothing in it: an empty allowlist and
|
|
7
|
+
* `deny_all` have the same effect but say different things, and a workspace
|
|
8
|
+
* that reads "allowlist" while permitting nothing is a policy nobody can
|
|
9
|
+
* explain six months later. If you mean deny everything, say `deny_all`.
|
|
10
|
+
*/
|
|
11
|
+
export default class StoreGovernancePolicy extends BaseCommand {
|
|
12
|
+
static description: string;
|
|
13
|
+
static examples: string[];
|
|
14
|
+
static args: {
|
|
15
|
+
workspace: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
16
|
+
};
|
|
17
|
+
static flags: {
|
|
18
|
+
mode: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
19
|
+
release: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
20
|
+
'policy-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
21
|
+
'expect-revision': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
22
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
23
|
+
};
|
|
24
|
+
run(): Promise<void>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const core_1 = require("@oclif/core");
|
|
4
|
+
const base_command_1 = require("../../../base-command");
|
|
5
|
+
const governed_store_1 = require("../../../lib/governed-store");
|
|
6
|
+
/**
|
|
7
|
+
* `skrr store governance policy` — which releases a workspace may run at all.
|
|
8
|
+
*
|
|
9
|
+
* `deny_all` and `allowlist` are the two modes the server accepts, and the
|
|
10
|
+
* command refuses an allowlist with nothing in it: an empty allowlist and
|
|
11
|
+
* `deny_all` have the same effect but say different things, and a workspace
|
|
12
|
+
* that reads "allowlist" while permitting nothing is a policy nobody can
|
|
13
|
+
* explain six months later. If you mean deny everything, say `deny_all`.
|
|
14
|
+
*/
|
|
15
|
+
class StoreGovernancePolicy extends base_command_1.BaseCommand {
|
|
16
|
+
static description = 'Set which governed releases a workspace may run. `deny_all`, or an allowlist of release ids.';
|
|
17
|
+
static examples = [
|
|
18
|
+
'<%= config.bin %> store governance policy <workspace-id> --mode deny_all',
|
|
19
|
+
'<%= config.bin %> store governance policy <workspace-id> --mode allowlist --release <id> --release <id>',
|
|
20
|
+
];
|
|
21
|
+
static args = {
|
|
22
|
+
workspace: core_1.Args.string({ description: 'Workspace id', required: true, ignoreStdin: true }),
|
|
23
|
+
};
|
|
24
|
+
static flags = {
|
|
25
|
+
mode: core_1.Flags.string({
|
|
26
|
+
description: 'deny_all, or allowlist the releases named by --release',
|
|
27
|
+
options: ['deny_all', 'allowlist'],
|
|
28
|
+
required: true,
|
|
29
|
+
}),
|
|
30
|
+
release: core_1.Flags.string({
|
|
31
|
+
description: 'Release id to allow (repeatable). Required with --mode allowlist.',
|
|
32
|
+
multiple: true,
|
|
33
|
+
}),
|
|
34
|
+
'policy-id': core_1.Flags.string({ description: 'Policy id, when replacing a specific one' }),
|
|
35
|
+
'expect-revision': core_1.Flags.integer({
|
|
36
|
+
description: 'The policy revision you are replacing (compare-and-set)',
|
|
37
|
+
}),
|
|
38
|
+
json: core_1.Flags.boolean({ description: 'Output as JSON' }),
|
|
39
|
+
};
|
|
40
|
+
async run() {
|
|
41
|
+
this.requireAuth();
|
|
42
|
+
const { args, flags } = await this.parse(StoreGovernancePolicy);
|
|
43
|
+
const releases = flags.release ?? [];
|
|
44
|
+
if (flags.mode === 'allowlist' && releases.length === 0) {
|
|
45
|
+
this.error('An allowlist with no --release permits nothing, which is what --mode deny_all says plainly. Pass at least one release, or say deny_all.', { exit: 2 });
|
|
46
|
+
}
|
|
47
|
+
let result;
|
|
48
|
+
try {
|
|
49
|
+
result = await (0, governed_store_1.setWorkspaceStorePolicy)(args.workspace, {
|
|
50
|
+
mode: flags.mode,
|
|
51
|
+
allowedReleaseIds: releases,
|
|
52
|
+
...(flags['policy-id'] ? { policyId: flags['policy-id'] } : {}),
|
|
53
|
+
...(flags['expect-revision'] !== undefined
|
|
54
|
+
? { expectedRevision: flags['expect-revision'] }
|
|
55
|
+
: {}),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
this.handleApiError(error);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
this.log(JSON.stringify(result, null, 2));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.default = StoreGovernancePolicy;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base-command';
|
|
2
|
+
/**
|
|
3
|
+
* Publish one artifact release into the governed catalogue (admin).
|
|
4
|
+
*
|
|
5
|
+
* The body carries verified-outcome evidence, which is why it is a file rather
|
|
6
|
+
* than flags: evidence is a list of records with sources and timestamps, and
|
|
7
|
+
* assembling that from a command line is how a claim loses its provenance.
|
|
8
|
+
*/
|
|
9
|
+
export default class StoreGovernancePublishRelease extends BaseCommand {
|
|
10
|
+
static description: string;
|
|
11
|
+
static examples: string[];
|
|
12
|
+
static flags: {
|
|
13
|
+
file: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
14
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const base_command_1 = require("../../../base-command");
|
|
4
|
+
const governed_store_1 = require("../../../lib/governed-store");
|
|
5
|
+
const commerce_command_1 = require("../../../lib/commerce-command");
|
|
6
|
+
/**
|
|
7
|
+
* Publish one artifact release into the governed catalogue (admin).
|
|
8
|
+
*
|
|
9
|
+
* The body carries verified-outcome evidence, which is why it is a file rather
|
|
10
|
+
* than flags: evidence is a list of records with sources and timestamps, and
|
|
11
|
+
* assembling that from a command line is how a claim loses its provenance.
|
|
12
|
+
*/
|
|
13
|
+
class StoreGovernancePublishRelease extends base_command_1.BaseCommand {
|
|
14
|
+
static description = 'Publish an artifact release into the governed store catalogue (admin).';
|
|
15
|
+
static examples = [
|
|
16
|
+
'<%= config.bin %> store governance publish-release --file ./release.json',
|
|
17
|
+
];
|
|
18
|
+
static flags = { ...commerce_command_1.jsonBodyFlags };
|
|
19
|
+
async run() {
|
|
20
|
+
this.requireAuth();
|
|
21
|
+
const { flags } = await this.parse(StoreGovernancePublishRelease);
|
|
22
|
+
const body = await (0, commerce_command_1.jsonBodyFrom)(this, flags.file);
|
|
23
|
+
let result;
|
|
24
|
+
try {
|
|
25
|
+
result = await (0, governed_store_1.publishGovernedStoreRelease)(body);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
this.handleApiError(error);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this.log(JSON.stringify(result, null, 2));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.default = StoreGovernancePublishRelease;
|
|
@@ -25,7 +25,22 @@ export default class TasksDeliverableAdd extends BaseCommand {
|
|
|
25
25
|
expectation: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
26
26
|
'run-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
27
27
|
'idempotency-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
28
|
+
file: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
29
|
+
'no-upload': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
28
30
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
29
31
|
};
|
|
30
32
|
run(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Archive the bytes and let the upload's own ledger receipt BE the
|
|
35
|
+
* Deliverable record.
|
|
36
|
+
*
|
|
37
|
+
* One record, not two: the receipt is keyed on the same coordinate this
|
|
38
|
+
* command would have recorded, so the archived copy and the citation are one
|
|
39
|
+
* Resource rather than a path nobody can open beside an opaque blob nobody
|
|
40
|
+
* can match to it.
|
|
41
|
+
*
|
|
42
|
+
* Returns false when the file cannot be archived and the caller should fall
|
|
43
|
+
* back to recording the coordinate alone.
|
|
44
|
+
*/
|
|
45
|
+
private archive;
|
|
31
46
|
}
|