fifony 0.1.33 → 0.1.35

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.
@@ -1,4 +1,4 @@
1
- const CACHE_VERSION = "1774232641793";
1
+ const CACHE_VERSION = "1774235661749";
2
2
  const CORE_CACHE = `fifony-core-${CACHE_VERSION}`;
3
3
  const ASSET_CACHE = `fifony-assets-${CACHE_VERSION}`;
4
4
  const APP_SHELL_ROUTES = ["/kanban", "/issues", "/agents", "/settings", "/onboarding"];
@@ -23,10 +23,10 @@ import {
23
23
  startApiServer,
24
24
  syncRuntimeConfigSettings,
25
25
  validateConfig
26
- } from "../chunk-GAYQ2TXV.js";
26
+ } from "../chunk-TSSVMTCS.js";
27
27
  import {
28
28
  computeMetrics
29
- } from "../chunk-DAXG76WD.js";
29
+ } from "../chunk-KRH4LWCW.js";
30
30
  import {
31
31
  detectAvailableProviders,
32
32
  detectDefaultBranch,
@@ -34,7 +34,7 @@ import {
34
34
  getProviderDefaultCommand,
35
35
  resolveDefaultProvider,
36
36
  setSkipSource
37
- } from "../chunk-NNPKCBAB.js";
37
+ } from "../chunk-GW7LVDP3.js";
38
38
  import {
39
39
  debugBoot,
40
40
  fail,
@@ -47,7 +47,7 @@ import {
47
47
  recoverOrphans,
48
48
  recoverState,
49
49
  stopQueueWorkers
50
- } from "../chunk-LX666HVP.js";
50
+ } from "../chunk-2ZK3IUJQ.js";
51
51
  import {
52
52
  initLogger,
53
53
  logger
@@ -15,8 +15,8 @@ import {
15
15
  runIssueOnce,
16
16
  runPlanningJob,
17
17
  tryParseJsonOutput
18
- } from "./chunk-GAYQ2TXV.js";
19
- import "./chunk-DAXG76WD.js";
18
+ } from "./chunk-TSSVMTCS.js";
19
+ import "./chunk-KRH4LWCW.js";
20
20
  import {
21
21
  buildPrompt,
22
22
  buildProviderBasePrompt,
@@ -33,9 +33,9 @@ import {
33
33
  runCommandWithTimeout,
34
34
  runHook,
35
35
  shouldSkipMergePath
36
- } from "./chunk-NNPKCBAB.js";
36
+ } from "./chunk-GW7LVDP3.js";
37
37
  import "./chunk-O5AEQXUV.js";
38
- import "./chunk-LX666HVP.js";
38
+ import "./chunk-2ZK3IUJQ.js";
39
39
  import "./chunk-DVU3CXWA.js";
40
40
  import "./chunk-OONOOWNC.js";
41
41
  export {
@@ -71,4 +71,4 @@ export {
71
71
  shouldSkipMergePath,
72
72
  tryParseJsonOutput
73
73
  };
74
- //# sourceMappingURL=agent-7BMCWKOD.js.map
74
+ //# sourceMappingURL=agent-QWN3JVX5.js.map
@@ -26,7 +26,7 @@ async function initQueueWorkers(state) {
26
26
  }, 3e4);
27
27
  persistInterval = setInterval(() => {
28
28
  if (!active || !runtimeState) return;
29
- import("./store-MHU3G2W4.js").then(
29
+ import("./store-DSMN6IKR.js").then(
30
30
  ({ persistState }) => persistState(runtimeState).catch(() => {
31
31
  })
32
32
  ).catch(() => {
@@ -116,11 +116,11 @@ function sortQueue() {
116
116
  }
117
117
  async function dispatchPlan(issue) {
118
118
  logger.info({ issueId: issue.id, identifier: issue.identifier }, "[Queue] Dispatching plan job");
119
- const { runPlanningJob } = await import("./issue-runner-BNAW3M6E.js");
119
+ const { runPlanningJob } = await import("./issue-runner-QGJY5COY.js");
120
120
  await runPlanningJob(runtimeState, issue);
121
121
  }
122
122
  async function dispatchExecute(issue) {
123
- const { runIssueOnce } = await import("./issue-runner-BNAW3M6E.js");
123
+ const { runIssueOnce } = await import("./issue-runner-QGJY5COY.js");
124
124
  while (active && runtimeState) {
125
125
  const current = getCurrentIssue(issue.id);
126
126
  if (!current || current.state !== "Queued" && current.state !== "Running") break;
@@ -130,12 +130,12 @@ async function dispatchExecute(issue) {
130
130
  }
131
131
  async function dispatchReview(issue) {
132
132
  logger.info({ issueId: issue.id, identifier: issue.identifier }, "[Queue] Dispatching review job");
133
- const { runIssueOnce } = await import("./issue-runner-BNAW3M6E.js");
133
+ const { runIssueOnce } = await import("./issue-runner-QGJY5COY.js");
134
134
  await runIssueOnce(runtimeState, issue, running);
135
135
  }
136
136
  async function checkStaleIssues() {
137
137
  if (!runtimeState) return;
138
- const { ensureNotStale } = await import("./scheduler-JZCJB2IN.js");
138
+ const { ensureNotStale } = await import("./scheduler-LWCF7U6Q.js");
139
139
  await ensureNotStale(runtimeState, runtimeState.config.staleInProgressTimeoutMs);
140
140
  }
141
141
  var draining = false;
@@ -186,7 +186,7 @@ async function enqueue(issue, job) {
186
186
  async function recoverState() {
187
187
  if (!runtimeState) return;
188
188
  try {
189
- const { getIssueStateMachinePlugin, ISSUE_STATE_MACHINE_ID } = await import("./issue-state-machine-24GKGB3W.js");
189
+ const { getIssueStateMachinePlugin, ISSUE_STATE_MACHINE_ID } = await import("./issue-state-machine-6Y2OTUGI.js");
190
190
  const fsmPlugin = getIssueStateMachinePlugin();
191
191
  if (fsmPlugin?.getState) {
192
192
  for (const issue of runtimeState.issues) {
@@ -218,9 +218,9 @@ async function recoverState() {
218
218
  }
219
219
  async function recoverOrphans() {
220
220
  if (!runtimeState) return;
221
- const { isAgentStillRunning, cleanStalePidFile } = await import("./agent-7BMCWKOD.js");
222
- const { executeTransition } = await import("./issue-state-machine-24GKGB3W.js");
223
- const { addEvent } = await import("./issues-C4WJIF7S.js");
221
+ const { isAgentStillRunning, cleanStalePidFile } = await import("./agent-QWN3JVX5.js");
222
+ const { executeTransition } = await import("./issue-state-machine-6Y2OTUGI.js");
223
+ const { addEvent } = await import("./issues-QSMDQQFO.js");
224
224
  const candidates = runtimeState.issues.filter((i) => i.state === "Running" || i.state === "Queued");
225
225
  logger.debug({ count: candidates.length }, "[Queue] Checking for orphaned agent processes");
226
226
  for (const issue of candidates) {
@@ -258,7 +258,7 @@ function cleanTerminalWorkspaces() {
258
258
  logger.info({ count: terminals.length }, "[Queue] Scheduling terminal workspace cleanup in background");
259
259
  const state = runtimeState;
260
260
  setImmediate(async () => {
261
- const { cleanWorkspace } = await import("./agent-7BMCWKOD.js");
261
+ const { cleanWorkspace } = await import("./agent-QWN3JVX5.js");
262
262
  for (const issue of terminals) {
263
263
  try {
264
264
  await cleanWorkspace(issue.id, issue, state);
@@ -292,4 +292,4 @@ export {
292
292
  cleanTerminalWorkspaces,
293
293
  getQueueStats
294
294
  };
295
- //# sourceMappingURL=chunk-LX666HVP.js.map
295
+ //# sourceMappingURL=chunk-2ZK3IUJQ.js.map
@@ -959,8 +959,7 @@ function buildCodexCommand(options) {
959
959
  "codex",
960
960
  "exec",
961
961
  "--skip-git-repo-check",
962
- "--dangerously-bypass-approvals-and-sandbox",
963
- "--no-alt-screen"
962
+ "--dangerously-bypass-approvals-and-sandbox"
964
963
  ];
965
964
  if (options.model && options.model !== "codex") {
966
965
  parts.push(`--model ${options.model}`);
@@ -2086,7 +2085,7 @@ function parseDiffStats(issue, raw) {
2086
2085
  }
2087
2086
  async function syncIssueDiffStatsToStore(issue) {
2088
2087
  if (!issue?.id) return;
2089
- const { getIssueStateResource } = await import("./store-MHU3G2W4.js");
2088
+ const { getIssueStateResource } = await import("./store-DSMN6IKR.js");
2090
2089
  const issueResource = getIssueStateResource();
2091
2090
  if (!issueResource) return;
2092
2091
  const toNumber = (value) => {
@@ -2350,4 +2349,4 @@ export {
2350
2349
  hydrateIssuePathsFromWorkspace,
2351
2350
  writeVersionedArtifacts
2352
2351
  };
2353
- //# sourceMappingURL=chunk-NNPKCBAB.js.map
2352
+ //# sourceMappingURL=chunk-GW7LVDP3.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  computeDiffStats,
3
3
  syncIssueDiffStatsToStore
4
- } from "./chunk-NNPKCBAB.js";
4
+ } from "./chunk-GW7LVDP3.js";
5
5
  import {
6
6
  isoWeek,
7
7
  now
@@ -324,7 +324,7 @@ function emitFsmEvent(issueId, kind, message) {
324
324
  }
325
325
  }
326
326
  async function lazyEnqueue(issue, job) {
327
- const { enqueue } = await import("./queue-workers-HF7RBVV7.js");
327
+ const { enqueue } = await import("./queue-workers-TDJWHJMJ.js");
328
328
  return enqueue(issue, job);
329
329
  }
330
330
  var ISSUE_STATE_MACHINE_ID = "issue-lifecycle";
@@ -835,4 +835,4 @@ export {
835
835
  canTransitionIssue,
836
836
  visualizeStateMachine
837
837
  };
838
- //# sourceMappingURL=chunk-DAXG76WD.js.map
838
+ //# sourceMappingURL=chunk-KRH4LWCW.js.map
@@ -21,7 +21,7 @@ import {
21
21
  snapshotAndClearDirtyEventIds,
22
22
  snapshotAndClearDirtyIssueIds,
23
23
  snapshotAndClearDirtyIssuePlanIds
24
- } from "./chunk-DAXG76WD.js";
24
+ } from "./chunk-KRH4LWCW.js";
25
25
  import {
26
26
  ADAPTERS,
27
27
  assertIssueHasGitWorktree,
@@ -52,7 +52,7 @@ import {
52
52
  resolveAgentCommand,
53
53
  runCommandWithTimeout,
54
54
  runHook
55
- } from "./chunk-NNPKCBAB.js";
55
+ } from "./chunk-GW7LVDP3.js";
56
56
  import {
57
57
  appendFileTail,
58
58
  clamp,
@@ -77,7 +77,7 @@ import {
77
77
  } from "./chunk-O5AEQXUV.js";
78
78
  import {
79
79
  enqueue
80
- } from "./chunk-LX666HVP.js";
80
+ } from "./chunk-2ZK3IUJQ.js";
81
81
  import {
82
82
  logger
83
83
  } from "./chunk-DVU3CXWA.js";
@@ -3801,7 +3801,7 @@ function registerStateRoutes(app, state) {
3801
3801
  if (!issueId) return c.json({ ok: false, error: "Issue id is required." }, 400);
3802
3802
  const issue = findIssue(state, issueId);
3803
3803
  if (!issue) return c.json({ ok: false, error: "Issue not found." }, 404);
3804
- const { dryMerge } = await import("./workspace-IKR6X6OE.js");
3804
+ const { dryMerge } = await import("./workspace-S5F5JFM6.js");
3805
3805
  const result = dryMerge(issue);
3806
3806
  return c.json({ ok: true, ...result });
3807
3807
  } catch (error) {
@@ -3816,7 +3816,7 @@ function registerStateRoutes(app, state) {
3816
3816
  if (!issueId) return c.json({ ok: false, error: "Issue id is required." }, 400);
3817
3817
  const issue = findIssue(state, issueId);
3818
3818
  if (!issue) return c.json({ ok: false, error: "Issue not found." }, 404);
3819
- const { rebaseWorktree } = await import("./workspace-IKR6X6OE.js");
3819
+ const { rebaseWorktree } = await import("./workspace-S5F5JFM6.js");
3820
3820
  const result = rebaseWorktree(issue);
3821
3821
  if (result.success) {
3822
3822
  addEvent(state, issue.id, "info", `Branch ${issue.branchName} rebased onto ${issue.baseBranch}.`);
@@ -3948,7 +3948,7 @@ function registerStateRoutes(app, state) {
3948
3948
  const issue = findIssue(state, issueId);
3949
3949
  if (!issue) return c.json({ ok: false, error: "Issue not found." }, 404);
3950
3950
  try {
3951
- const { getIssueTransitionHistory } = await import("./issue-state-machine-24GKGB3W.js");
3951
+ const { getIssueTransitionHistory } = await import("./issue-state-machine-6Y2OTUGI.js");
3952
3952
  const limit = parseInt(c.req.query("limit") ?? "50", 10);
3953
3953
  const offset = parseInt(c.req.query("offset") ?? "0", 10);
3954
3954
  const transitions = await getIssueTransitionHistory(issue.id, { limit, offset });
@@ -3959,7 +3959,7 @@ function registerStateRoutes(app, state) {
3959
3959
  });
3960
3960
  app.get("/api/state-machine/transitions", async (c) => {
3961
3961
  try {
3962
- const { getStateMachineTransitions } = await import("./issue-state-machine-24GKGB3W.js");
3962
+ const { getStateMachineTransitions } = await import("./issue-state-machine-6Y2OTUGI.js");
3963
3963
  return c.json({ ok: true, transitions: getStateMachineTransitions() });
3964
3964
  } catch (error) {
3965
3965
  return c.json({ ok: false, error: error instanceof Error ? error.message : String(error) }, 500);
@@ -3967,7 +3967,7 @@ function registerStateRoutes(app, state) {
3967
3967
  });
3968
3968
  app.get("/api/state-machine/visualize", async (c) => {
3969
3969
  try {
3970
- const { visualizeStateMachine } = await import("./issue-state-machine-24GKGB3W.js");
3970
+ const { visualizeStateMachine } = await import("./issue-state-machine-6Y2OTUGI.js");
3971
3971
  const dot = visualizeStateMachine();
3972
3972
  if (!dot) return c.json({ ok: false, error: "Visualization not available." }, 404);
3973
3973
  return c.json({ ok: true, dot });
@@ -5003,7 +5003,8 @@ import { spawn as spawn2 } from "child_process";
5003
5003
  import { tmpdir as tmpdir3 } from "os";
5004
5004
  import { join as join13 } from "path";
5005
5005
  function getProviderCommand(provider, config) {
5006
- return resolveAgentCommand(provider, config.agentCommand || "", "", "");
5006
+ const explicit = provider === config.agentProvider ? config.agentCommand || "" : "";
5007
+ return resolveAgentCommand(provider, explicit, "", "");
5007
5008
  }
5008
5009
  async function buildPrompt2(field, title, description, issueType, images) {
5009
5010
  const context2 = {
@@ -7871,7 +7872,7 @@ async function handleStatePatch(state, issue, payload) {
7871
7872
  }
7872
7873
  if (nextState === "Running" && sourceState === "Queued") {
7873
7874
  try {
7874
- const { enqueue: enqueue2 } = await import("./queue-workers-HF7RBVV7.js");
7875
+ const { enqueue: enqueue2 } = await import("./queue-workers-TDJWHJMJ.js");
7875
7876
  await enqueue2(issue, "execute");
7876
7877
  } catch (error) {
7877
7878
  logger.warn({ issueId: issue.id, err: error }, "[Issues] Failed to enqueue after manual Running transition");
@@ -8139,7 +8140,7 @@ async function runIssueOnce(state, issue, running) {
8139
8140
  const { workspacePath, promptText, promptFile } = await prepareWorkspace(issue, state, state.config.defaultBranch);
8140
8141
  container.issueRepository.markDirty(issue.id);
8141
8142
  try {
8142
- const { getIssueStateResource: getIssueStateResource2 } = await import("./store-MHU3G2W4.js");
8143
+ const { getIssueStateResource: getIssueStateResource2 } = await import("./store-DSMN6IKR.js");
8143
8144
  const res = getIssueStateResource2();
8144
8145
  if (res) {
8145
8146
  await res.patch(issue.id, {
@@ -8251,4 +8252,4 @@ export {
8251
8252
  syncReferenceRepositories,
8252
8253
  importReferenceArtifacts
8253
8254
  };
8254
- //# sourceMappingURL=chunk-GAYQ2TXV.js.map
8255
+ //# sourceMappingURL=chunk-TSSVMTCS.js.map
package/dist/cli.js CHANGED
@@ -3,11 +3,11 @@ import {
3
3
  importReferenceArtifacts,
4
4
  listReferenceRepositories,
5
5
  syncReferenceRepositories
6
- } from "./chunk-GAYQ2TXV.js";
7
- import "./chunk-DAXG76WD.js";
8
- import "./chunk-NNPKCBAB.js";
6
+ } from "./chunk-TSSVMTCS.js";
7
+ import "./chunk-KRH4LWCW.js";
8
+ import "./chunk-GW7LVDP3.js";
9
9
  import "./chunk-O5AEQXUV.js";
10
- import "./chunk-LX666HVP.js";
10
+ import "./chunk-2ZK3IUJQ.js";
11
11
  import "./chunk-DVU3CXWA.js";
12
12
  import "./chunk-OONOOWNC.js";
13
13
 
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  runIssueOnce,
3
3
  runPlanningJob
4
- } from "./chunk-GAYQ2TXV.js";
5
- import "./chunk-DAXG76WD.js";
6
- import "./chunk-NNPKCBAB.js";
4
+ } from "./chunk-TSSVMTCS.js";
5
+ import "./chunk-KRH4LWCW.js";
6
+ import "./chunk-GW7LVDP3.js";
7
7
  import "./chunk-O5AEQXUV.js";
8
- import "./chunk-LX666HVP.js";
8
+ import "./chunk-2ZK3IUJQ.js";
9
9
  import "./chunk-DVU3CXWA.js";
10
10
  import "./chunk-OONOOWNC.js";
11
11
  export {
12
12
  runIssueOnce,
13
13
  runPlanningJob
14
14
  };
15
- //# sourceMappingURL=issue-runner-BNAW3M6E.js.map
15
+ //# sourceMappingURL=issue-runner-QGJY5COY.js.map
@@ -15,8 +15,8 @@ import {
15
15
  setIssueResourceStateApi,
16
16
  setIssueStateMachinePlugin,
17
17
  visualizeStateMachine
18
- } from "./chunk-DAXG76WD.js";
19
- import "./chunk-NNPKCBAB.js";
18
+ } from "./chunk-KRH4LWCW.js";
19
+ import "./chunk-GW7LVDP3.js";
20
20
  import "./chunk-O5AEQXUV.js";
21
21
  import "./chunk-DVU3CXWA.js";
22
22
  import "./chunk-OONOOWNC.js";
@@ -38,4 +38,4 @@ export {
38
38
  setIssueStateMachinePlugin,
39
39
  visualizeStateMachine
40
40
  };
41
- //# sourceMappingURL=issue-state-machine-24GKGB3W.js.map
41
+ //# sourceMappingURL=issue-state-machine-6Y2OTUGI.js.map
@@ -12,13 +12,13 @@ import {
12
12
  normalizeIssue,
13
13
  transitionIssue,
14
14
  validateConfig
15
- } from "./chunk-GAYQ2TXV.js";
15
+ } from "./chunk-TSSVMTCS.js";
16
16
  import {
17
17
  computeMetrics
18
- } from "./chunk-DAXG76WD.js";
19
- import "./chunk-NNPKCBAB.js";
18
+ } from "./chunk-KRH4LWCW.js";
19
+ import "./chunk-GW7LVDP3.js";
20
20
  import "./chunk-O5AEQXUV.js";
21
- import "./chunk-LX666HVP.js";
21
+ import "./chunk-2ZK3IUJQ.js";
22
22
  import "./chunk-DVU3CXWA.js";
23
23
  import "./chunk-OONOOWNC.js";
24
24
  export {
@@ -37,4 +37,4 @@ export {
37
37
  transitionIssue,
38
38
  validateConfig
39
39
  };
40
- //# sourceMappingURL=issues-C4WJIF7S.js.map
40
+ //# sourceMappingURL=issues-QSMDQQFO.js.map
@@ -7,7 +7,7 @@ import {
7
7
  recoverOrphans,
8
8
  recoverState,
9
9
  stopQueueWorkers
10
- } from "./chunk-LX666HVP.js";
10
+ } from "./chunk-2ZK3IUJQ.js";
11
11
  import "./chunk-DVU3CXWA.js";
12
12
  import "./chunk-OONOOWNC.js";
13
13
  export {
@@ -20,4 +20,4 @@ export {
20
20
  recoverState,
21
21
  stopQueueWorkers
22
22
  };
23
- //# sourceMappingURL=queue-workers-HF7RBVV7.js.map
23
+ //# sourceMappingURL=queue-workers-TDJWHJMJ.js.map
@@ -4,11 +4,11 @@ import {
4
4
  hasTerminalQueue,
5
5
  installGracefulShutdown,
6
6
  isShuttingDown
7
- } from "./chunk-GAYQ2TXV.js";
8
- import "./chunk-DAXG76WD.js";
9
- import "./chunk-NNPKCBAB.js";
7
+ } from "./chunk-TSSVMTCS.js";
8
+ import "./chunk-KRH4LWCW.js";
9
+ import "./chunk-GW7LVDP3.js";
10
10
  import "./chunk-O5AEQXUV.js";
11
- import "./chunk-LX666HVP.js";
11
+ import "./chunk-2ZK3IUJQ.js";
12
12
  import "./chunk-DVU3CXWA.js";
13
13
  import "./chunk-OONOOWNC.js";
14
14
  export {
@@ -18,4 +18,4 @@ export {
18
18
  installGracefulShutdown,
19
19
  isShuttingDown
20
20
  };
21
- //# sourceMappingURL=scheduler-JZCJB2IN.js.map
21
+ //# sourceMappingURL=scheduler-LWCF7U6Q.js.map
@@ -18,16 +18,16 @@ import {
18
18
  persistStateFull,
19
19
  replacePersistedSetting,
20
20
  setActiveApiPlugin
21
- } from "./chunk-GAYQ2TXV.js";
21
+ } from "./chunk-TSSVMTCS.js";
22
22
  import {
23
23
  hasDirtyState,
24
24
  markEventDirty,
25
25
  markIssueDirty,
26
26
  markIssuePlanDirty
27
- } from "./chunk-DAXG76WD.js";
28
- import "./chunk-NNPKCBAB.js";
27
+ } from "./chunk-KRH4LWCW.js";
28
+ import "./chunk-GW7LVDP3.js";
29
29
  import "./chunk-O5AEQXUV.js";
30
- import "./chunk-LX666HVP.js";
30
+ import "./chunk-2ZK3IUJQ.js";
31
31
  import "./chunk-DVU3CXWA.js";
32
32
  import "./chunk-OONOOWNC.js";
33
33
  export {
@@ -55,4 +55,4 @@ export {
55
55
  replacePersistedSetting,
56
56
  setActiveApiPlugin
57
57
  };
58
- //# sourceMappingURL=store-MHU3G2W4.js.map
58
+ //# sourceMappingURL=store-DSMN6IKR.js.map
@@ -21,7 +21,7 @@ import {
21
21
  shouldSkipMergePath,
22
22
  syncIssueDiffStatsToStore,
23
23
  writeVersionedArtifacts
24
- } from "./chunk-NNPKCBAB.js";
24
+ } from "./chunk-GW7LVDP3.js";
25
25
  import "./chunk-O5AEQXUV.js";
26
26
  import "./chunk-DVU3CXWA.js";
27
27
  import "./chunk-OONOOWNC.js";
@@ -49,4 +49,4 @@ export {
49
49
  syncIssueDiffStatsToStore,
50
50
  writeVersionedArtifacts
51
51
  };
52
- //# sourceMappingURL=workspace-IKR6X6OE.js.map
52
+ //# sourceMappingURL=workspace-S5F5JFM6.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fifony",
3
- "version": "0.1.33",
3
+ "version": "0.1.35",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",